10 #include "FairPrimaryGenerator.h"
11 #include "TParticlePDG.h"
12 #include "TDatabasePDG.h"
14 #include "FairVolume.h"
15 #include "FairGeoLoader.h"
16 #include "FairGeoInterface.h"
17 #include "FairGeoMedia.h"
18 #include "FairGeoMedium.h"
19 #include "TGeoVolume.h"
21 #include "TGeoMatrix.h"
22 #include "TGeoManager.h"
26 fPDGType(0),fMult(0),fPDGMass(0),fPtMin(0),fPtMax(0),
27 fPhiMin(0),fPhiMax(0),fEtaMin(0),fEtaMax(0),fYMin(0),fYMax(0),
29 fX1(0),fY1(0),fX2(0),fY2(0),
30 fEtaRangeIsSet(0),fYRangeIsSet(0),fThetaRangeIsSet(0),
31 fCosThetaIsSet(0),fPtRangeIsSet(0),fPRangeIsSet(0),fInversePIsSet(0),
32 fAbs(0),fQuad(0),fFunc(0),fExt(0)
40 fPDGType(pdgid),fMult(mult),fPDGMass(0),
41 fEtaMin(0),fEtaMax(0),fYMin(0),fYMax(0),
43 fX1(0),fY1(0),fX2(0),fY2(0),
44 fEtaRangeIsSet(0),fYRangeIsSet(0),fThetaRangeIsSet(0),
45 fCosThetaIsSet(0),fPtRangeIsSet(0),fPRangeIsSet(0),fInversePIsSet(0),
46 fAbs(0),fQuad(0),fFunc(0),fExt(0)
58 Fatal(
"Init()",
"PndVolGenerator: phi range is too wide: %f<phi<%f",
61 Fatal(
"Init()",
"PndVolGenerator: Cannot set P and Pt ranges simultaneously");
63 Fatal(
"Init()",
"PndVolGenerator: Cannot set P and Y ranges simultaneously");
67 Fatal(
"Init()",
"PndVolGenerator: Cannot set Y, Theta or Eta ranges simultaneously");
69 Fatal(
"Init()",
"PndVolGenerator: Cannot set point and box vertices simultaneously");
71 Fatal(
"Init()",
"PndVolGenerator: Cannot use P == 0 as limit for inverse momentum distribution");
78 std::cout<<
" gGeoManager 1 "<<
gGeoManager<<
" "<<std::endl;
80 TDatabasePDG* pdgBase = TDatabasePDG::Instance();
82 if (! particle) Fatal(
"PndVolGenerator",
"PDG code %d not defined.",
fPDGType);
94 Double32_t pabs,
phi,
pt,
theta=0,
eta,
y, mt, px, py,
pz, pinv=0;
102 std::cout<<
" gGeoManager 2 "<<
gGeoManager<<std::endl;
107 if(top->GetName()!=
gGeoManager->GetCurrentVolume()->GetName()){
116 Daught =
gGeoManager->GetCurrentVolume()->GetNdaughters();
125 std::cout<<
" random fabs "<<
fAbs<<std::endl;
131 posSens[0]=0.; posSens[1]=0.; posSens[2]=0.;
138 std::cout<<
" vertex "<<
fX<<
" "<<
fY<<
" "<<
fZ<<std::endl;
142 for (Int_t k = 0; k <
fMult; k++) {
176 theta = 2*TMath::ATan(TMath::Exp(-
eta));
181 pz = mt * TMath::SinH(y);
202 printf(
"VolGen: kf=%d, p=(%.2f, %.2f, %.2f) GeV, x=(%.1f, %.1f, %.1f) cm\n",
friend F32vec4 acos(const F32vec4 &a)
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
friend F32vec4 cos(const F32vec4 &a)
static T Sqrt(const T &x)
TGeoManager * gGeoManager
void SetPhiRange(Double32_t phimin=0, Double32_t phimax=360)
TGeoHMatrix * fCurrentTransMat
FairPrimaryGenerator * primGen
virtual Bool_t ReadEvent(FairPrimaryGenerator *primGen)
TString pt(TString pts, TString exts="px py pz")