Changed NVolumes into NofVolumes for readibility.
[u/mrichter/AliRoot.git] / TGeant3 / TGeant3.h
1 #ifndef TGeant3_H 
2 #define TGeant3_H 
3 //////////////////////////////////////////////// 
4 //  C++ interface to Geant3 basic routines    // 
5 //////////////////////////////////////////////// 
6  
7 #include <AliMC.h> 
8   
9 //______________________________________________________________
10 //
11 //       Geant3 prototypes for commons
12 //
13 //______________________________________________________________
14 //
15
16 //----------QUEST 
17 //      COMMON/QUEST/IQUEST(100) 
18 typedef struct { 
19   Int_t    iquest[100]; 
20 } Quest_t; 
21  
22 //----------GCLINK 
23 //      COMMON/GCLINK/JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART 
24 //     +      ,JROTM ,JRUNG ,JSET  ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX 
25 //     +      ,JVOLUM,JXYZ  ,JGPAR ,JGPAR2,JSKLT 
26 typedef struct { 
27   Int_t    jdigi; 
28   Int_t    jdraw; 
29   Int_t    jhead; 
30   Int_t    jhits; 
31   Int_t    jkine; 
32   Int_t    jmate; 
33   Int_t    jpart; 
34   Int_t    jrotm; 
35   Int_t    jrung; 
36   Int_t    jset; 
37   Int_t    jstak; 
38   Int_t    jgstat; 
39   Int_t    jtmed; 
40   Int_t    jtrack; 
41   Int_t    jvertx; 
42   Int_t    jvolum; 
43   Int_t    jxyz; 
44   Int_t    jgpar; 
45   Int_t    jgpar2; 
46   Int_t    jsklt; 
47 } Gclink_t; 
48  
49  
50 //----------GCFLAG 
51 //      COMMON/GCFLAG/IDEBUG,IDEMIN,IDEMAX,ITEST,IDRUN,IDEVT,IEORUN 
52 //     +        ,IEOTRI,IEVENT,ISWIT(10),IFINIT(20),NEVENT,NRNDM(2) 
53 typedef struct { 
54   Int_t    idebug; 
55   Int_t    idemin; 
56   Int_t    idemax; 
57   Int_t    itest; 
58   Int_t    idrun; 
59   Int_t    idevt; 
60   Int_t    ieorun; 
61   Int_t    ieotri; 
62   Int_t    ievent; 
63   Int_t    iswit[10]; 
64   Int_t    ifinit[20]; 
65   Int_t    nevent; 
66   Int_t    nrndm[2]; 
67 } Gcflag_t; 
68  
69 //----------GCKINE 
70 //      COMMON/GCKINE/IKINE,PKINE(10),ITRA,ISTAK,IVERT,IPART,ITRTYP 
71 //     +      ,NAPART(5),AMASS,CHARGE,TLIFE,VERT(3),PVERT(4),IPAOLD 
72 typedef struct { 
73   Int_t    ikine; 
74   Float_t  pkine[10]; 
75   Int_t    itra; 
76   Int_t    istak; 
77   Int_t    ivert; 
78   Int_t    ipart; 
79   Int_t    itrtyp; 
80   Int_t    napart[5]; 
81   Float_t  amass; 
82   Float_t  charge; 
83   Float_t  tlife; 
84   Float_t  vert[3]; 
85   Float_t  pvert[4]; 
86   Int_t    ipaold; 
87 } Gckine_t; 
88  
89 //----------GCKING 
90 //      COMMON/GCKING/KCASE,NGKINE,GKIN(5,MXGKIN), 
91 //     +                           TOFD(MXGKIN),IFLGK(MXGKIN) 
92 #define MXGKIN 100 
93 typedef struct  { 
94   Int_t    kcase; 
95   Int_t    ngkine; 
96   Float_t  gkin[MXGKIN][5]; 
97   Int_t    tofd[MXGKIN]; 
98   Int_t    iflgk[MXGKIN]; 
99 } Gcking_t; 
100
101 //----------GCKIN2
102 //      COMMON/GCKIN2/NGPHOT,XPHOT(11,MXPHOT)
103 #define MXPHOT 800
104 typedef struct {
105   Int_t ngphot;
106   Float_t xphot[MXPHOT][11];
107 } Gckin2_t;
108
109 //----------GCKIN3 
110 //      COMMON/GCKIN3/GPOS(3,MXGKIN)
111 typedef struct {
112   Float_t gpos[MXGKIN][3];
113 } Gckin3_t;
114
115 //----------GCMATE 
116 //      COMMON/GCMATE/NMAT,NAMATE(5),A,Z,DENS,RADL,ABSL 
117 typedef struct { 
118   Int_t    nmat; 
119   Int_t    namate[5]; 
120   Float_t  a; 
121   Float_t  z; 
122   Float_t  dens; 
123   Float_t  radl; 
124   Float_t  absl; 
125 } Gcmate_t; 
126  
127 //----------GCTMED 
128 //      COMMON/GCTMED/NUMED,NATMED(5),ISVOL,IFIELD,FIELDM,TMAXFD,STEMAX 
129 //     +      ,DEEMAX,EPSIL,STMIN,CFIELD,PREC,IUPD,ISTPAR,NUMOLD 
130 typedef struct { 
131   Int_t    numed; 
132   Int_t    natmed[5]; 
133   Int_t    isvol; 
134   Int_t    ifield; 
135   Float_t  fieldm; 
136   Float_t  tmaxfd; 
137   Float_t  stemax; 
138   Float_t  deemax; 
139   Float_t  epsil; 
140   Float_t  stmin; 
141   Float_t  cfield; 
142   Float_t  prec; 
143   Int_t    iupd; 
144   Int_t    istpar; 
145   Int_t    numold; 
146 } Gctmed_t; 
147  
148 //----------GCTRAK 
149 #define MAXMEC 30 
150 //      PARAMETER (MAXMEC=30) 
151 //      COMMON/GCTRAK/VECT(7),GETOT,GEKIN,VOUT(7),NMEC,LMEC(MAXMEC) 
152 //     + ,NAMEC(MAXMEC),NSTEP ,MAXNST,DESTEP,DESTEL,SAFETY,SLENG 
153 //     + ,STEP  ,SNEXT ,SFIELD,TOFG  ,GEKRAT,UPWGHT,IGNEXT,INWVOL 
154 //     + ,ISTOP ,IGAUTO,IEKBIN, ILOSL, IMULL,INGOTO,NLDOWN,NLEVIN 
155 //     + ,NLVSAV,ISTORY 
156 typedef struct { 
157   Float_t  vect[7]; 
158   Float_t  getot; 
159   Float_t  gekin; 
160   Int_t    vout[7]; 
161   Int_t    nmec; 
162   Int_t    lmec[MAXMEC]; 
163   Int_t    namec[MAXMEC]; 
164   Int_t    nstep; 
165   Int_t    maxnst; 
166   Float_t  destep; 
167   Float_t  destel; 
168   Float_t  safety; 
169   Float_t  sleng; 
170   Float_t  step; 
171   Float_t  snext; 
172   Float_t  sfield; 
173   Float_t  tofg; 
174   Float_t  gekrat; 
175   Float_t  upwght; 
176   Int_t    ignext; 
177   Int_t    inwvol; 
178   Int_t    istop; 
179   Int_t    igauto; 
180   Int_t    iekbin; 
181   Int_t    ilosl; 
182   Int_t    imull; 
183   Int_t    ingoto; 
184   Int_t    nldown; 
185   Int_t    nlevin; 
186   Int_t    nlsav; 
187   Int_t    istory; 
188 } Gctrak_t; 
189  
190 //----------GCVOLU 
191 //      COMMON/GCVOLU/NLEVEL,NAMES(15),NUMBER(15), 
192 //     +LVOLUM(15),LINDEX(15),INFROM,NLEVMX,NLDEV(15),LINMX(15), 
193 //     +GTRAN(3,15),GRMAT(10,15),GONLY(15),GLX(3) 
194 typedef struct { 
195   Int_t    nlevel; 
196   Int_t    names[15]; 
197   Int_t    number[15]; 
198   Int_t    lvolum[15]; 
199   Int_t    lindex[15]; 
200   Int_t    infrom; 
201   Int_t    nlevmx; 
202   Int_t    nldev[15]; 
203   Int_t    linmx[15]; 
204   Float_t  gtran[15][3]; 
205   Float_t  grmat[15][10]; 
206   Float_t  gonly[15]; 
207   Float_t  glx[3]; 
208 } Gcvolu_t; 
209  
210 //----------GCSETS 
211 //  COMMON/GCSETS/IHSET,IHDET,ISET,IDET,IDTYPE,NVNAME,NUMBV(20) 
212 typedef struct { 
213   Int_t    ihset; 
214   Int_t    ihdet; 
215   Int_t    iset; 
216   Int_t    idet; 
217   Int_t    idtype; 
218   Int_t    nvname; 
219   Int_t    numbv[20]; 
220 } Gcsets_t; 
221  
222 //----------GCNUM 
223 //   COMMON/GCNUM/NMATE ,NVOLUM,NROTM,NTMED,NTMULT,NTRACK,NPART 
224 //  +            ,NSTMAX,NVERTX,NHEAD,NBIT 
225 typedef struct { 
226   Int_t    nmate; 
227   Int_t    nvolum; 
228   Int_t    nrotm; 
229   Int_t    ntmed; 
230   Int_t    ntmult; 
231   Int_t    ntrack; 
232   Int_t    npart; 
233   Int_t    nstmax; 
234   Int_t    nvertx; 
235   Int_t    nhead; 
236   Int_t    nbit; 
237 } Gcnum_t; 
238  
239 //----------GCCUTS 
240 //  COMMON/GCCUTS/CUTGAM,CUTELE,CUTNEU,CUTHAD,CUTMUO,BCUTE,BCUTM 
241 //   +             ,DCUTE ,DCUTM ,PPCUTM,TOFMAX,GCUTS(5) 
242 typedef struct { 
243   Float_t cutgam; 
244   Float_t cutele; 
245   Float_t cutneu; 
246   Float_t cuthad; 
247   Float_t cutmuo; 
248   Float_t bcute; 
249   Float_t bcutm; 
250   Float_t dcute; 
251   Float_t dcutm; 
252   Float_t ppcutm; 
253   Float_t tofmax; 
254   Float_t gcuts[5]; 
255 } Gccuts_t; 
256
257 //----------GCPHYS
258 //      COMMON/GCPHYS/IPAIR,SPAIR,SLPAIR,ZINTPA,STEPPA
259 //     +             ,ICOMP,SCOMP,SLCOMP,ZINTCO,STEPCO
260 //     +             ,IPHOT,SPHOT,SLPHOT,ZINTPH,STEPPH
261 //     +             ,IPFIS,SPFIS,SLPFIS,ZINTPF,STEPPF
262 //     +             ,IDRAY,SDRAY,SLDRAY,ZINTDR,STEPDR
263 //     +             ,IANNI,SANNI,SLANNI,ZINTAN,STEPAN
264 //     +             ,IBREM,SBREM,SLBREM,ZINTBR,STEPBR
265 //     +             ,IHADR,SHADR,SLHADR,ZINTHA,STEPHA
266 //     +             ,IMUNU,SMUNU,SLMUNU,ZINTMU,STEPMU
267 //     +             ,IDCAY,SDCAY,SLIFE ,SUMLIF,DPHYS1
268 //     +             ,ILOSS,SLOSS,SOLOSS,STLOSS,DPHYS2
269 //     +             ,IMULS,SMULS,SOMULS,STMULS,DPHYS3
270 //     +             ,IRAYL,SRAYL,SLRAYL,ZINTRA,STEPRA
271 //      COMMON/GCPHLT/ILABS,SLABS,SLLABS,ZINTLA,STEPLA
272 //     +             ,ISYNC
273 //     +             ,ISTRA
274 typedef struct { 
275   Int_t    ipair;
276   Float_t  spair;
277   Float_t  slpair;
278   Float_t  zintpa;
279   Float_t  steppa;
280   Int_t    icomp;
281   Float_t  scomp;
282   Float_t  slcomp;
283   Float_t  zintco;
284   Float_t  stepco;
285   Int_t    iphot;
286   Float_t  sphot;
287   Float_t  slphot;
288   Float_t  zintph;
289   Float_t  stepph;
290   Int_t    ipfis;
291   Float_t  spfis;
292   Float_t  slpfis;
293   Float_t  zintpf;
294   Float_t  steppf;
295   Int_t    idray;
296   Float_t  sdray;
297   Float_t  sldray;
298   Float_t  zintdr;
299   Float_t  stepdr;
300   Int_t    ianni;
301   Float_t  sanni;
302   Float_t  slanni;
303   Float_t  zintan;
304   Float_t  stepan;
305   Int_t    ibrem;
306   Float_t  sbrem;
307   Float_t  slbrem;
308   Float_t  zintbr;
309   Float_t  stepbr;
310   Int_t    ihadr;
311   Float_t  shadr;
312   Float_t  slhadr;
313   Float_t  zintha;
314   Float_t  stepha;
315   Int_t    imunu;
316   Float_t  smunu;
317   Float_t  slmunu;
318   Float_t  zintmu;
319   Float_t  stepmu;
320   Int_t    idcay;
321   Float_t  sdcay;
322   Float_t  slife;
323   Float_t  sumlif;
324   Float_t  dphys1;
325   Int_t    iloss;
326   Float_t  sloss;
327   Float_t  soloss;
328   Float_t  stloss;
329   Float_t  dphys2;
330   Int_t    imuls;
331   Float_t  smuls;
332   Float_t  somuls;
333   Float_t  stmuls;
334   Float_t  dphys3;
335   Int_t    irayl;
336   Float_t  srayl;
337   Float_t  slrayl;
338   Float_t  zintra;
339   Float_t  stepra;
340 } Gcphys_t; 
341  
342 //----------GCOPTI 
343 //      COMMON/GCOPTI/IOPTIM
344 typedef struct { 
345   Int_t   ioptim;
346 } Gcopti_t; 
347  
348 //----------GCTLIT 
349 //      COMMON/GCTLIT/THRIND,PMIN,DP,DNDL,JMIN,ITCKOV,IMCKOV,NPCKOV
350 typedef struct { 
351   Float_t   thrind;
352   Float_t   pmin;
353   Float_t   dp;
354   Float_t   dndl;
355   Int_t     jmin;
356   Int_t     itckov;
357   Int_t     imckov;
358   Int_t     npckov;
359 } Gctlit_t; 
360  
361 //----------GCVDMA 
362 //      COMMON/GCVDMA/NVMANY,MANYLE(20),MANYNA(20,15),
363 //     +MANYNU(20,15),NFMANY,MYCOUN,IMYSE,RAYTRA,VECCOS(3)
364 typedef struct { 
365   Int_t     vdma[624];
366   Float_t   raytra;
367   Float_t   veccos[3];
368 } Gcvdma_t; 
369  
370 //----------GCTPOL 
371 #define MAXME1 30 
372 //      COMMON/GCTPOL/POLAR(3), NAMEC1(MAXME1) 
373 typedef struct { 
374   Float_t polar[3]; 
375   Int_t   namec1[MAXME1]; 
376 } Gctpol_t; 
377
378
379 class TGeant3 : public AliMC { 
380
381 private:
382   Int_t fNextVol;    // Iterator for GeomIter
383
384 //--------------Declarations for ZEBRA--------------------- 
385   Int_t *fZiq, *fZlq; 
386   Float_t *fZq; 
387
388   Quest_t  *fQuest; 
389   Gclink_t *fGclink; 
390   Gccuts_t *fGccuts; 
391   Gcmate_t *fGcmate; 
392   Gctpol_t *fGctpol; 
393   Gcnum_t  *fGcnum; 
394   Gcsets_t *fGcsets; 
395   Gcopti_t *fGcopti; 
396   Gctlit_t *fGctlit; 
397   Gcvdma_t *fGcvdma; 
398   Gcvolu_t *fGcvolu; 
399   Gckine_t *fGckine; 
400   Gcflag_t *fGcflag; 
401   Gctmed_t *fGctmed; 
402   Gcphys_t *fGcphys; 
403   Gcking_t *fGcking; 
404   Gckin2_t *fGckin2; 
405   Gckin3_t *fGckin3; 
406   Gctrak_t *fGctrak; 
407
408
409
410 public: 
411   TGeant3(); 
412   TGeant3(const char *title, Int_t nwgeant=0); 
413   virtual ~TGeant3() {} 
414   virtual void LoadAddress(); 
415  
416 ///////////////////////////////////////////////////////////////////////
417 //                                                                   //
418 //                                                                   //
419 //     Here are the service routines from the geometry               //
420 //     which could be implemented also in other geometries           //
421 //                                                                   //
422 //                                                                   //
423 ///////////////////////////////////////////////////////////////////////
424
425   void  GeomIter();
426   Int_t CurrentMaterial(Float_t &a, Float_t &z, Float_t &dens, Float_t &radl, Float_t &absl) const;
427   Int_t NextVolUp(Text_t *name, Int_t &copy);
428   Int_t CurrentVol(Text_t *name, Int_t &copy) const;
429   Int_t CurrentVolOff(Int_t off, Text_t *name, Int_t &copy) const;
430   Int_t VolId(Text_t *name) const;
431   const char* VolName(Int_t id) const;
432   void  TrackPosition(Float_t *xyz) const;
433   void  TrackMomentum(Float_t *xyz) const;  
434   Int_t NofVolumes() const;
435   Float_t TrackTime() const;  
436   Float_t TrackCharge() const;
437   Float_t TrackMass() const;
438   Float_t TrackStep() const;
439   Float_t TrackLength() const;
440   Int_t   TrackPid() const;
441   Bool_t TrackInside() const;
442   Bool_t TrackEntering() const;
443   Bool_t TrackExiting() const;
444   Bool_t TrackOut() const;
445   Bool_t TrackDisappear() const;
446   Bool_t TrackStop() const;
447   Bool_t TrackAlive() const;
448   Int_t   NSecondaries() const;
449   Int_t   CurrentEvent() const;
450   void    ProdProcess(char*) const;
451   void    GetSecondary(Int_t, Int_t&, Float_t*, Float_t*);
452   void   StopTrack();
453   void   StopEvent();
454   Float_t MaxStep() const;
455   void   SetColors();
456   void  SetMaxStep(Float_t maxstep);
457   void  SetMaxNStep(Int_t maxnstp);
458   Int_t GetMaxNStep() const;
459   void GetParticle(const Int_t ipart, char *name, Float_t &mass) const;
460   virtual Int_t GetMedium() const;
461   virtual Float_t Edep() const;
462   virtual Float_t Etot() const;
463   virtual void    Rndm(Float_t* r, const Int_t n) const;
464   virtual void    Material(Int_t&, const char*, Float_t, Float_t, Float_t, Float_t,
465                             Float_t, Float_t* buf=0, Int_t nwbuf=0);
466   virtual void    Mixture(Int_t&, const char*, Float_t*, Float_t*, Float_t, Int_t, Float_t*);
467   virtual void    Medium(Int_t&, const char*, Int_t, Int_t, Int_t, Float_t, Float_t, 
468                    Float_t, Float_t, Float_t, Float_t, Float_t* ubuf=0, Int_t nbuf=0);
469   virtual void    Matrix(Int_t&, Float_t, Float_t, Float_t, Float_t, Float_t, Float_t);
470
471 /////////////////////////////////////////////////////////////////////////////////////////////
472 //                                                                                         //
473 //                                                                                         //
474 //     Here are the interface functions with GEANT3.21                                     //
475 //                                                                                         //
476 //                                                                                         //
477 /////////////////////////////////////////////////////////////////////////////////////////////
478
479   // access functions to commons
480  
481   virtual Quest_t* Quest() const {return fQuest;}
482   virtual Gclink_t* Gclink() const {return fGclink;}
483   virtual Gccuts_t* Gccuts() const {return fGccuts;}
484   virtual Gcmate_t* Gcmate() const {return fGcmate;}
485   virtual Gctpol_t* Gctpol() const {return fGctpol;}
486   virtual Gcnum_t* Gcnum() const {return fGcnum;}
487   virtual Gcsets_t* Gcsets() const {return fGcsets;}
488   virtual Gcopti_t* Gcopti() const {return fGcopti;}
489   virtual Gctlit_t* Gctlit() const {return fGctlit;}
490   virtual Gcvdma_t* Gcvdma() const {return fGcvdma;}
491   virtual Gcvolu_t* Gcvolu() const {return fGcvolu;}
492   virtual Gckine_t* Gckine() const {return fGckine;}
493   virtual Gcflag_t* Gcflag() const {return fGcflag;}
494   virtual Gctmed_t* Gctmed() const {return fGctmed;}
495   virtual Gcphys_t* Gcphys() const {return fGcphys;}
496   virtual Gcking_t* Gcking() const {return fGcking;}
497   virtual Gckin2_t* Gckin2() const {return fGckin2;}
498   virtual Gckin3_t* Gckin3() const {return fGckin3;}
499   virtual Gctrak_t* Gctrak() const {return fGctrak;}
500   virtual Int_t* Iq() const {return fZiq;}
501   virtual Int_t* Lq() const {return fZlq;}
502   virtual Float_t* Q() const {return fZq;}
503
504
505       // functions from GBASE 
506    virtual  void  Gpcxyz(); 
507    virtual  void  Ggclos(); 
508    virtual  void  Gfile(const char *filename, const char *option="I"); 
509    virtual  void  Glast(); 
510    virtual  void  Gprint(const char *name); 
511    virtual  void  Grun(); 
512    virtual  void  Gtrig(); 
513    virtual  void  Gtrigc(); 
514    virtual  void  Gtrigi(); 
515    virtual  void  Gwork(Int_t nwork); 
516    virtual  void  Gzinit(); 
517  
518       // functions from GCONS 
519    virtual  void  Gfmate(Int_t imat, char *name, Float_t &a, Float_t &z, Float_t &dens, 
520                          Float_t &radl, Float_t &absl, Float_t* ubuf, Int_t& nbuf); 
521    virtual  void  Gfpart(Int_t ipart, char *name, Int_t &itrtyp,  
522                          Float_t &amass, Float_t &charge, Float_t &tlife); 
523    virtual  void  Gftmed(Int_t numed, char *name, Int_t &nmat, Int_t &isvol,  
524                          Int_t &ifield, Float_t &fieldm, Float_t &tmaxfd, 
525                          Float_t &stemax, Float_t &deemax, Float_t &epsil, 
526                          Float_t &stmin, Float_t *buf=0, Int_t *nbuf=0); 
527    virtual  void  Gmate(); 
528    virtual  void  Gpart(); 
529    virtual  void  Gsckov(Int_t itmed, Int_t npckov, Float_t *ppckov,
530                          Float_t *absco, Float_t *effic, Float_t *rindex); 
531    virtual  void  Gsdk(Int_t ipart, Float_t *bratio, Int_t *mode); 
532    virtual  void  Gsmate(Int_t imat, const char *name, Float_t a, Float_t z,  
533                          Float_t dens, Float_t radl, Float_t absl); 
534    virtual  void  Gsmixt(Int_t imat, const char *name, Float_t *a, Float_t *z,  
535                          Float_t dens, Int_t nlmat, Float_t *wmat); 
536    virtual  void  Gspart(Int_t ipart, const char *name, Int_t itrtyp,  
537                          Float_t amass, Float_t charge, Float_t tlife); 
538    virtual  void  Gstmed(Int_t numed, const char *name, Int_t nmat, Int_t isvol,  
539                          Int_t ifield, Float_t fieldm, Float_t tmaxfd, 
540                          Float_t stemax, Float_t deemax, Float_t epsil, 
541                          Float_t stmin); 
542    virtual  void  Gstpar(Int_t itmed, const char *param, Float_t parval); 
543  
544       // functions from GKINE 
545    virtual  void  Gfkine(Int_t itra, Float_t *vert, Float_t *pvert, 
546                          Int_t &ipart, Int_t &nvert); 
547    virtual  void  Gfvert(Int_t nvtx, Float_t *v, Int_t &ntbeam, Int_t &nttarg, Float_t &tofg); 
548    virtual  Int_t Gskine(Float_t *plab, Int_t ipart, Int_t nv, Float_t *ubuf=0, Int_t nwbuf=0); 
549    virtual  Int_t Gsvert(Float_t *v, Int_t ntbeam, Int_t nttarg, Float_t *ubuf=0, Int_t nwbuf=0); 
550  
551       // functions from GPHYS 
552    virtual  void  Gphysi(); 
553  
554       // functions from GTRAK 
555    virtual  void  Gdebug(); 
556    virtual  void  Gekbin(); 
557    virtual  void  Gfinds(); 
558    virtual  void  Gsking(Int_t igk); 
559    virtual  void  Gskpho(Int_t igk); 
560    virtual  void  Gsstak(Int_t iflag); 
561    virtual  void  Gsxyz(); 
562    virtual  void  Gtrack(); 
563    virtual  void  Gtreve(); 
564    virtual  void  Grndm(Float_t *rvec, const Int_t len) const; 
565    virtual  void  Grndmq(Int_t &is1, Int_t &is2, const Int_t iseq, const Text_t *chopt); 
566  
567       // functions from GGEOM 
568    virtual  void  Gdxyz(Int_t ); 
569    virtual  void  Gdcxyz(); 
570
571       // functions from GGEOM 
572    virtual  void  Gdtom(Float_t *xd, Float_t *xm, Int_t iflag); 
573    virtual  void  Glmoth(const char* iudet, Int_t iunum, Int_t &nlev, 
574                          Int_t *lvols, Int_t *lindx); 
575    virtual  void  Gmedia(Float_t *x, Int_t &numed); 
576    virtual  void  Gmtod(Float_t *xm, Float_t *xd, Int_t iflag); 
577    virtual  void  Gsdvn(const char *name, const char *mother, Int_t ndiv, Int_t iaxis); 
578    virtual  void  Gsdvn2(const char *name, const char *mother, Int_t ndiv, Int_t iaxis, Float_t c0i, Int_t numed); 
579    virtual  void  Gsdvs(const char *name, const char *mother, Float_t step, Int_t iaxis, Int_t numed); 
580    virtual  void  Gsdvs2(const char *name, const char *mother, Float_t step, Int_t iaxis, Float_t c0, Int_t numed); 
581    virtual  void  Gsdvt(const char *name, const char *mother, Float_t step, Int_t iaxis, Int_t numed, Int_t ndvmx); 
582    virtual  void  Gsdvt2(const char *name, const char *mother, Float_t step, Int_t iaxis,
583                          Float_t c0, Int_t numed, Int_t ndvmx); 
584    virtual  void  Gsord(const char *name, Int_t iax); 
585    virtual  void  Gspos(const char *name, Int_t nr, const char *mother,  
586                          Float_t x, Float_t y, Float_t z, Int_t irot, const char *konly="ONLY"); 
587    virtual  void  Gsposp(const char *name, Int_t nr, const char *mother,  
588                          Float_t x, Float_t y, Float_t z, Int_t irot, const char *konly, Float_t *upar, Int_t np); 
589    virtual  void  Gsrotm(Int_t nmat, Float_t theta1, Float_t phi1, Float_t theta2, Float_t phi2, 
590                          Float_t theta3, Float_t phi3); 
591    virtual  void  Gprotm(Int_t nmat=0); 
592    virtual  Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,  
593                          Float_t *upar, Int_t np); 
594    virtual  void  Gsatt(const char *name, const char *att, Int_t val);
595    virtual  void  Gfpara(const char *name, Int_t number, Int_t intext, Int_t& npar,
596                          Int_t& natt, Float_t* par, Float_t* att);
597    virtual  void  Gckpar(Int_t, Int_t, Float_t*);
598    virtual  void  Gckmat(Int_t, char*);
599     
600       // functions from GDRAW 
601    virtual  void  DefaultRange();
602    virtual  void  InitHIGZ();
603    virtual  void  Gdopen(Int_t view);
604    virtual  void  Gdclose();
605    virtual  void  Gdelete(Int_t view);
606    virtual  void  Gdshow(Int_t view);
607    virtual  void  Gdopt(const char *name,const char *value);
608    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);
609    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);
610    virtual  void  Gdrawx(const char *name,Float_t cutthe, Float_t cutphi, Float_t cutval,
611                          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);
612    virtual  void  Gdhead(Int_t isel, const char *name, Float_t chrsiz=0.6);   
613    virtual  void  Gdman(Float_t u0, Float_t v0, const char *type="MAN");
614    virtual  void  Gdspec(const char *name);
615    virtual  void  DrawOneSpec(const char *name);
616    virtual  void  Gdtree(const char *name,Int_t levmax=15,Int_t ispec=0);
617    virtual  void  GdtreeParent(const char *name,Int_t levmax=15,Int_t ispec=0);
618
619    virtual  void  WriteEuclid(const char*, const char*, Int_t, Int_t);
620
621    virtual  void  SetABAN(Int_t par=1);
622    virtual  void  SetANNI(Int_t par=1);
623    virtual  void  SetAUTO(Int_t par=1);
624    virtual  void  SetBOMB(Float_t bomb=1);
625    virtual  void  SetBREM(Int_t par=1);
626    virtual  void  SetCKOV(Int_t par=1);
627    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);
628    virtual  void  SetCOMP(Int_t par=1);
629    virtual  void  SetCUTS(Float_t cutgam,Float_t cutele,Float_t cutneu,Float_t cuthad,
630                       Float_t cutmuo ,Float_t bcute ,Float_t bcutm ,Float_t dcute ,
631                       Float_t dcutm ,Float_t ppcutm, Float_t tofmax);
632    virtual  void  SetDCAY(Int_t par=1);
633    virtual  void  SetDEBU(Int_t emin=1, Int_t emax=999, Int_t emod=1);
634    virtual  void  SetDRAY(Int_t par=1);
635    virtual  void  SetHADR(Int_t par=1);
636    virtual  void  SetKINE(Int_t kine, Float_t xk1=0, Float_t xk2=0, Float_t xk3=0, Float_t xk4=0,
637                          Float_t xk5=0, Float_t xk6=0, Float_t xk7=0, Float_t xk8=0, Float_t xk9=0,
638                          Float_t xk10=0);
639    virtual  void  SetLOSS(Int_t par=2);
640    virtual  void  SetMULS(Int_t par=1);
641    virtual  void  SetMUNU(Int_t par=1);
642    virtual  void  SetOPTI(Int_t par=2);
643    virtual  void  SetPAIR(Int_t par=1);
644    virtual  void  SetPFIS(Int_t par=1);
645    virtual  void  SetPHOT(Int_t par=1);
646    virtual  void  SetRAYL(Int_t par=1);
647    virtual  void  SetSWIT(Int_t sw, Int_t val=1);
648    virtual  void  SetTRIG(Int_t nevents=1);
649
650    virtual  void  Vname(const char *name, char *vname);
651
652    virtual  void  InitLego();
653         
654    ClassDef(TGeant3,1)  //C++ interface to Geant basic routines 
655 }; 
656
657 #endif