- •Введение
- •Основы работы с 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: Статистический анализ
- •Заключение
- •Приложения
4.4. Селекция данных |
17 |
16Long64_t nEntries = tree->GetEntries();
17for(Long64_t i = 0; i < nEntries; i++) {
18tree->GetEntry(i);
19
20// Обработка данных
21if(x > 0 && y > 0) {
22cout << "Event " << eventID << ": x=" << x
23 |
<< ", y=" << y << ", z=" << z << endl; |
24}
25}
4.3.2Использование TTreeReader
1 // Современный способ чтения деревьев
2TTreeReader reader("myTree", file);
3 TTreeReaderValue<float> x_val(reader, "x");
4 TTreeReaderValue<float> y_val(reader, "y");
5TTreeReaderValue<float> z_val(reader, "z");
6TTreeReaderValue<int> eventID_val(reader, "eventID");
7
8// Создание гистограммы для анализа
9TH1F* h_z = new TH1F("h_z", "Распределение z", 100, -5, 25);
10
11 |
// Цикл по событиям |
12 |
while(reader.Next()) { |
13 |
if(*x_val > 0 && *y_val > 0) { |
14 |
h_z->Fill(*z_val); |
15 |
} |
16 |
} |
17 |
|
18 |
h_z->Draw(); |
4.4Селекция данных
4.4.1Использование Draw с условиями
1// Простые гистограммы с условиями
2 |
tree->Draw("x", "y > 0"); |
// x для событий |
где y > 0 |
3 |
tree->Draw("z", "x*x + y*y < 4"); // z для |
событий в круге |
|
4 |
tree->Draw("y:x", "z > 5"); |
// 2D график y |
vs x для z > 5 |
5
6// Более сложные условия
7tree->Draw("sqrt(x*x + y*y)", "eventID % 2 == 0 && z > 0");
4.4.2TEntryList для сложной селекции
1// Создание списка событий
2tree->Draw(">>elist", "x > 0 && y > 0 && z > 5");
3TEntryList* elist = (TEntryList*)gDirectory->Get("elist");
18 |
Глава 4. Работа с деревьями (Trees) |
4
5// Установка списка для дерева
6tree->SetEntryList(elist);
7
8// Теперь все операции будут применяться только к выбранным событиям
9 tree->Draw("z"); // Покажет только события из списка
