Re: [ROOT] subselection of a tree

From: Matthieu Guillo (guillo@jlab.org)
Date: Tue Nov 20 2001 - 16:32:46 MET


Hi Rene

I tried version 3.02/03 and at first I thought my problem was fixed.
Namely the method "Draw" gave me the answers I expected. However, the
following line fails and return a NULL pointer:

TBranch* brInfo = tree->GetBranch("info"); 

"info" is a c-structure. The tree was created using ROOT 3.00/06.
Compiling my class using 3.00/06 set of libraries solved the problem.
So it looks like that "GetBranch" method ahs some problem with the 3.02/03
version of ROOT.

Thanks

On Mon, 19 Nov 2001, Rene Brun wrote:

> Hi Matthieu,
> 
> Please try 3.02/03 and let me know if the problem persists.
> 
> Rene Brun
> 
> Matthieu Guillo wrote:
> > 
> > Hello Rooters
> > 
> > I know this topic has already been discussed her but somehow I am missing
> > a point.
> > I have a tree which contains c-structures and TLorentzVectors. I would
> > like to copy all branches of the tree to another one but only a few
> > selected entries.
> > So, based on examples in the tutorials, I did:
> > 
> > gSystem->Load("libPhysics");
> > TFile* f = new TFile("oldfile.root");
> > TTree* tree_old = (TTree*) f->Get("tree");
> > 
> > info = new info_t;     // info_t is a c-structure
> > kine = new kine_t;     // kine_t is a c-structure
> > tdist = new tdist_t;   // tdist_t is a c-structure
> > 
> > TLorentzVector* v4P1     = new TLorentzVector;
> > TLorentzVector* v4P2     = new TLorentzVector;
> > 
> > tree_old->SetBranchAddress("info", &info);
> > tree_old->SetBranchAddress("kine", &kine);
> > tree_old->SetBranchAddress("tdist", &tdist);
> > tree_old->SetBranchAddress("p1", &v4P1);
> > tree_old->SetBranchAddress("p2", &v4P2);
> > 
> > tree_old->SetBranchStatus("*", 1);
> > 
> > TFile *newfile = new TFile("newfile.root","recreate");
> > TTree *newtree = tree_old->CopyTree("complicated cut");
> > newtree->SetName("tree");
> > 
> > newfile->Write();
> > newfile->Close();
> > 
> > This fails! I compared the values in the c-structures in the old (using
> > the cut) and new tree, they are identical, so that's good. The
> > number of evens in the old tree after cut is the same than the
> > number of events in the new tree. However the components of the
> > TLorentzVectors are differents. I built the old tree in non-split mode for
> > the TLorentzVector using ROOT 3.00/06 on Linux Red Hat 6.2 and I am
> > trying to make the subselection using ROOT 3.02/00 on the same machine,
> > same OS.
> > 
> > What am I doing wrong?
> > 
> > Thanks
> > 
> > Matthieu Guillo
> > University of South Carolina
> > Thomas Jefferson National Laboratory
> > Office 71 trailer 16
> > Phone: 757-269-5551
> 

Matthieu Guillo
University of South Carolina
Thomas Jefferson National Laboratory
Office 71 trailer 16
Phone: 757-269-5551



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:09 MET