X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliMC.h;h=61c3f778adf88af5d2418b786a31856ac8ee7b7a;hb=ae7d73d23b9c56dd77d9f44c1c11ccb67f2cb8fd;hp=f57308754401bbce5134ebe80ad48e5b89346d42;hpb=42dcee26ca9e8a15ad8086f013378431d9a33e8c;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliMC.h b/STEER/AliMC.h index f5730875440..61c3f778adf 100644 --- a/STEER/AliMC.h +++ b/STEER/AliMC.h @@ -1,130 +1,129 @@ #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 -#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 + +class AliGenerator; +class AliMCQA; +class AliMC : public TVirtualMCApplication { 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 CurrentVolID(Int_t&) const =0; - virtual Int_t CurrentVolOffID(Int_t, Int_t& ) const =0; - virtual const char* CurrentVolName() const =0; - virtual const char* CurrentVolOffName(Int_t) const =0; - virtual Int_t NofVolumes() const =0; - virtual Int_t VolId(Text_t*) const =0; - virtual Int_t IdFromPDG(Int_t) const =0; - virtual Int_t PDGFromId(Int_t) const =0; - virtual void DefineParticles() = 0; - virtual void TrackPosition(TLorentzVector&) const =0; - virtual void TrackMomentum(TLorentzVector&) 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 IsTrackInside() const =0; - virtual Bool_t IsTrackEntering() const =0; - virtual Bool_t IsTrackExiting() const =0; - virtual Bool_t IsTrackOut() const =0; - virtual Bool_t IsTrackDisappeared() const =0; - virtual Bool_t IsTrackStop() const =0; - virtual Float_t TrackLength() const =0; - virtual Float_t TrackTime() const =0; - virtual Bool_t IsTrackAlive() 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 SetUserDecay(Int_t) =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; + 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; + } - //________________________________________________________________________ - // - // Geant3 specific prototypes - // - //------------------------------------------------------------------------ +// +// MC Application +// + virtual void ConstructGeometry(); + virtual void InitGeometry(); + 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 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 Ggclos()=0; - virtual void SetColors()=0; - virtual void Gphysi()=0; - virtual void Gtrigi()=0; - virtual void Gtreve()=0; - virtual void Gtreve_root()=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; + virtual AliGenerator* Generator() const {return fGenerator;} + virtual void SetGenerator(AliGenerator *generator); + virtual void ResetGenerator(AliGenerator *generator); - ClassDef(AliMC,1) //Generic MonteCarlo Class +// + 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;} + Int_t GetDebug() const {return fDebug;} + virtual void SetDebug(Int_t level=0) {fDebug = level;} + 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 + virtual void AddTrackReference(Int_t label); + TClonesArray *TrackReferences() const {return fTrackReferences;} + virtual void RemapTrackReferencesIDs(Int_t *map); //remaping track references MI + virtual void ResetTrackReferences(); + -}; -R__EXTERN AliMC *gMC; +private: + void Copy (TObject &mc) const; + 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 + Int_t fDebug; // Debug flag + 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 + //PH + TList *fHitLists; //! Lists of hits to be remapped by PurifyKine + TClonesArray *fTrackReferences; //!list of track references - for one primary track only -MI + + ClassDef(AliMC,1) +}; + #endif -