]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TGeant3/TGeant3.h
Call fDecayer->ForceDecay() at the beginning of Generate().
[u/mrichter/AliRoot.git] / TGeant3 / TGeant3.h
CommitLineData
ef42d733 1#ifndef TGEANT3_H
2#define TGEANT3_H
3da30618 3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/* $Id$ */
7
fe4da5cc 8////////////////////////////////////////////////
9// C++ interface to Geant3 basic routines //
10////////////////////////////////////////////////
11
12#include <AliMC.h>
5f73d6ac 13#include <GenTypeDefs.h>
14
fe4da5cc 15//______________________________________________________________
16//
17// Geant3 prototypes for commons
18//
19//______________________________________________________________
20//
21
22//----------QUEST
23// COMMON/QUEST/IQUEST(100)
24typedef struct {
25 Int_t iquest[100];
26} Quest_t;
27
7ac3f11b 28//----------GCBANK
29// COMMON/GCBANK/NZEBRA,GVERSN,ZVERSN,IXSTOR,IXDIV,IXCONS,FENDQ(16)
30// + ,LMAIN,LR1,WS(KWBANK)
31typedef 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
fe4da5cc 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
47typedef 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)
74typedef 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
93typedef 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
114typedef struct {
115 Int_t kcase;
116 Int_t ngkine;
117 Float_t gkin[MXGKIN][5];
aee8290b 118 Float_t tofd[MXGKIN];
fe4da5cc 119 Int_t iflgk[MXGKIN];
120} Gcking_t;
121
122//----------GCKIN2
123// COMMON/GCKIN2/NGPHOT,XPHOT(11,MXPHOT)
124#define MXPHOT 800
125typedef struct {
126 Int_t ngphot;
127 Float_t xphot[MXPHOT][11];
128} Gckin2_t;
129
130//----------GCKIN3
131// COMMON/GCKIN3/GPOS(3,MXGKIN)
132typedef struct {
133 Float_t gpos[MXGKIN][3];
134} Gckin3_t;
135
136//----------GCMATE
137// COMMON/GCMATE/NMAT,NAMATE(5),A,Z,DENS,RADL,ABSL
138typedef 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
151typedef 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
177typedef 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)
215typedef 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)
233typedef 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
246typedef 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)
263typedef 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
9e7a32d1 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)
281typedef 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
fe4da5cc 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
fe4da5cc 312typedef 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;
fd91b664 379
380//----------GCPHLT
381// COMMON/GCPHLT/ILABS,SLABS,SLLABS,ZINTLA,STEPLA
382// + ,ISYNC
383// + ,ISTRA
384typedef 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;
fe4da5cc 393
394//----------GCOPTI
395// COMMON/GCOPTI/IOPTIM
396typedef struct {
397 Int_t ioptim;
398} Gcopti_t;
399
400//----------GCTLIT
401// COMMON/GCTLIT/THRIND,PMIN,DP,DNDL,JMIN,ITCKOV,IMCKOV,NPCKOV
402typedef 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)
416typedef 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)
425typedef struct {
426 Float_t polar[3];
427 Int_t namec1[MAXME1];
428} Gctpol_t;
429
6991054d 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
450typedef 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
475typedef 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
490typedef 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
501typedef 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 ************************************************************************/
fe4da5cc 524
5f73d6ac 525class AliDecayer;
fe4da5cc 526class TGeant3 : public AliMC {
527
fe4da5cc 528public:
529 TGeant3();
530 TGeant3(const char *title, Int_t nwgeant=0);
9006703b 531 virtual ~TGeant3() {if(fVolNames) {
532 delete [] fVolNames;
533 fVolNames=0;}
534 }
ef42d733 535
fe4da5cc 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);
0a6d8768 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;
229004c4 554 Int_t VolId(const Text_t *name) const;
1578254f 555 Int_t IdFromPDG(Int_t pdg) const;
556 Int_t PDGFromId(Int_t pdg) const;
557 void DefineParticles();
099385a4 558 const char* VolName(Int_t id) const;
ef42d733 559 Float_t Xsec(char* reac, Float_t energy, Int_t part, Int_t mate);
0a6d8768 560 void TrackPosition(TLorentzVector &xyz) const;
561 void TrackMomentum(TLorentzVector &xyz) const;
1f97a957 562 Int_t NofVolumes() const;
fe4da5cc 563 Float_t TrackTime() const;
564 Float_t TrackCharge() const;
565 Float_t TrackMass() const;
566 Float_t TrackStep() const;
567 Float_t TrackLength() const;
568 Int_t TrackPid() const;
a01a8b12 569 Bool_t IsNewTrack() const;
0a6d8768 570 Bool_t IsTrackInside() const;
571 Bool_t IsTrackEntering() const;
572 Bool_t IsTrackExiting() const;
573 Bool_t IsTrackOut() const;
574 Bool_t IsTrackDisappeared() const;
575 Bool_t IsTrackStop() const;
576 Bool_t IsTrackAlive() const;
6a935c13 577 Int_t NSecondaries() const;
578 Int_t CurrentEvent() const;
579 const char* ProdProcess() const;
ef42d733 580 void GetSecondary(Int_t isec, Int_t& ipart, TLorentzVector &x,
581 TLorentzVector &p);
fe4da5cc 582 void StopTrack();
583 void StopEvent();
584 Float_t MaxStep() const;
fe4da5cc 585 void SetMaxStep(Float_t maxstep);
586 void SetMaxNStep(Int_t maxnstp);
587 Int_t GetMaxNStep() const;
229004c4 588 void SetCut(const char* cutName, Float_t cutValue);
589 void SetProcess(const char* flagName, Int_t flagValue);
42dcee26 590 // void GetParticle(const Int_t pdg, char *name, Float_t &mass) const;
5f73d6ac 591 void SetExternalDecayer(AliDecayer* decayer) {fDecayer=decayer;}
592 void SetForceDecay(Decay_t decay) {fForceDecay=decay;}
fe4da5cc 593 virtual Int_t GetMedium() const;
594 virtual Float_t Edep() const;
595 virtual Float_t Etot() const;
596 virtual void Rndm(Float_t* r, const Int_t n) const;
ef42d733 597
598 virtual void Material(Int_t& kmat, const char* name, Float_t a, Float_t z,
599 Float_t dens, Float_t radl, Float_t absl,
600 Float_t* buf=0, Int_t nwbuf=0);
601
602 virtual void Mixture(Int_t& kmat, const char* name, Float_t* a,Float_t* z,
603 Float_t dens, Int_t nlmat, Float_t* wmat);
604
605 virtual void Medium(Int_t& kmed, const char* name, Int_t nmat, Int_t isvol,
606 Int_t ifield, Float_t fieldm, Float_t tmaxfd,
607 Float_t stemax, Float_t deemax, Float_t epsil,
608 Float_t stmin, Float_t* ubuf=0, Int_t nbuf=0);
609
610 virtual void Matrix(Int_t& krot, Float_t thex, Float_t phix, Float_t they,
611 Float_t phiy, Float_t thez, Float_t phiz);
fe4da5cc 612
613/////////////////////////////////////////////////////////////////////////////////////////////
614// //
615// //
616// Here are the interface functions with GEANT3.21 //
617// //
618// //
619/////////////////////////////////////////////////////////////////////////////////////////////
620
621 // access functions to commons
622
623 virtual Quest_t* Quest() const {return fQuest;}
7ac3f11b 624 virtual Gcbank_t* Gcbank() const {return fGcbank;}
fe4da5cc 625 virtual Gclink_t* Gclink() const {return fGclink;}
626 virtual Gccuts_t* Gccuts() const {return fGccuts;}
9e7a32d1 627 virtual Gcmulo_t* Gcmulo() const {return fGcmulo;}
fe4da5cc 628 virtual Gcmate_t* Gcmate() const {return fGcmate;}
629 virtual Gctpol_t* Gctpol() const {return fGctpol;}
630 virtual Gcnum_t* Gcnum() const {return fGcnum;}
631 virtual Gcsets_t* Gcsets() const {return fGcsets;}
632 virtual Gcopti_t* Gcopti() const {return fGcopti;}
633 virtual Gctlit_t* Gctlit() const {return fGctlit;}
634 virtual Gcvdma_t* Gcvdma() const {return fGcvdma;}
635 virtual Gcvolu_t* Gcvolu() const {return fGcvolu;}
636 virtual Gckine_t* Gckine() const {return fGckine;}
637 virtual Gcflag_t* Gcflag() const {return fGcflag;}
638 virtual Gctmed_t* Gctmed() const {return fGctmed;}
639 virtual Gcphys_t* Gcphys() const {return fGcphys;}
fd91b664 640 virtual Gcphlt_t* Gcphlt() const {return fGcphlt;}
fe4da5cc 641 virtual Gcking_t* Gcking() const {return fGcking;}
642 virtual Gckin2_t* Gckin2() const {return fGckin2;}
643 virtual Gckin3_t* Gckin3() const {return fGckin3;}
644 virtual Gctrak_t* Gctrak() const {return fGctrak;}
24380615 645 virtual Int_t* Iq() const {return fZiq;}
646 virtual Int_t* Lq() const {return fZlq;}
647 virtual Float_t* Q() const {return fZq;}
fe4da5cc 648
649
6991054d 650 // Access to GEANE commons
651
652 virtual Ertrio_t* Ertrio() const {return fErtrio;}
653 virtual Eropts_t* Eropts() const {return fEropts;}
654 virtual Eroptc_t* Eroptc() const {return fEroptc;}
655 virtual Erwork_t* Erwork() const {return fErwork;}
656
657
658
fe4da5cc 659 // functions from GBASE
660 virtual void Gpcxyz();
661 virtual void Ggclos();
662 virtual void Gfile(const char *filename, const char *option="I");
663 virtual void Glast();
664 virtual void Gprint(const char *name);
665 virtual void Grun();
666 virtual void Gtrig();
667 virtual void Gtrigc();
668 virtual void Gtrigi();
669 virtual void Gwork(Int_t nwork);
670 virtual void Gzinit();
671
672 // functions from GCONS
673 virtual void Gfmate(Int_t imat, char *name, Float_t &a, Float_t &z, Float_t &dens,
674 Float_t &radl, Float_t &absl, Float_t* ubuf, Int_t& nbuf);
675 virtual void Gfpart(Int_t ipart, char *name, Int_t &itrtyp,
676 Float_t &amass, Float_t &charge, Float_t &tlife);
677 virtual void Gftmed(Int_t numed, char *name, Int_t &nmat, Int_t &isvol,
678 Int_t &ifield, Float_t &fieldm, Float_t &tmaxfd,
679 Float_t &stemax, Float_t &deemax, Float_t &epsil,
98be8990 680 Float_t &stmin, Float_t *buf=0, Int_t *nbuf=0);
681 virtual void Gftmat(Int_t imate, Int_t ipart, char *chmeca, Int_t kdim,
682 Float_t* tkin, Float_t* value, Float_t* pcut,
683 Int_t &ixst);
684 virtual Float_t Gbrelm(Float_t z, Float_t t, Float_t cut);
685 virtual Float_t Gprelm(Float_t z, Float_t t, Float_t cut);
fe4da5cc 686 virtual void Gmate();
687 virtual void Gpart();
688 virtual void Gsckov(Int_t itmed, Int_t npckov, Float_t *ppckov,
689 Float_t *absco, Float_t *effic, Float_t *rindex);
690 virtual void Gsdk(Int_t ipart, Float_t *bratio, Int_t *mode);
691 virtual void Gsmate(Int_t imat, const char *name, Float_t a, Float_t z,
692 Float_t dens, Float_t radl, Float_t absl);
693 virtual void Gsmixt(Int_t imat, const char *name, Float_t *a, Float_t *z,
694 Float_t dens, Int_t nlmat, Float_t *wmat);
695 virtual void Gspart(Int_t ipart, const char *name, Int_t itrtyp,
696 Float_t amass, Float_t charge, Float_t tlife);
697 virtual void Gstmed(Int_t numed, const char *name, Int_t nmat, Int_t isvol,
698 Int_t ifield, Float_t fieldm, Float_t tmaxfd,
699 Float_t stemax, Float_t deemax, Float_t epsil,
700 Float_t stmin);
701 virtual void Gstpar(Int_t itmed, const char *param, Float_t parval);
702
703 // functions from GKINE
704 virtual void Gfkine(Int_t itra, Float_t *vert, Float_t *pvert,
705 Int_t &ipart, Int_t &nvert);
706 virtual void Gfvert(Int_t nvtx, Float_t *v, Int_t &ntbeam, Int_t &nttarg, Float_t &tofg);
707 virtual Int_t Gskine(Float_t *plab, Int_t ipart, Int_t nv, Float_t *ubuf=0, Int_t nwbuf=0);
708 virtual Int_t Gsvert(Float_t *v, Int_t ntbeam, Int_t nttarg, Float_t *ubuf=0, Int_t nwbuf=0);
709
710 // functions from GPHYS
711 virtual void Gphysi();
712
713 // functions from GTRAK
714 virtual void Gdebug();
715 virtual void Gekbin();
716 virtual void Gfinds();
717 virtual void Gsking(Int_t igk);
718 virtual void Gskpho(Int_t igk);
719 virtual void Gsstak(Int_t iflag);
720 virtual void Gsxyz();
721 virtual void Gtrack();
722 virtual void Gtreve();
aee8290b 723 virtual void GtreveRoot();
fe4da5cc 724 virtual void Grndm(Float_t *rvec, const Int_t len) const;
725 virtual void Grndmq(Int_t &is1, Int_t &is2, const Int_t iseq, const Text_t *chopt);
726
727 // functions from GGEOM
ef42d733 728 virtual void Gdxyz(Int_t it);
fe4da5cc 729 virtual void Gdcxyz();
730
731 // functions from GGEOM
732 virtual void Gdtom(Float_t *xd, Float_t *xm, Int_t iflag);
733 virtual void Glmoth(const char* iudet, Int_t iunum, Int_t &nlev,
734 Int_t *lvols, Int_t *lindx);
735 virtual void Gmedia(Float_t *x, Int_t &numed);
736 virtual void Gmtod(Float_t *xm, Float_t *xd, Int_t iflag);
737 virtual void Gsdvn(const char *name, const char *mother, Int_t ndiv, Int_t iaxis);
738 virtual void Gsdvn2(const char *name, const char *mother, Int_t ndiv, Int_t iaxis, Float_t c0i, Int_t numed);
739 virtual void Gsdvs(const char *name, const char *mother, Float_t step, Int_t iaxis, Int_t numed);
740 virtual void Gsdvs2(const char *name, const char *mother, Float_t step, Int_t iaxis, Float_t c0, Int_t numed);
741 virtual void Gsdvt(const char *name, const char *mother, Float_t step, Int_t iaxis, Int_t numed, Int_t ndvmx);
742 virtual void Gsdvt2(const char *name, const char *mother, Float_t step, Int_t iaxis,
743 Float_t c0, Int_t numed, Int_t ndvmx);
744 virtual void Gsord(const char *name, Int_t iax);
745 virtual void Gspos(const char *name, Int_t nr, const char *mother,
746 Float_t x, Float_t y, Float_t z, Int_t irot, const char *konly="ONLY");
747 virtual void Gsposp(const char *name, Int_t nr, const char *mother,
748 Float_t x, Float_t y, Float_t z, Int_t irot, const char *konly, Float_t *upar, Int_t np);
749 virtual void Gsrotm(Int_t nmat, Float_t theta1, Float_t phi1, Float_t theta2, Float_t phi2,
750 Float_t theta3, Float_t phi3);
751 virtual void Gprotm(Int_t nmat=0);
752 virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,
753 Float_t *upar, Int_t np);
754 virtual void Gsatt(const char *name, const char *att, Int_t val);
755 virtual void Gfpara(const char *name, Int_t number, Int_t intext, Int_t& npar,
756 Int_t& natt, Float_t* par, Float_t* att);
ef42d733 757 virtual void Gckpar(Int_t ish, Int_t npar, Float_t *par);
758 virtual void Gckmat(Int_t itmed, char *natmed);
fe4da5cc 759
760 // functions from GDRAW
761 virtual void DefaultRange();
762 virtual void InitHIGZ();
763 virtual void Gdopen(Int_t view);
764 virtual void Gdclose();
765 virtual void Gdelete(Int_t view);
766 virtual void Gdshow(Int_t view);
767 virtual void Gdopt(const char *name,const char *value);
768 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);
769 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);
770 virtual void Gdrawx(const char *name,Float_t cutthe, Float_t cutphi, Float_t cutval,
771 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);
772 virtual void Gdhead(Int_t isel, const char *name, Float_t chrsiz=0.6);
773 virtual void Gdman(Float_t u0, Float_t v0, const char *type="MAN");
774 virtual void Gdspec(const char *name);
775 virtual void DrawOneSpec(const char *name);
776 virtual void Gdtree(const char *name,Int_t levmax=15,Int_t ispec=0);
777 virtual void GdtreeParent(const char *name,Int_t levmax=15,Int_t ispec=0);
778
ef42d733 779 virtual void WriteEuclid(const char* filnam, const char* topvol,
780 Int_t number, Int_t nlevel);
fe4da5cc 781
782 virtual void SetABAN(Int_t par=1);
783 virtual void SetANNI(Int_t par=1);
784 virtual void SetAUTO(Int_t par=1);
785 virtual void SetBOMB(Float_t bomb=1);
786 virtual void SetBREM(Int_t par=1);
787 virtual void SetCKOV(Int_t par=1);
788 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);
789 virtual void SetCOMP(Int_t par=1);
790 virtual void SetCUTS(Float_t cutgam,Float_t cutele,Float_t cutneu,Float_t cuthad,
791 Float_t cutmuo ,Float_t bcute ,Float_t bcutm ,Float_t dcute ,
792 Float_t dcutm ,Float_t ppcutm, Float_t tofmax);
793 virtual void SetDCAY(Int_t par=1);
794 virtual void SetDEBU(Int_t emin=1, Int_t emax=999, Int_t emod=1);
795 virtual void SetDRAY(Int_t par=1);
9e7a32d1 796 virtual void SetERAN(Float_t ekmin=1.e-5, Float_t ekmax=1.e4,
797 Int_t nekbin=90);
fe4da5cc 798 virtual void SetHADR(Int_t par=1);
799 virtual void SetKINE(Int_t kine, Float_t xk1=0, Float_t xk2=0, Float_t xk3=0, Float_t xk4=0,
800 Float_t xk5=0, Float_t xk6=0, Float_t xk7=0, Float_t xk8=0, Float_t xk9=0,
801 Float_t xk10=0);
802 virtual void SetLOSS(Int_t par=2);
803 virtual void SetMULS(Int_t par=1);
804 virtual void SetMUNU(Int_t par=1);
805 virtual void SetOPTI(Int_t par=2);
806 virtual void SetPAIR(Int_t par=1);
807 virtual void SetPFIS(Int_t par=1);
808 virtual void SetPHOT(Int_t par=1);
809 virtual void SetRAYL(Int_t par=1);
fd91b664 810 virtual void SetSTRA(Int_t par=0);
fe4da5cc 811 virtual void SetSWIT(Int_t sw, Int_t val=1);
812 virtual void SetTRIG(Int_t nevents=1);
7ac3f11b 813 virtual void SetUserDecay(Int_t ipart);
fe4da5cc 814
815 virtual void Vname(const char *name, char *vname);
816
817 virtual void InitLego();
6991054d 818
819 // Routines from GEANE
820
821 virtual void Ertrgo();
822 virtual void Ertrak(const Float_t *const x1, const Float_t *const p1,
823 const Float_t *x2, const Float_t *p2,
824 Int_t ipa, Option_t *chopt);
fe4da5cc 825
875c717b 826 // Control Methods
827
828 virtual void FinishGeometry();
829 virtual void BuildPhysics();
830
5f73d6ac 831 // Get pointer to external decayer
832 virtual AliDecayer* Decayer() {return fDecayer;}
833
ef42d733 834protected:
835 Int_t fNextVol; // Iterator for GeomIter
836
837//--------------Declarations for ZEBRA---------------------
838 Int_t *fZiq; // Good Old IQ of Zebra
839 Int_t *fZlq; // Good Old LQ of Zebra
840 Float_t *fZq; // Good Old Q of Zebra
841
842 Quest_t *fQuest; // QUEST common structure
843 Gcbank_t *fGcbank; // GCBANK common structure
844 Gclink_t *fGclink; // GCLINK common structure
845 Gccuts_t *fGccuts; // GCCUTS common structure
846 Gcmulo_t *fGcmulo; // GCMULO common structure
847 Gcmate_t *fGcmate; // GCMATE common structure
848 Gctpol_t *fGctpol; // GCTPOL common structure
849 Gcnum_t *fGcnum; // GCNUM common structure
850 Gcsets_t *fGcsets; // GCSETS common structure
851 Gcopti_t *fGcopti; // GCOPTI common structure
852 Gctlit_t *fGctlit; // GCTLIT common structure
853 Gcvdma_t *fGcvdma; // GCVDMA common structure
854 Gcvolu_t *fGcvolu; // GCVOLU common structure
855 Gckine_t *fGckine; // GCKINE common structure
856 Gcflag_t *fGcflag; // GCFLAG common structure
857 Gctmed_t *fGctmed; // GCTMED common structure
858 Gcphys_t *fGcphys; // GCPHYS common structure
859 Gcphlt_t *fGcphlt; // GCPHLT common structure
860 Gcking_t *fGcking; // GCKING common structure
861 Gckin2_t *fGckin2; // GCKIN2 common structure
862 Gckin3_t *fGckin3; // GCKIN3 common structure
863 Gctrak_t *fGctrak; // GCTRAK common structure
864
865
866 // commons for GEANE
867 Ertrio_t *fErtrio; // ERTRIO common structure
868 Eropts_t *fEropts; // EROPTS common structure
869 Eroptc_t *fEroptc; // EROPTC common structure
870 Erwork_t *fErwork; // ERWORK common structure
871
872 //Put here all volume names
873
874 char (*fVolNames)[5]; //! Names of geant volumes as C++ chars
875
876 enum {kMaxParticles = 100};
877
878 Int_t fNPDGCodes; // Number of PDG codes known by G3
879
880 Int_t fPDGCode[kMaxParticles]; // Translation table of PDG codes
881
5f73d6ac 882
883
884protected:
885 AliDecayer* fDecayer; // Pointer to decayer
886 Decay_t fForceDecay; // Forced decay modes
887
ef42d733 888private:
889 TGeant3(const TGeant3 &) {}
890 TGeant3 & operator=(const TGeant3&) {return *this;}
891
892
fe4da5cc 893 ClassDef(TGeant3,1) //C++ interface to Geant basic routines
894};
895
896#endif