3 ////////////////////////////////////////////////
4 // C++ interface to Geant3 basic routines //
5 ////////////////////////////////////////////////
9 //______________________________________________________________
11 // Geant3 prototypes for commons
13 //______________________________________________________________
17 // COMMON/QUEST/IQUEST(100)
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
51 // COMMON/GCFLAG/IDEBUG,IDEMIN,IDEMAX,ITEST,IDRUN,IDEVT,IEORUN
52 // + ,IEOTRI,IEVENT,ISWIT(10),IFINIT(20),NEVENT,NRNDM(2)
70 // COMMON/GCKINE/IKINE,PKINE(10),ITRA,ISTAK,IVERT,IPART,ITRTYP
71 // + ,NAPART(5),AMASS,CHARGE,TLIFE,VERT(3),PVERT(4),IPAOLD
90 // COMMON/GCKING/KCASE,NGKINE,GKIN(5,MXGKIN),
91 // + TOFD(MXGKIN),IFLGK(MXGKIN)
96 Float_t gkin[MXGKIN][5];
102 // COMMON/GCKIN2/NGPHOT,XPHOT(11,MXPHOT)
106 Float_t xphot[MXPHOT][11];
110 // COMMON/GCKIN3/GPOS(3,MXGKIN)
112 Float_t gpos[MXGKIN][3];
116 // COMMON/GCMATE/NMAT,NAMATE(5),A,Z,DENS,RADL,ABSL
128 // COMMON/GCTMED/NUMED,NATMED(5),ISVOL,IFIELD,FIELDM,TMAXFD,STEMAX
129 // + ,DEEMAX,EPSIL,STMIN,CFIELD,PREC,IUPD,ISTPAR,NUMOLD
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
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)
204 Float_t gtran[15][3];
205 Float_t grmat[15][10];
211 // COMMON/GCSETS/IHSET,IHDET,ISET,IDET,IDTYPE,NVNAME,NUMBV(20)
223 // COMMON/GCNUM/NMATE ,NVOLUM,NROTM,NTMED,NTMULT,NTRACK,NPART
224 // + ,NSTMAX,NVERTX,NHEAD,NBIT
240 // COMMON/GCCUTS/CUTGAM,CUTELE,CUTNEU,CUTHAD,CUTMUO,BCUTE,BCUTM
241 // + ,DCUTE ,DCUTM ,PPCUTM,TOFMAX,GCUTS(5)
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
343 // COMMON/GCOPTI/IOPTIM
349 // COMMON/GCTLIT/THRIND,PMIN,DP,DNDL,JMIN,ITCKOV,IMCKOV,NPCKOV
362 // COMMON/GCVDMA/NVMANY,MANYLE(20),MANYNA(20,15),
363 // +MANYNU(20,15),NFMANY,MYCOUN,IMYSE,RAYTRA,VECCOS(3)
372 // COMMON/GCTPOL/POLAR(3), NAMEC1(MAXME1)
375 Int_t namec1[MAXME1];
379 class TGeant3 : public AliMC {
382 Int_t fNextVol; // Iterator for GeomIter
384 //--------------Declarations for ZEBRA---------------------
412 TGeant3(const char *title, Int_t nwgeant=0);
413 virtual ~TGeant3() {}
414 virtual void LoadAddress();
416 ///////////////////////////////////////////////////////////////////////
419 // Here are the service routines from the geometry //
420 // which could be implemented also in other geometries //
423 ///////////////////////////////////////////////////////////////////////
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 ©);
428 Int_t CurrentVol(Text_t *name, Int_t ©) const;
429 Int_t CurrentVolOff(Int_t off, Text_t *name, Int_t ©) const;
430 Int_t VolId(Text_t *name) const;
431 char* VolName(Int_t id) const;
432 void TrackPosition(Float_t *xyz) const;
433 void TrackMomentum(Float_t *xyz) const;
434 Int_t Nvolumes() 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*);
454 Float_t MaxStep() const;
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);
471 /////////////////////////////////////////////////////////////////////////////////////////////
474 // Here are the interface functions with GEANT3.21 //
477 /////////////////////////////////////////////////////////////////////////////////////////////
479 // access functions to commons
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;}
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);
512 virtual void Gtrig();
513 virtual void Gtrigc();
514 virtual void Gtrigi();
515 virtual void Gwork(Int_t nwork);
516 virtual void Gzinit();
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,
542 virtual void Gstpar(Int_t itmed, const char *param, Float_t parval);
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);
551 // functions from GPHYS
552 virtual void Gphysi();
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);
567 // functions from GGEOM
568 virtual void Gdxyz(Int_t );
569 virtual void Gdcxyz();
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*);
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);
619 virtual void WriteEuclid(const char*, const char*, Int_t, Int_t);
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,
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);
650 virtual void Vname(const char *name, char *vname);
652 virtual void InitLego();
654 ClassDef(TGeant3,1) //C++ interface to Geant basic routines