you may want to put back ClassImp/ClassDef - things stored in TClonesArray need them. -best, Pasha Colin Bernet wrote: > > Hi, > > I wanted to adapt the Event and Track classes to my needs, so I just > renamed the Track class as Hit, removed some methods and the ClassImp, > ClassDef. I may have removed too many things, cause now I get this > message when adding a Hit to the TClonesArray in Event : > > Error in <TClonesArray::operator[]>: invalid class specified in > TClonesArray ctor > > Then a segmentation fault occurs in the TObject constructor (Hit > inherits from TObject). > > Could you help ? > thanks, > > Colin > > ---------------------------------------------------------------------------------------------------------------------------------- > #include "Event.h" > > TClonesArray *Event::fgHits = 0; > > //______________________________________________________________________________ > Event::Event() > { > // Create an Event object. > // When the constructor is invoked for the first time, the class static > // variable fgHits is 0 and the TClonesArray fgHits is created. > > if (!fgHits) fgHits = new TClonesArray("Hit", 1000); > fHits = fgHits; > fNHit = 0; > } > > //______________________________________________________________________________ > Event::~Event() > { > Clear(); > } > > //______________________________________________________________________________ > void Event::AddHit(TString* detname, int channel, float data, int type) > { > TClonesArray &Hits = *fHits; > new(Hits[fNHit++]) Hit(detname,channel,data,type); > } > > //______________________________________________________________________________ > void Event::Clear(Option_t *option) > { > fHits->Clear(option); > } > > //______________________________________________________________________________ > void Event::Reset(Option_t *option) > { > // Static function to reset all static objects for this event > // fgHits->Delete(option); > delete fgHits; fgHits = 0; > } > > //______________________________________________________________________________ > void Event::SetHeader(Int_t i, Int_t run) > { > fNHit = 0; > fEvtHdr.Set(i, run); > } > > //______________________________________________________________________________ > Hit::Hit(TString* detname, int channel, float data, int type) : TObject() > { > fDetname=new TString(*detname); > fChannel=channel; > fData=data; > fType=type; > } > > Hit::IsMeanTimer() { > if (fType=1) return 1; > else return 0; > } > > Hit::IsAdc() { > if (fType=2) return 1; > else return 0; > } > > ---------------------------------------------------------------------------------------------------------------------------------- > #ifndef MY_Event > #define MY_Event > > #include <TString.h> > #include <TObject.h> > #include <TClonesArray.h> > > class EventHeader { > > private: > Int_t fEvtNum; > Int_t fRun; > > public: > EventHeader() : fEvtNum(0), fRun(0) { } > virtual ~EventHeader() { } > void Set(Int_t i, Int_t r) { fEvtNum = i; fRun = r;} > Int_t GetEvtNum() const { return fEvtNum; } > Int_t GetRun() const { return fRun; } > }; > > class Event : public TObject { > > private: > Int_t fNHit; > UInt_t fFlag; > EventHeader fEvtHdr; > TClonesArray *fHits; > > static TClonesArray *fgHits; > > public: > Event(); > virtual ~Event(); > void Clear(Option_t *option =""); > static void Reset(Option_t *option =""); > void SetNhits(Int_t n) { fNHit = n; } > void SetFlag(UInt_t f) { fFlag = f; } > > void SetHeader(Int_t i, Int_t run); > void AddHit(TString* detname, int channel, float data, int type); > > Int_t GetNhits() const { return fNHit; } > UInt_t GetFlag() const { return fFlag; } > EventHeader* GetHeader() { return &fEvtHdr; } > TClonesArray* GetHits() const { return fHits; } > }; > > class Hit : public TObject { > > private: > TString *fDetname; > int fChannel; > float fData; > int fType; > > public: > Hit() { } > Hit(TString* detname, int channel, float data, int type); > virtual ~Hit() { } > int IsMeanTimer(); > int IsAdc(); > }; > > #endif
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:28 MET