Hi Ulrich, You had an error in your Event constructor (copy/paste problem ::) ) Replace the following lines : if(!fgB0sMimps) fgB0sMimps = new TClonesArray("Mimp",1000); if(!fgMuminusMimps) fgB0sMimps = new TClonesArray("Mimp",1000); if(!fgMuplusMimps) fgB0sMimps = new TClonesArray("Mimp",1000); by if(!fgB0sMimps) fgB0sMimps = new TClonesArray("Mimp",1000); if(!fgMuminusMimps) fgMuminusMimps = new TClonesArray("Mimp",1000); if(!fgMuplusMimps) fgMuplusMimps = new TClonesArray("Mimp",1000); Rene Brun Ulrich Husemann wrote: > > Hi Rene! > > In the main program I have something like this (simplified) > > #include "Event.hh" > > Event* event; > > void main() > { > event = new Event(); > evttree = new TTree("evttree","rare decays ROOT tree"); > evttree->Branch("event","Event",&event); > } > > The implementation of the classes: > > #include "Event.hh" > //#include "arte/ArteMessage.hh" > > ClassImp(EventHeader) > ClassImp(Mimp) > ClassImp(Event) > > TClonesArray* Event::fgB0sMimps = 0; > TClonesArray* Event::fgMuplusMimps = 0; > TClonesArray* Event::fgMuminusMimps = 0; > > //**************************************************************************** > > EventHeader::EventHeader() > : fEvtNum(0), fRunNum(0), fDate(0), fTime(0), fBX(0) { } > > EventHeader::~EventHeader() { } > > void EventHeader::SetAll(Int_t EvtNum, Int_t RunNum, Int_t Date, Int_t > Time, Int_t BX) > { > fEvtNum = EvtNum; > fRunNum = RunNum; > fDate = Date; > fTime = Time; > fBX = BX; > } > > //**************************************************************************** > > void Mimp::Clear() > { > fX = 0; fY=0; fZ = 0; > fPx = 0; fPy = 0; fPz = 0; > fCmp = 0; fNsl = 0; > } > > void Mimp::SetConvertedMomenta(Float_t tx, Float_t ty, Float_t p) > { > fPz = p/(sqrt(1 + tx*tx + ty*ty)); > fPx = tx * fPz; > fPy = ty * fPz; > } > > //**************************************************************************** > > Event::Event() > { > if(!fgB0sMimps) fgB0sMimps = new TClonesArray("Mimp",1000); > if(!fgMuminusMimps) fgB0sMimps = new TClonesArray("Mimp",1000); > if(!fgMuplusMimps) fgB0sMimps = new TClonesArray("Mimp",1000); > > fB0sMimps = fgB0sMimps; > fMuminusMimps = fgMuminusMimps; > fMuplusMimps = fgMuplusMimps; > fNb0sMimps = 0; > fNmuminusMimps = 0; > fNmuplusMimps = 0; > } > > Event::~Event() {} > > void Event::AddMimp(const Mimp* mymimp, char* particle) > { > if (particle == "B0s") AddB0sMimp(mymimp); > else if (particle == "Muplus") AddMuplusMimp(mymimp); > else if (particle == "Muminus") AddMuminusMimp(mymimp); > else > { > //arteMsg << "Cannot fill MIMP array for this particle type" << > endl; > //arteMsg.warn(); > } > } > > void Event::AddB0sMimp(const Mimp* mymimp) > { > TClonesArray &b0s = *fB0sMimps; > new(b0s[fNb0sMimps++]) Mimp(mymimp); > } > > void Event::AddMuminusMimp(const Mimp* mymimp) > { > TClonesArray &muminus = *fMuminusMimps; > new(muminus[fNmuminusMimps++]) Mimp(mymimp); > } > > void Event::AddMuplusMimp(const Mimp* mymimp) > { > TClonesArray &muplus = *fMuplusMimps; > new(muplus[fNmuplusMimps++]) Mimp(mymimp); > } > > void Event::Clear(Option_t *option) > { > fNb0sMimps = 0; > fNmuminusMimps = 0; > fNmuplusMimps = 0; > fB0sMimps->Clear(option); > fMuminusMimps->Clear(option); > fMuplusMimps->Clear(option); > fEvtHdr.SetAll(0,0,0,0,0); > } > > void Event::Reset(Option_t *option) > { > delete fgB0sMimps; fgB0sMimps = 0; > delete fgMuminusMimps; fgMuminusMimps = 0; > delete fgMuplusMimps; fgMuplusMimps = 0; > } > > void Event::SetHeader(Int_t EvtNum, Int_t RunNum, Int_t Date, Int_t Time, > Int_t BX) > { > fEvtHdr.SetAll(EvtNum, RunNum, Date, Time, BX); > } > > Ulrich Husemann
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET