I have an odd problem. I define 2 simple classes in a file (basically 'struct’s with ctors/dtors). One class (mvdTreeEvent) contains a TClonesArray* of the other (mvdTreeADC). Both classes have public inheritance from TObject. I make a CINT dictionary and link it. When I try to make a tree of mvdTreeEvent like this:
mvdTree = new TTree(“mvdTree”, “MVD ADCs”);
mvdTree->Branch(“mvdEvent”, “mvdTreeEvent”, &mvdEvent, 64000, 0);
(the mvdTreeEvent ctor has
pADCs = new TClonesArray(“mvdTreeADC”, 6048);
)
I get the following errors:
Warning in TClass::TClass: no dictionary for class mvdTreeADC is available
Error in TClonesArray::TClonesArray: mvdTreeADC does not inherit from TObject
However, when I do “.class mvdTreeADC”, I get:
===========================================================================
class mvdTreeADC
size=0x2c
(tagnum=3004,voffset=-1,isabstract=0,parent=-1,gcomp=0:-1,d21=~cd=75)
List of base class--------------------------------------------------------
0x0 public: TObject //Basic ROOT object
List of member variable---------------------------------------------------
Defined in mvdTreeADC
(compiled) 0xc Int_t iPacket
(compiled) 0x10 Int_t iPad
(compiled) 0x14 Int_t iChip
(compiled) 0x18 Float_t fR
(compiled) 0x1c Float_t fPhi
(compiled) 0x20 Float_t fZ
(compiled) 0x24 Int_t bZeroSup
(compiled) 0x28 Int_t iADC
(compiled) 0x0 private: static TClass* fgIsA
List of member function---------------------------------------------------
filename line:size busy function type and name (in mvdTreeADC)
(compiled) 0:0 0 public: mvdTreeADC mvdTreeADC(void);
(compiled) 0:0 0 public: static TClass* Class(void);
(compiled) 0:0 0 public: static const char* Class_Name(void);
(compiled) 0:0 0 public: static Version_t Class_Version(void);
(compiled) 0:0 0 public: static void Dictionary(void);
(compiled) 0:0 0 public: virtual TClass* IsA(void) const;
(compiled) 0:0 0 public: virtual void ShowMembers(TMemberInspector& insp,char* parent);
(compiled) 0:0 0 public: virtual void Streamer(TBuffer& b);
(compiled) 0:0 0 public: void StreamerNVirtual(TBuffer& b);
(compiled) 0:0 0 public: static const char* DeclFileName(void);
(compiled) 0:0 0 public: static int ImplFileLine(void);
(compiled) 0:0 0 public: static const char* ImplFileName(void);
(compiled) 0:0 0 public: static int DeclFileLine(void);
(compiled) 0:0 0 public: mvdTreeADC mvdTreeADC(const mvdTreeADC&);
(compiled) 0:0 0 public: virtual void ~mvdTreeADC(void);
It seems the dictionary is available to CINT, but TClonesArray can’t find it! Any suggestions would be very much appreciated.
I’m using ROOT 3.05/07 on Linux 2.4.22 w/ glibc 2.3.2, gcc 3.2