Re: TBranch::GetEntry(Int_t)

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Nov 17 1999 - 12:45:02 MET


Hi Kristjan,
I have added a new function TBranch::ResetReadEntry() in 2.23/09.
You can call this function in your Example::Use_Branch function if you
like.
As already explained, I do not want to reset the read entry by default.

Rene Brun


Kristjan H Gulbrandsen wrote:
> 
> Here is an example of a situation where I get into trouble.
> Consider the following class.
> 
> class Example{
> 
>  public:
> 
>   Example();
>   virtual ~Example();
>   void Make_Branch(Char_t *name);
>   void Fill_Branch(Char_t *name,Int_t value1,Float_t value2);
>   void Use_Branch(Char_t *name, Int_t entry_number);
> 
>  protected:
> 
>   Int_t fparam1;
>   Float_t fparam2;
>   TTree *tr;
> 
> };
> 
> Example::Example(){
> 
>   tr = new TTree("tree","Tree");
> 
> }
> 
> Example::~Example(){
> 
>   delete tr;
> 
> }
> 
> void Example::Make_Branch(Char_t *name){
> 
>   TBranch *br = tr->Branch(name,&fparam1,"param1/I:param2/F",1024);
>   ((TLeaf *) (br->GetListOfLeaves()->At(0)))->SetAddress(&fparam1);
>   ((TLeaf *) (br->GetListOfLeaves()->At(1)))->SetAddress(&fparam2);
> 
> }
> 
> void Example::Fill_Branch(Char_t *name,Int_t value1,Float_t value2){
> 
>   fparam1=value1;
>   fparam2=value2;
> 
>   tr->GetBranch(name)->Fill();
> 
> }
> 
> void Example::Use_Branch(Char_t *name, Int_t entry_number){
> 
>   tr->GetBranch(name)->GetEntry(entry_number);
>   cout << "value1 is " << fparam1 << ", value2 is " << fparam2 << ".\n";
>   // more code using this data
> 
> }
> 
> so load this into root and run the following commands.
> 
> root [1] Example *Instance = new Example();
> root [2] Instance->Make_Branch("Branch1");
> root [3] Instance->Make_Branch("Branch2");
> root [4] Instance->Fill_Branch("Branch1",1,1.1);
> root [5] Instance->Fill_Branch("Branch1",2,2.1);
> root [6] Instance->Fill_Branch("Branch2",3,3.1);
> root [7] Instance->Fill_Branch("Branch2",4,4.1);
> root [8] Instance->Use_Branch("Branch2",1);
> value1 is 4, value2 is 4.1.
> root [9] Instance->Use_Branch("Branch1",1);
> value1 is 2, value2 is 2.1.
> root [10] Instance->Use_Branch("Branch2",1);
> value1 is 2, value2 is 2.1.
> 
> The output of Use_Branch is listed below the statements where it
> is executed. The problem comes about when you have branches of
> similar structure so you use the same holder for there information.
> The alternative to this in this case would be to create a new
> set of variables for every branch which I don't like to do because
> I have to keep track of all of them for destruction. This is why
> I think an option to force the tree to give you your data would
> be useful.
> 
>                                 Kris Gulbrandsen
>                                 gulbrand@mit.edu
> 
> On Tue, 16 Nov 1999, Rene Brun wrote:
> 
> > Hi Kris,
> > TBranch::GetEntry tests if you try to read from a file the same entry
> > than in the previous call for the same tree and branch. This is clearly
> > to save time. The typical situation were this test is essential is when
> >   - you read only one branch (branch->GetEntry(entry);
> >   - skip all the other branches if some test using the branch variables
> >     decide so.
> >   - invoke tree->GetEntry(entry) to read the complete event. There is no
> > need
> >     to read again the first branch (or branches).
> >
> > I do not understand in which situation you can get a problem.
> >
> > Rene Brun
> >
> > Kristjan H Gulbrandsen wrote:
> > >
> > > Does anybody know why the first line TBranch::GetEntry is
> > >
> > >      if (fReadEntry == entry) return 1;
> > >
> > > ?
> > >
> > > The effect is to not give your object or set the value of the
> > > leaves (if you use basic types). It seems rather annoying if
> > > you somehow changed some values and would like to get the
> > > same entry again. I end in most of my code just getting some
> > > dummy entry often just to ensure that I really get the data
> > > I want. I think it would be nice if this behavior could be
> > > overridden somehow.
> > >
> > > Besides a possible speed issue, if anybody knows any reasons
> > > for this behavior, it would be helpful if they could clue me
> > > in.
> > >
> > >                                 Thanks,
> > >
> > >                                 Kris Gulbrandsen
> > >                                 gulbrand@mit.edu
> >



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:43 MET