Макрос для загрузки нескольких корневых файлов

У меня есть код, который загружается в файл ROOT, из которого я могу извлечь ветви из указанного файла ROOT и построить гистограммы и т. д. Код выглядит примерно так:

void MakePlots(string filename) {
    TChain Data("clusters");
    Data.Add(filename.c_str());

    Double_t rr, rx, ry, rz, rrho, rtheta, rphi;

    Data.SetBranchAddress("laben.recon.r", &rr);
    Data.SetBranchAddress("laben.recon.rho", &rrho);
    Data.SetBranchAddress("laben.recon.latitude", &rtheta);
    Data.SetBranchAddress("laben.recon.longitude", &rphi);
    Data.SetBranchAddress("laben.recon.z", &rz);
    Data.SetBranchAddress("laben.recon.y", &ry);
    Data.SetBranchAddress("laben.recon.x", &rx);

    int NumEvents = Data.GetEntries();

    for(int event = 0; event < NumEvents; event++) {
        if(event % 1000 == 0) cout << "Processing Event " << event << endl;
        Data.GetEvent(event);
    }
}

Это отлично работает и отлично подходит для загрузки в один файл и создания графиков из этого файла. Однако я хотел бы загрузить n файлов и выполнить те же операции. В частности, если у меня есть каталог, заполненный всеми файлами ROOT, которые я хочу загрузить, могу ли я написать программу, которая будет загружать каждый файл из этого каталога. Любая помощь будет оценена.


person James S.    schedule 29.07.2014    source источник


Ответы (1)


вы загружаете несколько файлов, используя повторный вызов Data.Add(...):

Data.Add("file1.root");
Data.Add("file2.root");
...

Data.Add("fileN.root");

Затем вы должны позвонить:

Data.GetEntries();

Который инициализирует TChain. После этого вы устанавливаете адреса филиалов и т. д. ПРИМЕЧАНИЕ: При звонке:

TChain Data("clusters");

параметр «кластеры» — это имя TTree, и оно должно быть одинаковым во всех добавляемых вами файлах.

person Asen Christov    schedule 30.07.2014
comment
Спасибо за совет Асен Христов. Мне все еще трудно понять, как просто добавить каждый файл из каталога. Приведенный выше метод хорошо работает, если я вручную вставляю имена файлов в код, но я пытаюсь просто вытащить каждый файл из каталога. - person James S.; 31.07.2014
comment
Два совета: во-первых, если вы будете искать, как получить список файлов в каталоге, вы найдете ответ. Во-вторых, используя ROOT из python (pyroot: root.cern.ch/drupal/content/pyroot ) значительно упрощает жизнь, например, получение списка файлов в каталоге тривиально. - person Asen Christov; 31.07.2014