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