Hi Andrea, Data members like SOMETYPE *fData //[fNdata] are OK with the non-split mode, but not with the split mode. See the recently announced Users Guide for more info. We are planning to support also this case in split mode in the near future. Rene Brun Andrea Fontana wrote: > > Dear Rooters, > we want to save an array with variable length in a tree. > The array is a data member of a class and the tree branches are > created according to the class definition in split mode. > The array length is also member of the class. > > We tried the following class definition: it is compiled correctly, > but then the program crashes on execution. > > What did we not understand? > > Many thanks, > Andrea Fontana & Germano Bonomi > > THenaEvent.h: > ============= > > #ifndef ATH_HenaEvent > #define ATH_HenaEvent > > // > // > // Athena Event Class > // > // > > #include "TObject.h" > #include "TArrayD.h" > > class THenaEvent : public TObject { > > protected: > Int_t fSlot; > Int_t fRawEventNum; > Char_t fRawEventTime[13]; > Int_t fTOFEventNum; > Int_t fSIS_time; > Int_t fNData; > Double_t *fData; //[fNData] > Int_t fType; > public: > THenaEvent(); > ~THenaEvent(); > > void SetHead(Int_t, Int_t, Char_t *,Int_t, Int_t); > void SetData(Int_t, Int_t, Double_t *); > > Int_t GetSlot() {return fSlot;} > Char_t * GetRawTime() {return fRawEventTime;} > Int_t GetRawNum() {return fRawEventNum;} > Int_t GetTOFNum() {return fTOFEventNum;} > Int_t GetSISTime() {return fSIS_time;} > Int_t GetNData() {return fNData;} > Int_t GetType() {return fType;} > Double_t * GetData() {return fData;} > > ClassDef(THenaEvent,1) > }; > #endif > > THenaEvent.C: > ============= > > #include "THenaEvent.h" > > ClassImp(THenaEvent); > > THenaEvent::THenaEvent() > { > } > THenaEvent::~THenaEvent() > { > } > void THenaEvent::SetHead(Int_t Slot, Int_t RawEventNum, Char_t *RawEventTime, Int_t Type, Int_t NData) > { > fSlot=Slot; > fRawEventNum=RawEventNum; > strcpy(fRawEventTime,RawEventTime); > fType=Type; > fNData=NData; > } > void THenaEvent::SetData(Int_t TOFEventNum, Int_t SIS_counts, Double_t *Data) > { > for(int i=0;i<fNData;i++){ > fData[i]=Data[i]; > } > fTOFEventNum=TOFEventNum; > fSIS_time=SIS_counts; > }
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:36 MET