- •Введение
- •Основы работы с 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: Статистический анализ
- •Заключение
- •Приложения
20 |
Глава 5. Анализ данных и фитирование |
5.2.2Фитирование пользовательской функцией
1// Определение функции сигнал + фон
2TF1* signal_bg = new TF1("signal_bg",
3"[0]*exp(-0.5*((x-[1])/[2])^2) + [3] + [4]*x", -5, 5);
4
5// Установка начальных значений параметров
6signal_bg->SetParameters(1000, 0, 1, 100, 0);
7
8// Установка имён параметров
9signal_bg->SetParNames("Amplitude", "Mean", "Sigma", "BG_const", "BG_slope");
10
11// Установка ограничений на параметры
12signal_bg->SetParLimits(0, 0, 10000); // Амплитуда > 0
13 signal_bg->SetParLimits(2, 0.1, 5); |
// Разумная ширина |
14
15// Фитирование
16h->Fit(signal_bg);
17
18// Анализ качества фита
19double chi2 = signal_bg->GetChisquare();
20int ndf = signal_bg->GetNDF();
21double prob = signal_bg->GetProb();
22
23cout << "Chi2/NDF = " << chi2/ndf << endl;
24cout << "Probability = " << prob << endl;
5.3Фитирование графиков
5.3.1Линейная регрессия
1 // Создание данных с линейной зависимостью
2const int n = 20;
3double x[n], y[n], ex[n], ey[n];
4
5 for(int i = 0; i < n; i++) {
6x[i] = i;
7 y[i] = 2.5 * x[i] + 3.0 + gRandom->Gaus(0, 1);
8ex[i] = 0;
9ey[i] = 1.0;
10 }
11
12 TGraphErrors* gr = new TGraphErrors(n, x, y, ex, ey);
13
14// Линейное фитирование
15TF1* line = new TF1("line", "[0] + [1]*x", 0, 20);
16gr->Fit(line);
17
18// Получение результатов
19double intercept = line->GetParameter(0);
