- •Введение
- •Основы работы с 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: Статистический анализ
- •Заключение
- •Приложения
6.3. Параллельные вычисления |
25 |
24 principal->Print();
25
26// Собственные значения
27const TVectorD* eigenValues = principal->GetEigenValues();
28for(int i = 0; i < nvar; i++) {
29cout << "PC" << i+1 << " объясняет "
30<< (*eigenValues)[i]/eigenValues->Sum()*100
31<< "% дисперсии" << endl;
32}
6.3Параллельные вычисления
6.3.1ROOT::EnableImplicitMT
1// Включение многопоточности
2ROOT::EnableImplicitMT();
3
4// Параллельная обработка дерева
5TFile* file = new TFile("bigdata.root");
6TTree* tree = (TTree*)file->Get("events");
7
8// Создание гистограммы (thread-safe)
9auto h = tree->GetHistogram("energy", "energy > 100");
10
11// Или использование TTreeProcessor
12ROOT::TTreeProcessorMT processor(*tree);
13auto result = processor.Process([](TTreeReader& reader) {
14TTreeReaderValue<float> energy(reader, "energy");
15float sum = 0;
16while(reader.Next()) {
17sum += *energy;
18}
19return sum;
20});
6.4Веб-интерфейс
6.4.1ROOT в Jupyter
1 // В Jupyter Notebook с C++ kernel
2TCanvas* c = new TCanvas();
3TH1F* h = new TH1F("h", "Web Display", 100, -5, 5);
4
5for(int i = 0; i < 10000; i++) {
6h->Fill(gRandom->Gaus());
7}
8
9h->Draw();
|
26 |
Глава 6. Продвинутые возможности |
||
|
// Автоматически отображается в Jupyter |
|
||
10 |
c->Draw(); |
|
||
|
|
|
|
|
