10 #include <FairParticle.h>
11 #include <FairPrimaryGenerator.h>
12 #include <FairRunSim.h>
14 #include <TDatabasePDG.h>
16 #include <TObjArray.h>
18 #include <TParticle.h>
19 #include <TParticlePDG.h>
27 constexpr
auto cRED =
"\033[1;31m";
30 constexpr
auto cGREEN =
"\033[1;32m";
31 constexpr
auto cBLUE =
"\033[1;34m";
42 : fMult(0), fPx(0.), fPy(0.), fPz(0.), fR(0.), fz(0.), fOffsetX(0.), fOffsetY(0.), fVx(0.), fVy(0.), fVz(0.),
52 : fMult(0), fPx(0.), fPy(0.), fPz(0.), fR(0.), fz(0.), fOffsetX(0.), fOffsetY(0.), fVx(0.), fVy(0.), fVz(0.),
56 FairRunSim *fRun = FairRunSim::Instance();
57 TObjArray *UserIons = fRun->GetUserDefIons();
58 TObjArray *UserParticles = fRun->GetUserDefParticles();
59 FairParticle *part =
nullptr;
60 fIon =
dynamic_cast<FairIon *
>(UserIons->FindObject(ionName));
65 fPx = Double_t(
fIon->GetA()) * px;
66 fPy = Double_t(
fIon->GetA()) * py;
67 fPz = Double_t(
fIon->GetA()) * pz;
74 part =
dynamic_cast<FairParticle *
>(UserParticles->FindObject(ionName));
77 TParticle *particle = part->GetParticle();
79 fPx = Double_t(particle->GetMass() / 0.92827231) * px;
80 fPy = Double_t(particle->GetMass() / 0.92827231) * py;
81 fPz = Double_t(particle->GetMass() / 0.92827231) * pz;
87 if (
fIon ==
nullptr && part ==
nullptr) {
88 cout <<
"-E- AtTPCIonGenerator: Ion or Particle is not defined !" << endl;
89 Fatal(
"AtTPCIonGenerator",
"No FairRun instantised!");
94 Double_t pz, Double_t Ex, Double_t m, Double_t ener, Double_t eLoss)
95 : fMult(mult), fPx(Double_t(a) * px), fPy(Double_t(a) * py), fPz(Double_t(a) * pz), fR(0.), fz(0.), fOffsetX(0.),
96 fOffsetY(0.), fVx(0.), fVy(0.), fVz(0.), fIon(nullptr), fQ(0), fNomEner(ener), fMaxEnLoss(eLoss < 0 ? ener : eLoss)
100 fIon =
new FairIon(TString::Format(
"FairIon%d",
fgNIon).Data(), z, a, q, Ex, m);
101 cout <<
" Beam Ion mass : " <<
fIon->GetMass() << endl;
104 FairRunSim *run = FairRunSim::Instance();
106 cout <<
"-E- FairIonGenerator: No FairRun instantised!" << endl;
107 Fatal(
"FairIonGenerator",
"No FairRun instantised!");
110 run->AddNewIon(
fIon);
115 fIon->SetExcEnergy(eExc);
131 auto Phi = gRandom->Uniform(0, 360) * TMath::DegToRad();
132 auto SpotR = gRandom->Uniform(0,
fR);
147 TParticlePDG *thisPart = TDatabasePDG::Instance()->GetParticle(
fIon->GetName());
149 cout <<
"-W- FairIonGenerator: Ion " <<
fIon->GetName() <<
" not found in database!" << endl;
153 int pdgType = thisPart->PdgCode();
160 Double_t Er = gRandom->Uniform(0.,
fMaxEnLoss);
170 for (Int_t i = 0; i <
fMult; i++)