[ROOT] sub-branch SetAddress/GetEvent behavior question

From: Kate Scholberg (schol@mit.edu)
Date: Fri Jun 29 2001 - 12:47:05 MEST


Hi,

I have a root file containing trees generated with
split branches,

For instance:

EventNtuple02 _event02;
static void *pev2=(void*)&_event02;
TBranch *b2=_tree->Branch("event02", "EventNtuple02",  &pev2, 64000,1);

The EventNtuple02 class is a simple one, containing basic data types

class EventNtuple02: public TObject {
public:
  int Eventno;
  int Run;
...
};


When I try to read the file in a standard way, as follows:

{

  // Load shared lib etc..

  TFile file("prv3.root","UPDATE");
  TTree *amstree = (TTree*)file->Get("AMSRoot");
  EventNtuple02* event02 = new EventNtuple02;
  amstree->SetBranchAddress("event02",&event02);

  int nevent = amstree.GetEntries();

  for(int i=0;i<nevent;i++)
    {

      amstree->GetEvent(i);
      printf("Run, event %d %d\n",event02->Run, event02->Event);

    }

}

No problem... all fine.

But what I would like to do is access directly one of the sub-branches
of the event02 branch.

int* evptr = 0;
amstree->SetBranchAddress("Eventno",&evptr)

This seems to find the sub-branch correctly.
Also if I get the sub-branch with
 TBranch *evbranch = amstree->GetBranch("Eventno");
it Prints OK.

However, then

amstree.GetEvent(i)

doesn't seem to read anything into evptr.

(and doing explicitly evbranch->GetEntry(i,1) returns nbytes=1).

Is this the expected behavior for sub-branches?

I haven't looked into the source, but from my not-extremely-thorough
reading of the docs I would expect SetAddress to create an int, have
evptr point to it, and GetEvent would put stuff into it from the
branch.

Same behavior if the int evptr points to is already instantiated,
i.e. int* evptr= new int;

Same behavior on Linux and OSF1, with Root versions 2.22, 2.25 and 3.00

Kate Scholberg
schol@mit.edu



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