5 #include "FairLogger.h"
6 #include "FairMCEventHeader.h"
7 #include "FairPrimaryGenerator.h"
8 #include "FairRootManager.h"
9 #include "FairRunAna.h"
10 #include "FairRunSim.h"
11 #include "TDatabasePDG.h"
16 #include "TParticlePDG.h"
21 : fOnlyAPBranch(0), fBoxVtxIsSet(0), fNuclearDecayChainIsSet(0), fParticlesDefinedInNuclearDecay(0), fX(0), fY(0),
22 fZ(0), fX1(0), fY1(0), fZ1(0), fX2(0), fY2(0), fZ2(0)
39 fX = gRandom->Uniform(fX1, fX2);
40 fY = gRandom->Uniform(fY1, fY2);
41 fZ = gRandom->Uniform(fZ1, fZ2);
51 Int_t protonPDGID = 2212;
52 Int_t alphaPDGID = 1000020040;
53 Int_t gammaPDGID = 22;
56 TDatabasePDG *pdgBase = TDatabasePDG::Instance();
57 TParticlePDG *protonParticle = pdgBase->GetParticle(protonPDGID);
58 TParticlePDG *alphaParticle = pdgBase->GetParticle(alphaPDGID);
59 TParticlePDG *gammaParticle = pdgBase->GetParticle(gammaPDGID);
60 TParticlePDG *betaParticle = pdgBase->GetParticle(betaPDGID);
62 LOG(fatal) <<
"AtTPC20MgDecay: PDG code " << protonPDGID <<
" (proton) not defined.";
63 Double32_t protonMass = protonParticle->Mass();
65 LOG(fatal) <<
"AtTPC20MgDecay: PDG code" << gammaPDGID <<
" (gamma) not defined.";
66 Double32_t gammaMass = gammaParticle->Mass();
68 LOG(fatal) <<
"AtTPC20MgDecay: PDG code " << alphaPDGID <<
" (alpha) not defined.";
69 Double32_t alphaMass = alphaParticle->Mass();
71 std::cout <<
" protonMass: " << protonMass << std::endl;
72 std::cout <<
" gammaMass: " << gammaMass << std::endl;
73 std::cout <<
"alphaMass: " << alphaMass << std::endl;
75 Double32_t ptProton = 0, pxProton = 0, pyProton = 0, pzProton = 0;
76 Double32_t pabsProton = 0.0470;
78 Double32_t thetaProton = acos(gRandom->Uniform(-1, 1));
80 Double32_t phiProton = gRandom->Uniform(0, 360) * TMath::DegToRad();
81 pzProton = pabsProton * TMath::Cos(thetaProton);
82 ptProton = pabsProton * TMath::Sin(thetaProton);
83 pxProton = ptProton * TMath::Cos(phiProton);
84 pyProton = ptProton * TMath::Sin(phiProton);
86 Double32_t ptAlpha = 0, pxAlpha = 0, pyAlpha = 0, pzAlpha = 0;
89 Double32_t pabsAlpha = 0.2165;
90 Double32_t thetaAlpha = acos(gRandom->Uniform(-1, 1));
91 Double32_t phiAlpha = gRandom->Uniform(0, 360) * TMath::DegToRad();
92 pzAlpha = pabsAlpha * TMath::Cos(thetaAlpha);
93 ptAlpha = pabsAlpha * TMath::Sin(thetaAlpha);
94 pxAlpha = ptAlpha * TMath::Cos(phiAlpha);
95 pyAlpha = ptAlpha * TMath::Sin(phiAlpha);
97 Double32_t ptGamma = 0, pxGamma = 0, pyGamma = 0, pzGamma = 0;
98 Double32_t pabsGamma = 0.004033;
100 Double32_t thetaGamma = acos(gRandom->Uniform(0, 1));
101 Double32_t phiGamma = gRandom->Uniform(0, 360) * TMath::DegToRad();
102 pzGamma = pabsGamma * TMath::Cos(thetaGamma);
103 ptGamma = pabsGamma * TMath::Sin(thetaGamma);
104 pxGamma = ptGamma * TMath::Cos(phiGamma);
105 pyGamma = ptGamma * TMath::Sin(phiGamma);
107 if (fNuclearDecayChainIsSet) {
109 if (!protonPDGID == 2212)
110 LOG(fatal) <<
"AtTPC20MgDecayGenerator:PDG code" << protonPDGID <<
"is not a proton!";
112 brp = gRandom->Uniform(0, 1);
113 bra = gRandom->Uniform(0, 1);
115 for (Int_t i = 0; i < fParticlesDefinedInNuclearDecay; i++) {
125 Double32_t AlphaMomentum = TMath::Sqrt(pxAlpha * pxAlpha + pyAlpha * pyAlpha + pzAlpha * pzAlpha);
126 pxAlpha = pxAlpha * fParticleEnergies[i] / AlphaMomentum;
127 pyAlpha = pyAlpha * fParticleEnergies[i] / AlphaMomentum;
128 pzAlpha = pzAlpha * fParticleEnergies[i] / AlphaMomentum;
138 primGen->AddTrack(22, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
143 primGen->AddTrack(alphaPDGID, pxAlpha, pyAlpha, pzAlpha, fX, fY, fZ);
155 for (Int_t i = 0; i < fParticlesDefinedInNuclearDecay; i++) {
156 fParticleEnergies[i] = ParticleEnergy;
157 fParticleBranchingRatios[i] = ParticleBranchingRatio;