88eddc9fa47108b3cedcc89a179efdc092e0570e
[u/mrichter/AliRoot.git] / TGeant3 / TGeant3.h
1 #ifndef TGEANT3_H 
2 #define TGEANT3_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 //  C++ interface to Geant3 basic routines    // 
10 //////////////////////////////////////////////// 
11  
12 #include <AliMC.h> 
13 #include <GenTypeDefs.h>
14
15 //______________________________________________________________
16 //
17 //       Geant3 prototypes for commons
18 //
19 //______________________________________________________________
20 //
21
22 //----------QUEST 
23 //      COMMON/QUEST/IQUEST(100) 
24 typedef struct { 
25   Int_t    iquest[100]; 
26 } Quest_t; 
27  
28 //----------GCBANK
29 //      COMMON/GCBANK/NZEBRA,GVERSN,ZVERSN,IXSTOR,IXDIV,IXCONS,FENDQ(16)
30 //     +             ,LMAIN,LR1,WS(KWBANK)
31 typedef struct {
32   Int_t nzebra;
33   Float_t gversn;
34   Float_t zversn;
35   Int_t ixstor;
36   Int_t ixdiv;
37   Int_t ixcons;
38   Float_t fendq[16];
39   Int_t lmain;
40   Int_t lr1;
41 } Gcbank_t;
42
43 //----------GCLINK 
44 //      COMMON/GCLINK/JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART 
45 //     +      ,JROTM ,JRUNG ,JSET  ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX 
46 //     +      ,JVOLUM,JXYZ  ,JGPAR ,JGPAR2,JSKLT 
47 typedef struct { 
48   Int_t    jdigi; 
49   Int_t    jdraw; 
50   Int_t    jhead; 
51   Int_t    jhits; 
52   Int_t    jkine; 
53   Int_t    jmate; 
54   Int_t    jpart; 
55   Int_t    jrotm; 
56   Int_t    jrung; 
57   Int_t    jset; 
58   Int_t    jstak; 
59   Int_t    jgstat; 
60   Int_t    jtmed; 
61   Int_t    jtrack; 
62   Int_t    jvertx; 
63   Int_t    jvolum; 
64   Int_t    jxyz; 
65   Int_t    jgpar; 
66   Int_t    jgpar2; 
67   Int_t    jsklt; 
68 } Gclink_t; 
69  
70  
71 //----------GCFLAG 
72 //      COMMON/GCFLAG/IDEBUG,IDEMIN,IDEMAX,ITEST,IDRUN,IDEVT,IEORUN 
73 //     +        ,IEOTRI,IEVENT,ISWIT(10),IFINIT(20),NEVENT,NRNDM(2) 
74 typedef struct { 
75   Int_t    idebug; 
76   Int_t    idemin; 
77   Int_t    idemax; 
78   Int_t    itest; 
79   Int_t    idrun; 
80   Int_t    idevt; 
81   Int_t    ieorun; 
82   Int_t    ieotri; 
83   Int_t    ievent; 
84   Int_t    iswit[10]; 
85   Int_t    ifinit[20]; 
86   Int_t    nevent; 
87   Int_t    nrndm[2]; 
88 } Gcflag_t; 
89  
90 //----------GCKINE 
91 //      COMMON/GCKINE/IKINE,PKINE(10),ITRA,ISTAK,IVERT,IPART,ITRTYP 
92 //     +      ,NAPART(5),AMASS,CHARGE,TLIFE,VERT(3),PVERT(4),IPAOLD 
93 typedef struct { 
94   Int_t    ikine; 
95   Float_t  pkine[10]; 
96   Int_t    itra; 
97   Int_t    istak; 
98   Int_t    ivert; 
99   Int_t    ipart; 
100   Int_t    itrtyp; 
101   Int_t    napart[5]; 
102   Float_t  amass; 
103   Float_t  charge; 
104   Float_t  tlife; 
105   Float_t  vert[3]; 
106   Float_t  pvert[4]; 
107   Int_t    ipaold; 
108 } Gckine_t; 
109  
110 //----------GCKING 
111 //      COMMON/GCKING/KCASE,NGKINE,GKIN(5,MXGKIN), 
112 //     +                           TOFD(MXGKIN),IFLGK(MXGKIN) 
113 #define MXGKIN 100 
114 typedef struct  { 
115   Int_t    kcase; 
116   Int_t    ngkine; 
117   Float_t  gkin[MXGKIN][5]; 
118   Float_t  tofd[MXGKIN]; 
119   Int_t    iflgk[MXGKIN]; 
120 } Gcking_t; 
121
122 //----------GCKIN2
123 //      COMMON/GCKIN2/NGPHOT,XPHOT(11,MXPHOT)
124 #define MXPHOT 800
125 typedef struct {
126   Int_t ngphot;
127   Float_t xphot[MXPHOT][11];
128 } Gckin2_t;
129
130 //----------GCKIN3 
131 //      COMMON/GCKIN3/GPOS(3,MXGKIN)
132 typedef struct {
133   Float_t gpos[MXGKIN][3];
134 } Gckin3_t;
135
136 //----------GCMATE 
137 //      COMMON/GCMATE/NMAT,NAMATE(5),A,Z,DENS,RADL,ABSL 
138 typedef struct { 
139   Int_t    nmat; 
140   Int_t    namate[5]; 
141   Float_t  a; 
142   Float_t  z; 
143   Float_t  dens; 
144   Float_t  radl; 
145   Float_t  absl; 
146 } Gcmate_t; 
147  
148 //----------GCTMED 
149 //      COMMON/GCTMED/NUMED,NATMED(5),ISVOL,IFIELD,FIELDM,TMAXFD,STEMAX 
150 //     +      ,DEEMAX,EPSIL,STMIN,CFIELD,PREC,IUPD,ISTPAR,NUMOLD 
151 typedef struct { 
152   Int_t    numed; 
153   Int_t    natmed[5]; 
154   Int_t    isvol; 
155   Int_t    ifield; 
156   Float_t  fieldm; 
157   Float_t  tmaxfd; 
158   Float_t  stemax; 
159   Float_t  deemax; 
160   Float_t  epsil; 
161   Float_t  stmin; 
162   Float_t  cfield; 
163   Float_t  prec; 
164   Int_t    iupd; 
165   Int_t    istpar; 
166   Int_t    numold; 
167 } Gctmed_t; 
168  
169 //----------GCTRAK 
170 #define MAXMEC 30 
171 //      PARAMETER (MAXMEC=30) 
172 //      COMMON/GCTRAK/VECT(7),GETOT,GEKIN,VOUT(7),NMEC,LMEC(MAXMEC) 
173 //     + ,NAMEC(MAXMEC),NSTEP ,MAXNST,DESTEP,DESTEL,SAFETY,SLENG 
174 //     + ,STEP  ,SNEXT ,SFIELD,TOFG  ,GEKRAT,UPWGHT,IGNEXT,INWVOL 
175 //     + ,ISTOP ,IGAUTO,IEKBIN, ILOSL, IMULL,INGOTO,NLDOWN,NLEVIN 
176 //     + ,NLVSAV,ISTORY 
177 typedef struct { 
178   Float_t  vect[7]; 
179   Float_t  getot; 
180   Float_t  gekin; 
181   Int_t    vout[7]; 
182   Int_t    nmec; 
183   Int_t    lmec[MAXMEC]; 
184   Int_t    namec[MAXMEC]; 
185   Int_t    nstep; 
186   Int_t    maxnst; 
187   Float_t  destep; 
188   Float_t  destel; 
189   Float_t  safety; 
190   Float_t  sleng; 
191   Float_t  step; 
192   Float_t  snext; 
193   Float_t  sfield; 
194   Float_t  tofg; 
195   Float_t  gekrat; 
196   Float_t  upwght; 
197   Int_t    ignext; 
198   Int_t    inwvol; 
199   Int_t    istop; 
200   Int_t    igauto; 
201   Int_t    iekbin; 
202   Int_t    ilosl; 
203   Int_t    imull; 
204   Int_t    ingoto; 
205   Int_t    nldown; 
206   Int_t    nlevin; 
207   Int_t    nlsav; 
208   Int_t    istory; 
209 } Gctrak_t; 
210  
211 //----------GCVOLU 
212 //      COMMON/GCVOLU/NLEVEL,NAMES(15),NUMBER(15), 
213 //     +LVOLUM(15),LINDEX(15),INFROM,NLEVMX,NLDEV(15),LINMX(15), 
214 //     +GTRAN(3,15),GRMAT(10,15),GONLY(15),GLX(3) 
215 typedef struct { 
216   Int_t    nlevel; 
217   Int_t    names[15]; 
218   Int_t    number[15]; 
219   Int_t    lvolum[15]; 
220   Int_t    lindex[15]; 
221   Int_t    infrom; 
222   Int_t    nlevmx; 
223   Int_t    nldev[15]; 
224   Int_t    linmx[15]; 
225   Float_t  gtran[15][3]; 
226   Float_t  grmat[15][10]; 
227   Float_t  gonly[15]; 
228   Float_t  glx[3]; 
229 } Gcvolu_t; 
230  
231 //----------GCSETS 
232 //  COMMON/GCSETS/IHSET,IHDET,ISET,IDET,IDTYPE,NVNAME,NUMBV(20) 
233 typedef struct { 
234   Int_t    ihset; 
235   Int_t    ihdet; 
236   Int_t    iset; 
237   Int_t    idet; 
238   Int_t    idtype; 
239   Int_t    nvname; 
240   Int_t    numbv[20]; 
241 } Gcsets_t; 
242  
243 //----------GCNUM 
244 //   COMMON/GCNUM/NMATE ,NVOLUM,NROTM,NTMED,NTMULT,NTRACK,NPART 
245 //  +            ,NSTMAX,NVERTX,NHEAD,NBIT 
246 typedef struct { 
247   Int_t    nmate; 
248   Int_t    nvolum; 
249   Int_t    nrotm; 
250   Int_t    ntmed; 
251   Int_t    ntmult; 
252   Int_t    ntrack; 
253   Int_t    npart; 
254   Int_t    nstmax; 
255   Int_t    nvertx; 
256   Int_t    nhead; 
257   Int_t    nbit; 
258 } Gcnum_t; 
259  
260 //----------GCCUTS 
261 //  COMMON/GCCUTS/CUTGAM,CUTELE,CUTNEU,CUTHAD,CUTMUO,BCUTE,BCUTM 
262 //   +             ,DCUTE ,DCUTM ,PPCUTM,TOFMAX,GCUTS(5) 
263 typedef struct { 
264   Float_t cutgam; 
265   Float_t cutele; 
266   Float_t cutneu; 
267   Float_t cuthad; 
268   Float_t cutmuo; 
269   Float_t bcute; 
270   Float_t bcutm; 
271   Float_t dcute; 
272   Float_t dcutm; 
273   Float_t ppcutm; 
274   Float_t tofmax; 
275   Float_t gcuts[5]; 
276 } Gccuts_t; 
277
278 //----------GCMULO
279 //      COMMON/GCMULO/SINMUL(101),COSMUL(101),SQRMUL(101),OMCMOL,CHCMOL
280 //     +  ,EKMIN,EKMAX,NEKBIN,NEK1,EKINV,GEKA,GEKB,EKBIN(200),ELOW(200)
281 typedef struct {
282   Float_t sinmul[101];
283   Float_t cosmul[101];
284   Float_t sqrmul[101];
285   Float_t omcmol;
286   Float_t chcmol;
287   Float_t ekmin;
288   Float_t ekmax;
289   Int_t   nekbin;
290   Int_t   nek1;
291   Float_t ekinv;
292   Float_t geka;
293   Float_t gekb;
294   Float_t ekbin[200];
295   Float_t elow[200];
296 } Gcmulo_t;
297
298 //----------GCPHYS
299 //      COMMON/GCPHYS/IPAIR,SPAIR,SLPAIR,ZINTPA,STEPPA
300 //     +             ,ICOMP,SCOMP,SLCOMP,ZINTCO,STEPCO
301 //     +             ,IPHOT,SPHOT,SLPHOT,ZINTPH,STEPPH
302 //     +             ,IPFIS,SPFIS,SLPFIS,ZINTPF,STEPPF
303 //     +             ,IDRAY,SDRAY,SLDRAY,ZINTDR,STEPDR
304 //     +             ,IANNI,SANNI,SLANNI,ZINTAN,STEPAN
305 //     +             ,IBREM,SBREM,SLBREM,ZINTBR,STEPBR
306 //     +             ,IHADR,SHADR,SLHADR,ZINTHA,STEPHA
307 //     +             ,IMUNU,SMUNU,SLMUNU,ZINTMU,STEPMU
308 //     +             ,IDCAY,SDCAY,SLIFE ,SUMLIF,DPHYS1
309 //     +             ,ILOSS,SLOSS,SOLOSS,STLOSS,DPHYS2
310 //     +             ,IMULS,SMULS,SOMULS,STMULS,DPHYS3
311 //     +             ,IRAYL,SRAYL,SLRAYL,ZINTRA,STEPRA
312 typedef struct { 
313   Int_t    ipair;
314   Float_t  spair;
315   Float_t  slpair;
316   Float_t  zintpa;
317   Float_t  steppa;
318   Int_t    icomp;
319   Float_t  scomp;
320   Float_t  slcomp;
321   Float_t  zintco;
322   Float_t  stepco;
323   Int_t    iphot;
324   Float_t  sphot;
325   Float_t  slphot;
326   Float_t  zintph;
327   Float_t  stepph;
328   Int_t    ipfis;
329   Float_t  spfis;
330   Float_t  slpfis;
331   Float_t  zintpf;
332   Float_t  steppf;
333   Int_t    idray;
334   Float_t  sdray;
335   Float_t  sldray;
336   Float_t  zintdr;
337   Float_t  stepdr;
338   Int_t    ianni;
339   Float_t  sanni;
340   Float_t  slanni;
341   Float_t  zintan;
342   Float_t  stepan;
343   Int_t    ibrem;
344   Float_t  sbrem;
345   Float_t  slbrem;
346   Float_t  zintbr;
347   Float_t  stepbr;
348   Int_t    ihadr;
349   Float_t  shadr;
350   Float_t  slhadr;
351   Float_t  zintha;
352   Float_t  stepha;
353   Int_t    imunu;
354   Float_t  smunu;
355   Float_t  slmunu;
356   Float_t  zintmu;
357   Float_t  stepmu;
358   Int_t    idcay;
359   Float_t  sdcay;
360   Float_t  slife;
361   Float_t  sumlif;
362   Float_t  dphys1;
363   Int_t    iloss;
364   Float_t  sloss;
365   Float_t  soloss;
366   Float_t  stloss;
367   Float_t  dphys2;
368   Int_t    imuls;
369   Float_t  smuls;
370   Float_t  somuls;
371   Float_t  stmuls;
372   Float_t  dphys3;
373   Int_t    irayl;
374   Float_t  srayl;
375   Float_t  slrayl;
376   Float_t  zintra;
377   Float_t  stepra;
378 } Gcphys_t; 
379
380 //----------GCPHLT
381 //      COMMON/GCPHLT/ILABS,SLABS,SLLABS,ZINTLA,STEPLA
382 //     +             ,ISYNC
383 //     +             ,ISTRA
384 typedef struct { 
385   Int_t ilabs;
386   Float_t slabs;
387   Float_t sllabs;
388   Float_t zintla;
389   Float_t stepla;
390   Int_t isync;
391   Int_t istra;
392 } Gcphlt_t;
393  
394 //----------GCOPTI 
395 //      COMMON/GCOPTI/IOPTIM
396 typedef struct { 
397   Int_t   ioptim;
398 } Gcopti_t; 
399  
400 //----------GCTLIT 
401 //      COMMON/GCTLIT/THRIND,PMIN,DP,DNDL,JMIN,ITCKOV,IMCKOV,NPCKOV
402 typedef struct { 
403   Float_t   thrind;
404   Float_t   pmin;
405   Float_t   dp;
406   Float_t   dndl;
407   Int_t     jmin;
408   Int_t     itckov;
409   Int_t     imckov;
410   Int_t     npckov;
411 } Gctlit_t; 
412  
413 //----------GCVDMA 
414 //      COMMON/GCVDMA/NVMANY,MANYLE(20),MANYNA(20,15),
415 //     +MANYNU(20,15),NFMANY,MYCOUN,IMYSE,RAYTRA,VECCOS(3)
416 typedef struct { 
417   Int_t     vdma[624];
418   Float_t   raytra;
419   Float_t   veccos[3];
420 } Gcvdma_t; 
421  
422 //----------GCTPOL 
423 #define MAXME1 30 
424 //      COMMON/GCTPOL/POLAR(3), NAMEC1(MAXME1) 
425 typedef struct { 
426   Float_t polar[3]; 
427   Int_t   namec1[MAXME1]; 
428 } Gctpol_t; 
429
430 /************************************************************************
431  *                                                                      *
432  *      Commons for GEANE                                               *
433  *                                                                      *
434  ************************************************************************/
435
436 //------------ERTRIO
437 //    INTEGER          MXPRED
438 //    PARAMETER (MXPRED = 10)
439 //    DOUBLE PRECISION ERDTRP
440 //    REAL             ERRIN, ERROUT, ERTRSP, ERXIN, ERXOUT, ERPIN,
441 //   +                 ERPOUT
442 //    INTEGER          NEPRED, INLIST, ILPRED, IEPRED
443 //    COMMON /ERTRIO/  ERDTRP(5,5,MXPRED), ERRIN(15), ERROUT(15,MXPRED),
444 //   +                 ERTRSP(5,5,MXPRED), ERXIN( 3), ERXOUT( 3,MXPRED),
445 //   +                 ERPIN(3), ERPOUT(3,MXPRED), NEPRED,INLIST,ILPRED,
446 //   +                 IEPRED(MXPRED)
447 //
448
449 #define MXPRED 10
450 typedef struct {
451   Double_t erdtrp[MXPRED*5*5];
452   Float_t  errin[5];
453   Float_t  errout[MXPRED*15];
454   Float_t  ertrsp[MXPRED*5*5];
455   Float_t  erxin[3];
456   Float_t  erxout[MXPRED*3];
457   Float_t  erpin[3];
458   Float_t  erpout[MXPRED*3];
459   Int_t    nepred;
460   Int_t    inlist;
461   Int_t    ilpred;
462   Int_t    iepred;
463 } Ertrio_t;
464
465 //-----------EROTPS
466 //    CHARACTER*8     CHOPTI
467 //    LOGICAL         LEEXAC, LELENG, LEONLY, LEPLAN, LEPOIN, LEVOLU
468 //    REAL            ERPLI, ERPLO, ERLENG
469 //    INTEGER         NAMEER, NUMVER, IOVLER
470 //    COMMON /EROPTS/ ERPLI(3,2), ERPLO(3,4,MXPRED), ERLENG(MXPRED),
471 //   +                NAMEER(MXPRED), NUMVER(MXPRED), IOVLER(MXPRED),
472 //   +                LEEXAC, LELENG, LEONLY, LEPLAN, LEPOIN, LEVOLU
473 //    COMMON /EROPTC/CHOPTI
474
475 typedef struct {
476   Float_t   erpli[3*2];
477   Float_t   erplo[MXPRED*3*4];
478   Float_t   erleng[MXPRED];
479   Int_t     nameer[MXPRED];
480   Int_t     numver[MXPRED];
481   Int_t     iovler[MXPRED];
482   Bool_t    leexac;
483   Bool_t    leleng;
484   Bool_t    leonly;
485   Bool_t    leplan;
486   Bool_t    lepoin;
487   Bool_t    levolu;
488 } Eropts_t;
489
490 typedef struct {
491   char chopti[8];
492 } Eroptc_t;
493
494 //-------ERWORK
495 //    DOUBLE PRECISION EI, EF, ASDSC
496 //    COMMON /ERWORK/ EI(15), EF(15), ASDSC(5,5),
497 //   +                   XI(3), PPI(3), HI(9),
498 //   +                   XF(3), PF(3),  HF(9),
499 //   +                   CHTR, DEDX2, BACKTR, CUTEK, TLGCM2, TLRAD
500
501 typedef struct {
502   Double_t  ei[15];
503   Double_t  ef[15];
504   Double_t  asdsc[5*5];
505   Float_t   xi[3];
506   Float_t   ppi[3];
507   Float_t   hi[9];
508   Float_t   xf[3];
509   Float_t   pf[3];
510   Float_t   hf[9];
511   Float_t   chtr;
512   Float_t   dedx2;
513   Float_t   backtr;
514   Float_t   cutek;
515   Float_t   tlgcm2;
516   Float_t   tlrad;
517 } Erwork_t;
518
519 /************************************************************************
520  *                                                                      *
521  *      Commons for GEANE                                               *
522  *                                                                      *
523  ************************************************************************/
524
525 class AliDecayer;
526 class TGeant3 : public AliMC { 
527
528 public: 
529   TGeant3(); 
530   TGeant3(const char *title, Int_t nwgeant=0); 
531   virtual ~TGeant3() {if(fVolNames) {
532     delete [] fVolNames;
533     fVolNames=0;}
534   } 
535
536   virtual void LoadAddress(); 
537  
538 ///////////////////////////////////////////////////////////////////////
539 //                                                                   //
540 //                                                                   //
541 //     Here are the service routines from the geometry               //
542 //     which could be implemented also in other geometries           //
543 //                                                                   //
544 //                                                                   //
545 ///////////////////////////////////////////////////////////////////////
546
547   void  GeomIter();
548   Int_t CurrentMaterial(Float_t &a, Float_t &z, Float_t &dens, Float_t &radl, Float_t &absl) const;
549   Int_t NextVolUp(Text_t *name, Int_t &copy);
550   Int_t CurrentVolID(Int_t &copy) const;
551   Int_t CurrentVolOffID(Int_t off, Int_t &copy) const;
552   const char* CurrentVolName() const;
553   const char *CurrentVolOffName(Int_t off) const;
554   Int_t VolId(const Text_t *name) const;
555   Int_t IdFromPDG(Int_t pdg) const;
556   Int_t PDGFromId(Int_t pdg) const;
557   void  DefineParticles();
558   const char* VolName(Int_t id) const;
559   Float_t Xsec(char* reac, Float_t energy, Int_t part, Int_t mate);
560   void  TrackPosition(TLorentzVector &xyz) const;
561   void  TrackMomentum(TLorentzVector &xyz) const;  
562   Int_t NofVolumes() const;
563   Int_t VolId2Mate(Int_t id) const;
564   Float_t TrackTime() const;  
565   Float_t TrackCharge() const;
566   Float_t TrackMass() const;
567   Float_t TrackStep() const;
568   Float_t TrackLength() const;
569   Int_t   TrackPid() const;
570   Bool_t IsNewTrack() const;
571   Bool_t IsTrackInside() const;
572   Bool_t IsTrackEntering() const;
573   Bool_t IsTrackExiting() const;
574   Bool_t IsTrackOut() const;
575   Bool_t IsTrackDisappeared() const;
576   Bool_t IsTrackStop() const;
577   Bool_t IsTrackAlive() const;
578   Int_t  NSecondaries() const;
579   Int_t  CurrentEvent() const;
580   AliMCProcess  ProdProcess() const;
581   void   GetSecondary(Int_t isec, Int_t& ipart, TLorentzVector &x, 
582                       TLorentzVector &p);
583   void   StopTrack();
584   void   StopEvent();
585   Float_t MaxStep() const;
586   void  SetMaxStep(Float_t maxstep);
587   void  SetMaxNStep(Int_t maxnstp);
588   Int_t GetMaxNStep() const;
589   void SetCut(const char* cutName, Float_t cutValue);
590   void SetProcess(const char* flagName, Int_t flagValue);
591   //  void GetParticle(const Int_t pdg, char *name, Float_t &mass) const;
592   // Set the external decayer
593   void SetExternalDecayer(AliDecayer* decayer) {fDecayer=decayer;}
594   // Get the external decayer
595   AliDecayer* Decayer() const {return fDecayer;}
596
597   virtual Int_t GetMedium() const;
598   virtual Float_t Edep() const;
599   virtual Float_t Etot() const;
600
601   virtual void   Material(Int_t& kmat, const char* name, Float_t a, Float_t z,
602                            Float_t dens, Float_t radl, Float_t absl, 
603                            Float_t* buf=0, Int_t nwbuf=0);
604
605   virtual void   Mixture(Int_t& kmat, const char* name, Float_t* a,Float_t* z,
606                           Float_t dens, Int_t nlmat, Float_t* wmat);
607
608   virtual void   Medium(Int_t& kmed, const char* name, Int_t nmat, Int_t isvol,
609                         Int_t ifield, Float_t fieldm, Float_t tmaxfd,
610                         Float_t stemax, Float_t deemax, Float_t epsil,
611                         Float_t stmin, Float_t* ubuf=0, Int_t nbuf=0);
612
613   virtual void   Matrix(Int_t& krot, Float_t thex, Float_t phix, Float_t they,
614                         Float_t phiy, Float_t thez, Float_t phiz);
615
616 /////////////////////////////////////////////////////////////////////////////////////////////
617 //                                                                                         //
618 //                                                                                         //
619 //     Here are the interface functions with GEANT3.21                                     //
620 //                                                                                         //
621 //                                                                                         //
622 /////////////////////////////////////////////////////////////////////////////////////////////
623
624   // access functions to commons
625  
626   virtual Quest_t* Quest() const {return fQuest;}
627   virtual Gcbank_t* Gcbank() const {return fGcbank;}
628   virtual Gclink_t* Gclink() const {return fGclink;}
629   virtual Gccuts_t* Gccuts() const {return fGccuts;}
630   virtual Gcmulo_t* Gcmulo() const {return fGcmulo;}
631   virtual Gcmate_t* Gcmate() const {return fGcmate;}
632   virtual Gctpol_t* Gctpol() const {return fGctpol;}
633   virtual Gcnum_t* Gcnum() const {return fGcnum;}
634   virtual Gcsets_t* Gcsets() const {return fGcsets;}
635   virtual Gcopti_t* Gcopti() const {return fGcopti;}
636   virtual Gctlit_t* Gctlit() const {return fGctlit;}
637   virtual Gcvdma_t* Gcvdma() const {return fGcvdma;}
638   virtual Gcvolu_t* Gcvolu() const {return fGcvolu;}
639   virtual Gckine_t* Gckine() const {return fGckine;}
640   virtual Gcflag_t* Gcflag() const {return fGcflag;}
641   virtual Gctmed_t* Gctmed() const {return fGctmed;}
642   virtual Gcphys_t* Gcphys() const {return fGcphys;}
643   virtual Gcphlt_t* Gcphlt() const {return fGcphlt;}
644   virtual Gcking_t* Gcking() const {return fGcking;}
645   virtual Gckin2_t* Gckin2() const {return fGckin2;}
646   virtual Gckin3_t* Gckin3() const {return fGckin3;}
647   virtual Gctrak_t* Gctrak() const {return fGctrak;}
648   virtual Int_t* Iq() const {return fZiq;}
649   virtual Int_t* Lq() const {return fZlq;}
650   virtual Float_t* Q() const {return fZq;}
651
652
653   // Access to GEANE commons
654
655   virtual Ertrio_t* Ertrio() const {return fErtrio;}
656   virtual Eropts_t* Eropts() const {return fEropts;}
657   virtual Eroptc_t* Eroptc() const {return fEroptc;}
658   virtual Erwork_t* Erwork() const {return fErwork;}
659
660
661
662       // functions from GBASE 
663    virtual  void  Gpcxyz(); 
664    virtual  void  Ggclos(); 
665    virtual  void  Gfile(const char *filename, const char *option="I"); 
666    virtual  void  Glast(); 
667    virtual  void  Gprint(const char *name); 
668    virtual  void  Grun(); 
669    virtual  void  Gtrig(); 
670    virtual  void  Gtrigc(); 
671    virtual  void  Gtrigi(); 
672    virtual  void  Gwork(Int_t nwork); 
673    virtual  void  Gzinit(); 
674  
675       // functions from GCONS 
676    virtual  void  Gfmate(Int_t imat, char *name, Float_t &a, Float_t &z, Float_t &dens, 
677                          Float_t &radl, Float_t &absl, Float_t* ubuf, Int_t& nbuf); 
678    virtual  void  Gfpart(Int_t ipart, char *name, Int_t &itrtyp,  
679                          Float_t &amass, Float_t &charge, Float_t &tlife); 
680    virtual  void  Gftmed(Int_t numed, char *name, Int_t &nmat, Int_t &isvol,  
681                          Int_t &ifield, Float_t &fieldm, Float_t &tmaxfd, 
682                          Float_t &stemax, Float_t &deemax, Float_t &epsil, 
683                          Float_t &stmin, Float_t *buf=0, Int_t *nbuf=0);
684    virtual  void  Gftmat(Int_t imate, Int_t ipart, char *chmeca, Int_t kdim,
685                          Float_t* tkin, Float_t* value, Float_t* pcut,
686                          Int_t &ixst);
687    virtual  Float_t Gbrelm(Float_t z, Float_t t, Float_t cut);
688    virtual  Float_t Gprelm(Float_t z, Float_t t, Float_t cut);
689    virtual  void  Gmate(); 
690    virtual  void  Gpart(); 
691    virtual  void  Gsckov(Int_t itmed, Int_t npckov, Float_t *ppckov,
692                          Float_t *absco, Float_t *effic, Float_t *rindex); 
693    virtual  void  Gsdk(Int_t ipart, Float_t *bratio, Int_t *mode); 
694    virtual  void  Gsmate(Int_t imat, const char *name, Float_t a, Float_t z,  
695                          Float_t dens, Float_t radl, Float_t absl); 
696    virtual  void  Gsmixt(Int_t imat, const char *name, Float_t *a, Float_t *z,  
697                          Float_t dens, Int_t nlmat, Float_t *wmat); 
698    virtual  void  Gspart(Int_t ipart, const char *name, Int_t itrtyp,  
699                          Float_t amass, Float_t charge, Float_t tlife); 
700    virtual  void  Gstmed(Int_t numed, const char *name, Int_t nmat, Int_t isvol,  
701                          Int_t ifield, Float_t fieldm, Float_t tmaxfd, 
702                          Float_t stemax, Float_t deemax, Float_t epsil, 
703                          Float_t stmin); 
704    virtual  void  Gstpar(Int_t itmed, const char *param, Float_t parval); 
705  
706       // functions from GKINE 
707    virtual  void  Gfkine(Int_t itra, Float_t *vert, Float_t *pvert, 
708                          Int_t &ipart, Int_t &nvert); 
709    virtual  void  Gfvert(Int_t nvtx, Float_t *v, Int_t &ntbeam, Int_t &nttarg, Float_t &tofg); 
710    virtual  Int_t Gskine(Float_t *plab, Int_t ipart, Int_t nv, Float_t *ubuf=0, Int_t nwbuf=0); 
711    virtual  Int_t Gsvert(Float_t *v, Int_t ntbeam, Int_t nttarg, Float_t *ubuf=0, Int_t nwbuf=0); 
712  
713       // functions from GPHYS 
714    virtual  void  Gphysi(); 
715  
716       // functions from GTRAK 
717    virtual  void  Gdebug(); 
718    virtual  void  Gekbin(); 
719    virtual  void  Gfinds(); 
720    virtual  void  Gsking(Int_t igk); 
721    virtual  void  Gskpho(Int_t igk); 
722    virtual  void  Gsstak(Int_t iflag); 
723    virtual  void  Gsxyz(); 
724    virtual  void  Gtrack(); 
725    virtual  void  Gtreve(); 
726    virtual  void  GtreveRoot(); 
727    virtual  void  Grndm(Float_t *rvec, const Int_t len) const; 
728    virtual  void  Grndmq(Int_t &is1, Int_t &is2, const Int_t iseq, const Text_t *chopt); 
729  
730       // functions from GGEOM 
731    virtual  void  Gdxyz(Int_t it); 
732    virtual  void  Gdcxyz(); 
733
734       // functions from GGEOM 
735    virtual  void  Gdtom(Float_t *xd, Float_t *xm, Int_t iflag); 
736    virtual  void  Glmoth(const char* iudet, Int_t iunum, Int_t &nlev, 
737                          Int_t *lvols, Int_t *lindx); 
738    virtual  void  Gmedia(Float_t *x, Int_t &numed); 
739    virtual  void  Gmtod(Float_t *xm, Float_t *xd, Int_t iflag); 
740    virtual  void  Gsdvn(const char *name, const char *mother, Int_t ndiv, Int_t iaxis); 
741    virtual  void  Gsdvn2(const char *name, const char *mother, Int_t ndiv, Int_t iaxis, Float_t c0i, Int_t numed); 
742    virtual  void  Gsdvs(const char *name, const char *mother, Float_t step, Int_t iaxis, Int_t numed); 
743    virtual  void  Gsdvs2(const char *name, const char *mother, Float_t step, Int_t iaxis, Float_t c0, Int_t numed); 
744    virtual  void  Gsdvt(const char *name, const char *mother, Float_t step, Int_t iaxis, Int_t numed, Int_t ndvmx); 
745    virtual  void  Gsdvt2(const char *name, const char *mother, Float_t step, Int_t iaxis,
746                          Float_t c0, Int_t numed, Int_t ndvmx); 
747    virtual  void  Gsord(const char *name, Int_t iax); 
748    virtual  void  Gspos(const char *name, Int_t nr, const char *mother,  
749                          Float_t x, Float_t y, Float_t z, Int_t irot, const char *konly="ONLY"); 
750    virtual  void  Gsposp(const char *name, Int_t nr, const char *mother,  
751                          Float_t x, Float_t y, Float_t z, Int_t irot, const char *konly, Float_t *upar, Int_t np); 
752    virtual  void  Gsrotm(Int_t nmat, Float_t theta1, Float_t phi1, Float_t theta2, Float_t phi2, 
753                          Float_t theta3, Float_t phi3); 
754    virtual  void  Gprotm(Int_t nmat=0); 
755    virtual  Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,  
756                          Float_t *upar, Int_t np); 
757    virtual  void  Gsatt(const char *name, const char *att, Int_t val);
758    virtual  void  Gfpara(const char *name, Int_t number, Int_t intext, Int_t& npar,
759                          Int_t& natt, Float_t* par, Float_t* att);
760    virtual  void  Gckpar(Int_t ish, Int_t npar, Float_t *par);
761    virtual  void  Gckmat(Int_t itmed, char *natmed);
762    virtual  Int_t Glvolu(Int_t nlev, Int_t *lnam,Int_t *lnum);
763     
764       // functions from GDRAW 
765    virtual  void  DefaultRange();
766    virtual  void  InitHIGZ();
767    virtual  void  Gdopen(Int_t view);
768    virtual  void  Gdclose();
769    virtual  void  Gdelete(Int_t view);
770    virtual  void  Gdshow(Int_t view);
771    virtual  void  Gdopt(const char *name,const char *value);
772    virtual  void  Gdraw(const char *name,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);
773    virtual  void  Gdrawc(const char *name,Int_t axis=1, Float_t cut=0,Float_t u0=10,Float_t v0=10,Float_t ul=0.01,Float_t vl=0.01);
774    virtual  void  Gdrawx(const char *name,Float_t cutthe, Float_t cutphi, Float_t cutval,
775                          Float_t theta=30, Float_t phi=30,Float_t u0=10,Float_t v0=10,Float_t ul=0.01,Float_t vl=0.01);
776    virtual  void  Gdhead(Int_t isel, const char *name, Float_t chrsiz=0.6);   
777    virtual  void  Gdman(Float_t u0, Float_t v0, const char *type="MAN");
778    virtual  void  Gdspec(const char *name);
779    virtual  void  DrawOneSpec(const char *name);
780    virtual  void  Gdtree(const char *name,Int_t levmax=15,Int_t ispec=0);
781    virtual  void  GdtreeParent(const char *name,Int_t levmax=15,Int_t ispec=0);
782
783    virtual  void  WriteEuclid(const char* filnam, const char* topvol, 
784                               Int_t number, Int_t nlevel);
785
786    virtual  void  SetABAN(Int_t par=1);
787    virtual  void  SetANNI(Int_t par=1);
788    virtual  void  SetAUTO(Int_t par=1);
789    virtual  void  SetBOMB(Float_t bomb=1);
790    virtual  void  SetBREM(Int_t par=1);
791    virtual  void  SetCKOV(Int_t par=1);
792    virtual  void  SetClipBox(const char *name,Float_t xmin=-9999,Float_t xmax=0, Float_t ymin=-9999,Float_t ymax=0,Float_t zmin=-9999,Float_t zmax=0);
793    virtual  void  SetCOMP(Int_t par=1);
794    virtual  void  SetCUTS(Float_t cutgam,Float_t cutele,Float_t cutneu,Float_t cuthad,
795                       Float_t cutmuo ,Float_t bcute ,Float_t bcutm ,Float_t dcute ,
796                       Float_t dcutm ,Float_t ppcutm, Float_t tofmax);
797    virtual  void  SetDCAY(Int_t par=1);
798    virtual  void  SetDEBU(Int_t emin=1, Int_t emax=999, Int_t emod=1);
799    virtual  void  SetDRAY(Int_t par=1);
800    virtual  void  SetERAN(Float_t ekmin=1.e-5, Float_t ekmax=1.e4,
801                           Int_t nekbin=90);
802    virtual  void  SetHADR(Int_t par=1);
803    virtual  void  SetKINE(Int_t kine, Float_t xk1=0, Float_t xk2=0, Float_t xk3=0, Float_t xk4=0,
804                          Float_t xk5=0, Float_t xk6=0, Float_t xk7=0, Float_t xk8=0, Float_t xk9=0,
805                          Float_t xk10=0);
806    virtual  void  SetLOSS(Int_t par=2);
807    virtual  void  SetMULS(Int_t par=1);
808    virtual  void  SetMUNU(Int_t par=1);
809    virtual  void  SetOPTI(Int_t par=2);
810    virtual  void  SetPAIR(Int_t par=1);
811    virtual  void  SetPFIS(Int_t par=1);
812    virtual  void  SetPHOT(Int_t par=1);
813    virtual  void  SetRAYL(Int_t par=1);
814    virtual  void  SetSTRA(Int_t par=0);
815    virtual  void  SetSWIT(Int_t sw, Int_t val=1);
816    virtual  void  SetTRIG(Int_t nevents=1);
817    virtual  void  SetUserDecay(Int_t ipart);
818
819    virtual  void  Vname(const char *name, char *vname);
820
821    virtual  void  InitLego();
822
823   // Routines from GEANE
824
825     virtual void Ertrgo();
826     virtual void Ertrak(const Float_t *const x1, const Float_t *const p1, 
827                         const Float_t *x2, const Float_t *p2,
828                         Int_t ipa,  Option_t *chopt);
829         
830   // Control Methods
831
832   virtual void FinishGeometry();
833   virtual void BuildPhysics();
834
835  protected:
836   Int_t fNextVol;    // Iterator for GeomIter
837
838 //--------------Declarations for ZEBRA--------------------- 
839   Int_t *fZiq;                // Good Old IQ of Zebra
840   Int_t *fZlq;                // Good Old LQ of Zebra
841   Float_t *fZq;               // Good Old Q of Zebra
842
843   Quest_t  *fQuest;           // QUEST common structure
844   Gcbank_t *fGcbank;          // GCBANK common structure
845   Gclink_t *fGclink;          // GCLINK common structure
846   Gccuts_t *fGccuts;          // GCCUTS common structure
847   Gcmulo_t *fGcmulo;          // GCMULO common structure
848   Gcmate_t *fGcmate;          // GCMATE common structure
849   Gctpol_t *fGctpol;          // GCTPOL common structure
850   Gcnum_t  *fGcnum;           // GCNUM common structure
851   Gcsets_t *fGcsets;          // GCSETS common structure
852   Gcopti_t *fGcopti;          // GCOPTI common structure
853   Gctlit_t *fGctlit;          // GCTLIT common structure
854   Gcvdma_t *fGcvdma;          // GCVDMA common structure
855   Gcvolu_t *fGcvolu;          // GCVOLU common structure
856   Gckine_t *fGckine;          // GCKINE common structure
857   Gcflag_t *fGcflag;          // GCFLAG common structure
858   Gctmed_t *fGctmed;          // GCTMED common structure
859   Gcphys_t *fGcphys;          // GCPHYS common structure
860   Gcphlt_t *fGcphlt;          // GCPHLT common structure
861   Gcking_t *fGcking;          // GCKING common structure
862   Gckin2_t *fGckin2;          // GCKIN2 common structure
863   Gckin3_t *fGckin3;          // GCKIN3 common structure
864   Gctrak_t *fGctrak;          // GCTRAK common structure
865
866
867   // commons for GEANE
868   Ertrio_t *fErtrio;          // ERTRIO common structure
869   Eropts_t *fEropts;          // EROPTS common structure
870   Eroptc_t *fEroptc;          // EROPTC common structure
871   Erwork_t *fErwork;          // ERWORK common structure
872
873   //Put here all volume names
874
875   char (*fVolNames)[5];           //! Names of geant volumes as C++ chars
876
877   enum {kMaxParticles = 100};
878
879   Int_t fNPDGCodes;               // Number of PDG codes known by G3
880
881   Int_t fPDGCode[kMaxParticles];  // Translation table of PDG codes
882
883
884
885 protected:
886     AliDecayer* fDecayer;      // Pointer to decayer
887 private:
888   TGeant3(const TGeant3 &) {}
889   TGeant3 & operator=(const TGeant3&) {return *this;}
890
891
892    ClassDef(TGeant3,1)  //C++ interface to Geant basic routines 
893 }; 
894
895 #endif