60 const G4int G4XPDGElastic::nPar = 7;
 
   62 const G4double G4XPDGElastic::pPiPlusPDGFit[7] =  { 2.,     200.,   0.,   11.4, -0.4,  0.079,  0. };
 
   64 const G4double G4XPDGElastic::pPiMinusPDGFit[7] = { 2.,     360.,   1.76, 11.2, -0.64, 0.043,  0. };
 
   66 const G4double G4XPDGElastic::pKPlusPDGFit[7] =   { 2.,     175.,    5.0,  8.1, -1.8,  0.16,  -1.3 }; 
 
   68 const G4double G4XPDGElastic::pKMinusPDGFit[7] =  { 2.,     175.,    7.3,  0.,   0.,   0.29,  -2.40 };
 
   70 const G4double G4XPDGElastic::ppPDGFit[7] =       { 2.,    2100.,   11.9, 26.9, -1.21, 0.169, -1.85 };
 
   72 const G4double G4XPDGElastic::ppbarPDGFit[7] =    { 5., 1730000.,   10.2, 52.7, -1.16, 0.125, -1.28 };
 
   74 const G4double G4XPDGElastic::npbarPDGFit[7] =    { 1.1,      5.55, 36.5,  0.,   0.,   0.,    -11.9 };
 
   87   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> 
pp(proton,proton);
 
   88   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> 
pn(proton,neutron);
 
   89   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> piPlusp(piPlus,proton);
 
   90   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> piMinusp(piMinus,proton);
 
   91   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> KPlusp(KPlus,proton);
 
   92   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> KMinusp(KMinus,proton);
 
   93   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> 
nn(neutron,neutron);
 
   94   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> ppbar(proton,antiproton);
 
   95   std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> npbar(antiproton,neutron);
 
   97   std::vector<G4double> ppData;
 
   98   std::vector<G4double> pPiPlusData;
 
   99   std::vector<G4double> pPiMinusData;
 
  100   std::vector<G4double> pKPlusData;
 
  101   std::vector<G4double> pKMinusData;
 
  102   std::vector<G4double> ppbarData;
 
  103   std::vector<G4double> npbarData;
 
  108       ppData.push_back(ppPDGFit[i] * 
GeV); 
 
  109       pPiPlusData.push_back(pPiPlusPDGFit[i] * GeV); 
 
  110       pPiMinusData.push_back(pPiMinusPDGFit[i] * GeV); 
 
  111       pKPlusData.push_back(pKPlusPDGFit[i] * GeV); 
 
  112       pKMinusData.push_back(pKMinusPDGFit[i] * GeV); 
 
  113       ppbarData.push_back(ppbarPDGFit[i] * GeV);
 
  114       npbarData.push_back(npbarPDGFit[i] * GeV);
 
  117   for (i=2; i<nPar; i++) 
 
  119       ppData.push_back(ppPDGFit[i]); 
 
  120       pPiPlusData.push_back(pPiPlusPDGFit[i]); 
 
  121       pPiMinusData.push_back(pPiMinusPDGFit[i]); 
 
  122       pKPlusData.push_back(pKPlusPDGFit[i]); 
 
  123       pKMinusData.push_back(pKMinusPDGFit[i]); 
 
  124       ppbarData.push_back(ppbarPDGFit[i]);
 
  125       npbarData.push_back(npbarPDGFit[i]);
 
  131   xMap[piPlusp] = pPiPlusData;
 
  132   xMap[piMinusp] = pPiMinusData;
 
  133   xMap[KPlusp] = pKPlusData;
 
  134   xMap[KMinusp] = pKMinusData;
 
  135   xMap[ppbar] = ppbarData;
 
  136   xMap[npbar] = npbarData;
 
  173   if (m_max > 0. && sqrtS > (m_1 + m_2)) 
 
  175       pLab = std::sqrt( (sqrtS*sqrtS - (m_1+m_2)*(m_1+m_2) ) * (sqrtS*sqrtS - (m_1-m_2)*(m_1-m_2)) ) / (2*m_max);
 
  180       std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> trkPair(def1,def2);
 
  182     trkPair = std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *>(def2,def1);
 
  184       std::vector<G4double> 
data; 
 
  197       if (xMap.find(trkPair) != xMap.end())
 
  199       PairDoubleMap::const_iterator iter;
 
  200       for (iter = xMap.begin(); iter != xMap.end(); ++iter)
 
  202           std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> thePair = (*iter).first;
 
  203           if (thePair == trkPair)
 
  205           data = (*iter).second;
 
  214           if (pLab < pMinFit) 
return 0.0;
 
  216             G4cout << 
"WARNING! G4XPDGElastic::PDGElastic "  
  219                << 
" elastic cross section: momentum "  
  220                << pLab / 
GeV << 
" GeV outside valid fit range "  
  221                << pMinFit /
GeV << 
"-" << pMaxFit / 
GeV 
  236       G4cout << 
"G4XPDGElastic::CrossSection - Data not found in Map" << 
G4endl;
 
  242       G4cout << 
"WARNING! G4XPDGElastic::PDGElastic "       
  244          << 
" elastic cross section: momentum "  
  245          << pLab << 
" GeV, negative cross section "  
static G4Pow * GetInstance()
 
G4double powA(G4double A, G4double y) const 
 
static G4KaonPlus * KaonPlusDefinition()
 
virtual G4String Name() const 
 
static G4KaonMinus * KaonMinusDefinition()
 
static G4Proton * ProtonDefinition()
 
static G4AntiProton * AntiProtonDefinition()
 
G4bool operator!=(const G4XPDGElastic &right) const 
 
const G4String & GetParticleName() const 
 
const XML_Char const XML_Char * data
 
G4GLOB_DLL std::ostream G4cout
 
static G4PionMinus * PionMinusDefinition()
 
static G4PionPlus * PionPlusDefinition()
 
G4double G4Log(G4double x)
 
G4double GetPDGMass() const 
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
static constexpr double GeV
 
G4bool operator==(const G4XPDGElastic &right) const 
 
virtual G4double CrossSection(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const 
 
const G4LorentzVector & Get4Momentum() const 
 
virtual G4bool IsValid(G4double e) const 
 
const G4ParticleDefinition * GetDefinition() const 
 
static G4Neutron * NeutronDefinition()
 
static constexpr double millibarn
 
G4bool InLimits(G4double e, G4double eLow, G4double eHigh) const