Отличия ROOT6 от ROOT5
- Версия ROOT 6.00 / 00 была выпущена 30 мая 2014 года. В ней представлен новый интерпретатор Cling C++ 11, заменивший CINT, который уже много лет обслуживает ROOT. (C++ 11 новый стандарт языка С++). Для работы с ROOT6 также требуется совместимый с C ++ 11 компилятор, поэтому нужно установить либо gcc> = 4.8, либо Clang> = 3.4.
- В ROOT6 появилась возможность использовать шаблоны.
- Существуют методы, которые имеют в ROOT5 и ROOT6 разный тип возвращаемого значения, например
Float_t TSpectrum::GetPositionX() в ROOT5 и Double_t TSpectrum::GetPositionX() в ROOT6.
Чтобы в этом случае один и тот же макрос мог работать и в ROOT5 и в ROOT6 в код следует добавить:
#if ROOT_VERSION_CODE >= ROOT_VERSION(6,00,00) Double_t *x; // ROOT 6 #else Float_t *x; // ROOT 5 #endif
- Cling следует за стандартом C ++ гораздо более строго, чем CINT. В частности, какой-то код, который использовался для работы с CINT, либо выдаст новые предупреждения, либо новые ошибки компиляции. В интерактивном режиме прекращена поддержка взаимозаменяемости "." и "->".
Неявные динамические изменения
CINT в ROOT5 выполнял автоматическое повышение до производных классов в определенных контекстах, например:TH1 * h1 = hpx TH1F * h1f = h1;
Cling в ROOT6 больше этого не допускает.- Изменения в классах гистограмм в ROOT6, которые могут приводить к разным результатам одного
и того же кода.
Гистограммы с метками / буквенно-цифровая ось
В ROOT 6 появилось понятие буквенно-цифровой оси. Ось считается буквенно-цифровой, когда у всех бинов есть метки, прикрепленные к ним. В этом случае нужно заполнить гистограмму с помощью TH1 :: Fill (label) вместо TH1 :: Fill (x), где метка является строкой, а x является действительным числом. В случае буквенно-цифровой оси статистика гистограммы (среднее значение, среднеквадратичное значение и т. д.) больше не вычисляется, а их значения установлены на ноль. Гистограммы с буквенно-цифровой осью будут объединены путем сложения содержимого для бинов с одинаковыми метками. Если метки присутствуют для каждого бина, а пользователь не хочет, чтобы ось была буквенно-цифровой, то он может вызвать функцию TAxis :: SetNoAlphanumeric ().
Заполнение гистограммы весами, отличными от единицы
Гистограмма, заполненная весами, отличными от 1, автоматически сохраняет теперь сумму квадрата весов для каждого бина. Нет необходимости больше вызывать функцию TH1 :: Sumw2 () для взвешенных гистограмм. Если вы хотите удалить сумму массивов весов (чтобы сохранить память), необходимо вызвать TH1 :: Sumw2 (false). Также функция TH1 :: Fill (x, y) больше не должна использоваться для установки содержимого бина на y. Вместо этого следует использовать TH1 :: SetBinContent (TAxis :: FindBin (x), y). В случае, если кто-то хочет иметь прежнее поведение и избегать того, чтобы сумма квадратов веса хранилась в гистограмме, даже если она заполнена весами, отличными от единицы, тогда нужно установить бит гистограммы H1 :: kIsNotW.
Методы TH1::Copy и TH1::Clone
TH1::Copy теперь создает содержимое гистограммы с использованием конструктора копирования, но не копирует содержащиеся объекты (например, TF1). TH1::Clone копирует все, но намного медленнее, особенно в многопоточных средах из-за внутренних точек сериализации. В ROOT 6 также конструктор копирования TH1 больше не является public. Вместо этого можно использовать конструктор копирования производных классов.
Устаревшие методы TH1 в ROOT 6
TH1 :: Get / SetCellContent, Get / SetCellError удалены. Нужно использовать Get / SetBinContent и Get / SetBinError, которые имеют точно такую же функциональность.
Более быстрый внутренний метод получения / обновления содержимого бина.
TH1 теперь использует в своих функциях-членах (например, TH1 :: Add) новые защищенные виртуальные функции UpdateBinContent и RetrieveBinContent для обновления и получения содержимого bin. Эти функции имеют преимущество, в скорости перед общедоступными методами Get / SetBinContent. Если пользователь реализовал класс, производный от класса TH1, то ему может потребоваться повторная реализация этих новых защищенных виртуальных функций.