Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ROOT / CERN ROOT book.pdf
Скачиваний:
1
Добавлен:
14.12.2025
Размер:
433.58 Кб
Скачать

4.4. Селекция данных

17

16Long64_t nEntries = tree->GetEntries();

17for(Long64_t i = 0; i < nEntries; i++) {

18tree->GetEntry(i);

19

20// Обработка данных

21if(x > 0 && y > 0) {

22cout << "Event " << eventID << ": x=" << x

23

<< ", y=" << y << ", z=" << z << endl;

24}

25}

4.3.2Использование TTreeReader

1 // Современный способ чтения деревьев

2TTreeReader reader("myTree", file);

3 TTreeReaderValue<float> x_val(reader, "x");

4 TTreeReaderValue<float> y_val(reader, "y");

5TTreeReaderValue<float> z_val(reader, "z");

6TTreeReaderValue<int> eventID_val(reader, "eventID");

7

8// Создание гистограммы для анализа

9TH1F* h_z = new TH1F("h_z", "Распределение z", 100, -5, 25);

10

11

// Цикл по событиям

12

while(reader.Next()) {

13

if(*x_val > 0 && *y_val > 0) {

14

h_z->Fill(*z_val);

15

}

16

}

17

 

18

h_z->Draw();

4.4Селекция данных

4.4.1Использование Draw с условиями

1// Простые гистограммы с условиями

2

tree->Draw("x", "y > 0");

// x для событий

где y > 0

3

tree->Draw("z", "x*x + y*y < 4"); // z для

событий в круге

4

tree->Draw("y:x", "z > 5");

// 2D график y

vs x для z > 5

5

6// Более сложные условия

7tree->Draw("sqrt(x*x + y*y)", "eventID % 2 == 0 && z > 0");

4.4.2TEntryList для сложной селекции

1// Создание списка событий

2tree->Draw(">>elist", "x > 0 && y > 0 && z > 5");

3TEntryList* elist = (TEntryList*)gDirectory->Get("elist");

18

Глава 4. Работа с деревьями (Trees)

4

5// Установка списка для дерева

6tree->SetEntryList(elist);

7

8// Теперь все операции будут применяться только к выбранным событиям

9 tree->Draw("z"); // Покажет только события из списка

Соседние файлы в папке ROOT