]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDsimpleMC.h
Use correct name for digitizer
[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
74   virtual void          SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov,
75                                     Float_t *absco, Float_t *effic, Float_t *rindex)      { };
76     
77   // Functions for drawing
78   virtual void          DrawOneSpec(const char* name)                                     { };
79   virtual void          Gsatt(const char* name, const char* att, Int_t val)               { };
80   virtual void          Gdraw(const char*,Float_t theta = 30, Float_t phi = 30,
81                               Float_t psi = 0, Float_t u0 = 10, Float_t v0 = 10,
82                               Float_t ul = 0.01, Float_t vl = 0.01)                       { };
83
84   // Euclid
85   virtual void          WriteEuclid(const char *a, const char *b, Int_t c, Int_t d)       { };
86                                
87   // Get methods
88   virtual Int_t         VolId(const Text_t* volName) const;
89   virtual const char   *VolName(Int_t id) const                                           { return " "; };
90   virtual Int_t         NofVolumes() const                                                { return 0; };
91   virtual Int_t         VolId2Mate(Int_t id) const                                        { return 0; };
92
93   //
94   // Methods for physics management
95   //
96  
97   // Set methods
98   virtual void          SetCut(const char* cutName, Float_t cutValue)                     { };
99   virtual void          SetProcess(const char* flagName, Int_t flagValue)                 { };
100   virtual Float_t       Xsec(char *a, Float_t b, Int_t c, Int_t d)                        { return 0.0; }; 
101  
102   // Particle table usage         
103   virtual Int_t         IdFromPDG(Int_t id) const                                         { return 0;   };  
104   virtual Int_t         PDGFromId(Int_t pdg) const                                        { return 0;   };  
105   virtual void          DefineParticles()                                                 { };      
106   
107   //
108   // Methods for step management
109   //
110
111   // Action methods
112   virtual void          StopTrack() { };
113   virtual void          StopEvent() { };   
114
115   // Set methods
116   virtual void          SetMaxStep(Float_t step)                                          { fMaxStep = step; };
117   virtual void          SetMaxNStep(Int_t n)                                              { };
118   virtual void          SetUserDecay(Int_t d)                                             { };  
119
120   virtual void          NewTrack(Int_t iTrack, Int_t pdg, Double_t px, Double_t py, Double_t pz);
121
122   // Tracking volume(s) 
123   virtual Int_t         CurrentVolID(Int_t& copyNo) const;
124   virtual Int_t         CurrentVolOffID(Int_t off, Int_t& copyNo) const;
125   virtual const char*   CurrentVolName() const                                            { return ""; };
126   virtual const char*   CurrentVolOffName(Int_t off) const                                { return ""; };
127   virtual Int_t         CurrentMaterial(Float_t &a, Float_t &z, 
128                                         Float_t &dens, Float_t &radl, 
129                                         Float_t &absl) const                              { return 0;  };  
130   virtual Int_t         CurrentEvent() const                                              { return 0;  }; 
131   virtual void          Gmtod(Float_t* xm, Float_t* xd, Int_t iflag)                      { };
132   virtual void          Gdtom(Float_t* xd, Float_t* xm, Int_t iflag)                      { } ;
133   virtual Float_t       MaxStep() const                                                   { return fMaxStep; };
134   virtual Int_t         GetNStep() const                                                  { return fNStep;   };
135   virtual Int_t         GetMaxNStep() const                                               { return 0;  };
136   virtual Int_t         GetMedium() const                                                 { return 0;  };
137
138   // Dynamic properties
139   virtual void          TrackPosition(TLorentzVector& position) const;
140   virtual void          TrackMomentum(TLorentzVector& momentum) const;
141   virtual Float_t       TrackStep() const                                                 { return fTrackStep; };
142   virtual Float_t       TrackLength() const                                               { return 0.0; }; 
143   virtual Float_t       TrackTime() const                                                 { return 0.0; };
144   virtual Float_t       Edep() const                                                      { return 0.0; };
145   
146   // Static properties
147   virtual Int_t         TrackPid() const                                                  { return fTrackPid;    };
148   virtual Float_t       TrackCharge() const                                               { return fTrackCharge; };
149   virtual Float_t       TrackMass() const                                                 { return fTrackMass;   };
150   virtual Float_t       Etot() const                                                      { return fTrackEtot;   };
151
152   // Track status
153   virtual Bool_t        IsNewTrack() const                                                { return kFALSE; };
154   virtual Bool_t        IsTrackInside() const                                             { return kFALSE; };
155   virtual Bool_t        IsTrackEntering() const                                           { return fTrackEntering; };
156   virtual Bool_t        IsTrackExiting() const                                            { return kFALSE; };
157   virtual Bool_t        IsTrackOut() const                                                { return kFALSE; };
158   virtual Bool_t        IsTrackDisappeared() const                                        { return kFALSE; };
159   virtual Bool_t        IsTrackStop() const                                               { return kFALSE; };
160   virtual Bool_t        IsTrackAlive() const                                              { return kFALSE; };
161
162   // Secondaries
163   virtual Int_t         NSecondaries() const                                              { return 0; };
164   virtual void          GetSecondary(Int_t isec, Int_t& particleId, 
165                                      TLorentzVector& position, 
166                                      TLorentzVector& momentum)                            { };
167   virtual AliMCProcess  ProdProcess(Int_t isec) const                                     { return kPNoProcess; }; 
168   virtual Int_t         StepProcesses(TArrayI &proc) const                                { return 0; };
169
170   //
171   // Other (then geometry/step/run management) methods
172   //
173     
174   // Geant3 specific methods
175   virtual void          Gdopt(const char *c1,const char*c2)                               { };
176   virtual void          SetClipBox(const char* cc,Float_t a=-9999,Float_t b=0, 
177                                    Float_t c=-9999,Float_t d=0,
178                                    Float_t e=-9999,Float_t f=0)                           { };
179   virtual void          DefaultRange()                                                    { };
180   virtual void          Gdhead(Int_t, const char *c, Float_t a=0)                         { };   
181   virtual void          Gdman(Float_t a, Float_t b, const char *c)                        { };
182   virtual void          SetColors()                                                       { };
183   virtual void          Gtreve()                                                          { };
184   virtual void          GtreveRoot()                                                      { };
185   virtual void          Gckmat(Int_t, char*)                                              { };
186   virtual void          InitLego()                                                        { };
187   virtual void          Gfpart(Int_t a, char *b, Int_t &c, Float_t &d, 
188                                Float_t &e, Float_t &g)                                    { }; 
189   virtual void          Gspart(Int_t a, const char *b, Int_t c, Float_t d, 
190                                Float_t e, Float_t g)                                      { }; 
191
192   // Control Methods
193   virtual void          Init()                                                            { };
194   virtual void          FinishGeometry()                                                  { };
195   virtual void          BuildPhysics()                                                    { };
196   virtual void          ProcessEvent();
197   virtual void          ProcessRun(Int_t nevent)                                          { };
198
199   // External Decayer
200   virtual void          SetExternalDecayer(AliDecayer* decayer)                           { };
201   virtual AliDecayer   *Decayer() const                                                   { return 0; };
202
203  protected:
204
205   enum {
206       kVolDrRg
207     , kVolAmRg
208     , kVolDrCh
209   };
210
211   Float_t         fMaxStep;            //  Maximum step size
212   Int_t           fNStep;              //  Number of steps
213   Int_t           fTrack;              //  Track number
214   Double_t        fTrackPx;            //  Track px
215   Double_t        fTrackPy;            //  Track py
216   Double_t        fTrackPz;            //  Track pz
217   Double_t        fTrackPtot;          //  Track total momentum
218   Double_t        fTrackEtot;          //  Track total energy
219   Double_t        fTrackX;             //  Track x position
220   Double_t        fTrackY;             //  Track y position
221   Double_t        fTrackZ;             //  Track z position
222   Double_t        fX0;                 //  X position of the beginning of the chamber
223   Double_t        fTrackStep;          //  Track step size
224   Int_t           fTrackPid;           //  Track PID
225   Float_t         fTrackCharge;        //  Track charge
226   Float_t         fTrackMass;          //  Track particle mass
227   Bool_t          fTrackEntering;      //  Track entering chamber
228
229   AliTRDv1       *fTRD;                //! TRD detector object
230
231   ClassDef(AliTRDsimpleMC,1)           //  Simple TRD Monte Carlo class
232  
233 };
234 #endif