Domanda

Ho qualche codice che carica in un file root da cui posso estrarre i rami da detti istogrammi di file root e di tracciare, ecc. Il codice sembra qualcosa di simile:

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

funziona bene e dandy per essere appena caricato in un unico file e fare grafici da quel file.Tuttavia, vorrei caricare in file n e fare le stesse operazioni.Più specificamente, se ho una directory riempita con tutti i file root che voglio caricare, posso scrivere un programma che caricherà ciascun file da quella directory.Qualsiasi aiuto sarà apprezzato.

È stato utile?

Soluzione

Carica più file utilizzando una chiamata ripetuta di DATA.Aggiunga (...):

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

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

Allora dovresti chiamare:

Data.GetEntries();
.

che inizializza il tchain.Dopo aver impostato gli indirizzi dei rami, ecc. Nota: Quando chiami:

TChain Data("clusters");
.

Il parametro "cluster" è il nome del TTREe e che deve essere lo stesso in tutti i file che aggiungi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top