문제

나는 루트 파일에서 분기를 추출 할 수있는 루트 파일에로드되는 코드가 있습니다. 코드는 다음과 같이 보입니다.

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 파일에서로드하고 동일한 작업을 수행하고 싶습니다.더 구체적으로, 내가로드하려는 모든 루트 파일로 가득 찬 디렉토리가있는 경우 해당 디렉토리에서 각 파일을로드하는 프로그램을 작성할 수 있습니까?어떤 도움이 될 것입니다.

도움이 되었습니까?

해결책

data.add (...)의 반복 된 호출을 사용하여 여러 파일을로드합니다.

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

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

다음을 호출해야합니다 :

Data.GetEntries();
.

TChain을 초기화합니다.그런 다음 지점 주소를 설정합니다. 주 : 전화 할 때 :

TChain Data("clusters");
.

매개 변수 "clusters"는 TTREE 이름이며 추가 한 모든 파일에서 동일해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top