- •Введение
- •Основы работы с ROOT
- •Что такое ROOT
- •Установка и запуск ROOT
- •Системные требования
- •Способы установки
- •Запуск ROOT
- •Первые шаги в ROOT
- •Интерактивная оболочка CINT
- •Создание простых объектов
- •Структура ROOT
- •Основные классы
- •Система наименований
- •Работа с гистограммами
- •Введение в гистограммы
- •Одномерные гистограммы (TH1)
- •Создание гистограммы
- •Типы гистограмм
- •Настройка внешнего вида
- •Двумерные гистограммы (TH2)
- •Операции с гистограммами
- •Арифметические операции
- •Статистические функции
- •Графики и визуализация
- •Класс TGraph
- •Создание простого графика
- •График с погрешностями
- •Многопанельные графики
- •Разделение холста
- •Функции в ROOT
- •Создание и отображение функций
- •Многомерные функции
- •Легенды и аннотации
- •Создание легенды
- •Добавление текста
- •Работа с деревьями (Trees)
- •Введение в ROOT Trees
- •Создание дерева
- •Простое дерево
- •Дерево с массивами
- •Чтение деревьев
- •Простое чтение
- •Использование TTreeReader
- •Селекция данных
- •Использование Draw с условиями
- •TEntryList для сложной селекции
- •Анализ данных и фитирование
- •Введение в фитирование
- •Фитирование гистограмм
- •Простое фитирование
- •Фитирование пользовательской функцией
- •Фитирование графиков
- •Линейная регрессия
- •Нелинейное фитирование
- •Минимизация и оптимизация
- •Использование Minuit
- •Продвинутые возможности
- •RooFit - статистическое моделирование
- •Основы RooFit
- •Генерация и фитирование данных
- •Многомерный анализ
- •Анализ главных компонент (PCA)
- •Параллельные вычисления
- •ROOT::EnableImplicitMT
- •Веб-интерфейс
- •ROOT в Jupyter
- •Практические примеры и упражнения
- •Анализ физических данных
- •Анализ распада частиц
- •Упражнения для самостоятельной работы
- •Упражнение 1: Анализ распределений
- •Упражнение 2: Корреляционный анализ
- •Упражнение 3: Работа с реальными данными
- •Проекты
- •Проект 1: Анализатор логов детектора
- •Проект 2: Статистический анализ
- •Заключение
- •Приложения
16 |
Глава 4. Работа с деревьями (Trees) |
27 file->Close();
4.2.2Дерево с массивами
1 // Переменные для массивов
2 const int maxTracks = 100;
3int nTracks;
4 |
float |
trackPt[maxTracks]; |
5 |
float |
trackEta[maxTracks]; |
6float trackPhi[maxTracks];
7
8// Создание ветвей для массивов
9tree->Branch("nTracks", &nTracks, "nTracks/I");
10tree->Branch("trackPt", trackPt, "trackPt[nTracks]/F");
11tree->Branch("trackEta", trackEta, "trackEta[nTracks]/F");
12tree->Branch("trackPhi", trackPhi, "trackPhi[nTracks]/F");
13
14// Заполнение событий с переменным числом треков
15for(int event = 0; event < 1000; event++) {
16nTracks = gRandom->Poisson(10); // Случайное число треков
17
18for(int track = 0; track < nTracks; track++) {
19trackPt[track] = gRandom->Exp(2);
20trackEta[track] = gRandom->Uniform(-2.5, 2.5);
21trackPhi[track] = gRandom->Uniform(-TMath::Pi(), TMath::Pi());
22}
23
24tree->Fill();
25}
4.3Чтение деревьев
4.3.1Простое чтение
1// Открытие файла
2 TFile* file = new TFile("data.root", "READ");
3TTree* tree = (TTree*)file->Get("myTree");
4
5 // Переменные для чтения
6 float x, y, z;
7int eventID;
8
9// Установка адресов ветвей
10tree->SetBranchAddress("x", &x);
11tree->SetBranchAddress("y", &y);
12tree->SetBranchAddress("z", &z);
13tree->SetBranchAddress("eventID", &eventID);
14
15 // Чтение всех событий
