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

StackOverflow https://stackoverflow.com//questions/25023191

  •  21-12-2019
  •  | 
  •  

Вопрос

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

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);
    }
}
.

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

Это было полезно?

Решение

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

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

Data.Add("fileN.root");
.

Тогда вы должны позвонить:

Data.GetEntries();
.

, который инициализирует TCHAIN.После этого вы установили филиальные адреса и т. Д. Примечание: Когда вы звоните:

TChain Data("clusters");
.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top