5 #include <FairLogger.h>
7 #include "FairPrimaryGenerator.h"
8 #include "TDatabasePDG.h"
10 #include "TParticlePDG.h"
19 : fOnlyAPBranch(false), fBoxVtxIsSet(false), fNuclearDecayChainIsSet(false), fParticlesDefinedInNuclearDecay(0),
20 fX(0), fY(0), fZ(0), fX1(0), fY1(0), fZ1(0), fX2(0), fY2(0), fZ2(0)
35 fX = gRandom->Uniform(fX1, fX2);
36 fY = gRandom->Uniform(fY1, fY2);
37 fZ = gRandom->Uniform(fZ1, fZ2);
47 Int_t protonPDGID = 2212;
48 Int_t alphaPDGID = 1000020040;
49 Int_t gammaPDGID = 22;
52 TDatabasePDG *pdgBase = TDatabasePDG::Instance();
53 TParticlePDG *protonParticle = pdgBase->GetParticle(protonPDGID);
54 TParticlePDG *alphaParticle = pdgBase->GetParticle(alphaPDGID);
55 TParticlePDG *gammaParticle = pdgBase->GetParticle(gammaPDGID);
56 TParticlePDG *betaParticle = pdgBase->GetParticle(betaPDGID);
58 LOG(fatal) <<
"AtTPC20MgDecay_pag: PDG code " << protonPDGID <<
" (proton) not defined.";
59 Double32_t protonMass = protonParticle->Mass();
61 LOG(fatal) <<
"AtTPC20MgDecay_pag: PDG code" << gammaPDGID <<
" (gamma) not defined.";
62 Double32_t gammaMass = gammaParticle->Mass();
64 LOG(fatal) <<
"AtTPC20MgDecay_pag: PDG code " << alphaPDGID <<
" (alpha) not defined.";
65 Double32_t alphaMass = alphaParticle->Mass();
67 std::cout <<
" protonMass: " << protonMass << std::endl;
68 std::cout <<
" gammaMass: " << gammaMass << std::endl;
69 std::cout <<
"alphaMass: " << alphaMass << std::endl;
71 Double32_t ptProton = 0, pxProton = 0, pyProton = 0, pzProton = 0;
73 Double32_t pabsProton = 0.0763;
74 Double32_t thetaProton = acos(gRandom->Uniform(-1, 1));
76 Double32_t phiProton = gRandom->Uniform(0, 360) * TMath::DegToRad();
77 pzProton = pabsProton * TMath::Cos(thetaProton);
78 ptProton = pabsProton * TMath::Sin(thetaProton);
79 pxProton = ptProton * TMath::Cos(phiProton);
80 pyProton = ptProton * TMath::Sin(phiProton);
82 Double32_t ptAlpha = 0, pxAlpha = 0, pyAlpha = 0, pzAlpha = 0;
84 Double32_t pabsAlpha = 0.06162;
85 Double32_t thetaAlpha = acos(gRandom->Uniform(-1, 1));
86 Double32_t phiAlpha = gRandom->Uniform(0, 360) * TMath::DegToRad();
87 pzAlpha = pabsAlpha * TMath::Cos(thetaAlpha);
88 ptAlpha = pabsAlpha * TMath::Sin(thetaAlpha);
89 pxAlpha = ptAlpha * TMath::Cos(phiAlpha);
90 pyAlpha = ptAlpha * TMath::Sin(phiAlpha);
92 Double32_t ptGamma = 0, pxGamma = 0, pyGamma = 0, pzGamma = 0;
93 Double32_t pabsGamma = 0.004033;
95 Double32_t thetaGamma = acos(gRandom->Uniform(0, 1));
96 Double32_t phiGamma = gRandom->Uniform(0, 360) * TMath::DegToRad();
97 pzGamma = pabsGamma * TMath::Cos(thetaGamma);
98 ptGamma = pabsGamma * TMath::Sin(thetaGamma);
99 pxGamma = ptGamma * TMath::Cos(phiGamma);
100 pyGamma = ptGamma * TMath::Sin(phiGamma);
102 if (fNuclearDecayChainIsSet) {
104 if (protonPDGID != 2212)
105 LOG(fatal) <<
"AtTPC20MgDecay_pagGenerator:PDG code" << protonPDGID <<
"is not a proton!";
107 brp = gRandom->Uniform(0, 1);
108 bra = gRandom->Uniform(0, 1);
110 for (Int_t i = 0; i < fParticlesDefinedInNuclearDecay; i++) {
114 Double32_t ProtonMomentum = TMath::Sqrt(pxProton * pxProton + pyProton * pyProton + pzProton * pzProton);
115 pxProton = pxProton * fParticleEnergies[i] / ProtonMomentum;
116 pyProton = pyProton * fParticleEnergies[i] / ProtonMomentum;
117 pzProton = pzProton * fParticleEnergies[i] / ProtonMomentum;
122 Double32_t AlphaMomentum = TMath::Sqrt(pxAlpha * pxAlpha + pyAlpha * pyAlpha + pzAlpha * pzAlpha);
123 pxAlpha = pxAlpha * fParticleEnergies[i] / AlphaMomentum;
124 pyAlpha = pyAlpha * fParticleEnergies[i] / AlphaMomentum;
125 pzAlpha = pzAlpha * fParticleEnergies[i] / AlphaMomentum;
130 primGen->AddTrack(22, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
133 primGen->AddTrack(protonPDGID, pxProton, pyProton, pzProton, fX, fY, fZ);
137 primGen->AddTrack(alphaPDGID, pxAlpha, pyAlpha, pzAlpha, fX, fY, fZ);
147 for (Int_t i = 0; i < fParticlesDefinedInNuclearDecay; i++) {
148 fParticleEnergies[i] = ParticleEnergy;
149 fParticleBranchingRatios[i] = ParticleBranchingRatio;