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