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