Pergunta

Tenho um código que carrega em uma de arquivos RAIZ, a partir do qual eu posso extrair ramos a partir de arquivos RAIZ e plotar histogramas, etc.O código semelhante a este:

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

Isso funciona fino e elegante, apenas carregando em um arquivo e fazer lotes do arquivo.No entanto, eu gostaria de carregar em n arquivos e fazer as mesmas operações.Mais especificamente, se eu tiver um diretório cheio de todos os ficheiros RAIZ que eu quero para carregar, eu posso escrever um programa que irá carregar cada arquivo do diretório.Qualquer ajuda será bem vinda.

Foi útil?

Solução

carregar vários arquivos usando um repetida chamada de Dados.Adicionar(...):

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

Data.Add("fileN.root");

Em seguida, você deve ligar para:

Data.GetEntries();

Que inicializa o TChain.Depois que você definir o Ramo de endereços, etc.NOTA:Quando você chamar:

TChain Data("clusters");

o parâmetro "clusters" é o TTree nome e que tem de ser a mesma em todos os arquivos que você adicionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top