
- •5 лекция
- •ROOT
- •ROOT: справочная информация
- •ООП и классы С++
- •Указатели
- •Структура ROOT
- •Принятые в ROOT обозначения
- •Машинно-независимые типы данных
- •ROOT: начало работы
- •C/C++ интерпретатор CINT
- •Пример простейшей сессии: построение гистограммы значений, распределенных по Гауссу
- •Скрипты: неименованные скрипты
- •Скрипты: именованные скрипты
- •Преобразование HBOOK/PAW в ROOT
- •6 лекция
- •Гистограммы в ROOT
- •Создание гистограммы
- •Внесение значений в гистограмму
- •Рисование гистограммы, опции рисования
- •Пример создания, заполнения и рисования гистограммы
- •Информация, выводимая по умолчанию
- •Поле для рисования canvas
- •Пример. Сохранение изображения на диск
- •Сложение, деление и умножение гистограмм
- •Прочие аспекты работы с гистограммами
- •Фитирование гистограмм: FitPanel
- •Вывод результатов фита
- •Команды фитирования
- •Фитирование функцией, определенной пользователем
- •7 лекция
- •Сохранение гистограмм на диск
- •Работа с файлами: ROOT-директория
- •Работа с файлами
- •Сохранение гистограмм в файл
- •Двумерные гистограммы
- •Пример работы с 2D-гистограммой
- •Параметры рисования
- •Графики
- •Графики. Опции рисования
- •Таблицы цветов и стилей маркеров
- •Варианты рисования
- •Два графика на одной картинке
- •График с погрешностями
- •График с погрешностями
- •8 лекция
- •Деревья
- •Создание дерева и ветвей
- •Создание простейшего дерева
- •Информация о дереве
- •Просмотр содержимого дерева с помощью TBrowser
- •Чтение дерева
- •Чтение дерева. Пример скрипта
- •Результат выполнения скрипта
- •Анализ данных дерева: метод TTree::Draw

8 лекция
Деревья
Создание
Добавление ветвей
Сохранение в файл
Просмотр содержимого
Чтение данных дерева
Анализ данных
Критерии выборки

Деревья
Дерево (tree) в ROOT является аналогом ntuple в PAW
В ROOT деревья реализуются классом TTree
Напомним: ntuple можно рассматривать как таблицу, каждая строка которой соответствует одному вхождению (событию), а столбцы — конкретным переменным
Для дерева столбцы такой таблицы называются ветвями (branch)
Ветви реализуются классом TBranch
Принципиальное отличие дерева от ntuple заключается в том, что содержимое ntuple ограничено данными типа float. Ветви дерева могут содержать переменные других типов, вплоть до объектов
Чаще всего каждому вхождению соответствует физическое событие (реальное или смоделированное). Однако существуют и другие варианты организации дерева (например, заполнение по трекам)
Класс TNtuple — это TTree, ограниченное значениями типа
Float_t

Создание дерева и ветвей
Создать объект класса TTree
TTree t1("t1", "Simple Tree")
Конструктору дерева передается два параметра
|
t1 |
имя дерева |
|
Simple tree |
заголовок дерева |
Чтобы добавить к дереву ветвь TTree::Branch
t1.Branch("px", &px, "px/F")
Три параметра, определяющие ветвь
Имя ветви
Адрес, по которому будет считываться значение переменной. Напоминание: & — операция взятия адреса в С
Тип листа в формате имя/тип.
Наиболее употребляемые типы F Float_t, I Int_t
Чтобы занести значения в дерево, используется метод TTree::Fill

Создание простейшего дерева
Скрипт, создающий простое дерево и записывающий его в файл tree1.root
{ |
|
|
//создаем |
|
|
|
TFile f("tree1.root", "recreate"); |
файл |
|
||||
TTree t1("t1", "Simple Tree"); |
|
//создаем |
дерево |
|
||
Float_t px, py, pz; |
//определяем |
необходимые |
переменные |
|||
Int_t ev; |
|
//создаем три |
|
|
|
|
t1.Branch("px", &px, "px/F"); |
ветви |
Float_t |
||||
t1.Branch("py", &py, "py/F"); |
//содержащие |
значения |
||||
t1.Branch("pz", &pz, "pz/F"); |
//и одну со значениями Int_t |
|||||
t1.Branch("ev", &ev, "ev/I"); |
||||||
for (Int_t i=0; i<10000; i++) { |
|
//заполнение дерева |
в цикле |
|||
gRandom->Rannor(px,py); |
|
|
|
|
|
pz = px*px + py*py; ev = i;
t1.Fill();
}
t1.Write();
}