Макрос для загрузки нескольких корневых файлов
-
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, и это должно быть одинаково во всех файлах, которые вы добавляете.