]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDsimpleMC.h
Gsbool and GetMCGeomType added
[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 #include "AliMC.h"
9 #include "AliMCProcess.h"
10
11 class AliTRDv1;
12  
13 class AliTRDsimpleMC : public AliMC {
14  
15  public:     
16
17   enum {
18       kPdgElectron = 11
19     , kPdgPion     = 211
20   };
21
22   AliTRDsimpleMC();
23   AliTRDsimpleMC(const char *name, const char *title);
24   AliTRDsimpleMC(const AliTRDsimpleMC &m); 
25                                                                                 
26   virtual ~AliTRDsimpleMC();
27   AliTRDsimpleMC &operator=(const AliTRDsimpleMC &m);    
28
29   virtual void          Copy(TObject &m);
30
31   //
32   // Methods for building / management of geometry
33   //
34
35   // Functions from GCONS 
36   virtual void          Gfmate(Int_t imat, char *name, Float_t &a, Float_t &z,  
37                                Float_t &dens, Float_t &radl, Float_t &absl,
38                                Float_t* ubuf, Int_t& nbuf)                                { }; 
39
40   // Detector composition
41   virtual void          Material(Int_t& kmat, const char* name, Float_t a, 
42                                  Float_t z, Float_t dens, Float_t radl, Float_t absl,
43                                  Float_t* buf, Int_t nwbuf)                               { };
44   virtual void          Mixture(Int_t& kmat, const char *name, Float_t *a, 
45                                 Float_t *z, Float_t dens, Int_t nlmat, Float_t *wmat)     { };
46   virtual void          Medium(Int_t& kmed, const char *name, Int_t nmat, 
47                                Int_t isvol, Int_t ifield, Float_t fieldm, Float_t tmaxfd, 
48                                Float_t stemax, Float_t deemax, Float_t epsil, 
49                                Float_t stmin, Float_t* ubuf, Int_t nbuf)                  { };
50   virtual void          Matrix(Int_t& krot, Float_t thetaX, Float_t phiX, 
51                                Float_t thetaY, Float_t phiY, Float_t thetaZ, 
52                                Float_t phiZ)                                              { };
53   virtual void          Gstpar(Int_t itmed, const char *param, Float_t parval)            { }; 
54
55   // Functions from GGEOM 
56   virtual Int_t         Gsvolu(const char *name, const char *shape, Int_t nmed,  
57                                Float_t *upar, Int_t np)                                   { return 0; }; 
58   virtual void          Gsdvn(const char *name, const char *mother, Int_t ndiv, 
59                               Int_t iaxis)                                                { }; 
60   virtual void          Gsdvn2(const char *name, const char *mother, Int_t ndiv, 
61                                Int_t iaxis, Float_t c0i, Int_t numed)                     { }; 
62   virtual void          Gsdvt(const char *name, const char *mother, Float_t step, 
63                               Int_t iaxis, Int_t numed, Int_t ndvmx)                      { }; 
64   virtual void          Gsdvt2(const char *name, const char *mother, Float_t step, 
65                                Int_t iaxis, Float_t c0, Int_t numed, Int_t ndvmx)         { }; 
66   virtual void          Gsord(const char *name, Int_t iax)                                { }; 
67   virtual void          Gspos(const char *name, Int_t nr, const char *mother,  
68                               Float_t x, Float_t y, Float_t z, Int_t irot, 
69                               const char *konly="ONLY")                                   { }; 
70   virtual void          Gsposp(const char *name, Int_t nr, const char *mother,  
71                                Float_t x, Float_t y, Float_t z, Int_t irot,
72                                const char *konly, Float_t *upar, Int_t np)                { };
73   virtual void          Gsbool(const char* onlyVolName, const char* manyVolName) {}
74
75   virtual void          SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov,
76                                     Float_t *absco, Float_t *effic, Float_t *rindex)      { };
77     
78   // Functions for drawing
79   virtual void          DrawOneSpec(const char* name)                                     { };
80   virtual void          Gsatt(const char* name, const char* att, Int_t val)               { };
81   virtual void          Gdraw(const char*,Float_t theta = 30, Float_t phi = 30,
82                               Float_t psi = 0, Float_t u0 = 10, Float_t v0 = 10,
83                               Float_t ul = 0.01, Float_t vl = 0.01)                       { };
84
85   // Euclid
86   virtual void          WriteEuclid(const char *a, const char *b, Int_t c, Int_t d)       { };
87                                
88   // Get methods
89   virtual Int_t         VolId(const Text_t* volName) const;
90   virtual const char   *VolName(Int_t id) const                                           { return " "; };
91   virtual Int_t         NofVolumes() const                                                { return 0; };
92   virtual Int_t         VolId2Mate(Int_t id) const                                        { return 0; };
93
94   //
95   // Methods for physics management
96   //
97  
98   // Set methods
99   virtual void          SetCut(const char* cutName, Float_t cutValue)                     { };
100   virtual void          SetProcess(const char* flagName, Int_t flagValue)                 { };
101   virtual Float_t       Xsec(char *a, Float_t b, Int_t c, Int_t d)                        { return 0.0; }; 
102  
103   // Particle table usage         
104   virtual Int_t         IdFromPDG(Int_t id) const                                         { return 0;   };  
105   virtual Int_t         PDGFromId(Int_t pdg) const                                        { return 0;   };  
106   virtual void          DefineParticles()                                                 { };      
107   
108   //
109   // Methods for step management
110   //
111
112   // Action methods
113   virtual void          StopTrack() { };
114   virtual void          StopEvent() { };   
115
116   // Set methods
117   virtual void          SetMaxStep(Float_t step)                                          { fMaxStep = step; };
118   virtual void          SetMaxNStep(Int_t n)                                              { };
119   virtual void          SetUserDecay(Int_t d)                                             { };  
120
121   virtual void          NewTrack(Int_t iTrack, Int_t pdg, Double_t px, Double_t py, Double_t pz);
122
123   // Tracking volume(s) 
124   virtual Int_t         CurrentVolID(Int_t& copyNo) const;
125   virtual Int_t         CurrentVolOffID(Int_t off, Int_t& copyNo) const;
126   virtual const char*   CurrentVolName() const                                            { return ""; };
127   virtual const char*   CurrentVolOffName(Int_t off) const                                { return ""; };
128   virtual Int_t         CurrentMaterial(Float_t &a, Float_t &z, 
129                                         Float_t &dens, Float_t &radl, 
130                                         Float_t &absl) const                              { return 0;  };  
131   virtual Int_t         CurrentEvent() const                                              { return 0;  }; 
132   virtual void          Gmtod(Float_t* xm, Float_t* xd, Int_t iflag)                      { };
133   virtual void          Gdtom(Float_t* xd, Float_t* xm, Int_t iflag)                      { } ;
134   virtual Float_t       MaxStep() const                                                   { return fMaxStep; };
135   virtual Int_t         GetNStep() const                                                  { return fNStep;   };
136   virtual Int_t         GetMaxNStep() const                                               { return 0;  };
137   virtual Int_t         GetMedium() const                                                 { return 0;  };
138
139   // Dynamic properties
140   virtual void          TrackPosition(TLorentzVector& position) const;
141   virtual void          TrackMomentum(TLorentzVector& momentum) const;
142   virtual Float_t       TrackStep() const                                                 { return fTrackStep; };
143   virtual Float_t       TrackLength() const                                               { return 0.0; }; 
144   virtual Float_t       TrackTime() const                                                 { return 0.0; };
145   virtual Float_t       Edep() const                                                      { return 0.0; };
146   
147   // Static properties
148   virtual Int_t         TrackPid() const                                                  { return fTrackPid;    };
149   virtual Float_t       TrackCharge() const                                               { return fTrackCharge; };
150   virtual Float_t       TrackMass() const                                                 { return fTrackMass;   };
151   virtual Float_t       Etot() const                                                      { return fTrackEtot;   };
152
153   // Track status
154   virtual Bool_t        IsNewTrack() const                                                { return kFALSE; };
155   virtual Bool_t        IsTrackInside() const                                             { return kFALSE; };
156   virtual Bool_t        IsTrackEntering() const                                           { return fTrackEntering; };
157   virtual Bool_t        IsTrackExiting() const                                            { return kFALSE; };
158   virtual Bool_t        IsTrackOut() const                                                { return kFALSE; };
159   virtual Bool_t        IsTrackDisappeared() const                                        { return kFALSE; };
160   virtual Bool_t        IsTrackStop() const                                               { return kFALSE; };
161   virtual Bool_t        IsTrackAlive() const                                              { return kFALSE; };
162
163   // Secondaries
164   virtual Int_t         NSecondaries() const                                              { return 0; };
165   virtual void          GetSecondary(Int_t isec, Int_t& particleId, 
166                                      TLorentzVector& position, 
167                                      TLorentzVector& momentum)                            { };
168   virtual AliMCProcess  ProdProcess(Int_t isec) const                                     { return kPNoProcess; }; 
169   virtual Int_t         StepProcesses(TArrayI &proc) const                                { return 0; };
170
171   //
172   // Other (then geometry/step/run management) methods
173   //
174     
175   // Geant3 specific methods
176   virtual void          Gdopt(const char *c1,const char*c2)                               { };
177   virtual void          SetClipBox(const char* cc,Float_t a=-9999,Float_t b=0, 
178                                    Float_t c=-9999,Float_t d=0,
179                                    Float_t e=-9999,Float_t f=0)                           { };
180   virtual void          DefaultRange()                                                    { };
181   virtual void          Gdhead(Int_t, const char *c, Float_t a=0)                         { };   
182   virtual void          Gdman(Float_t a, Float_t b, const char *c)                        { };
183   virtual void          SetColors()                                                       { };
184   virtual void          Gtreve()                                                          { };
185   virtual void          GtreveRoot()                                                      { };
186   virtual void          Gckmat(Int_t, char*)                                              { };
187   virtual void          InitLego()                                                        { };
188   virtual void          Gfpart(Int_t a, char *b, Int_t &c, Float_t &d, 
189                                Float_t &e, Float_t &g)                                    { }; 
190   virtual void          Gspart(Int_t a, const char *b, Int_t c, Float_t d, 
191                                Float_t e, Float_t g)                                      { }; 
192
193   // Control Methods
194   virtual void          Init()                                                            { };
195   virtual void          FinishGeometry()                                                  { };
196   virtual void          BuildPhysics()                                                    { };
197   virtual void          ProcessEvent();
198   virtual void          ProcessRun(Int_t nevent)                                          { };
199   virtual AliMCGeomType     GetMCGeomType() const { return kGeant3; }
200
201   // External Decayer
202   virtual void          SetExternalDecayer(AliDecayer* decayer)                           { };
203   virtual AliDecayer   *Decayer() const                                                   { return 0; };
204
205  protected:
206
207   enum {
208       kVolDrRg
209     , kVolAmRg
210     , kVolDrCh
211   };
212
213   Float_t         fMaxStep;            //  Maximum step size
214   Int_t           fNStep;              //  Number of steps
215   Int_t           fTrack;              //  Track number
216   Double_t        fTrackPx;            //  Track px
217   Double_t        fTrackPy;            //  Track py
218   Double_t        fTrackPz;            //  Track pz
219   Double_t        fTrackPtot;          //  Track total momentum
220   Double_t        fTrackEtot;          //  Track total energy
221   Double_t        fTrackX;             //  Track x position
222   Double_t        fTrackY;             //  Track y position
223   Double_t        fTrackZ;             //  Track z position
224   Double_t        fX0;                 //  X position of the beginning of the chamber
225   Double_t        fTrackStep;          //  Track step size
226   Int_t           fTrackPid;           //  Track PID
227   Float_t         fTrackCharge;        //  Track charge
228   Float_t         fTrackMass;          //  Track particle mass
229   Bool_t          fTrackEntering;      //  Track entering chamber
230
231   AliTRDv1       *fTRD;                //! TRD detector object
232
233   ClassDef(AliTRDsimpleMC,1)           //  Simple TRD Monte Carlo class
234  
235 };
236 #endif