- •Введение
- •Основы работы с 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: Статистический анализ
- •Заключение
- •Приложения
2.3. Двумерные гистограммы (TH2) |
9 |
2.2.3Настройка внешнего вида
1// Изменение цвета заливки и контура
2h1->SetFillColor(kBlue);
3h1->SetLineColor(kRed);
4h1->SetLineWidth(2);
5
6// Настройка осей
7h1->GetXaxis()->SetTitle("Значение X");
8 h1->GetYaxis()->SetTitle("Количество событий");
9h1->SetTitle("Распределение данных");
10
11// Статистическая информация
12h1->GetXaxis()->SetRange(10, 90); // Ограничение диапазона
2.3Двумерные гистограммы (TH2)
Двумерные гистограммы позволяют исследовать корреляции между двумя переменными:
1// Создание 2D гистограммы
2TH2F* h2 = new TH2F("h2", "2D гистограмма", 50, -5, 5, 50, -5, 5);
3
4 // Заполнение коррелированными данными
5for(int i = 0; i < 10000; i++) {
6 |
double x = gRandom->Gaus(0, 1); |
|
7 |
double y = x + gRandom->Gaus(0, 0.5); // y коррелирует с x |
|
8 |
h2->Fill(x, y); |
|
9 |
} |
|
10 |
|
|
11 |
// Различные способы отображения |
|
12 |
h2->Draw("colz"); |
// Цветовая карта |
13 |
h2->Draw("lego"); |
// 3D представление |
14 |
h2->Draw("cont"); |
// Контурные линии |
2.4Операции с гистограммами
2.4.1Арифметические операции
1// Создание двух гистограмм
2 TH1F* h1 = new TH1F("h1", "Гистограмма 1", 100, 0, 10);
3TH1F* h2 = new TH1F("h2", "Гистограмма 2", 100, 0, 10);
4
5// Заполнение данными
6for(int i = 0; i < 1000; i++) {
7 h1->Fill(gRandom->Gaus(3, 1));
8h2->Fill(gRandom->Gaus(7, 1));
9}
10
10 |
Глава 2. Работа с гистограммами |
11// Сложение гистограмм
12TH1F* h_sum = (TH1F*)h1->Clone("h_sum");
13h_sum->Add(h2);
14
15// Вычитание
16TH1F* h_diff = (TH1F*)h1->Clone("h_diff");
17h_diff->Add(h2, -1);
18
19// Деление
20TH1F* h_ratio = (TH1F*)h1->Clone("h_ratio");
21h_ratio->Divide(h2);
2.4.2Статистические функции
1 // Получение статистической информации
2 double mean = h1->GetMean();
3double rms = h1->GetRMS();
4 double integral = h1->Integral();
5int entries = h1->GetEntries();
6
7 cout << "Среднее: " << mean << endl;
8cout << "СКО: " << rms << endl;
9 cout << "Интеграл: " << integral << endl;
10 cout << "Записей: " << entries << endl;
11
12// Поиск максимума и минимума
13int max_bin = h1->GetMaximumBin();
14double max_value = h1->GetMaximum();
15double min_value = h1->GetMinimum();
