85 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *>
pp(proton,proton);
86 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *>
pn(proton,neutron);
87 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> piPlusp(piPlus,proton);
88 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> piMinusp(piMinus,proton);
89 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> KPlusp(KPlus,proton);
90 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> KMinusp(KMinus,proton);
91 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *>
nn(neutron,neutron);
92 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> ppbar(proton,antiproton);
93 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> npbar(antiproton,neutron);
95 std::vector<G4double> ppData;
96 std::vector<G4double> pPiPlusData;
97 std::vector<G4double> pPiMinusData;
98 std::vector<G4double> pKPlusData;
99 std::vector<G4double> pKMinusData;
100 std::vector<G4double> ppbarData;
101 std::vector<G4double> npbarData;
115 for (i=2; i<
nPar; i++)
129 xMap[piPlusp] = pPiPlusData;
130 xMap[piMinusp] = pPiMinusData;
131 xMap[KPlusp] = pKPlusData;
132 xMap[KMinusp] = pKMinusData;
133 xMap[ppbar] = ppbarData;
134 xMap[npbar] = npbarData;
171 if (m_max > 0. && sqrtS > (m_1 + m_2))
173 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);
178 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> trkPair(def1,def2);
180 trkPair = std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *>(def2,def1);
182 std::vector<G4double> data;
195 if (
xMap.find(trkPair) !=
xMap.end())
197 PairDoubleMap::const_iterator iter;
198 for (iter =
xMap.begin(); iter !=
xMap.end(); ++iter)
200 std::pair<const G4ParticleDefinition *,const G4ParticleDefinition *> thePair = (*iter).first;
201 if (thePair == trkPair)
203 data = (*iter).second;
212 if (pLab < pMinFit)
return 0.0;
214 G4cout <<
"WARNING! G4XPDGElastic::PDGElastic "
217 <<
" elastic cross section: momentum "
218 << pLab /
GeV <<
" GeV outside valid fit range "
219 << pMinFit /
GeV <<
"-" << pMaxFit /
GeV
226 sigma = aFit + bFit * std::pow(pLab, nFit) + cFit * logP*logP + dFit * logP;
234 G4cout <<
"G4XPDGElastic::CrossSection - Data not found in Map" <<
G4endl;
240 G4cout <<
"WARNING! G4XPDGElastic::PDGElastic "
242 <<
" elastic cross section: momentum "
243 << pLab <<
" GeV, negative cross section "
static G4KaonPlus * KaonPlusDefinition()
static const G4double ppbarPDGFit[7]
virtual G4String Name() const
static G4KaonMinus * KaonMinusDefinition()
static G4Proton * ProtonDefinition()
static const G4double pKPlusPDGFit[7]
static G4AntiProton * AntiProtonDefinition()
G4bool operator!=(const G4XPDGElastic &right) const
std::map< G4pDefPair, std::vector< G4double >, std::less< G4pDefPair > > xMap
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
static const G4double pPiMinusPDGFit[7]
static G4PionMinus * PionMinusDefinition()
static G4PionPlus * PionPlusDefinition()
static const G4double ppPDGFit[7]
static const G4double pPiPlusPDGFit[7]
static const G4double pKMinusPDGFit[7]
G4double GetPDGMass() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
static const double millibarn
G4bool operator==(const G4XPDGElastic &right) const
static const G4double _lowLimit
static const G4double npbarPDGFit[7]
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()
G4bool InLimits(G4double e, G4double eLow, G4double eHigh) const
static const G4double _highLimit