[ROOT] Re: Filtering chains (again!)

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sat Nov 23 2002 - 12:49:27 MET


Hi Antonio,

TTree::CloneTree is currently not able to copy the branch addresses
correctly in case the source tree is initialized in MakeClass mode.
I think that the following lines should fix the problem.
Let me know

After the line
   TTree *newtree = (TTree*)fChain->GetTree()->CloneTree(0);
add
   newtree->SetMakeClass(1);
   fChain->GetTree()->CopyAddresses(newtree);

Rene Brun

On Sat, 23 Nov 2002, Antonio SIDOTI wrote:

> Dear Rooters,
> I am following the suggestions described in
> http://root.cern.ch/root/roottalk/roottalk02/0481.html to filter out a
> chain.
> I want to filter in Loop method that has been generated by MakeClass.
> 
> void MyClass::Loop(){
>   bool pass = false;
>   fChain->SetBranchStatus("*",1);  // enable all branches
> 
>   Int_t nentries = Int_t(fChain->GetEntries());
>   fChain->GetEntry(0);
>   TFile *newFile = new TFile("small.root","recreate");
>   TTree *newtree = (TTree*)fChain->GetTree()->CloneTree(0);
>   for (Int_t jentry=0; jentry<nentries;jentry++) {
>     Int_t ientry = LoadTree(jentry);
>      pass = false;
>     for(Int_t itk1=0; itk1< numTk; ++itk1){
>       for(Int_t itk2=itk1+1; itk2< numTk; ++itk2){
>         if(itk1==itk2) continue;
>         pass = Select(itk1,itk2);
>         }
>       }
>    if(pass){
>         cout << "Passed!\n";
>       newtree->Fill();
>     }
> }
>  newFile->cd();
>  newtree->Write();
> }
> 
> My problem is that as soon as I try to fill the newtree I got a
> Segmaentation violation:
> 
>  *** Break *** segmentation violation
> Root > Function Loop() busy flag cleared
> 
> What I am doing wrong?
> Thanks a lot,
> Antonio
> 
> P.S. I am using  3.03/07
> 
> -------------------------------------------------------------
>            sidoti   antonio: PostDoc(AdR) - University Pisa and INFN
>            e-mail:  antonio.sidoti@pi.infn.it
>                     sidoti@fnal.gov
>            www:     http://higgs.tn.infn.it/~sidoti/
>            Tel:     +39 + 050 880 456
>            Fax:     +39 + 050 880 317-318
> -------------------------------------------------------------
> "A program is a device used to convert data into error messages."
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:20 MET