- •Введение
- •Основы работы с 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: Статистический анализ
- •Заключение
- •Приложения
24 |
Глава 6. Продвинутые возможности |
6.1.2Генерация и фитирование данных
1// Генерация данных
2RooDataSet* data = model.generate(x, 1000);
3
4// Фитирование модели к данным
5RooFitResult* result = model.fitTo(*data, Save());
6
7// Визуализация
8RooPlot* frame = x.frame(Title("RooFit Example"));
9data->plotOn(frame);
10model.plotOn(frame);
11model.plotOn(frame, Components(gauss), LineStyle(kDashed), LineColor(kRed));
12model.plotOn(frame, Components(poly), LineStyle(kDashed), LineColor(kGreen));
13
14 frame->Draw();
15
16// Анализ результатов
17result->Print();
18cout << "Signal events: " << nsig.getVal() << " ± " << nsig.getError() << endl;
19cout << "Background events: " << nbkg.getVal() << " ± " << nbkg.getError() <<
,→ endl;
6.2Многомерный анализ
6.2.1Анализ главных компонент (PCA)
1#include "TPrincipal.h"
2
3 // Создание многомерных данных
4const int nvar = 4;
5 const int nevents = 1000;
6double data[nvar];
7
8TPrincipal* principal = new TPrincipal(nvar, "ND");
9
10// Заполнение данными
11for(int i = 0; i < nevents; i++) {
12data[0] = gRandom->Gaus(0, 1);
13data[1] = data[0] + gRandom->Gaus(0, 0.5); // Коррелирует с data[0]
14data[2] = gRandom->Gaus(5, 2);
15data[3] = 2*data[2] + gRandom->Gaus(0, 1); // Коррелирует с data[2]
16
17principal->AddRow(data);
18}
19
20// Анализ главных компонент
21principal->MakePrincipals();
22
23 // Получение результатов
