X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliMC.h;h=4a271b8cb70800ce1af8a090bc0c97695f46a272;hb=b9560ae2d59030e59fe795ee8a6483127bc2a559;hp=da446eb26b5152bdc5f6f5186c179a908d58271e;hpb=5e68170f11ac92a05c85d69da858a9c6bfb88ab5;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliMC.h b/STEER/AliMC.h index da446eb26b5..4a271b8cb70 100644 --- a/STEER/AliMC.h +++ b/STEER/AliMC.h @@ -1,124 +1,145 @@ #ifndef ALIMC_H #define ALIMC_H -/////////////////////////////////////////////////////////////////////////////// -// // -// // -// Generic interface to MC for AliRoot // -// // -// // -/////////////////////////////////////////////////////////////////////////////// +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ -#include +/* $Id$ */ -class AliMC : public TNamed -{ +// +// This is the ALICE implementation of TVirtualMCApplication +// for simulation with different implementations +// of the Virtual MonteCarlo +// -private: - static AliMC* fgMC; +#include +#include +#include +#include +#include -public: - AliMC(const char *name, const char *title); - AliMC(); - virtual ~AliMC() {} - //Generic access functions - static inline AliMC* GetMC() {return fgMC;} - // - virtual Int_t CurrentMaterial(Float_t &a, Float_t &z, Float_t &dens, Float_t &radl, Float_t &absl) const =0; - virtual Int_t CurrentVol(Text_t*, Int_t&) const =0; - virtual Int_t CurrentVolOff(Int_t, Text_t*, Int_t& ) const =0; - virtual Int_t NofVolumes() const =0; - virtual Int_t VolId(Text_t*) const =0; - virtual void TrackPosition(Float_t*) const =0; - virtual void TrackMomentum(Float_t*) const =0; - virtual Float_t TrackCharge() const =0; - virtual Float_t TrackMass() const =0; - virtual Float_t TrackStep() const =0; - virtual Int_t TrackPid() const =0; - virtual Bool_t TrackInside() const =0; - virtual Bool_t TrackEntering() const =0; - virtual Bool_t TrackExiting() const =0; - virtual Bool_t TrackOut() const =0; - virtual Bool_t TrackDisappear() const =0; - virtual Bool_t TrackStop() const =0; - virtual Float_t TrackLength() const =0; - virtual Float_t TrackTime() const =0; - virtual Bool_t TrackAlive() const=0; - virtual Int_t NSecondaries() const=0; - virtual Int_t CurrentEvent() const=0; - virtual void ProdProcess(char*) const=0; - virtual void GetSecondary(Int_t, Int_t&, Float_t*, Float_t*)=0; - virtual void StopTrack() =0; - virtual void StopEvent() =0; - virtual Float_t MaxStep() const =0; - virtual void SetMaxStep(Float_t ) =0; - virtual void SetMaxNStep(Int_t) =0; - virtual Int_t GetMaxNStep() const =0; - virtual void GetParticle(const Int_t, char*, Float_t&) const =0; - virtual Int_t GetMedium() const =0; - virtual void DrawOneSpec(const char*)=0; - virtual Float_t Edep() const =0; - virtual Float_t Etot() const =0; - virtual const char* VolName(Int_t) const=0; - virtual void Gstpar(Int_t, const char *, Float_t)=0; - virtual Int_t Gsvolu(const char*, const char*, Int_t, Float_t*, Int_t)=0; - virtual void Gsdvn(const char*, const char*, Int_t, Int_t)=0; - virtual void Gsdvn2(const char*, const char*, Int_t, Int_t, - Float_t, Int_t)=0; - virtual void Gsdvt(const char*, const char*, Float_t, Int_t, - Int_t, Int_t)=0; - virtual void Gsdvt2(const char*, const char*, Float_t, Int_t, - Float_t, Int_t, Int_t)=0; - virtual void Gspos(const char*, Int_t, const char*, Float_t, Float_t, - Float_t, Int_t, const char *konly="ONLY")=0; - virtual void Gsposp(const char*, Int_t, const char*, Float_t, Float_t, - Float_t, Int_t, const char*, Float_t*, Int_t)=0; - virtual void Gfmate(Int_t, char*, Float_t&, Float_t&, Float_t&, - Float_t&, Float_t&, Float_t*, Int_t&)=0; - virtual void Gsatt(const char*, const char*, Int_t)=0; - virtual void Gmtod(Float_t*, Float_t*, Int_t)=0; - virtual void Gdtom(Float_t*, Float_t*, Int_t)=0; - virtual void Gdraw(const char*,Float_t theta=30, Float_t phi=30, - Float_t psi=0,Float_t u0=10,Float_t v0=10, - Float_t ul=0.01,Float_t vl=0.01)=0; - virtual void WriteEuclid(const char*, const char*, Int_t, Int_t)=0; - virtual void Rndm(Float_t*, const Int_t) const=0; - virtual void Material(Int_t&, const char*, Float_t, Float_t, Float_t, Float_t, - Float_t, Float_t* buf=0, Int_t nwbuf=0) =0; - virtual void Mixture(Int_t&, const char*, Float_t*, Float_t*, Float_t, Int_t, Float_t*) =0; - virtual void Medium(Int_t&, const char*, Int_t, Int_t, Int_t, Float_t, Float_t, - Float_t, Float_t, Float_t, Float_t, Float_t *ubuf=0, Int_t nbuf=0) =0; - virtual void Matrix(Int_t&, Float_t, Float_t, Float_t, Float_t, Float_t, Float_t) =0; +class TParticle; +class TFile; +class TTree; - //________________________________________________________________________ - // - // Geant3 specific prototypes - // - //------------------------------------------------------------------------ +class AliGenerator; +class AliMCQA; +class AliTrackReference; - virtual void Gdopt(const char*,const char*)=0; - virtual void SetClipBox(const char*,Float_t=-9999,Float_t=0, Float_t=-9999,Float_t=0,Float_t=-9999,Float_t=0)=0; - virtual void DefaultRange()=0; - virtual void Gdhead(Int_t, const char*, Float_t=0)=0; - virtual void Gdman(Float_t, Float_t, const char*)=0; - virtual void Gsord(const char *name, Int_t iax)=0; - virtual void Gpart()=0; - virtual void Ggclos()=0; - virtual void SetColors()=0; - virtual void Gphysi()=0; - virtual void Gtrigi()=0; - virtual void Gtreve()=0; - virtual void Gtrigc()=0; - virtual void Gtrig()=0; - virtual void Gckmat(Int_t, char*)=0; - virtual void InitLego()=0; - virtual void Gfpart(Int_t, char*, Int_t&, Float_t&, Float_t&, Float_t&)=0; - virtual void Gspart(Int_t, const char*, Int_t, Float_t, Float_t, Float_t)=0; +class AliMC : public TVirtualMCApplication { +public: + AliMC(); + AliMC(const char *name, const char *title); + AliMC(const AliMC &mc); + virtual ~AliMC(); + + AliMC& operator= (const AliMC &mc) { + // Assignment operator + mc.Copy(*this); + return *this; + } - ClassDef(AliMC,1) //Generic MonteCarlo Class +// +// MC Application +// + virtual void ConstructGeometry(); + virtual Bool_t MisalignGeometry(); + virtual void ConstructOpGeometry(); + virtual void InitGeometry(); + virtual void SetAllAlignableVolumes(); + virtual void GeneratePrimaries(); + virtual void BeginEvent(); + virtual void BeginPrimary(); + virtual void PreTrack(); + virtual void Stepping(); + virtual void PostTrack(); + virtual void FinishPrimary(); + virtual void FinishEvent(); + virtual Double_t TrackingZmax() const {return fTrZmax;} + virtual Double_t TrackingRmax() const {return fTrRmax;} + virtual void Field(const Double_t* x, Double_t* b) const; + virtual Int_t DetFromMate(Int_t i) const { return (*fImedia)[i];} +// -}; + virtual AliGenerator* Generator() const {return fGenerator;} + virtual void SetGenerator(AliGenerator *generator); + virtual void ResetGenerator(AliGenerator *generator); -R__EXTERN AliMC *gMC; +// + virtual void ReadTransPar(); + virtual void MediaTable(); + virtual void EnergySummary(); + virtual void FinishRun(); + void AddEnergyDeposit(Int_t id, Float_t edep) + {fEventEnergy[id]+=edep;} + virtual void ResetHits(); + virtual void TrackingLimits( Float_t rmax=1.e10, Float_t zmax=1.e10) + {fTrRmax=rmax; fTrZmax=zmax;} + virtual void DecayLimits( Float_t rmin = -1., Float_t rmax = -1., Int_t pdg = 0) + {fRDecayMin = rmin; fRDecayMax = rmax; fDecayPdg = pdg;} + + virtual void Init(); + virtual void SetTransPar(const char *filename="$(ALICE_ROOT)/data/galice.cuts"); + virtual void Browse(TBrowser *b); + AliMCQA *GetMCQA() const {return fMCQA;} + //PH + virtual void AddHit(Int_t id, Int_t track, Int_t *vol, Float_t *hits) const; + virtual void AddDigit(Int_t id, Int_t *tracks, Int_t *digits) const; + virtual void AddHitList(TCollection *hitList) {if (hitList) fHitLists->Add(hitList);} + Int_t GetCurrentTrackNumber() const; + virtual void DumpPart (Int_t i) const; + virtual void DumpPStack () const; + TList* GetHitLists() const {return fHitLists ;} + Int_t GetNtrack() const; + virtual Int_t GetPrimary(Int_t track) const; + TObjArray *Particles() const; + TParticle *Particle(Int_t i) const; + virtual void PushTrack(Int_t done, Int_t parent, Int_t pdg, + Float_t *pmom, Float_t *vpos, Float_t *polar, + Float_t tof, TMCProcess mech, Int_t &ntr, + Float_t weight = 1, Int_t is = 0) const; + virtual void PushTrack(Int_t done, Int_t parent, Int_t pdg, + Double_t px, Double_t py, Double_t pz, Double_t e, + Double_t vx, Double_t vy, Double_t vz, Double_t tof, + Double_t polx, Double_t poly, Double_t polz, + TMCProcess mech, Int_t &ntr, Float_t weight=1, + Int_t is = 0) const; + virtual void SetHighWaterMark(Int_t nt) const; + + virtual void KeepTrack(Int_t itra) const; + virtual void FlagTrack(Int_t track) const; + virtual void SetCurrentTrack(Int_t track) const; +// Track reference related + AliTrackReference* AddTrackReference(Int_t label, Int_t id = -999); + TClonesArray* TrackReferences() const {return fTrackReferences;} + virtual void RemapTrackReferencesIDs(Int_t *map); //remaping track references MI + virtual void ResetTrackReferences(); + virtual void FixParticleDecaytime(); + private: + void MakeTmpTrackRefsTree(); + void ReorderAndExpandTreeTR(); + private: + void Copy (TObject &mc) const; + void RemapHits(); + AliGenerator *fGenerator; // Generator used in the MC + TArrayF fEventEnergy; //! Energy deposit for current event + TArrayF fSummEnergy; //! Energy per event in each volume + TArrayF fSum2Energy; //! Energy squared per event in each volume + Float_t fTrRmax; // Maximum radius for tracking + Float_t fTrZmax; // Maximu z for tracking + Float_t fRDecayMax; // Maximum radius for decay + Float_t fRDecayMin; // Minimum radius for decay + Int_t fDecayPdg; // PDG code of particle with forced decay length + TArrayI *fImedia; //! Array of correspondence between media and detectors + TString fTransParName; // Name of the transport parameters file + AliMCQA *fMCQA; // Pointer to MC Quality assurance class + TList *fHitLists; //! Lists of hits to be remapped by PurifyKine + //Temporary Track Reference tree related + TTree *fTmpTreeTR; //! Temporary track reference tree + TFile *fTmpFileTR; //! Temporary track reference file + TClonesArray *fTrackReferences; //! List of track references - for one primary track only + TClonesArray *fTmpTrackReferences; //! Temporary list of track references - for one primary track only + ClassDef(AliMC, 3) +}; + #endif -