МИВК Многофункциональный
информационно-вычислительный
комплекс ОИЯИ

EN

Отличия ROOT6 от ROOT5

1

Версия ROOT 6.00 / 00 была выпущена 30 мая 2014 года. В ней представлен новый интерпретатор Cling C++ 11, заменивший CINT, который уже много лет обслуживает ROOT. (C++ 11 новый стандарт языка С++). Для работы с ROOT6 также требуется совместимый с C ++ 11 компилятор, поэтому нужно установить либо gcc> = 4.8, либо Clang> = 3.4. 

2

В ROOT6 появилась возможность использовать шаблоны. 

3

Существуют методы, которые имеют в 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 

4

Cling следует за стандартом C ++ гораздо более строго, чем CINT. В частности, какой-то код, который использовался для работы с CINT, либо выдаст новые предупреждения, либо новые ошибки компиляции. В интерактивном режиме прекращена поддержка взаимозаменяемости "." и "->".

5

 Неявные динамические изменения

CINT в ROOT5 выполнял автоматическое повышение до производных классов в определенных контекстах, например:

TH1 * h1 = hpx

TH1F * h1f = h1; 

Cling в ROOT6 больше этого не допускает.

6

Изменения в классах гистограмм в 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, то ему может потребоваться повторная реализация этих новых защищенных виртуальных функций.