RE: [ROOT] Branches with objects and tree friends

From: Philippe Canal (pcanal@fnal.gov)
Date: Tue Apr 27 2004 - 00:04:03 MEST


Hi Christian,

Saving any objects in a TTree requires that you have a compiled version of the class.  We do not support the case where the class in interpreted.  Hence your
macro can only work when compiled with ACLiC.

The advantage is derived from TObject is that you inherit some of the tools provided by the TObject interface (like Dump).  You also can store them 
in ROOT Collection (in particular only TObjects can be stored in TClonesArray).

> a, Interestingly, only the first call to CreateTrees() gives an
> error message, but not the second call.

Because the error message is issed at the time of the creation of
the TClass object describing your class (hence only once).

> b, It is not clear to me why CINT can only set the first two
> branch addresses and than crashes?

There are missing protection in this case.  We will try to improve
the situation.

Cheers,
Philippe.


-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of cstrato
Sent: Sunday, April 25, 2004 7:54 AM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] Branches with objects and tree friends


Dear Rooters

1) First, I have a question regarding branches with objects, e.g.
    tree->Branch("MyBranch", "MyData", &data, 64000, 99);

where MyData is defined as:

class MyData {
//class MyData: public TObject {
    protected:
       Int_t    fID;
       Double_t fX;
    public:
       MyData() {}
       virtual ~MyData() {}
};

With the old branch style, MyData must derive from TObject, but
this is no longer necessary. My question is:
Are there still advantages to derive MyClass from TObject?
Under which circumstances would you derive an object from TObject?

2) The enclosed macro "macroFriends.C" works fine when compiled
with ACLiC, but with CINT I get the following output:
root [0] .x macroFriends.C
------MyClass::MyClass------
------MyClass::CreateTrees------
Error in <TClass::BuildRealData>: can not find any ShowMembers function 
for MyData!
------MyClass::CreateTrees------
------MyClass::AddTree------
------MyClass::AddTree------
------MyClass::AddTree------
------MyClass::AddTree------
------MyClass::AddTree------
------MyClass::AddTree------
------MyClass::AddTree------
------MyClass::AddTree------
------MyClass::CopyTrees1------
nfriends(fTree) = 7
nentries(fTree) = 100
treej[0] = TreeX0
treej[1] = TreeX1
treej[2] = TreeX2

  *** Break *** bus error
Root > Function macroFriends() busy flag cleared
Function CopyTrees1() busy flag cleared

a, Interestingly, only the first call to CreateTrees() gives an
error message, but not the second call.

b, It is not clear to me why CINT can only set the first two
branch addresses and than crashes?

My system: root 4.00/03 from 26 March 2004 on MacOS X 10.3.1

Thank you in advance for your help.

Best regards
Christian
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
C.h.r.i.s.t.i.a.n. .S.t.r.a.t.o.w.a
V.i.e.n.n.a.         .A.u.s.t.r.i.a
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:07 MET