Hi all, 1 - I derived class TChain to add this constructor, which can chain several rootfiles in a single command : Chain::Chain(const char* chainname, const char* pattern) : TChain(chainname) { string ls("ls "); ls += pattern; cout<<pattern<<endl; FILE *in; in = popen(ls.c_str(), "r"); char filename[100]; while(fscanf(in,"%s",filename) != EOF) { cout<<filename<<" ... "; TFile tmp(filename); if( tmp.IsZombie() ) { cerr<<"not a root file"<<endl; continue; } if(tmp.ReadKeys() ) { tmp.Close(); if(TChain::Add(filename)) cout<<"OK!"<<endl; else cout<<"chainname not found"<<endl; } else cout<<"No Keys !"<<endl; } pclose(in); } I think it could be useful to have something like that in the TChain class. 2- You can notice in this piece of code that I'm opening the TFile to check that there are keys inside before adding it to the chain. If one tries to add a file with no keys, the chain is usable only for files added before (one has to limit number of entries manually). TChain::GetEntries() gives the error message : Warning in <TFile::Init>: file chunk10001/28000/coral.root has no keys Error in <TFile::cd>: Unknown directory CsEfficiency Error in <Chain::LoadTree>: cannot find tree with name /CsEfficiency/MM02V1___eTree_ in file chunk10001/28000/coral.root this check should probably be done in TChain::Add somehow, is it possible ? Is there already a way to do this check in a better way ? thanks, Colin
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:22 MET