]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TGeant4/TGeant4.h
Add ResetDecayTable() and SsetDecayTable() methods.
[u/mrichter/AliRoot.git] / TGeant4 / TGeant4.h
1 // $Id$
2 // Category: run
3 //
4 // Geant4 implementation of the MonteCarlo interface                      
5
6 #ifndef TGEANT4_H
7 #define TGEANT4_H
8
9 #include "AliMC.h"
10 #include "AliMCProcess.h"
11
12 #include <TArrayI.h>
13
14 class TG4VRunConfiguration;
15 class TG4GeometryManager;
16 class TG4PhysicsManager;
17 class TG4StepManager;
18 class TG4VisManager;
19 class TG4RunManager;
20 class TG4Messenger;
21
22 class AliDecayer;
23
24 class TGeant4: public AliMC
25 {
26   public:
27     TGeant4(const char* name, const char* title,
28             TG4VRunConfiguration* configuration, int argc, char** argv);
29     TGeant4(const char* name, const char* title,
30             TG4VRunConfiguration* configuration);
31     // --> protected
32     // TGeant4();
33     // TGeant4(const TGeant4& right);
34     virtual ~TGeant4();
35
36     //
37     // methods for building/management of geometry
38     // ------------------------------------------------
39     //
40
41     // functions from GBASE 
42     virtual void  FinishGeometry(); 
43                   //Ggclos(); 
44
45     // functions from GCONS 
46     virtual void  Gfmate(Int_t imat, char *name, Float_t &a, Float_t &z,  
47                          Float_t &dens, Float_t &radl, Float_t &absl,
48                          Float_t* ubuf, Int_t& nbuf); 
49
50     // detector composition
51     virtual void  Material(Int_t& kmat, const char* name, Float_t a, 
52                      Float_t z, Float_t dens, Float_t radl, Float_t absl,
53                      Float_t* buf, Int_t nwbuf);
54     virtual void  Mixture(Int_t& kmat, const char *name, Float_t *a, 
55                      Float_t *z, Float_t dens, Int_t nlmat, Float_t *wmat);
56     virtual void  Medium(Int_t& kmed, const char *name, Int_t nmat, 
57                      Int_t isvol, Int_t ifield, Float_t fieldm, Float_t tmaxfd, 
58                      Float_t stemax, Float_t deemax, Float_t epsil, 
59                      Float_t stmin, Float_t* ubuf, Int_t nbuf);
60     virtual void  Matrix(Int_t& krot, Float_t thetaX, Float_t phiX, 
61                      Float_t thetaY, Float_t phiY, Float_t thetaZ, 
62                      Float_t phiZ);
63     virtual void  Gstpar(Int_t itmed, const char *param, Float_t parval); 
64     virtual void  SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov,
65                      Float_t *absco, Float_t *effic, Float_t *rindex);
66
67     // functions from GGEOM 
68     virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,  
69                          Float_t *upar, Int_t np); 
70     virtual void  Gsdvn(const char *name, const char *mother, Int_t ndiv, 
71                         Int_t iaxis); 
72     virtual void  Gsdvn2(const char *name, const char *mother, Int_t ndiv, 
73                          Int_t iaxis, Float_t c0i, Int_t numed); 
74     virtual void  Gsdvt(const char *name, const char *mother, Float_t step, 
75                         Int_t iaxis, Int_t numed, Int_t ndvmx); 
76     virtual void  Gsdvt2(const char *name, const char *mother, Float_t step, 
77                          Int_t iaxis, Float_t c0, Int_t numed, Int_t ndvmx); 
78     virtual void  Gsord(const char *name, Int_t iax); 
79     virtual void  Gspos(const char *name, Int_t nr, const char *mother,  
80                         Float_t x, Float_t y, Float_t z, Int_t irot, 
81                         const char *konly); 
82     virtual void  Gsposp(const char *name, Int_t nr, const char *mother,  
83                          Float_t x, Float_t y, Float_t z, Int_t irot,
84                          const char *konly, Float_t *upar, Int_t np); 
85     
86     // Euclid                  
87     virtual void WriteEuclid(const char* fileName, const char* topVol, 
88                              Int_t number, Int_t nlevel);
89                                
90     // get methods
91     virtual Int_t VolId(const Text_t* volName) const;
92     virtual const char* VolName(Int_t id) const;
93     virtual Int_t NofVolumes() const;
94     virtual Int_t VolId2Mate(Int_t id) const;
95
96     //
97     // methods for physics management
98     // ------------------------------------------------
99     //
100  
101     virtual void BuildPhysics();
102
103     // set methods
104     virtual void SetCut(const char* cutName, Float_t cutValue);
105     virtual void SetProcess(const char* flagName, Int_t flagValue);
106     virtual Float_t Xsec(char* reac, Float_t energy, Int_t part, Int_t mate);
107     virtual void SetExternalDecayer(AliDecayer* decayer); //NEW
108
109     // get methods
110     virtual AliDecayer* Decayer() const; //NEW
111  
112         // particle table usage         
113     virtual Int_t IdFromPDG(Int_t pdgID) const;
114     virtual Int_t PDGFromId(Int_t mcID) const;
115     virtual void  DefineParticles();       
116
117     //
118     // methods for step management
119     // ------------------------------------------------
120     //
121
122     // action methods
123     virtual void StopTrack();
124     virtual void StopEvent();   
125
126     // set methods
127     virtual void SetMaxStep(Float_t);
128     virtual void SetMaxNStep(Int_t);
129     virtual void SetUserDecay(Int_t);  //NEW
130
131     // get methods
132          // tracking volume(s) 
133     virtual Int_t CurrentVolID(Int_t& copyNo) const;
134     virtual Int_t CurrentVolOffID(Int_t off, Int_t& copyNo) const;
135     virtual const char* CurrentVolName() const;
136     virtual const char* CurrentVolOffName(Int_t off) const;
137     virtual Int_t CurrentMaterial(Float_t &a, Float_t &z, 
138                     Float_t &dens, Float_t &radl, Float_t &absl) const;  
139     virtual void  Gmtod(Float_t* xm, Float_t* xd, Int_t iflag);
140     virtual void  Gdtom(Float_t* xd, Float_t* xm, Int_t iflag);
141     virtual Float_t MaxStep() const;
142     virtual Int_t GetMaxNStep() const;
143     virtual Int_t GetMedium() const;
144
145         // tracking particle 
146         // dynamic properties
147     virtual void    TrackPosition(TLorentzVector& position) const;
148     virtual void    TrackMomentum(TLorentzVector& momentum) const;
149     virtual void    TrackVertexPosition(TLorentzVector& position) const;
150     virtual void    TrackVertexMomentum(TLorentzVector& momentum) const;
151     virtual Float_t TrackStep() const;
152     virtual Float_t TrackLength() const; 
153     virtual Float_t TrackTime() const;
154     virtual Float_t Edep() const;
155         // static properties
156     virtual Int_t   TrackPid() const;
157     virtual Float_t TrackCharge() const;
158     virtual Float_t TrackMass() const;
159     virtual Float_t Etot() const;
160
161         // track status
162     virtual Bool_t  IsTrackInside() const;
163     virtual Bool_t  IsTrackEntering() const;
164     virtual Bool_t  IsTrackExiting() const;
165     virtual Bool_t  IsTrackOut() const;
166     virtual Bool_t  IsTrackDisappeared() const;
167     virtual Bool_t  IsTrackStop() const;
168     virtual Bool_t  IsTrackAlive() const;
169     virtual Bool_t  IsNewTrack() const;
170
171         // secondaries
172     virtual Int_t NSecondaries() const;
173     virtual void  GetSecondary(Int_t isec, Int_t& particleId, 
174                     TLorentzVector& position, TLorentzVector& momentum);
175     virtual AliMCProcess ProdProcess(Int_t isec) const; 
176     virtual Int_t StepProcesses(TArrayI &proc) const;
177   
178     //
179     // methods for visualization
180     // ------------------------------------------------
181     //
182     // functions for drawing
183     virtual void  DrawOneSpec(const char* name);
184     virtual void  Gsatt(const char* name, const char* att, Int_t val);
185     virtual void  Gdraw(const char* name, Float_t theta, Float_t phi,
186                         Float_t psi, Float_t u0, Float_t v0,
187                         Float_t ul, Float_t vl);
188
189     //
190     // NEW
191     // Geant3 specific methods
192     // !!! need to be transformed to common interface
193     //
194     virtual void Gdopt(const char* name , const char* value);
195     virtual void SetClipBox(const char *name, Float_t xmin, Float_t xmax,
196                        Float_t ymin, Float_t ymax, Float_t zmin, Float_t zmax);
197     virtual void DefaultRange();
198     virtual void Gdhead(Int_t isel, const char* name, Float_t chrsiz);   
199     virtual void Gdman(Float_t u, Float_t v, const char* type);
200     virtual void SetColors();
201     virtual void Gtreve();
202     virtual void GtreveRoot();
203     virtual void Gckmat(Int_t itmed, char* natmed);
204     virtual void InitLego();
205     virtual void Gfpart(Int_t ipart, char *name, Int_t& itrtyp,  
206                        Float_t& amass, Float_t& charge, Float_t& tlife);
207     virtual void Gspart(Int_t ipart, const char *name, Int_t itrtyp,  
208                        Float_t amass, Float_t charge, Float_t tlife); 
209
210     //
211     // methods for run control
212     // ------------------------------------------------
213     //
214
215     virtual void Init();
216     virtual void ProcessEvent();
217     virtual void ProcessRun(Int_t nofEvents);
218
219         // UI control methods
220     void StartGeantUI();        
221     void StartRootUI(); 
222     void ProcessGeantMacro(const char* macroName);
223     void ProcessGeantCommand(const char* commandPath);
224
225         // get methods
226     virtual Int_t CurrentEvent() const; 
227
228   protected:
229     TGeant4();
230     TGeant4(const TGeant4& right);
231
232     // operators
233     TGeant4& operator=(const TGeant4& right);
234
235   private:
236     // data members
237     TG4GeometryManager*  fGeometryManager; //geometry manager
238     TG4PhysicsManager*   fPhysicsManager;  //physics manager
239     TG4StepManager*      fStepManager;     //step manager
240     TG4VisManager*       fVisManager;      //visualization manager
241     TG4RunManager*       fRunManager;      //run manager
242     TG4Messenger*        fMessenger;       //messenger
243 };
244
245 #ifndef __CINT__
246
247 // inline methods
248 #include "TGeant4.icc"
249
250 #endif
251 #endif // TGEANT4_H
252