]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDsimpleMC.h
MUON trigger classes to collaborate with CTP (E. Lopez Torres)
[u/mrichter/AliRoot.git] / TRD / AliTRDsimpleMC.h
1 #ifndef ALITRDSIMPLEMC_H
2 #define ALITRDSIMPLEMC_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 ///////////////////////////////////////////////////////////////////////////////
9 //                                                                           //
10 //  Simple TRD Monte Carlo class                                             //
11 //                                                                           //
12 ///////////////////////////////////////////////////////////////////////////////
13
14 #include <RVersion.h>
15 #include <TMCProcess.h>
16 #include <TVirtualMC.h>
17 #include "AliDecayer.h"
18
19 class AliTRDv1;
20 class AliTRDparameter;
21 class TArrayD;
22
23 class AliTRDsimpleMC : public TVirtualMC {
24
25  public:
26
27   enum {
28       kPdgElectron = 11
29     , kPdgPion     = 211
30   };
31
32   AliTRDsimpleMC();
33   AliTRDsimpleMC(const char *name, const char *title);
34   AliTRDsimpleMC(const AliTRDsimpleMC &m);
35
36   virtual ~AliTRDsimpleMC();
37   AliTRDsimpleMC &operator=(const AliTRDsimpleMC &m);
38
39   virtual void          Copy(TObject &m) const;
40
41   //
42   // Methods for building / management of geometry
43   //
44
45   // Functions from GCONS
46     virtual void  Gfmate(Int_t , char* , Float_t& , Float_t& ,
47                          Float_t& , Float_t& , Float_t& ,
48                          Float_t* , Int_t& )  {}
49     virtual void  Gfmate(Int_t , char* , Double_t& , Double_t& ,
50                          Double_t& , Double_t& , Double_t& ,
51                          Double_t* , Int_t& ) {}
52
53   // Detector composition
54     virtual void  Material(Int_t& , const char* , Double_t ,
55                      Double_t , Double_t , Double_t , Double_t ,
56                      Float_t* , Int_t ) {}
57     virtual void  Material(Int_t& , const char* , Double_t ,
58                      Double_t , Double_t , Double_t , Double_t ,
59                      Double_t* , Int_t ) {}
60     virtual void  Mixture(Int_t& , const char* , Float_t* ,
61                      Float_t *, Double_t , Int_t , Float_t* ) {}
62     virtual void  Mixture(Int_t& , const char* , Double_t *,
63                      Double_t *, Double_t , Int_t , Double_t* ) {}
64     virtual void  Medium(Int_t& , const char* , Int_t ,
65                      Int_t , Int_t , Double_t , Double_t ,
66                      Double_t , Double_t , Double_t ,
67                      Double_t , Float_t* , Int_t ) {}
68     virtual void  Medium(Int_t& , const char* , Int_t ,
69                      Int_t , Int_t , Double_t , Double_t ,
70                      Double_t , Double_t , Double_t ,
71                      Double_t , Double_t* , Int_t ) {}
72     virtual void  Matrix(Int_t& , Double_t , Double_t ,
73                      Double_t , Double_t , Double_t ,
74                      Double_t ) {}
75     virtual void  Gstpar(Int_t , const char* , Double_t ) {}
76
77   // Functions from GGEOM
78     virtual Int_t  Gsvolu(const char* , const char* , Int_t ,
79                           Float_t* , Int_t )  { return 0; }
80     virtual Int_t  Gsvolu(const char* , const char* , Int_t ,
81                           Double_t* , Int_t) { return 0; }
82     virtual void  Gsdvn(const char* , const char* , Int_t ,
83                          Int_t ) {}
84     virtual void  Gsdvn2(const char* , const char* , Int_t ,
85                          Int_t , Double_t , Int_t ) {}
86     virtual void  Gsdvt(const char* , const char* , Double_t ,
87                          Int_t , Int_t , Int_t ) {}
88     virtual void  Gsdvt2(const char* , const char* , Double_t ,
89                          Int_t , Double_t , Int_t , Int_t ) {}
90     virtual void  Gsord(const char* , Int_t ) {}
91     virtual void  Gspos(const char* , Int_t , const char* ,
92                          Double_t , Double_t , Double_t , Int_t ,
93                          const char* ) {}
94     virtual void  Gsposp(const char* , Int_t , const char* ,
95                          Double_t, Double_t, Double_t, Int_t ,
96                          const char* , Float_t* , Int_t ) {}
97     virtual void  Gsposp(const char* , Int_t , const char* ,
98                          Double_t , Double_t , Double_t , Int_t ,
99                          const char* , Double_t* , Int_t ) {}
100     virtual void  Gsbool(const char* , const char* ) {}
101
102     virtual void  SetCerenkov(Int_t , Int_t , Float_t* ,
103                                Float_t* , Float_t* , Float_t* ) {}
104     virtual void  SetCerenkov(Int_t , Int_t , Double_t* ,
105                                Double_t* , Double_t* , Double_t* ) {}
106
107   // Functions for drawing
108     virtual void  DrawOneSpec(const char* ) {}
109     virtual void  Gsatt(const char* , const char* , Int_t ) {}
110     virtual void  Gdraw(const char* , Double_t , Double_t ,
111                         Double_t , Double_t , Double_t ,
112                         Double_t , Double_t ) {}
113
114   // Euclid
115   virtual void          WriteEuclid(const char* , const char* , Int_t , Int_t ) {}
116
117   // Get methods
118     virtual Int_t VolId(const Text_t* volName) const;
119     virtual const char* VolName(Int_t ) const { return ""; }
120     virtual Int_t NofVolumes() const { return 0; }
121     virtual Int_t VolId2Mate(Int_t ) const { return 0; }
122
123   //
124   // Methods for physics management
125   //
126
127   // Set methods
128 #if ROOT_VERSION_CODE > 262150
129     virtual Bool_t   SetCut(const char* , Double_t ) { return kTRUE; }
130     virtual Bool_t   SetProcess(const char* , Int_t ) { return kTRUE; }
131 #else
132     virtual void     SetCut(const char* , Double_t ) {}
133     virtual void     SetProcess(const char* , Int_t ) {}
134 #endif
135     virtual void     DefineParticles() {}
136     virtual Double_t Xsec(char*, Double_t, Int_t, Int_t) { return 0.; }
137
138   // Particle table usage
139     virtual Int_t   IdFromPDG(Int_t ) const { return 0; }
140     virtual Int_t   PDGFromId(Int_t ) const { return 0; }
141
142   //
143   // Methods for step management
144   //
145
146   // Action methods
147   virtual void          StopTrack() { };
148   virtual void          StopEvent() { };
149 #if ROOT_VERSION_CODE >= 262150
150   virtual void          StopRun()   { }
151 #endif
152
153   // Set methods
154   virtual void          SetMaxStep(Double_t step)                                         { fMaxStep = step; };
155   virtual void          SetMaxNStep(Int_t )                                              { };
156   virtual void          SetUserDecay(Int_t )                                             { };
157
158   virtual void          NewTrack(Int_t iTrack, Int_t pdg, Double_t px, Double_t py, Double_t pz);
159
160   // Tracking volume(s)
161   virtual Int_t         CurrentVolID(Int_t& copyNo) const;
162   virtual Int_t         CurrentVolOffID(Int_t off, Int_t& copyNo) const;
163   virtual const char*   CurrentVolName() const;
164   virtual const char*   CurrentVolOffName(Int_t ) const                                { return ""; };
165   virtual Int_t         CurrentMaterial(Float_t& , Float_t& ,
166                                         Float_t& , Float_t& ,
167                                         Float_t& ) const                               { return 0;  };
168   virtual Int_t         CurrentEvent() const                                              { return 0;  };
169   virtual void          Gmtod(Float_t* , Float_t* , Int_t )   {}
170   virtual void          Gmtod(Double_t* , Double_t* , Int_t ) {}
171   virtual void          Gdtom(Float_t* , Float_t* , Int_t )   {}
172   virtual void          Gdtom(Double_t* , Double_t* , Int_t ) {}
173   virtual Double_t      MaxStep() const                                                   { return fMaxStep; };
174   virtual Int_t         GetNStep() const                                                  { return fNStep;   };
175   virtual Int_t         GetMaxNStep() const                                               { return 0;  };
176   virtual Int_t         GetMedium() const                                                 { return 0;  };
177   virtual Bool_t GetMedium(const TString& /*volumeName*/,
178                            TString& /*name*/, Int_t& /*imed*/,
179                            Int_t& /*nmat*/, Int_t& /*isvol*/, Int_t& /*ifield*/,
180                            Double_t& /*fieldm*/, Double_t& /*tmaxfd*/, Double_t& /*stemax*/,
181                            Double_t& /*deemax*/, Double_t& /*epsil*/, Double_t& /*stmin*/,
182                            TArrayD& /*par*/) {
183    return kFALSE;
184 }   
185
186   // Dynamic properties
187   virtual void          TrackPosition(TLorentzVector& position) const;
188   virtual void          TrackPosition(Double_t &x, Double_t &y, Double_t &z) const;
189   virtual void          TrackMomentum(TLorentzVector& momentum) const;
190   virtual void          TrackMomentum(Double_t &px, Double_t &py, Double_t &pz, Double_t &etot) const;
191   virtual Double_t      TrackStep() const                                                 { return fTrackStep; };
192   virtual Double_t      TrackLength() const                                               { return 0.0; };
193   virtual Double_t      TrackTime() const                                                 { return 0.0; };
194   virtual Double_t      Edep() const                                                      { return 0.0; };
195
196   // Static properties
197   virtual Int_t         TrackPid() const                                                  { return fTrackPid;    };
198   virtual Double_t      TrackCharge() const                                               { return fTrackCharge; };
199   virtual Double_t      TrackMass() const                                                 { return fTrackMass;   };
200   virtual Double_t      Etot() const                                                      { return fTrackEtot;   };
201
202   // Track status
203   virtual Bool_t        IsNewTrack() const                                                { return kFALSE; };
204   virtual Bool_t        IsTrackInside() const                                             { return kFALSE; };
205   virtual Bool_t        IsTrackEntering() const                                           { return fTrackEntering; };
206   virtual Bool_t        IsTrackExiting() const                                            { return kFALSE; };
207   virtual Bool_t        IsTrackOut() const                                                { return kFALSE; };
208   virtual Bool_t        IsTrackDisappeared() const                                        { return kFALSE; };
209   virtual Bool_t        IsTrackStop() const                                               { return kFALSE; };
210   virtual Bool_t        IsTrackAlive() const                                              { return kFALSE; };
211
212   // Secondaries
213   virtual Int_t         NSecondaries() const                                              { return 0; };
214   virtual void          GetSecondary(Int_t , Int_t& ,
215                                      TLorentzVector& ,
216                                      TLorentzVector& )                                    { };
217   virtual Bool_t        SecondariesAreOrdered() const {return kTRUE;}
218   virtual TMCProcess    ProdProcess(Int_t ) const                                           { return kPNoProcess; };
219   virtual Int_t         StepProcesses(TArrayI& ) const                                    { return 0; };
220
221   //
222   // Other (then geometry/step/run management) methods
223   //
224
225   // Geant3 specific methods
226     virtual void Gdopt(const char*,const char*) {}
227     virtual void SetClipBox(const char*,Double_t=-9999,Double_t=0, Double_t=-9999,
228                              Double_t=0,Double_t=-9999,Double_t=0) {}
229     virtual void DefaultRange() {}
230     virtual void Gdhead(Int_t, const char*, Double_t=0) {}
231     virtual void Gdman(Double_t, Double_t, const char*) {}
232     virtual void SetColors() {}
233     virtual void Gtreve() {}
234     virtual void GtreveRoot() {}
235     virtual void Gckmat(Int_t, char*) {}
236     virtual void InitLego() {}
237     virtual void Gfpart(Int_t, char*, Int_t&, Float_t&, Float_t&, Float_t&) {}
238     virtual void Gspart(Int_t, const char*, Int_t, Double_t, Double_t, Double_t) {}
239     // Dummy methods
240 #if ROOT_VERSION_CODE > 197895
241 #if ROOT_VERSION_CODE > 262150
242     virtual Bool_t DefineParticle(int, const char*, TMCParticleType, double, double, double){ return kTRUE; }
243     virtual Bool_t DefineIon(const char*, int, int, int, double, double) { return kTRUE; }
244 #else
245     virtual void DefineParticle(int, const char*, TMCParticleType, double, double, double){;}
246     virtual void DefineIon(const char*, int, int, int, double, double){;}
247 #endif
248     virtual TString  ParticleName(int) const {return "";}
249     virtual Double_t ParticleMass(int) const {return 0.;}
250     virtual Double_t ParticleCharge(int) const {return 0.;}
251     virtual Double_t ParticleLifeTime(int) const {return 0.;}
252     virtual TMCParticleType ParticleMCType(int) const {return (TMCParticleType) 0;}
253 #endif
254     //
255   // Control Methods
256   virtual void          Init()                                                            { };
257   virtual void          FinishGeometry()                                                  { };
258   virtual void          BuildPhysics()                                                    { };
259   virtual void          ProcessEvent();
260 #if ROOT_VERSION_CODE >= 262150
261   virtual Bool_t        ProcessRun(Int_t )                                                { return kTRUE; }
262 #else
263   virtual void          ProcessRun(Int_t )                                                { };
264 #endif
265   //virtual TMCGeomType   GetMCGeomType() const                                             { return kGeant3; }
266
267   // External Decayer
268   virtual void          SetExternalDecayer(AliDecayer* )                                  { };
269   virtual AliDecayer   *Decayer() const                                                   { return 0; };
270
271 #if ROOT_VERSION_CODE>=262913
272   virtual void SetRootGeometry() {}
273   virtual Int_t NofVolDaughters(const char*) const {return 0;}
274   virtual const char* VolDaughterName(const char*, Int_t) const {return 0x0;}
275   virtual Int_t VolDaughterCopyNo(const char*, Int_t) const {return 0;}
276   virtual void ForceDecayTime(Float_t) {}
277   virtual const char* CurrentVolPath() {return 0x0;}
278 #endif
279
280  protected:
281
282   enum {
283       kVolDrRg
284     , kVolAmRg
285     , kVolDrCh
286   };
287
288   Float_t          fMaxStep;            //  Maximum step size
289   Int_t            fNStep;              //  Number of steps
290   Int_t            fTrack;              //  Track number
291   Double_t         fTrackPx;            //  Track px
292   Double_t         fTrackPy;            //  Track py
293   Double_t         fTrackPz;            //  Track pz
294   Double_t         fTrackPtot;          //  Track total momentum
295   Double_t         fTrackEtot;          //  Track total energy
296   Double_t         fTrackX;             //  Track x position
297   Double_t         fTrackY;             //  Track y position
298   Double_t         fTrackZ;             //  Track z position
299   Double_t         fX0;                 //  X position of the beginning of the chamber
300   Double_t         fTrackStep;          //  Track step size
301   Int_t            fTrackPid;           //  Track PID
302   Float_t          fTrackCharge;        //  Track charge
303   Float_t          fTrackMass;          //  Track particle mass
304   Bool_t           fTrackEntering;      //  Track entering chamber
305
306   AliTRDv1        *fTRD;                //! TRD detector object
307   AliTRDparameter *fPar;                //! TRD parameter object
308
309   ClassDef(AliTRDsimpleMC,2)            //  Simple TRD Monte Carlo class
310
311 };
312 #endif
313