/*
$Log$
+Revision 1.42 2000/12/19 08:37:48 alibrary
+Using dlsym to retrieve address of commons
+
+Revision 1.41 2000/12/18 11:33:50 alibrary
+New call frequence histograms per module and volume
+
+Revision 1.40 2000/12/06 10:06:58 morsch
+Add all D and B baryons produced by HIJING to PDG DataBase.
+
+Revision 1.39 2000/11/30 07:12:54 alibrary
+Introducing new Rndm and QA classes
+
+Revision 1.38 2000/10/30 15:19:06 morsch
+Xi(b) (pdg code 5232) added to Pdg data base.
+
+Revision 1.37 2000/10/02 21:28:16 fca
+Removal of useless dependecies via forward declarations
+
+Revision 1.36 2000/09/14 07:08:41 fca
+Introducing glvolu in the interface
+
Revision 1.35 2000/09/12 14:27:10 morsch
No instance of AliDecayer created to initialize fDecayer.
// //
///////////////////////////////////////////////////////////////////////////////
-#include "TGeant3.h"
+#include "dlfcn.h"
+#include "ctype.h"
+
#include "TROOT.h"
+#include "TDatabasePDG.h"
+#include "TLorentzVector.h"
+#include "TArrayI.h"
+
#include "THIGZ.h"
-#include "ctype.h"
-#include <TDatabasePDG.h>
+#include "TGeant3.h"
+
#include "AliCallf77.h"
#include "AliDecayer.h"
-
+
#ifndef WIN32
# define gzebra gzebra_
# define grfile grfile_
# define setbomb setbomb_
# define setclip setclip_
-# define gcomad gcomad_
# define gbrelm gbrelm_
# define gprelm gprelm_
# define setbomb SETBOMB
# define setclip SETCLIP
-# define gcomad GCOMAD
# define gbrelm GBRELM
# define gprelm GPRELM
void type_of_call gtreveroot();
- void type_of_call grndm(Float_t *, const Int_t &);
+ void type_of_call grndm(Float_t *r, const Int_t &n)
+ {gMC->Rndm(r,n);}
void type_of_call grndmq(Int_t &, Int_t &, const Int_t &,
- DEFCHARD DEFCHARL);
+ DEFCHARD DEFCHARL)
+ {/*printf("Dummy grndmq called\n");*/}
void type_of_call gdtom(Float_t *, Float_t *, Int_t &);
void type_of_call setbomb(Float_t &);
void type_of_call setclip(DEFCHARD, Float_t &,Float_t &,Float_t &,Float_t &,
Float_t &, Float_t & DEFCHARL);
- void type_of_call gcomad(DEFCHARD, Int_t*& DEFCHARL);
void type_of_call ertrak(const Float_t *const x1, const Float_t *const p1,
const Float_t *x2, const Float_t *p2,
// Assigns the address of the GEANT common blocks to the structures
// that allow their access from C++
//
- Int_t *addr;
- gcomad(PASSCHARD("QUEST"), (int*&) fQuest PASSCHARL("QUEST"));
- gcomad(PASSCHARD("GCBANK"),(int*&) fGcbank PASSCHARL("GCBANK"));
- gcomad(PASSCHARD("GCLINK"),(int*&) fGclink PASSCHARL("GCLINK"));
- gcomad(PASSCHARD("GCCUTS"),(int*&) fGccuts PASSCHARL("GCCUTS"));
- gcomad(PASSCHARD("GCMULO"),(int*&) fGcmulo PASSCHARL("GCMULO"));
- gcomad(PASSCHARD("GCFLAG"),(int*&) fGcflag PASSCHARL("GCFLAG"));
- gcomad(PASSCHARD("GCKINE"),(int*&) fGckine PASSCHARL("GCKINE"));
- gcomad(PASSCHARD("GCKING"),(int*&) fGcking PASSCHARL("GCKING"));
- gcomad(PASSCHARD("GCKIN2"),(int*&) fGckin2 PASSCHARL("GCKIN2"));
- gcomad(PASSCHARD("GCKIN3"),(int*&) fGckin3 PASSCHARL("GCKIN3"));
- gcomad(PASSCHARD("GCMATE"),(int*&) fGcmate PASSCHARL("GCMATE"));
- gcomad(PASSCHARD("GCTMED"),(int*&) fGctmed PASSCHARL("GCTMED"));
- gcomad(PASSCHARD("GCTRAK"),(int*&) fGctrak PASSCHARL("GCTRAK"));
- gcomad(PASSCHARD("GCTPOL"),(int*&) fGctpol PASSCHARL("GCTPOL"));
- gcomad(PASSCHARD("GCVOLU"),(int*&) fGcvolu PASSCHARL("GCVOLU"));
- gcomad(PASSCHARD("GCNUM"), (int*&) fGcnum PASSCHARL("GCNUM"));
- gcomad(PASSCHARD("GCSETS"),(int*&) fGcsets PASSCHARL("GCSETS"));
- gcomad(PASSCHARD("GCPHYS"),(int*&) fGcphys PASSCHARL("GCPHYS"));
- gcomad(PASSCHARD("GCPHLT"),(int*&) fGcphlt PASSCHARL("GCPHLT"));
- gcomad(PASSCHARD("GCOPTI"),(int*&) fGcopti PASSCHARL("GCOPTI"));
- gcomad(PASSCHARD("GCTLIT"),(int*&) fGctlit PASSCHARL("GCTLIT"));
- gcomad(PASSCHARD("GCVDMA"),(int*&) fGcvdma PASSCHARL("GCVDMA"));
-
+ void *handle = dlopen (NULL, RTLD_LAZY);
+
+#ifndef WIN32
+ fQuest = (Quest_t *) dlsym(handle,"quest_");
+ fGcbank = (Gcbank_t *) dlsym(handle,"gcbank_");
+ fGclink = (Gclink_t *) dlsym(handle,"gclink_");
+ fGccuts = (Gccuts_t *) dlsym(handle,"gccuts_");
+ fGcmulo = (Gcmulo_t *) dlsym(handle,"gcmulo_");
+ fGcflag = (Gcflag_t *) dlsym(handle,"gcflag_");
+ fGckine = (Gckine_t *) dlsym(handle,"gckine_");
+ fGcking = (Gcking_t *) dlsym(handle,"gcking_");
+ fGckin2 = (Gckin2_t *) dlsym(handle,"gckin2_");
+ fGckin3 = (Gckin3_t *) dlsym(handle,"gckin3_");
+ fGcmate = (Gcmate_t *) dlsym(handle,"gcmate_");
+ fGctmed = (Gctmed_t *) dlsym(handle,"gctmed_");
+ fGctrak = (Gctrak_t *) dlsym(handle,"gctrak_");
+ fGctpol = (Gctpol_t *) dlsym(handle,"gctpol_");
+ fGcvolu = (Gcvolu_t *) dlsym(handle,"gcvolu_");
+ fGcnum = (Gcnum_t *) dlsym(handle,"gcnum_");
+ fGcsets = (Gcsets_t *) dlsym(handle,"gcsets_");
+ fGcphys = (Gcphys_t *) dlsym(handle,"gcphys_");
+ fGcphlt = (Gcphlt_t *) dlsym(handle,"gcphlt_");
+ fGcopti = (Gcopti_t *) dlsym(handle,"gcopti_");
+ fGctlit = (Gctlit_t *) dlsym(handle,"gctlit_");
+ fGcvdma = (Gcvdma_t *) dlsym(handle,"gcvdma_");
+
// Commons for GEANE
- gcomad(PASSCHARD("ERTRIO"),(int*&) fErtrio PASSCHARL("ERTRIO"));
- gcomad(PASSCHARD("EROPTS"),(int*&) fEropts PASSCHARL("EROPTS"));
- gcomad(PASSCHARD("EROPTC"),(int*&) fEroptc PASSCHARL("EROPTC"));
- gcomad(PASSCHARD("ERWORK"),(int*&) fErwork PASSCHARL("ERWORK"));
-
+ fErtrio = (Ertrio_t *) dlsym(handle,"ertrio_");
+ fEropts = (Eropts_t *) dlsym(handle,"eropts_");
+ fEroptc = (Eroptc_t *) dlsym(handle,"eroptc_");
+ fErwork = (Erwork_t *) dlsym(handle,"erwork_");
+#else
+ fQuest = (Quest_t *) dlsym(handle,"QUEST");
+ fGcbank = (Gcbank_t *) dlsym(handle,"GCBANK");
+ fGclink = (Gclink_t *) dlsym(handle,"GCLINK");
+ fGccuts = (Gccuts_t *) dlsym(handle,"GCCUTS");
+ fGcmulo = (Gcmulo_t *) dlsym(handle,"GCMULO");
+ fGcflag = (Gcflag_t *) dlsym(handle,"GCFLAG");
+ fGckine = (Gckine_t *) dlsym(handle,"GCKINE");
+ fGcking = (Gcking_t *) dlsym(handle,"GCKING");
+ fGckin2 = (Gckin2_t *) dlsym(handle,"GCKIN2");
+ fGckin3 = (Gckin3_t *) dlsym(handle,"GCKIN3");
+ fGcmate = (Gcmate_t *) dlsym(handle,"GCMATE");
+ fGctmed = (Gctmed_t *) dlsym(handle,"GCTMED");
+ fGctrak = (Gctrak_t *) dlsym(handle,"GCTRAK");
+ fGctpol = (Gctpol_t *) dlsym(handle,"GCTPOL");
+ fGcvolu = (Gcvolu_t *) dlsym(handle,"GCVOLU");
+ fGcnum = (Gcnum_t *) dlsym(handle,"GCNUM");
+ fGcsets = (Gcsets_t *) dlsym(handle,"GCSETS");
+ fGcphys = (Gcphys_t *) dlsym(handle,"GCPHYS");
+ fGcphlt = (Gcphlt_t *) dlsym(handle,"GCPHLT");
+ fGcopti = (Gcopti_t *) dlsym(handle,"GCOPTI");
+ fGctlit = (Gctlit_t *) dlsym(handle,"GCTLIT");
+ fGcvdma = (Gcvdma_t *) dlsym(handle,"GCVDMA");
+
+ // Commons for GEANE
+ fErtrio = (Ertrio_t *) dlsym(handle,"ERTRIO");
+ fEropts = (Eropts_t *) dlsym(handle,"EROPTS");
+ fEroptc = (Eroptc_t *) dlsym(handle,"EROPTC");
+ fErwork = (Erwork_t *) dlsym(handle,"ERWORK");
+#endif
+
// Variables for ZEBRA store
- gcomad(PASSCHARD("IQ"), addr PASSCHARL("IQ"));
- fZiq = addr;
- gcomad(PASSCHARD("LQ"), addr PASSCHARL("LQ"));
- fZlq = addr;
- fZq = (float*)fZiq;
+ //
+ fZlq = (Int_t *) &(fGcbank->lmain)-1;
+ fZiq = (Int_t *) &(fGcbank->lmain)+7;
+ fZq = (Float_t *)fZiq;
+
}
//_____________________________________________________________________________
pdgDB->AddParticle("Omega(c)*0 bar","Omega(c)*0",
2.8000, kFALSE, -1., -0.,"Baryon", -4334);
+
+// Xi(cc)
+
+ pdgDB->AddParticle("Xsi(cc)+","Xsi(cc)+",
+ 3.60, kTRUE, -1., +1.,"Baryon", 4412);
+
+ pdgDB->AddParticle("Xsi(cc) bar-","Xsi(cc) bar-",
+ 3.60, kTRUE, -1., -1.,"Baryon", -4412);
+
+ pdgDB->AddParticle("Xsi*(cc)+","Xsi*(cc)+",
+ 3.66, kTRUE, -1., +1.,"Baryon", 4414);
+
+ pdgDB->AddParticle("Xsi*(cc) bar-","Xsi*(cc) bar-",
+ 3.66, kTRUE, -1., -1.,"Baryon", -4414);
+
+
+ pdgDB->AddParticle("Xsi(cc)++","Xsi(cc)++",
+ 3.60, kTRUE, -1., +2.,"Baryon", 4422);
+
+ pdgDB->AddParticle("Xsi(cc) bar--","Xsi(cc) bar--",
+ 3.60, kTRUE, -1., -2.,"Baryon", -4422);
+
+
+ pdgDB->AddParticle("Xsi*(cc)++","Xsi*(cc)++",
+ 3.66, kTRUE, -1., +2.,"Baryon", 4424);
+
+ pdgDB->AddParticle("Xsi*(cc) bar-","Xsi*(cc) bar-",
+ 3.66, kTRUE, -1., -2.,"Baryon", -4424);
+
+ pdgDB->AddParticle("Omega(cc)+","Omega(cc)+",
+ 3.78, kTRUE, -1., +1.,"Baryon", 4432);
+
+ pdgDB->AddParticle("Omega(cc) bar-","Omega(cc) bar-",
+ 3.78, kTRUE, -1., -1.,"Baryon", -4432);
+
+ pdgDB->AddParticle("Omega*(cc)+","Omega*(cc)+",
+ 3.82, kTRUE, -1., +1.,"Baryon", 4434);
+
+ pdgDB->AddParticle("Omega*(cc) bar-","Omega*(cc) bar-",
+ 3.82, kTRUE, -1., -1.,"Baryon", -4434);
+
+
+ pdgDB->AddParticle("Omega*(ccc)+","Omega*(cc)++",
+ 4.91, kTRUE, -1., +2.,"Baryon", 4444);
+
+ pdgDB->AddParticle("Omega*(ccc) bar--","Omega*(cc) bar--",
+ 4.91, kTRUE, -1., -2.,"Baryon", -4444);
+
+
+
// Bottom baryons
//
// mass value from Hijing
pdgDB->AddParticle("Sigma(b)*-","Sigma(b)*-",
5.8100, kFALSE, -1., -1.,"Baryon", -5224);
-
+
+
+ pdgDB->AddParticle("Xi(b)0","Xi(b)0",
+ 5.8400, kFALSE, -1., +0.,"Baryon", 5232);
+
+ pdgDB->AddParticle("Xi(b)0 bar","Xi(b)0 bar",
+ 5.8100, kFALSE, -1., -0.,"Baryon", -5232);
+
+// B(s)
+ pdgDB->AddParticle("Xi'(b)-","Xi'(b)-",
+ 5.9600, kFALSE, -1., -1.,"Baryon", 5312);
+
+ pdgDB->AddParticle("Xi'(b) bar+","Xi'(b) bar+",
+ 5.9600, kFALSE, -1., 1.,"Baryon", -5312);
+
+ pdgDB->AddParticle("Xi*(b)-","Xi*(b)-",
+ 5.9700, kFALSE, -1., -1.,"Baryon", 5314);
+
+ pdgDB->AddParticle("Xi*(b) bar+","Xi*(b) bar+",
+ 5.9700, kFALSE, -1., 1.,"Baryon", -5314);
+
+ pdgDB->AddParticle("Xi'(b)0","Xi'(b)0",
+ 5.9600, kFALSE, -1., -0.,"Baryon", 5322);
+
+ pdgDB->AddParticle("Xi'(b) bar0","Xi'(b) bar0",
+ 5.9600, kFALSE, -1., 0.,"Baryon", -5322);
+
+ pdgDB->AddParticle("Xi*(b)0","Xi*(b)0",
+ 5.9700, kFALSE, -1., -0.,"Baryon", 5324);
+
+ pdgDB->AddParticle("Xi*(b) bar0","Xi*(b) bar0",
+ 5.9700, kFALSE, -1., 0.,"Baryon", -5324);
+
+ pdgDB->AddParticle("Omega(b)-","Omega(b)-",
+ 6.1200, kFALSE, -1., -1.,"Baryon", 5332);
+
+ pdgDB->AddParticle("Omega(b) bar+","Omega(b) bar+",
+ 6.1200, kFALSE, -1., 1.,"Baryon", -5332);
+
+ pdgDB->AddParticle("Omega*(b)-","Omega*(b)-",
+ 6.1300, kFALSE, -1., -1.,"Baryon", 5334);
+
+ pdgDB->AddParticle("Omega*(b) bar+","Omega*(b) bar+",
+ 6.1300, kFALSE, -1., 1.,"Baryon", -5334);
+
+
+ pdgDB->AddParticle("Omega*(b)-","Omega*(b)-",
+ 6.1300, kFALSE, -1., -1.,"Baryon", 5334);
+
+ pdgDB->AddParticle("Omega*(b) bar+","Omega*(b) bar+",
+ 6.1300, kFALSE, -1., 1.,"Baryon", -5334);
+
+// B(c)
+
+ pdgDB->AddParticle("Omega(bc)0","Omega(bc)0",
+ 7.1900, kFALSE, -1., -0.,"Baryon", 5342);
+
+ pdgDB->AddParticle("Omega(bc) bar0","Omega(bc) bar0",
+ 7.1900, kFALSE, -1., 0.,"Baryon", -5342);
+
+ pdgDB->AddParticle("Xi'(bc)0","Xi'(bc)0",
+ 7.0400, kFALSE, -1., -0.,"Baryon", 5412);
+
+ pdgDB->AddParticle("Xi'(bc) bar0","Xi'(bc) bar0",
+ 7.0400, kFALSE, -1., 0.,"Baryon", -5412);
+
+ pdgDB->AddParticle("Xi*(bc)0","Xi*(bc)0",
+ 7.0500, kFALSE, -1., -0.,"Baryon", 5414);
+
+ pdgDB->AddParticle("Xi*(bc) bar0","Xi*(bc) bar0",
+ 7.0500, kFALSE, -1., 0.,"Baryon", -5414);
+
+ pdgDB->AddParticle("Xi'(bc)+","Xi'(bc)+",
+ 7.0400, kFALSE, -1., +1.,"Baryon", 5422);
+
+ pdgDB->AddParticle("Xi'(bc) bar-","Xi'(bc) bar-",
+ 7.0400, kFALSE, -1., -1.,"Baryon", -5422);
+
+ pdgDB->AddParticle("Xi*(bc)+","Xi*(bc)+",
+ 7.0500, kFALSE, -1., +1.,"Baryon", 5424);
+
+ pdgDB->AddParticle("Xi*(bc) bar-","Xi*(bc) bar-",
+ 7.0500, kFALSE, -1., -1.,"Baryon", -5424);
+
+ pdgDB->AddParticle("Omega'(bc)0","Omega'(bc)0",
+ 7.2100, kFALSE, -1., -0.,"Baryon", 5432);
+
+ pdgDB->AddParticle("Omega'(bc) bar0","Omega'(bc) bar0",
+ 7.2100, kFALSE, -1., 0.,"Baryon", -5432);
+
+ pdgDB->AddParticle("Omega*(bc)0","Omega*(bc)0",
+ 7.2200, kFALSE, -1., -0.,"Baryon", 5434);
+
+ pdgDB->AddParticle("Omega*(bc) bar0","Omega*(bc) bar0",
+ 7.2200, kFALSE, -1., 0.,"Baryon", -5434);
+// B(bcc)
+ pdgDB->AddParticle("Omega(bcc)+","Omega(bcc)+",
+ 8.3100, kFALSE, -1., +1.,"Baryon", 5442);
+
+ pdgDB->AddParticle("Omega(bcc) bar-","Omega(bcc) bar-",
+ 8.3100, kFALSE, -1., -1.,"Baryon", -5442);
+
+ pdgDB->AddParticle("Omega*(bcc)+","Omega*(bcc)+",
+ 8.3100, kFALSE, -1., +1.,"Baryon", 5444);
+
+ pdgDB->AddParticle("Omega*(bcc) bar-","Omega*(bcc) bar-",
+ 8.3100, kFALSE, -1., -1.,"Baryon", -5444);
+
+
+
+
+// B(bb)
+
+ pdgDB->AddParticle("Xsi(bb)-","Xsi(bb)-",
+ 10.4200, kFALSE, -1., -1.,"Baryon", 5512);
+
+ pdgDB->AddParticle("Xsi(bb) bar+","Xsi(bb) bar+",
+ 10.4200, kFALSE, -1., +1.,"Baryon", -5512);
+
+ pdgDB->AddParticle("Xsi*(bb)-","Xsi*(bb)-",
+ 10.4400, kFALSE, -1., -1.,"Baryon", 5514);
+
+ pdgDB->AddParticle("Xsi*(bb) bar+","Xsi*(bb) bar+",
+ 10.4400, kFALSE, -1., +1.,"Baryon", -5514);
+
+ pdgDB->AddParticle("Xsi(bb)0","Xsi(bb)0",
+ 10.4200, kFALSE, -1., -0.,"Baryon", 5522);
+
+ pdgDB->AddParticle("Xsi(bb) bar0","Xsi(bb) bar0",
+ 10.4200, kFALSE, -1., +0.,"Baryon", -5522);
+
+ pdgDB->AddParticle("Xsi*(bb)0","Xsi*(bb)0",
+ 10.4400, kFALSE, -1., -0.,"Baryon", 5524);
+
+ pdgDB->AddParticle("Xsi*(bb) bar0","Xsi*(bb) bar0",
+ 10.4400, kFALSE, -1., +0.,"Baryon", -5524);
+
+ pdgDB->AddParticle("Omega*(bb)-","Omega(bb)-",
+ 10.6000, kFALSE, -1., -1.,"Baryon", 5532);
+
+ pdgDB->AddParticle("Omega(bb) bar+","Omega(bb) bar+",
+ 10.6000, kFALSE, -1., +1.,"Baryon", -5532);
+
+ pdgDB->AddParticle("Omega*(bb)-","Omega*(bb)-",
+ 10.6000, kFALSE, -1., -1.,"Baryon", 5534);
+
+ pdgDB->AddParticle("Omega*(bb) bar+","Omega*(bb) bar+",
+ 10.6000, kFALSE, -1., +1.,"Baryon", -5534);
+
+// B(bbc)
+
+ pdgDB->AddParticle("Omega(bbc)0","Omega(bbc)0",
+ 11.7100, kFALSE, -1., -0.,"Baryon", 5542);
+
+ pdgDB->AddParticle("Omega(bbc) bar0","Omega(bbc) bar0",
+ 11.7100, kFALSE, -1., +0.,"Baryon", -5542);
+
+ pdgDB->AddParticle("Omega*(bbc)0","Omega*(bbc)0",
+ 11.7100, kFALSE, -1., -0.,"Baryon", 5544);
+
+ pdgDB->AddParticle("Omega*(bbc) bar0","Omega*(bbc) bar0",
+ 11.7100, kFALSE, -1., +0.,"Baryon", -5544);
+// B(bbb)
+
+ pdgDB->AddParticle("Omega*(bbb)-","Omega*(bbb)-",
+ 15.1000, kFALSE, -1., -1.,"Baryon", 5544);
+
+ pdgDB->AddParticle("Omega*(bbb) bar+","Omega*(bbb) bar+",
+ 15.100, kFALSE, -1., +1.,"Baryon", -5544);
+
//
//
pdgDB->AddParticle("Deuteron","Deuteron",2*kAu2Gev+8.071e-3,kTRUE,
return fGcnum->nvolum;
}
+//_____________________________________________________________________________
+Int_t TGeant3::VolId2Mate(Int_t id) const
+{
+ //
+ // Return material number for a given volume id
+ //
+ if(id<1 || id > fGcnum->nvolum || fGclink->jvolum<=0)
+ return 0;
+ else {
+ Int_t jvo = fZlq[fGclink->jvolum-id];
+ return Int_t(fZq[jvo+4]);
+ }
+}
+
//_____________________________________________________________________________
const char* TGeant3::VolName(Int_t id) const
{
}
//_____________________________________________________________________________
-const char* TGeant3::ProdProcess() const
+AliMCProcess TGeant3::ProdProcess(Int_t ) const
{
//
// Name of the process that has produced the secondary particles
// in the current step
//
- static char proc[5];
- const Int_t kIpMec[13] = { 5,6,7,8,9,10,11,12,21,23,25,105,108 };
- Int_t mec, km, im;
- //
- if(fGcking->ngkine>0) {
- for (km = 0; km < fGctrak->nmec; ++km) {
- for (im = 0; im < 13; ++im) {
- if (fGctrak->lmec[km] == kIpMec[im]) {
- mec = fGctrak->lmec[km];
- if (0 < mec && mec < 31) {
- strncpy(proc,(char *)&fGctrak->namec[mec - 1],4);
- } else if (mec - 100 <= 30 && mec - 100 > 0) {
- strncpy(proc,(char *)&fGctpol->namec1[mec - 101],4);
- }
- proc[4]='\0';
- return proc;
- }
- }
- }
- strcpy(proc,"UNKN");
- } else strcpy(proc,"NONE");
+ const AliMCProcess kIpProc[13] = { kPDecay, kPPair, kPCompton,
+ kPPhotoelectric, kPBrem, kPDeltaRay,
+ kPAnnihilation, kPHadronic,
+ kPMuonNuclear, kPPhotoFission,
+ kPRayleigh, kPCerenkov, kPSynchrotron};
+ Int_t km, im;
+ //
+ if(fGcking->ngkine>0)
+ for (km = 0; km < fGctrak->nmec; ++km)
+ for (im = 0; im < 13; ++im)
+ if (G3toVMC(fGctrak->lmec[km]) == kIpProc[im])
+ return kIpProc[im];
+ //
+ return kPNoProcess;
+}
+
+//_____________________________________________________________________________
+Int_t TGeant3::StepProcesses(TArrayI &proc) const
+{
+ //
+ // Return processes active in the current step
+ //
+ Int_t i;
+ Int_t nproc=Gctrak()->nmec;
+ //
+ proc.Set(nproc);
+ Int_t nvproc=0;
+ //
+ for (i=0; i<nproc; ++i)
+ if((proc[nvproc]=G3toVMC(Gctrak()->lmec[i]))!=kPNoProcess) nvproc++;
+ //
+ proc.Set(nvproc);
+ //
+ return nvproc;
+}
+
+//_____________________________________________________________________________
+AliMCProcess TGeant3::G3toVMC(Int_t iproc) const
+{
+ //
+ // Conversion between GEANT and AliMC processes
+ //
+
+ const AliMCProcess kPG2MC1[30] = {kPNoProcess, kPMultipleScattering, kPEnergyLoss, kPMagneticFieldL, kPDecay,
+ kPPair, kPCompton, kPPhotoelectric, kPBrem, kPDeltaRay,
+ kPAnnihilation, kPHadronic, kPNoProcess, kPEvaporation, kPNuclearFission,
+ kPNuclearAbsorption, kPPbarAnnihilation, kPNCapture, kPHElastic, kPHInhelastic,
+ kPMuonNuclear, kPTOFlimit, kPPhotoFission, kPNoProcess, kPRayleigh,
+ kPNoProcess, kPNoProcess, kPNoProcess, kPNull, kPStop};
+
+ const AliMCProcess kPG2MC2[9] = {kPLightAbsorption, kPLightScattering, kStepMax, kPNoProcess, kPCerenkov,
+ kPLightReflection, kPLightRefraction, kPSynchrotron, kPNoProcess};
+
+ AliMCProcess proc=kPNoProcess;
+ if(1<iproc && iproc<=30) proc= kPG2MC1[iproc-1];
+ else if(101<=iproc && iproc<=109) proc= kPG2MC2[iproc-100-1];
return proc;
}
+
//_____________________________________________________________________________
void TGeant3::GetSecondary(Int_t isec, Int_t& ipart,
TLorentzVector &x, TLorentzVector &p)
return fGctrak->getot;
}
-//_____________________________________________________________________________
-void TGeant3::Rndm(Float_t* r, const Int_t n) const
-{
- //
- // Return an array of n random numbers uniformly distributed
- // between 0 and 1 not included
- //
- Grndm(r,n);
-}
-
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//
// Functions from GBASE
//_____________________________________________________________________________
void TGeant3::Gsckov(Int_t itmed, Int_t npckov, Float_t *ppckov,
- Float_t *absco, Float_t *effic, Float_t *rindex)
+ Float_t *absco, Float_t *effic, Float_t *rindex)
+{
+ //
+ // Stores the tables for UV photon tracking in medium ITMED
+ // Please note that it is the user's responsability to
+ // provide all the coefficients:
+ //
+ //
+ // ITMED Tracking medium number
+ // NPCKOV Number of bins of each table
+ // PPCKOV Value of photon momentum (in GeV)
+ // ABSCO Absorbtion coefficients
+ // dielectric: absorbtion length in cm
+ // metals : absorbtion fraction (0<=x<=1)
+ // EFFIC Detection efficiency for UV photons
+ // RINDEX Refraction index (if=0 metal)
+ //
+ gsckov(itmed,npckov,ppckov,absco,effic,rindex);
+}
+
+//_____________________________________________________________________________
+void TGeant3::SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov,
+ Float_t *absco, Float_t *effic, Float_t *rindex)
{
//
// Stores the tables for UV photon tracking in medium ITMED
//
// To generate a vector RVECV of LEN random numbers
// Copy of the CERN Library routine RANECU
- grndm(rvec,len);
+ Rndm(rvec,len);
}
//_____________________________________________________________________________
-void TGeant3::Grndmq(Int_t &is1, Int_t &is2, const Int_t iseq,
- const Text_t *chopt)
+void TGeant3::Grndmq(Int_t &/*is1*/, Int_t &/*is2*/, const Int_t /*iseq*/,
+ const Text_t */*chopt*/)
{
//
// To set/retrieve the seed of the random number generator
//
- grndmq(is1,is2,iseq,PASSCHARD(chopt) PASSCHARL(chopt));
+ /*printf("Dummy grndmq called\n");*/
}
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//
// It positions a previously defined volume in the mother.
//
+
char vname[5];
Vname(name,vname);
char vmother[5];
}
}
-