Re: Strange behavior of TBranch::Fill

From: Antonio Bulgheroni <antonio.bulgheroni_at_gmail.com>
Date: Thu, 19 Jul 2007 14:34:48 +0200


For me each branch is a standalone object, in fact I could create several trees, each of them containing one single branch!

In my application, each branch is containing the time evolution of a certain quantity related to a certain physical object. I have many different objects to monitor (that's the reason why I have many branches) but they are not all evolving at the same speed. I mean, there are objects updated every once in a while, and other evolving rather slowly (and that's the reason of the different number of entries). I hope it is clear now.

That's it! I believe that the easiest workaround is to use one TTree for each object.

thanks,

Antonio

-- 
Antonio Bulgheroni, PhD

Computers have a lot in common with air conditioners:
Once you open WINDOWS, they stop working properly.

On 7/19/07, Philippe Canal <pcanal_at_fnal.gov> wrote:

>
> > but they for sure have different number of entries, at least this is
> what I would like to have!
>
> Hence, my real question :) Why? What concept are you capturing in this
> way? Or in other words,
> once this tree is written how are you going to use it?
>
> If I can understand your motivation, I can help you find the best solution
> :)
>
> Cheers,
> Philippe.
>
> ------------------------------
> *From:* Antonio Bulgheroni [mailto:antonio.bulgheroni_at_gmail.com]
> *Sent:* Thursday, July 19, 2007 7:23 AM
> *To:* Philippe Canal
> *Cc:* ROOT Talk
> *Subject:* Re: [ROOT] Strange behavior of TBranch::Fill
>
> Dear Philippe,
> thanks for your reply.
>
> The problem is that in my case I really don't need to have all branches
> filled with the same number of entries. The example I sent around was
> oversimplified: in my real life case I have several branches, none of them
> is empty of course, but they for sure have different number of entries, at
> least this is what I would like to have!
>
> I will try to find another solution....
>
> thanks again!
>
> Cheers,
> Antonio
>
> --
> Antonio Bulgheroni, PhD
>
> Computers have a lot in common with air conditioners:
> Once you open WINDOWS, they stop working properly.
>
> On 7/19/07, Philippe Canal <pcanal_at_fnal.gov> wrote:
> >
> > Hi Antonio,
> >
> > This is the expected behavior of your code. In you branch->Fill case,
> > the
> > tree is never informed that it has any entries ... and hence the tools
> > (TBrowser, etc..) thinks the tree is empty. For most of the tools, it
> > is
> > important that each branch to be filled with the
> > same amount of entries (because they match entries by their sequential
> > order
> > in the branch).
> >
> > You can 'fix' a TTree after being filled by your branch->Fill method by
> > calling 'tree->SetEntries()' but it will complain if one of the branch
> > has
> > less entries than the other.
> >
> > You can also use SetBranchStatus(brname,0) and tree->Fill to prevent the
> > filling of individual branches.
> >
> > > I don't need (and don't want) to fill all branches,but I would like to
> > indivually fill only branches I'm interested in.
> >
> > Why? What do you want to represent with the 'empty' branch? Wouldn't
> > it be
> > better to __not__ add the branch to the TTree.
> >
> > You may want to consider replacing the
> > TBranch * branch2 = tree->Branch("calib2.", &calib2, 8000, 1);
> > by
> > vector<Calib> *vec;
> > TBranch * branch2 = tree->Branch("calib2.", &vec, 8000, 1);
> > where the vector would be filled or not.
> >
> > You may also want to replace both branch with a single vector with one
> > of
> > more object in it,
> > depending on the semantic.
> >
> > Cheers,
> > Philippe.
> >
> > ________________________________
> >
> > From: owner-roottalk_at_pcroot.cern.ch [mailto:owner-roottalk_at_pcroot.cern.ch
> > ]
> > On Behalf Of Antonio Bulgheroni
> > Sent: Thursday, July 19, 2007 1:55 AM
> > To: ROOT Talk
> > Subject: [ROOT] Strange behavior of TBranch::Fill
> >
> >
> > Dear ROOTers,
> >
> > I would like to report you the strange behavior of the TBranch::Fill
> > compared to the TTree::Fill. In my real life case I have a TTree with
> > several branches; I don't need (and don't want) to fill all branches,but
> > I
> > would like to indivually fill only branches I'm interested in. For this
> > reason, I'm getting from the TTree the branch I need, I'm setting the
> > address of the TBranch to a local variable and finally I call
> > TBranch::Fill(). Everything is working fine but the tree browser, indeed
> > if
> > I browse the TTree and double click on a leaf instead of drawing the
> > leaf
> > content on a canvas, nothing is happening.
> >
> > I discovered that if I replace the TBranch::Fill call with a
> > TTree::Fill,
> > the tree broswer is working again, but every time I have
> > all branches filled. Here attached a simplified example, calib.h and
> > calib.cxx contain the class defining the branch content, and test.C a
> > simple
> > macro to fill in a tree using in one case TBranch::Fill and in the other
> >
> > TTree::Fill.
> >
> > Is this the correct behavior? If so, is there any workaround to have
> > branches browsable and individually fillable? I played a bit with the
> > branch status, but unsuccessfully.
> >
> > Thanks in advance.
> >
> > Cheers,
> > Antonio
> >
> > Tested on the following configurations:
> >
> > ROOT 5.15/08 + Linux (Fedora 7) + g++ 4.1.2
> > ROOT 5.13/04 + SLC 4 + g++ 3.4.6
> > ROOT 5.10/00e + SLC 3
> > --
> > Antonio Bulgheroni, PhD
> >
> > Computers have a lot in common with air conditioners:
> > Once you open WINDOWS, they stop working properly.
> >
> >
>
Received on Thu Jul 19 2007 - 14:34:59 CEST

This archive was generated by hypermail 2.2.0 : Thu Jul 19 2007 - 17:50:02 CEST