[ROOT] Re: Tree

From: Anton Fokin (anton.fokin@smartquant.com)
Date: Tue Mar 06 2001 - 10:08:57 MET


Hi Rene,

thanks for answering. I see it now in the code of TBranch::GetEntry(). It's
clever, but please, add a description of this feature in the htmldoc and
user guide. It may cause a hidden bug in user programs. See what I did:

UInt_t fTradeIndex;
fTradeIndexTree->SetBranchAddress("TradeIndex", &fTradeIndex);


::GetFirst(DayNumber) {

  fTradeIndexTree->GetEntry(DayNumber);

}

::GetNext()
{
   while ()
     fTradeIndex++;

  ...
}

If you run GetFirst() GetNext() sequence first time, it works fine. If you
run it second time for the same DayNumber, it will give wrong answer!

Regards,
Anton

http://www.smartquant.com


----- Original Message -----
From: Rene Brun <brun@pcbrun.cern.ch>
To: Anton Fokin <anton.fokin@smartquant.com>
Cc: roottalk <roottalk@pcroot.cern.ch>; Rene Brun <Rene.Brun@cern.ch>
Sent: Monday, March 05, 2001 11:59 PM
Subject: Re: Tree


> Anton,
> This result is correct. GetEntry returns the number of bytes read from the
> file. In case you read the same entry again, Root does not have to do any
> I/O unless the branch addresses have changed. In this case GetEntry
> returns 1 (I cannot return 0 because many people uses 0 to assume that
> an error has occured during reading).
>
> Rene Brun
>
> On Mon, 5 Mar 2001, Anton Fokin wrote:
>
> > Hi Rene,
> >
> > I've got the following strange result. The piece of code is (I simply
read
> > the same entry three times)
> >
> > ---
> >
> >   Index = 4;
> >
> >   Int_t NBytes = fTradeIndexTree->GetEntry(Index);
> >
> >   printf("NBytes = %d\n", NBytes);
> >
> >   NBytes = fTradeIndexTree->GetEntry(Index);
> >
> >   printf("NBytes = %d\n", NBytes);
> >
> >   NBytes = fTradeIndexTree->GetEntry(Index);
> >
> >   printf("NBytes = %d\n", NBytes);
> >
> > ---
> >
> > the output:
> >
> > NBytes = 4
> > NBytes = 1
> > NBytes = 1
> >
> > I also see that I fill my fTradeIndex in the first read only.
> >
> > If I insert
> >
> > fTradeIndexTree->SetBranchAddress("TradeIndex", &fTradeIndex);
> >
> > before every GetEntry(), I get right result.
> >
> > fTradeIndexTree is simple:
> >
> > UInt_t TradeIndex = 0;
> > TradeIndexTree->Branch("TradeIndex", &TradeIndex, "TradeIndex/i",
16*1024);
> >
> >
> > Any ideas how it can happen in principle? Any hints to trace the problem
> > down?
> >
> > Root3.05 on win98
> >
> > Regards,
> > Anton
> >
> > http://www.smartquant.com
> >
> >
> >
>
>
>



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