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;