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;