- •Введение
- •Основы работы с 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: Статистический анализ
- •Заключение
- •Приложения
Глава 7
Практические примеры и упражнения
7.1Анализ физических данных
7.1.1Анализ распада частиц
1 // Симуляция данных детектора частиц
2void analyzeDecay() {
3// Создание дерева событий
4TTree* events = new TTree("events", "Particle decay events");
5 |
|
|
|
|
|
6 |
float px1, py1, pz1, E1; |
// |
4-импульс |
первой |
частицы |
7 |
float px2, py2, pz2, E2; |
// |
4-импульс |
второй |
частицы |
8
9events->Branch("px1", &px1); events->Branch("py1", &py1);
10events->Branch("pz1", &pz1); events->Branch("E1", &E1);
11events->Branch("px2", &px2); events->Branch("py2", &py2);
12events->Branch("pz2", &pz2); events->Branch("E2", &E2);
13
14// Генерация событий распада
15TRandom3 rnd;
16for(int i = 0; i < 50000; i++) {
17// Распад частицы массой 10 ГэВ на две частицы массой 1 ГэВ
18double m_parent = 10.0;
19double m_daughter = 1.0;
20
21// Генерация в системе покоя
22double p_cm = sqrt((m_parent*m_parent - 4*m_daughter*m_daughter)/4);
23double theta = rnd.Uniform(0, TMath::Pi());
24double phi = rnd.Uniform(0, 2*TMath::Pi());
25
26px1 = p_cm * sin(theta) * cos(phi);
27py1 = p_cm * sin(theta) * sin(phi);
28pz1 = p_cm * cos(theta);
29E1 = sqrt(p_cm*p_cm + m_daughter*m_daughter);
30
31 px2 = -px1; py2 = -py1; pz2 = -pz1;
27
