Hi Colin, you can use Add("filename.root",0), it will check if the Tree exists, if not the file will be skipped in the chain. seb. On Wed, 4 Dec 2002, Colin Bernet wrote: > > 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