Hi rooters, I need to filter out the events containing in the chain of root-files using some function INSIDE the loop over events and then save them in new tree with analogous branch structure. The method with TTree *tree = chain.CloneTree(Tcut); does not suit me because, as mentioned above, I need to use a selection function, which return value depends on the event parameters. My script looks like this: #=========================================== void filter() { TChain *chain = new TChain("Global"); chain->Add("file1.root"); chain->Add("file2.root"); chain->Add("file3.root"); cout << " Creating new root-file ..."<< endl; TFile *newFile = new TFile("small.root","recreate"); cout << " Creating new tree ..."<< endl; TTree *tree = chain.CloneTree(0); if (fChain == 0) return; Int_t nentries = Int_t(fChain->GetEntries()); Int_t nbytes = 0, nb = 0; for (Int_t jentry=0; jentry<nentries;jentry++) { Int_t ientry = LoadTree(jentry); //in case of a TChain, nb = fChain->GetEntry(jentry); nbytes += nb; if ( SelectionFunction() ) tree->Fill(); }// end loop over events newFile->cd(); tree->Write(); } #============================================== For 3.01.06 in this case I get: Warning in <TChain::Fill()>: may not use this method and nothing written to "tree". For 3.02.07 I get: *** Break *** segmentation violation How to initialize properly "tree"? Obviously, the string: TTree *tree = chain.CloneTree(0); does not help Thanks in advance, Dmitri
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:40 MET