Geant4-11
Public Member Functions | Private Member Functions | Private Attributes
G4HadronNucleonXsc Class Reference

#include <G4HadronNucleonXsc.hh>

Public Member Functions

G4double CoulombBarrier (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
void CrossSectionDescription (std::ostream &) const
 
 G4HadronNucleonXsc ()
 
G4double GetCoulombBarrier (const G4DynamicParticle *dp, const G4ParticleDefinition *p)
 
G4double GetElasticHadronNucleonXsc () const
 
G4double GetHadronNucleonXscEL (const G4DynamicParticle *dp, const G4ParticleDefinition *p)
 
G4double GetHadronNucleonXscNS (const G4DynamicParticle *dp, const G4ParticleDefinition *p)
 
G4double GetHadronNucleonXscPDG (const G4DynamicParticle *dp, const G4ParticleDefinition *p)
 
G4double GetHadronNucleonXscVU (const G4DynamicParticle *dp, const G4ParticleDefinition *p)
 
G4double GetHyperonNucleonXscNS (const G4DynamicParticle *dp, const G4ParticleDefinition *p)
 
G4double GetInelasticHadronNucleonXsc () const
 
G4double GetKaonNucleonXscGG (const G4DynamicParticle *dp, const G4ParticleDefinition *p)
 
G4double GetTotalHadronNucleonXsc () const
 
G4double HadronNucleonXsc (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double HadronNucleonXscEL (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double HadronNucleonXscNS (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double HadronNucleonXscPDG (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double HadronNucleonXscVU (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double HyperonNucleonXscNS (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double KaonNucleonXscGG (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double KaonNucleonXscNS (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double KaonNucleonXscVG (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
G4double SCBMesonNucleonXscNS (const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
 
 ~G4HadronNucleonXsc ()
 

Private Member Functions

G4double CalcMandelstamS (G4double ekin1, G4double mass1, G4double mass2)
 
G4double CalculateEcmValue (G4double ekin1, G4double mass1, G4double mass2)
 

Private Attributes

G4double fElasticXsc
 
G4double fInelasticXsc
 
G4double fTotalXsc
 
G4Powg4calc
 
const G4ParticleDefinitiontheK0L
 
const G4ParticleDefinitiontheK0S
 
const G4ParticleDefinitiontheKMinus
 
const G4ParticleDefinitiontheKPlus
 
const G4ParticleDefinitiontheNeutron
 
const G4ParticleDefinitionthePiPlus
 
const G4ParticleDefinitiontheProton
 

Detailed Description

Definition at line 51 of file G4HadronNucleonXsc.hh.

Constructor & Destructor Documentation

◆ G4HadronNucleonXsc()

G4HadronNucleonXsc::G4HadronNucleonXsc ( )
explicit

Definition at line 63 of file G4HadronNucleonXsc.cc.

64 : fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0)
65{
69
70 // strange
75
77}
const G4ParticleDefinition * theK0S
const G4ParticleDefinition * theK0L
const G4ParticleDefinition * theKPlus
const G4ParticleDefinition * theNeutron
const G4ParticleDefinition * thePiPlus
const G4ParticleDefinition * theProton
const G4ParticleDefinition * theKMinus
static G4KaonMinus * KaonMinus()
Definition: G4KaonMinus.cc:112
static G4KaonPlus * KaonPlus()
Definition: G4KaonPlus.cc:112
static G4KaonZeroLong * KaonZeroLong()
static G4KaonZeroShort * KaonZeroShort()
static G4Neutron * Neutron()
Definition: G4Neutron.cc:103
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:97
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
static G4Proton * Proton()
Definition: G4Proton.cc:92

References g4calc, G4Pow::GetInstance(), G4KaonMinus::KaonMinus(), G4KaonPlus::KaonPlus(), G4KaonZeroLong::KaonZeroLong(), G4KaonZeroShort::KaonZeroShort(), G4Neutron::Neutron(), G4PionPlus::PionPlus(), G4Proton::Proton(), theK0L, theK0S, theKMinus, theKPlus, theNeutron, thePiPlus, and theProton.

◆ ~G4HadronNucleonXsc()

G4HadronNucleonXsc::~G4HadronNucleonXsc ( )

Definition at line 79 of file G4HadronNucleonXsc.cc.

80{}

Member Function Documentation

◆ CalcMandelstamS()

G4double G4HadronNucleonXsc::CalcMandelstamS ( G4double  ekin1,
G4double  mass1,
G4double  mass2 
)
inlineprivate

Definition at line 130 of file G4HadronNucleonXsc.hh.

131 { return mass1*mass1 + mass2*mass2 + 2*mass2*(ekin1 + mass1); }

Referenced by CalculateEcmValue(), HadronNucleonXscEL(), HadronNucleonXscNS(), and HadronNucleonXscPDG().

◆ CalculateEcmValue()

G4double G4HadronNucleonXsc::CalculateEcmValue ( G4double  ekin1,
G4double  mass1,
G4double  mass2 
)
inlineprivate

Definition at line 133 of file G4HadronNucleonXsc.hh.

134 { return std::sqrt(CalcMandelstamS(ekin1, mass1, mass2)); };
G4double CalcMandelstamS(G4double ekin1, G4double mass1, G4double mass2)

References CalcMandelstamS().

◆ CoulombBarrier()

G4double G4HadronNucleonXsc::CoulombBarrier ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 1328 of file G4HadronNucleonXsc.cc.

1331{
1332 G4double tR = 0.895*CLHEP::fermi;
1333 G4double pR = 0.5*CLHEP::fermi;
1334
1335 if ( theParticle == theProton ) pR = 0.895*CLHEP::fermi;
1336 else if( theParticle == thePiPlus ) pR = 0.663*CLHEP::fermi;
1337 else if( theParticle == theKPlus ) pR = 0.340*CLHEP::fermi;
1338
1339 G4double pZ = theParticle->GetPDGCharge();
1340 G4double tZ = nucleon->GetPDGCharge();
1341
1342 G4double pM = theParticle->GetPDGMass();
1343 G4double tM = nucleon->GetPDGMass();
1344
1345 G4double pElab = ekin + pM;
1346
1347 G4double totEcm = std::sqrt(pM*pM + tM*tM + 2.*pElab*tM);
1348
1349 G4double totTcm = totEcm - pM -tM;
1350
1351 G4double bC = fine_structure_const*hbarc*pZ*tZ/(2.*(pR + tR));
1352
1353 //G4cout<<"##CB: ekin = "<<ekin<<"; pElab= " << pElab
1354 // <<"; bC = "<<bC<<"; Tcm = "<< totTcm <<G4endl;
1355
1356 G4double ratio = (totTcm > bC) ? 1. - bC/totTcm : 0.0;
1357
1358 // G4cout <<"ratio = "<<ratio<<G4endl;
1359 return ratio;
1360}
double G4double
Definition: G4Types.hh:83
G4double GetPDGCharge() const
static constexpr double fermi
Definition: SystemOfUnits.h:84
G4bool nucleon(G4int ityp)
float hbarc
Definition: hepunit.py:264
int fine_structure_const
Definition: hepunit.py:286

References CLHEP::fermi, source.hepunit::fine_structure_const, G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), source.hepunit::hbarc, G4InuclParticleNames::nucleon(), anonymous_namespace{G4ChipsKaonPlusInelasticXS.cc}::pM, theKPlus, thePiPlus, and theProton.

Referenced by GetCoulombBarrier(), and HadronNucleonXscPDG().

◆ CrossSectionDescription()

void G4HadronNucleonXsc::CrossSectionDescription ( std::ostream &  outFile) const

Definition at line 82 of file G4HadronNucleonXsc.cc.

83{
84 outFile << "G4HadronNucleonXsc calculates the total, inelastic and elastic\n"
85 << "hadron-nucleon cross sections using several different\n"
86 << "parameterizations within the Glauber-Gribov approach. It is\n"
87 << "valid for all incident gammas and long-lived hadrons at\n"
88 << "energies above 30 keV. This is a cross section component which\n"
89 << "is to be used to build a cross section data set.\n";
90}

◆ GetCoulombBarrier()

G4double G4HadronNucleonXsc::GetCoulombBarrier ( const G4DynamicParticle dp,
const G4ParticleDefinition p 
)
inline

Definition at line 117 of file G4HadronNucleonXsc.hh.

119 { return CoulombBarrier(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double CoulombBarrier(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References CoulombBarrier(), G4DynamicParticle::GetDefinition(), and G4DynamicParticle::GetKineticEnergy().

◆ GetElasticHadronNucleonXsc()

G4double G4HadronNucleonXsc::GetElasticHadronNucleonXsc ( ) const
inline

◆ GetHadronNucleonXscEL()

G4double G4HadronNucleonXsc::GetHadronNucleonXscEL ( const G4DynamicParticle dp,
const G4ParticleDefinition p 
)
inline

Definition at line 93 of file G4HadronNucleonXsc.hh.

95 { return HadronNucleonXscEL(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
G4double HadronNucleonXscEL(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), and HadronNucleonXscEL().

◆ GetHadronNucleonXscNS()

G4double G4HadronNucleonXsc::GetHadronNucleonXscNS ( const G4DynamicParticle dp,
const G4ParticleDefinition p 
)
inline

Definition at line 101 of file G4HadronNucleonXsc.hh.

103 { return HadronNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
G4double HadronNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), and HadronNucleonXscNS().

Referenced by G4hhElastic::SetParametersCMS().

◆ GetHadronNucleonXscPDG()

G4double G4HadronNucleonXsc::GetHadronNucleonXscPDG ( const G4DynamicParticle dp,
const G4ParticleDefinition p 
)
inline

Definition at line 97 of file G4HadronNucleonXsc.hh.

99 { return HadronNucleonXscPDG(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
G4double HadronNucleonXscPDG(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), and HadronNucleonXscPDG().

◆ GetHadronNucleonXscVU()

G4double G4HadronNucleonXsc::GetHadronNucleonXscVU ( const G4DynamicParticle dp,
const G4ParticleDefinition p 
)
inline

Definition at line 113 of file G4HadronNucleonXsc.hh.

115 { return HadronNucleonXscVU(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
G4double HadronNucleonXscVU(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), and HadronNucleonXscVU().

◆ GetHyperonNucleonXscNS()

G4double G4HadronNucleonXsc::GetHyperonNucleonXscNS ( const G4DynamicParticle dp,
const G4ParticleDefinition p 
)
inline

Definition at line 109 of file G4HadronNucleonXsc.hh.

111 { return HyperonNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
G4double HyperonNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), and HyperonNucleonXscNS().

◆ GetInelasticHadronNucleonXsc()

G4double G4HadronNucleonXsc::GetInelasticHadronNucleonXsc ( ) const
inline

◆ GetKaonNucleonXscGG()

G4double G4HadronNucleonXsc::GetKaonNucleonXscGG ( const G4DynamicParticle dp,
const G4ParticleDefinition p 
)
inline

Definition at line 105 of file G4HadronNucleonXsc.hh.

107 { return KaonNucleonXscGG(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
G4double KaonNucleonXscGG(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), and KaonNucleonXscGG().

◆ GetTotalHadronNucleonXsc()

G4double G4HadronNucleonXsc::GetTotalHadronNucleonXsc ( ) const
inline

Definition at line 122 of file G4HadronNucleonXsc.hh.

122{ return fTotalXsc; };

References fTotalXsc.

◆ HadronNucleonXsc()

G4double G4HadronNucleonXsc::HadronNucleonXsc ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 92 of file G4HadronNucleonXsc.cc.

94{
95 G4double xsc(0.);
96 G4int pdg = std::abs(theParticle->GetPDGEncoding());
97
98 // p, n, pi+-, pbar, nbar
99 if ( pdg == 2212 || pdg == 2112 || pdg == 211 ) {
100 xsc = HadronNucleonXscNS(theParticle, nucleon, ekin);
101 }
102 else if ( pdg == 22 ) // gamma
103 {
104 xsc = HadronNucleonXscPDG(theParticle, nucleon, ekin);
105 }
106 else if ( pdg == 321 || pdg == 310 || pdg == 130 ) // K+-, K0L, K0S
107 {
108 xsc = KaonNucleonXscNS(theParticle, nucleon, ekin);
109 }
110 else if (pdg > 3000)
111 {
112 if (pdg == 3122 || pdg == 3222 || pdg == 3112 || pdg == 3212 || pdg == 3322 || pdg == 3312 || pdg == 3324 ||
113 pdg == 4122 || pdg == 4332 || pdg == 4122 || pdg == 4212 || pdg == 4222 || pdg == 4112 || pdg == 4232 || pdg == 4132 ||
114 pdg == 5122 || pdg == 5332 || pdg == 5122 || pdg == 5112 || pdg == 5222 || pdg == 5212 || pdg == 5132 || pdg == 5232
115 ) // heavy s-,c-,b-hyperons
116 {
117 xsc = HyperonNucleonXscNS(theParticle, nucleon, ekin);
118 }
119 else
120 {
121 xsc = HadronNucleonXscPDG(theParticle, nucleon, ekin);
122 }
123 } else if (pdg > 220) {
124 if (pdg == 511 || pdg == 421 || pdg == 531 || pdg == 541 || pdg == 431 || pdg == 411 || pdg == 521 ||
125 pdg == 221 || pdg == 331 || pdg == 441 || pdg == 443 || pdg == 543) // s-,c-,b-mesons
126 {
127 xsc = SCBMesonNucleonXscNS(theParticle, nucleon, ekin);
128 }
129 else
130 {
131 xsc = HadronNucleonXscPDG(theParticle, nucleon, ekin);
132 }
133 } else {
134 xsc = HadronNucleonXscPDG(theParticle, nucleon, ekin);
135 }
136 return xsc;
137}
int G4int
Definition: G4Types.hh:85
G4double KaonNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double SCBMesonNucleonXscNS(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References G4ParticleDefinition::GetPDGEncoding(), HadronNucleonXscNS(), HadronNucleonXscPDG(), HyperonNucleonXscNS(), KaonNucleonXscNS(), G4InuclParticleNames::nucleon(), and SCBMesonNucleonXscNS().

Referenced by G4ComponentGGHadronNucleusXsc::ComputeCrossSections().

◆ HadronNucleonXscEL()

G4double G4HadronNucleonXsc::HadronNucleonXscEL ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 1263 of file G4HadronNucleonXsc.cc.

1266{
1267 G4int pdg = theParticle->GetPDGEncoding();
1268 G4double xsection(0.);
1269 static const G4double targ_mass =
1271 G4double sMand =
1272 CalcMandelstamS(ekin, theParticle->GetPDGMass(), targ_mass)*invGeV2;
1273
1274 G4double x1 = G4Exp(G4Log(sMand)*0.0808);
1275 G4double x2 = G4Exp(G4Log(-sMand)*0.4525);
1276
1277 if(pdg == 22)
1278 {
1279 xsection = 0.0677*x1 + 0.129*x2;
1280 }
1281 else if(theParticle == theNeutron)
1282 {
1283 xsection = 21.70*x1 + 56.08*x2;
1284 }
1285 else if(theParticle == theProton)
1286 {
1287 xsection = 21.70*x1 + 56.08*x2;
1288 }
1289 // pbar
1290 else if(pdg == -2212)
1291 {
1292 xsection = 21.70*x1 + 98.39*x2;
1293 }
1294 else if(theParticle == thePiPlus)
1295 {
1296 xsection = 13.63*x1 + 27.56*x2;
1297 }
1298 // pi-
1299 else if(pdg == -211)
1300 {
1301 xsection = 13.63*x1 + 36.02*x2;
1302 }
1303 else if(theParticle == theKPlus)
1304 {
1305 xsection = 11.82*x1 + 8.15*x2;
1306 }
1307 else if(theParticle == theKMinus)
1308 {
1309 xsection = 11.82*x1 + 26.36*x2;
1310 }
1311 else if(theParticle == theK0S || theParticle == theK0L)
1312 {
1313 xsection = 11.82*x1 + 17.25*x2;
1314 }
1315 else
1316 {
1317 xsection = 21.70*x1 + 56.08*x2;
1318 }
1319 fTotalXsc = xsection*CLHEP::millibarn;
1320 fInelasticXsc = 0.83*fTotalXsc;
1322 return fTotalXsc;
1323}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
static const G4double invGeV2
G4double G4Log(G4double x)
Definition: G4Log.hh:226
static constexpr double millibarn
Definition: SystemOfUnits.h:87
static constexpr double proton_mass_c2
static constexpr double neutron_mass_c2

References CalcMandelstamS(), fElasticXsc, fInelasticXsc, fTotalXsc, G4Exp(), G4Log(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), invGeV2, CLHEP::millibarn, CLHEP::neutron_mass_c2, CLHEP::proton_mass_c2, theK0L, theK0S, theKMinus, theKPlus, theNeutron, thePiPlus, and theProton.

Referenced by G4ComponentGGHadronNucleusXsc::GetHadronNucleonXsc(), and GetHadronNucleonXscEL().

◆ HadronNucleonXscNS()

G4double G4HadronNucleonXsc::HadronNucleonXscNS ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 336 of file G4HadronNucleonXsc.cc.

339{
340 const G4double ekin = std::max(ekin0, ekinmin);
341 G4int pdg = theParticle->GetPDGEncoding();
342 /*
343 G4cout<< "HadronNucleonXscNS: Ekin(GeV)= " << ekin/GeV << " "
344 << theParticle->GetParticleName() << " + "
345 << nucleon->GetParticleName() << G4endl;
346 */
347 if(pdg == -2212 || pdg == -2112) {
348 return HadronNucleonXscPDG(theParticle, nucleon, ekin);
349 }
350
351 G4double pM = theParticle->GetPDGMass();
352 G4double tM = nucleon->GetPDGMass();
353 G4double pE = ekin + pM;
354 G4double pLab = std::sqrt(ekin*(ekin + 2*pM));
355
356 G4double sMand = CalcMandelstamS(ekin, pM, tM)*invGeV2;
357
358 pLab *= invGeV;
359 pE *= invGeV;
360
361 if(pLab >= 10.) {
363 } else { fTotalXsc = 0.0; }
364 fElasticXsc = 0.0;
365 //G4cout << "Stot(mb)= " << fTotalXsc << " pLab= " << pLab
366 // << " Smand= " << sMand <<G4endl;
367 G4double logP = G4Log(pLab);
368
371
372 if( theParticle == theNeutron)
373 {
374 if( pLab >= 373.)
375 {
376 fElasticXsc = 6.5 + 0.308*G4Exp(G4Log(G4Log(sMand/400.)*1.65))
377 + 9.19*G4Exp(-G4Log(sMand)*0.458);
378 }
379 else if( pLab >= 100.)
380 {
381 fElasticXsc = 5.53 + 0.308*G4Exp(G4Log(G4Log(sMand/28.9))*1.1)
382 + 9.19*G4Exp(-G4Log(sMand)*0.458);
383 }
384 else if( pLab >= 10.)
385 {
386 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
387 }
388 else // pLab < 10 GeV/c
389 {
390 if( neutron ) // nn to be pp
391 {
392 G4double x = G4Log(pLab/0.73);
393 if( pLab < 0.4 )
394 {
395 fTotalXsc = 23 + 50*std::sqrt(g4calc->powN(-x, 7));
397 }
398 else if( pLab < 0.73 )
399 {
400 fTotalXsc = 23 + 50*std::sqrt(g4calc->powN(-x, 7));
402 }
403 else if( pLab < 1.05 )
404 {
405 fTotalXsc = 23 + 40*x*x;
406 fElasticXsc = 23 + 20*x*x;
407 }
408 else // 1.05 - 10 GeV/c
409 {
410 fTotalXsc = 39.0+75*(pLab - 1.2)/(g4calc->powN(pLab,3) + 0.15);
411 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
412 }
413 }
414 if( proton ) // pn to be np
415 {
416 if( pLab < 0.02 )
417 {
418 fTotalXsc = 4100+30*G4Exp(G4Log(G4Log(1.3/pLab))*3.6);
420 }
421 else if( pLab < 0.8 )
422 {
423 fTotalXsc = 33+30*g4calc->powN(G4Log(pLab/1.3),4);
425 }
426 else if( pLab < 1.4 )
427 {
428 fTotalXsc = 33+30*g4calc->powN(G4Log(pLab/0.95),2);
429 G4double x = G4Log(0.511/pLab);
430 fElasticXsc = 6 + 52/( x*x + 1.6 );
431 }
432 else // 1.4 < pLab < 10. )
433 {
434 fTotalXsc = 33.3 + 20.8*(pLab*pLab - 1.35)
435 /(std::sqrt(g4calc->powN(pLab,5)) + 0.95);
436 fElasticXsc = 6 + 20/( (logP-0.182)*(logP-0.182) + 1.0 );
437 }
438 }
439 }
440 }
442 else if(theParticle == theProton)
443 {
444 if( pLab >= 373.) // pdg due to TOTEM data
445 {
446 fElasticXsc = 6.5 + 0.308*G4Exp(G4Log(G4Log(sMand/400.))*1.65)
447 + 9.19*G4Exp(-G4Log(sMand)*0.458);
448 }
449 else if( pLab >= 100.)
450 {
451 fElasticXsc = 5.53 + 0.308*G4Exp(G4Log(G4Log(sMand/28.9))*1.1)
452 + 9.19*G4Exp(-G4Log(sMand)*0.458);
453 }
454 else if( pLab >= 10.)
455 {
456 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
457 }
458 else
459 {
460 // pp
461 if( proton )
462 {
463 if( pLab < 0.73 )
464 {
465 fTotalXsc = 23 + 50*std::sqrt(g4calc->powN(G4Log(0.73/pLab),7));
467 }
468 else if( pLab < 1.05 )
469 {
470 G4double x = G4Log(pLab/0.73);
471 fTotalXsc = 23 + 40*x*x;
472 fElasticXsc = 23 + 20*x*x;
473 }
474 else // 1.05 - 10 GeV/c
475 {
476 fTotalXsc = 39.0+75*(pLab - 1.2)/(g4calc->powN(pLab,3) + 0.15);
477 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
478 }
479 }
480 else if( neutron ) // pn to be np
481 {
482 if( pLab < 0.02 )
483 {
484 fTotalXsc = 4100+30*G4Exp(G4Log(G4Log(1.3/pLab))*3.6);
486 }
487 else if( pLab < 0.8 )
488 {
489 fTotalXsc = 33+30*g4calc->powN(G4Log(pLab/1.3),4);
491 }
492 else if( pLab < 1.4 )
493 {
494 G4double x1 = G4Log(pLab/0.95);
495 G4double x2 = G4Log(0.511/pLab);
496 fTotalXsc = 33+30*x1*x1;
497 fElasticXsc = 6 + 52/(x2*x2 + 1.6);
498 }
499 else // 1.4 < pLab < 10. )
500 {
501 fTotalXsc = 33.3 + 20.8*(pLab*pLab - 1.35)
502 /(std::sqrt(g4calc->powN(pLab,5)) + 0.95);
503 fElasticXsc = 6. + 20./( (logP-0.182)*(logP-0.182) + 1.0 );
504 }
505 }
506 }
507 }
508 // pi+ p; pi- n
509 else if((pdg == 211 && proton) || (pdg == -211 && neutron))
510 {
511 if( pLab < 0.28 )
512 {
513 fTotalXsc = 10./((logP + 1.273)*(logP + 1.273) + 0.05);
515 }
516 else if( pLab < 0.68 )
517 {
518 fTotalXsc = 14./((logP + 1.273)*(logP + 1.273) + 0.07);
520 }
521 else if( pLab < 0.85 )
522 {
523 G4double x = G4Log(pLab/0.77);
524 fTotalXsc = 88.*x*x + 14.9;
525 fElasticXsc = fTotalXsc*G4Exp(-3.*(pLab - 0.68));
526 }
527 else if( pLab < 1.15 )
528 {
529 G4double x = G4Log(pLab/0.77);
530 fTotalXsc = 88.*x*x + 14.9;
531 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
532 }
533 else if( pLab < 1.4) // ns original
534 {
535 G4double Ex1 = 3.2*G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
536 G4double Ex2 = 12*G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
537 fTotalXsc = Ex1 + Ex2 + 27.5;
538 fElasticXsc = 6.0 + 1.4/(( pLab - 1.4)*( pLab - 1.4) + 0.1);
539 }
540 else if( pLab < 2.0 ) // ns original
541 {
542 G4double Ex1 = 3.2*G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
543 G4double Ex2 = 12*G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
544 fTotalXsc = Ex1 + Ex2 + 27.5;
545 fElasticXsc = 3.0 + 1.36/( (logP - 0.336)*(logP - 0.336) + 0.08);
546 }
547 else if( pLab < 3.5 ) // ns original
548 {
549 G4double Ex1 = 3.2*G4Exp(-(pLab-2.55)*(pLab-2.55)/0.55/0.55);
550 G4double Ex2 = 12*G4Exp(-(pLab-1.47)*(pLab-1.47)/0.225/0.225);
551 fTotalXsc = Ex1 + Ex2 + 27.5;
552 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
553 }
554 else if( pLab < 10. ) // my
555 {
556 fTotalXsc = 10.6 + 2.*G4Log(pE) + 25*G4Exp(-G4Log(pE)*0.43 );
557 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
558 }
559 else // pLab > 10 // my
560 {
561 fElasticXsc = 3.0 + 6.20/( (logP - 0.336)*(logP - 0.336) + 0.8);
562 }
563 }
564 // pi+ n; pi- p
565 else if((pdg == 211 && neutron) || (pdg == -211 && proton))
566 {
567 if( pLab < 0.28 )
568 {
569 fTotalXsc = 0.288/((pLab - 0.28)*(pLab - 0.28) + 0.004);
570 fElasticXsc = 1.8/((logP + 1.273)*(logP + 1.273) + 0.07);
571 }
572 else if( pLab < 0.395676 ) // first peak
573 {
574 fTotalXsc = 0.648/((pLab - 0.28)*(pLab - 0.28) + 0.009);
575 fElasticXsc = 0.257/((pLab - 0.28)*(pLab - 0.28) + 0.01);
576 }
577 else if( pLab < 0.5 )
578 {
579 G4double y = G4Log(pLab/0.48);
580 fTotalXsc = 26 + 110*y*y;
581 fElasticXsc = 0.37*fTotalXsc;
582 }
583 else if( pLab < 0.65 )
584 {
585 G4double x = G4Log(pLab/0.48);
586 fTotalXsc = 26. + 110.*x*x;
587 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
588 }
589 else if( pLab < 0.72 )
590 {
591 fTotalXsc = 36.1 + 10*G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
592 24*G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
593 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
594 }
595 else if( pLab < 0.88 )
596 {
597 fTotalXsc = 36.1 + 10.*G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
598 24*G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
599 fElasticXsc = 0.95/((pLab - 0.72)*(pLab - 0.72) + 0.049);
600 }
601 else if( pLab < 1.03 )
602 {
603 fTotalXsc = 36.1 + 10.*G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
604 24*G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
605 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
606 }
607 else if( pLab < 1.15 )
608 {
609 fTotalXsc = 36.1 + 10.*G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
610 24*G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
611 fElasticXsc = 2.0 + 0.4/((pLab - 1.03)*(pLab - 1.03) + 0.016);
612 }
613 else if( pLab < 1.3 )
614 {
615 fTotalXsc = 36.1 + 10.*G4Exp(-(pLab-0.72)*(pLab-0.72)/0.06/0.06)+
616 24*G4Exp(-(pLab-1.015)*(pLab-1.015)/0.075/0.075);
617 fElasticXsc = 3. + 13./pLab;
618 }
619 else if( pLab < 10.) // < 3.0) // ns original
620 {
621 fTotalXsc = 36.1 + 0.079-4.313*logP+
622 3*G4Exp(-(pLab-2.1)*(pLab-2.1)/0.4/0.4)+
623 1.5*G4Exp(-(pLab-1.4)*(pLab-1.4)/0.12/0.12);
624 fElasticXsc = 3. + 13./pLab;
625 }
626 else // mb
627 {
628 fElasticXsc = 3. + 13./pLab;
629 }
630 }
631 else if( (theParticle == theKMinus) && proton ) // K-p
632 {
633 if( pLab < pMin)
634 {
635 G4double psp = pLab*std::sqrt(pLab);
636 fElasticXsc = 5.2/psp;
637 fTotalXsc = 14./psp;
638 }
639 else if( pLab > pMax )
640 {
641 G4double ld = logP - minLogP;
642 G4double ld2 = ld*ld;
643 fElasticXsc = cofLogE*ld2 + 2.23;
644 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
645 }
646 else
647 {
648 G4double ld = logP - minLogP;
649 G4double ld2 = ld*ld;
650 G4double sp = std::sqrt(pLab);
651 G4double psp = pLab*sp;
652 G4double p2 = pLab*pLab;
653 G4double p4 = p2*p2;
654
655 G4double lh = pLab - 1.01;
656 G4double hd = lh*lh + .011;
657
658 G4double lm = pLab - .39;
659 G4double md = lm*lm + .000356;
660 G4double lh1 = pLab - 0.78;
661 G4double hd1 = lh1*lh1 + .00166;
662 G4double lh2 = pLab - 1.63;
663 G4double hd2 = lh2*lh2 + .007;
664
665 // small peaks were added but commented out now
666 fElasticXsc = 5.2/psp + (1.1*cofLogE*ld2 + 2.23)/(1. - .7/sp + .075/p4)
667 + .004/md + 0.005/hd1+ 0.01/hd2 +.15/hd;
668
669 fTotalXsc = 14./psp + (1.1*cofLogT*ld2 + 19.5)/(1. - .21/sp + .52/p4)
670 + .006/md + 0.01/hd1+ 0.02/hd2 + .20/hd ;
671 }
672 }
673 else if( (theParticle == theKMinus) && neutron ) // K-n
674 {
675 if( pLab > pMax )
676 {
677 G4double ld = logP - minLogP;
678 G4double ld2 = ld*ld;
679 fElasticXsc = cofLogE*ld2 + 2.23;
680 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
681 }
682 else
683 {
684 G4double lh = pLab - 0.98;
685 G4double hd = lh*lh + .021;
686 G4double sqrLogPlab = logP*logP;
687
688 fElasticXsc = 5.0 + 8.1*G4Exp(-logP*1.8) + 0.16*sqrLogPlab
689 - 1.3*logP + .15/hd;
690 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logP + 0.30/hd;
691 }
692 }
693 else if( (theParticle == theKPlus) && proton ) // K+p
694 {
695 // VI: modified low-energy part
696 if( pLab < 0.631 )
697 {
698 fElasticXsc = fTotalXsc = 12.03;
699 }
700 else if( pLab > pMax )
701 {
702 G4double ld = logP - minLogP;
703 G4double ld2 = ld*ld;
704 fElasticXsc = cofLogE*ld2 + 2.23;
705 fTotalXsc = cofLogT*ld2 + 19.2;
706 }
707 else
708 {
709 G4double ld = logP - minLogP;
710 G4double ld2 = ld*ld;
711 G4double lr = pLab - .38;
712 G4double LE = .7/(lr*lr + .076);
713 G4double sp = std::sqrt(pLab);
714 G4double p2 = pLab*pLab;
715 G4double p4 = p2*p2;
716 // VI: tuned elastic
717 fElasticXsc = LE + (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4)
718 + 2./((pLab - 0.8)*(pLab - 0.8) + 0.652);
719 fTotalXsc = LE + (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4)
720 + 2.6/((pLab - 1.)*(pLab - 1.) + 0.392);
721 }
722 }
723 else if( (theParticle == theKPlus) && neutron) // K+n
724 {
725 if( pLab < pMin )
726 {
727 G4double lm = pLab - 0.94;
728 G4double md = lm*lm + .392;
729 fElasticXsc = 2./md;
730 fTotalXsc = 4.6/md;
731 }
732 else if( pLab > pMax )
733 {
734 G4double ld = logP - minLogP;
735 G4double ld2 = ld*ld;
736 fElasticXsc = cofLogE*ld2 + 2.23;
737 fTotalXsc = cofLogT*ld2 + 19.2;
738 }
739 else
740 {
741 G4double ld = logP - minLogP;
742 G4double ld2 = ld*ld;
743 G4double sp = std::sqrt(pLab);
744 G4double p2 = pLab*pLab;
745 G4double p4 = p2*p2;
746 G4double lm = pLab - 0.94;
747 G4double md = lm*lm + .392;
748 fElasticXsc = (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4) + 2./md;
749 fTotalXsc = (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4) + 4.6/md;
750 }
751 }
755
756 if( proton && theParticle->GetPDGCharge() > 0. && ekin < ekinmaxQB )
757 {
758 G4double cB = G4NuclearRadii::CoulombFactor(theParticle, nucleon, ekin);
759 fTotalXsc *= cB;
760 fElasticXsc *= cB;
761 }
763 /*
764 G4cout<< "HNXsc: Ekin(GeV)= " << ekin/GeV << "; tot(mb)= " << fTotalXsc/millibarn
765 <<"; el(mb)= " <<fElasticXsc/millibarn
766 <<"; inel(mb)= " <<fInelasticXsc/millibarn<<" "
767 << theParticle->GetParticleName() << " + "
768 << nucleon->GetParticleName() << G4endl;
769 */
770 return fTotalXsc;
771}
@ LE
Definition: Evaluator.cc:65
static const G4double minLogP
static const G4double ekinmaxQB
static const G4double cofLogT
static const G4double invGeV
static const G4double pMax
static const G4double pMin
static const G4double ekinmin
static const G4double cofLogE
bool G4bool
Definition: G4Types.hh:86
static G4double CoulombFactor(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:166
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments

References CalcMandelstamS(), cofLogE, cofLogT, G4NuclearRadii::CoulombFactor(), ekinmaxQB, ekinmin, fElasticXsc, fInelasticXsc, fTotalXsc, g4calc, G4Exp(), G4Log(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), HadronNucleonXscPDG(), invGeV, invGeV2, LE, G4INCL::Math::max(), CLHEP::millibarn, G4INCL::Math::min(), minLogP, G4InuclParticleNames::neutron, G4InuclParticleNames::nucleon(), anonymous_namespace{G4ChipsKaonPlusInelasticXS.cc}::pM, pMax, pMin, G4Pow::powN(), G4InuclParticleNames::proton, G4InuclParticleNames::sp, theKMinus, theKPlus, theNeutron, and theProton.

Referenced by G4ComponentGGNuclNuclXsc::ComputeCrossSections(), G4ComponentGGHadronNucleusXsc::GetHadronNucleonXscNS(), GetHadronNucleonXscNS(), G4ComponentGGHadronNucleusXsc::GetHNinelasticXsc(), G4BGGNucleonElasticXS::GetIsoCrossSection(), G4BGGPionElasticXS::GetIsoCrossSection(), G4BGGPionInelasticXS::GetIsoCrossSection(), G4BGGNucleonInelasticXS::GetIsoCrossSection(), HadronNucleonXsc(), HyperonNucleonXscNS(), KaonNucleonXscNS(), and SCBMesonNucleonXscNS().

◆ HadronNucleonXscPDG()

G4double G4HadronNucleonXsc::HadronNucleonXscPDG ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 144 of file G4HadronNucleonXsc.cc.

147{
148 static const G4double M = 2.1206; // in Gev
149 static const G4double eta1 = 0.4473;
150 static const G4double eta2 = 0.5486;
151 static const G4double H = 0.272;
152
153 G4int pdg = theParticle->GetPDGEncoding();
154
155 G4double mass1 = (pdg == 22) ? 770. : theParticle->GetPDGMass();
156 G4double mass2 = nucleon->GetPDGMass();
157
158 G4double sMand = CalcMandelstamS(ekin, mass1, mass2)*invGeV2;
159 G4double x = (mass1 + mass2)*invGeV + M;
160 G4double blog = G4Log(sMand/(x*x));
161
162 G4double P(0.0), R1(0.0), R2(0.0), del(1.0);
163
166
167 if(theParticle == theNeutron)
168 {
169 if ( proton )
170 {
171 P = 34.71;
172 R1 = 12.52;
173 R2 = -6.66;
174 }
175 else
176 {
177 P = 34.41;
178 R1 = 13.07;
179 R2 = -7.394;
180 }
181 }
182 else if(theParticle == theProton)
183 {
184 if ( neutron )
185 {
186 P = 34.71;
187 R1 = 12.52;
188 R2 = -6.66;
189 }
190 else
191 {
192 P = 34.41;
193 R1 = 13.07;
194 R2 = -7.394;
195 }
196 }
197 // pbar
198 else if(pdg == -2212)
199 {
200 if ( neutron )
201 {
202 P = 34.71;
203 R1 = 12.52;
204 R2 = 6.66;
205 }
206 else
207 {
208 P = 34.41;
209 R1 = 13.07;
210 R2 = 7.394;
211 }
212 }
213 // nbar
214 else if(pdg == -2112)
215 {
216 if ( proton )
217 {
218 P = 34.71;
219 R1 = 12.52;
220 R2 = 6.66;
221 }
222 else
223 {
224 P = 34.41;
225 R1 = 13.07;
226 R2 = 7.394;
227 }
228 }
229 // pi+
230 else if(pdg == 211)
231 {
232 P = 18.75;
233 R1 = 9.56;
234 R2 = -1.767;
235 }
236 // pi-
237 else if(pdg == -211)
238 {
239 P = 18.75;
240 R1 = 9.56;
241 R2 = 1.767;
242 }
243 else if(theParticle == theKPlus)
244 {
245 if ( proton )
246 {
247 P = 16.36;
248 R1 = 4.29;
249 R2 = -3.408;
250 }
251 else
252 {
253 P = 16.31;
254 R1 = 3.7;
255 R2 = -1.826;
256 }
257 }
258 else if(theParticle == theKMinus)
259 {
260 if ( proton )
261 {
262 P = 16.36;
263 R1 = 4.29;
264 R2 = 3.408;
265 }
266 else
267 {
268 P = 16.31;
269 R1 = 3.7;
270 R2 = 1.826;
271 }
272 }
273 else if(theParticle == theK0S || theParticle == theK0L)
274 {
275 P = 16.36;
276 R1 = 2.5;
277 R2 = 0.;
278 }
279 // sigma-
280 else if(pdg == 3112)
281 {
282 P = 34.7;
283 R1 = -46.;
284 R2 = 48.;
285 }
286 // gamma
287 else if(pdg == 22) // modify later on
288 {
289 del= 0.003063;
290 P = 34.71*del;
291 R1 = (neutron) ? 0.0231 : 0.0139;
292 R2 = 0.;
293 }
294 else // as proton ???
295 {
296 if ( neutron )
297 {
298 P = 34.71;
299 R1 = 12.52;
300 R2 = -6.66;
301 }
302 else
303 {
304 P = 34.41;
305 R1 = 13.07;
306 R2 = -7.394;
307 }
308 }
310 (del*(H*blog*blog + P) + R1*G4Exp(-eta1*blog) + R2*G4Exp(-eta2*blog));
313
314 if( proton && theParticle->GetPDGCharge() > 0. && ekin < ekinmaxQB )
315 {
316 G4double cB = CoulombBarrier(theParticle, nucleon, ekin);
317 fTotalXsc *= cB;
318 fElasticXsc *= cB;
319 fInelasticXsc *= cB;
320 }
321 /*
322 G4cout << "## HadronNucleonXscPDG: ekin(MeV)= " << ekin
323 << " tot= " << fTotalXsc/CLHEP::millibarn
324 << " inel= " << fInelasticXsc/CLHEP::millibarn
325 << " el= " << fElasticXsc/CLHEP::millibarn
326 << G4endl;
327 */
328 return fTotalXsc;
329}
#define M(row, col)
static double P[]

References CalcMandelstamS(), CoulombBarrier(), ekinmaxQB, fElasticXsc, fInelasticXsc, fTotalXsc, G4Exp(), G4Log(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), invGeV, invGeV2, M, CLHEP::millibarn, G4InuclParticleNames::neutron, G4InuclParticleNames::nucleon(), P, G4InuclParticleNames::proton, theK0L, theK0S, theKMinus, theKPlus, theNeutron, and theProton.

Referenced by G4ComponentGGHadronNucleusXsc::GetHadronNucleonXscPDG(), GetHadronNucleonXscPDG(), HadronNucleonXsc(), and HadronNucleonXscNS().

◆ HadronNucleonXscVU()

G4double G4HadronNucleonXsc::HadronNucleonXscVU ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 1118 of file G4HadronNucleonXsc.cc.

1121{
1122 G4int PDGcode = theParticle->GetPDGEncoding();
1123 G4int absPDGcode = std::abs(PDGcode);
1124 G4double mass = theParticle->GetPDGMass();
1125 G4double Plab = std::sqrt(ekin*(ekin + 2.*mass))*invGeV;
1126
1127 G4double logPlab = G4Log( Plab );
1128 G4double sqrLogPlab = logPlab * logPlab;
1129
1132
1133 if( absPDGcode > 1000) //------Projectile is baryon -
1134 {
1135 if(proton)
1136 {
1137 fTotalXsc = 48.0 + 0.522*sqrLogPlab - 4.51*logPlab;
1138 fElasticXsc = 11.9 + 26.9*G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1139 }
1140 if(neutron)
1141 {
1142 fTotalXsc = 47.3 + 0.513*sqrLogPlab - 4.27*logPlab;
1143 fElasticXsc = 11.9 + 26.9*G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1144 }
1145 }
1146 else if( PDGcode == 211) //------Projectile is PionPlus ----
1147 {
1148 if(proton)
1149 {
1150 fTotalXsc = 16.4 + 19.3 *G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab;
1151 fElasticXsc = 0.0 + 11.4*G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab;
1152 }
1153 if(neutron)
1154 {
1155 fTotalXsc = 33.0 + 14.0 *G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab;
1156 fElasticXsc = 1.76 + 11.2*G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab;
1157 }
1158 }
1159 else if( PDGcode == -211) //------Projectile is PionMinus ----
1160 {
1161 if(proton)
1162 {
1163 fTotalXsc = 33.0 + 14.0 *G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab;
1164 fElasticXsc = 1.76 + 11.2*G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab;
1165 }
1166 if(neutron)
1167 {
1168 fTotalXsc = 16.4 + 19.3 *G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab;
1169 fElasticXsc = 0.0 + 11.4*G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab;
1170 }
1171 }
1172 else if( PDGcode == 111) //------Projectile is PionZero --
1173 {
1174 if(proton)
1175 {
1176 fTotalXsc = (16.4 + 19.3 *G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab + //Pi+
1177 33.0 + 14.0 *G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab)/2; //Pi-
1178
1179 fElasticXsc = (0.0 + 11.4*G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab + //Pi+
1180 1.76 + 11.2*G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab)/2;//Pi-
1181
1182 }
1183 if(neutron)
1184 {
1185 fTotalXsc = (33.0 + 14.0 *G4Exp(-logPlab*1.36) + 0.456*sqrLogPlab - 4.03*logPlab + //Pi+
1186 16.4 + 19.3 *G4Exp(-logPlab*0.42) + 0.19 *sqrLogPlab - 0.0 *logPlab)/2; //Pi-
1187 fElasticXsc = (1.76 + 11.2*G4Exp(-logPlab*0.64) + 0.043*sqrLogPlab - 0.0 *logPlab + //Pi+
1188 0.0 + 11.4*G4Exp(-logPlab*0.40) + 0.079*sqrLogPlab - 0.0 *logPlab)/2;//Pi-
1189 }
1190 }
1191 else if( PDGcode == 321 ) //------Projectile is KaonPlus --
1192 {
1193 if(proton)
1194 {
1195 fTotalXsc = 18.1 + 0.26 *sqrLogPlab - 1.0 *logPlab;
1196 fElasticXsc = 5.0 + 8.1*G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab;
1197 }
1198 if(neutron)
1199 {
1200 fTotalXsc = 18.7 + 0.21 *sqrLogPlab - 0.89*logPlab;
1201 fElasticXsc = 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab;
1202 }
1203 }
1204 else if( PDGcode ==-321 ) //------Projectile is KaonMinus ----
1205 {
1206 if(proton)
1207 {
1208 fTotalXsc = 32.1 + 0.66*sqrLogPlab - 5.6*logPlab;
1209 fElasticXsc = 7.3 + 0.29*sqrLogPlab - 2.4*logPlab;
1210 }
1211 if(neutron)
1212 {
1213 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logPlab;
1214 fElasticXsc = 5.0 + 8.1*G4Exp(-logPlab*1.8 ) + 0.16*sqrLogPlab - 1.3*logPlab;
1215 }
1216 }
1217 else if( PDGcode == 311 ) //------Projectile is KaonZero -----
1218 {
1219 if(proton)
1220 {
1221 fTotalXsc = ( 18.1 + 0.26 *sqrLogPlab - 1.0 *logPlab + //K+
1222 32.1 + 0.66 *sqrLogPlab - 5.6 *logPlab)/2; //K-
1223 fElasticXsc = ( 5.0 + 8.1*G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab + //K+
1224 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab)/2; //K-
1225 }
1226 if(neutron)
1227 {
1228 fTotalXsc = ( 18.7 + 0.21 *sqrLogPlab - 0.89*logPlab + //K+
1229 25.2 + 0.38 *sqrLogPlab - 2.9 *logPlab)/2; //K-
1230 fElasticXsc = ( 7.3 + 0.29 *sqrLogPlab - 2.4 *logPlab + //K+
1231 5.0 + 8.1*G4Exp(-logPlab*1.8 ) + 0.16 *sqrLogPlab - 1.3 *logPlab)/2; //K-
1232 }
1233 }
1234 else //------Projectile is undefined, Nucleon assumed
1235 {
1236 if(proton)
1237 {
1238 fTotalXsc = 48.0 + 0.522*sqrLogPlab - 4.51*logPlab;
1239 fElasticXsc = 11.9 + 26.9*G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1240 }
1241 if(neutron)
1242 {
1243 fTotalXsc = 47.3 + 0.513*sqrLogPlab - 4.27*logPlab;
1244 fElasticXsc = 11.9 + 26.9*G4Exp(-logPlab*1.21) + 0.169*sqrLogPlab - 1.85*logPlab;
1245 }
1246 }
1247
1252
1253 return fTotalXsc;
1254}

References fElasticXsc, fInelasticXsc, fTotalXsc, G4Exp(), G4Log(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGMass(), invGeV, CLHEP::millibarn, G4INCL::Math::min(), G4InuclParticleNames::neutron, G4InuclParticleNames::nucleon(), G4InuclParticleNames::proton, theNeutron, and theProton.

Referenced by GetHadronNucleonXscVU(), and G4ComponentGGHadronNucleusXsc::GetHNinelasticXscVU().

◆ HyperonNucleonXscNS()

G4double G4HadronNucleonXsc::HyperonNucleonXscNS ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 993 of file G4HadronNucleonXsc.cc.

996{
997 G4double coeff = 1.0;
998 G4int pdg = std::abs(theParticle->GetPDGEncoding());
999
1000 // lambda, sigma+-0 and anti-hyperons
1001 if( pdg == 3122 || pdg == 3112 || pdg == 3212 || pdg == 3222 )
1002 {
1003 coeff = 0.88;
1004 }
1005 // Xi hyperons and anti-hyperons
1006 else if( pdg == 3312 || pdg == 3322 )
1007 {
1008 coeff = 0.76;
1009 }
1010 // omega, anti_omega
1011 else if( pdg == 3334 )
1012 {
1013 coeff = 0.64;
1014 }
1015 // lambdaC, sigmaC+-0 and anti-hyperonsC
1016 else if( pdg == 4122 || pdg == 4112 || pdg == 4212 || pdg == 4222 )
1017 {
1018 coeff = 0.784378;
1019 }
1020 // omegaC0, anti_omegaC0
1021 else if( pdg == 4332 )
1022 {
1023 coeff = 0.544378;
1024 }
1025 // XiC+0 and anti-hyperonC
1026 else if( pdg == 4132 || pdg == 4232 )
1027 {
1028 coeff = 0.664378;
1029 }
1030 // lambdaB, sigmaB+-0 and anti-hyperonsB
1031 else if( pdg == 5122 || pdg == 5112 || pdg == 5212 || pdg == 5222 )
1032 {
1033 coeff = 0.740659;
1034 }
1035 // omegaB0, anti_omegaB0
1036 else if( pdg == 5332 )
1037 {
1038 coeff = 0.500659;
1039 }
1040 // XiB+0 and anti-hyperonB
1041 else if( pdg == 5132 || pdg == 5232 )
1042 {
1043 coeff = 0.620659;
1044 }
1046 fInelasticXsc *= coeff;
1047 fElasticXsc *= coeff;
1048
1049 return fTotalXsc;
1050}

References fElasticXsc, fInelasticXsc, fTotalXsc, G4ParticleDefinition::GetPDGEncoding(), HadronNucleonXscNS(), G4InuclParticleNames::nucleon(), and theProton.

Referenced by GetHyperonNucleonXscNS(), and HadronNucleonXsc().

◆ KaonNucleonXscGG()

G4double G4HadronNucleonXsc::KaonNucleonXscGG ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 778 of file G4HadronNucleonXsc.cc.

781{
783 if(theParticle == theKMinus || theParticle == theKPlus) {
784 KaonNucleonXscVG(theParticle, nucleon, ekin);
785
786 } else if(theParticle == theK0S || theParticle == theK0L) {
788 G4double sel = fElasticXsc;
789 G4double sinel = fInelasticXsc;
790 stot += KaonNucleonXscVG(theKPlus, nucleon, ekin);
791 sel += fElasticXsc;
792 sinel += fInelasticXsc;
793 fTotalXsc = stot*0.5;
794 fElasticXsc = sel*0.5;
795 fInelasticXsc = sinel*0.5;
796 }
797 return fTotalXsc;
798}
G4double KaonNucleonXscVG(const G4ParticleDefinition *theParticle, const G4ParticleDefinition *nucleon, G4double ekin)

References fElasticXsc, fInelasticXsc, fTotalXsc, KaonNucleonXscVG(), G4InuclParticleNames::nucleon(), theK0L, theK0S, theKMinus, and theKPlus.

Referenced by G4ComponentGGHadronNucleusXsc::ComputeCrossSections(), and GetKaonNucleonXscGG().

◆ KaonNucleonXscNS()

G4double G4HadronNucleonXsc::KaonNucleonXscNS ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 804 of file G4HadronNucleonXsc.cc.

807{
809 if(theParticle == theKMinus || theParticle == theKPlus) {
810 HadronNucleonXscNS(theParticle, nucleon, ekin);
811
812 } else if(theParticle == theK0S || theParticle == theK0L) {
813 G4double fact = 0.5;
814 G4double stot = 0.0;
815 G4double sel = 0.0;
816 G4double sinel= 0.0;
817 if(ekin > ekinmaxQB) {
818 stot = HadronNucleonXscNS(theKMinus, nucleon, ekin);
819 sel = fElasticXsc;
820 sinel = fInelasticXsc;
821 stot += HadronNucleonXscNS(theKPlus, nucleon, ekin);
822 sel += fElasticXsc;
823 sinel += fInelasticXsc;
824 } else {
825 fact *= std::sqrt(ekinmaxQB/std::max(ekin, ekinmin));
827 sel = fElasticXsc;
828 sinel = fInelasticXsc;
830 sel += fElasticXsc;
831 sinel += fInelasticXsc;
832 }
833 fTotalXsc = stot*fact;
834 fElasticXsc = sel*fact;
835 fInelasticXsc = sinel*fact;
836 }
837 return fTotalXsc;
838}

References ekinmaxQB, ekinmin, fElasticXsc, fInelasticXsc, fTotalXsc, HadronNucleonXscNS(), G4INCL::Math::max(), G4InuclParticleNames::nucleon(), theK0L, theK0S, theKMinus, and theKPlus.

Referenced by G4ComponentGGHadronNucleusXsc::ComputeCrossSections(), and HadronNucleonXsc().

◆ KaonNucleonXscVG()

G4double G4HadronNucleonXsc::KaonNucleonXscVG ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 844 of file G4HadronNucleonXsc.cc.

847{
848 G4double pM = theParticle->GetPDGMass();
849 G4double pLab = std::sqrt(ekin*(ekin + 2*pM));
850
851 pLab *= invGeV;
852 G4double logP = G4Log(pLab);
853
854 fTotalXsc = 0.0;
855
858
859 if( (theParticle == theKMinus) && proton ) // K-p
860 {
861 if( pLab < pMin)
862 {
863 G4double psp = pLab*std::sqrt(pLab);
864 fElasticXsc = 5.2/psp;
865 fTotalXsc = 14./psp;
866 }
867 else if( pLab > pMax )
868 {
869 G4double ld = logP - minLogP;
870 G4double ld2 = ld*ld;
871 fElasticXsc = cofLogE*ld2 + 2.23;
872 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
873 }
874 else
875 {
876 G4double ld = logP - minLogP;
877 G4double ld2 = ld*ld;
878 G4double sp = std::sqrt(pLab);
879 G4double psp = pLab*sp;
880 G4double p2 = pLab*pLab;
881 G4double p4 = p2*p2;
882
883 G4double lh = pLab - 1.01;
884 G4double hd = lh*lh + .011;
885 fElasticXsc = 5.2/psp + (cofLogE*ld2 + 2.23)/(1. - .7/sp + .075/p4) + .15/hd;
886 fTotalXsc = 14./psp + (1.1*cofLogT*ld2 + 19.5)/(1. - .21/sp + .52/p4) + .60/hd;
887 }
888 }
889 else if( (theParticle == theKMinus) && neutron ) // K-n
890 {
891 if( pLab > pMax )
892 {
893 G4double ld = logP - minLogP;
894 G4double ld2 = ld*ld;
895 fElasticXsc = cofLogE*ld2 + 2.23;
896 fTotalXsc = 1.1*cofLogT*ld2 + 19.7;
897 }
898 else
899 {
900 G4double lh = pLab - 0.98;
901 G4double hd = lh*lh + .045; // vg version
902 G4double sqrLogPlab = logP*logP;
903
904 fElasticXsc = 5.0 + 8.1*G4Exp(-logP*1.8) + 0.16*sqrLogPlab
905 - 1.3*logP + .15/hd;
906 fTotalXsc = 25.2 + 0.38*sqrLogPlab - 2.9*logP + 0.60/hd; // vg version
907 }
908 }
909 else if( (theParticle == theKPlus) && proton ) // K+p
910 {
911 // VI: modified low-energy part
912 if( pLab < 0.631 )
913 {
914 fElasticXsc = fTotalXsc = 12.03;
915 }
916 else if( pLab > pMax )
917 {
918 G4double ld = logP - minLogP;
919 G4double ld2 = ld*ld;
920 fElasticXsc = cofLogE*ld2 + 2.23;
921 fTotalXsc = cofLogT*ld2 + 19.2;
922 }
923 else
924 {
925 G4double ld = logP - minLogP;
926 G4double ld2 = ld*ld;
927 G4double lr = pLab - .38;
928 G4double LE = .7/(lr*lr + .076);
929 G4double sp = std::sqrt(pLab);
930 G4double p2 = pLab*pLab;
931 G4double p4 = p2*p2;
932 // VI: tuned elastic
933 fElasticXsc = LE + (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4)
934 + 2./((pLab - 0.8)*(pLab - 0.8) + 0.652);
935 fTotalXsc = LE + (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4)
936 + 2.6/((pLab - 1.)*(pLab - 1.) + 0.392);
937 }
938 }
939 else if( (theParticle == theKPlus) && neutron) // K+n
940 {
941 if( pLab < pMin )
942 {
943 G4double lm = pLab - 0.94;
944 G4double md = lm*lm + .392;
945 fElasticXsc = 2./md;
946 fTotalXsc = 4.6/md;
947 }
948 else if( pLab > pMax )
949 {
950 G4double ld = logP - minLogP;
951 G4double ld2 = ld*ld;
952 fElasticXsc = cofLogE*ld2 + 2.23;
953 fTotalXsc = cofLogT*ld2 + 19.2;
954 }
955 else
956 {
957 G4double ld = logP - minLogP;
958 G4double ld2 = ld*ld;
959 G4double sp = std::sqrt(pLab);
960 G4double p2 = pLab*pLab;
961 G4double p4 = p2*p2;
962 G4double lm = pLab - 0.94;
963 G4double md = lm*lm + .392;
964 fElasticXsc = (cofLogE*ld2 + 2.23)/(1. - .7/sp + .1/p4) + 2./md;
965 fTotalXsc = (cofLogT*ld2 + 19.5)/(1. + .46/sp + 1.6/p4) + 4.6/md;
966 }
967 }
968
971
972 if( proton && theParticle->GetPDGCharge() > 0. )
973 {
974 G4double cB = G4NuclearRadii::CoulombFactor(theParticle, nucleon, ekin);
975 fTotalXsc *= cB;
976 fElasticXsc *= cB;
977 }
980 /*
981 G4cout << "HNXscVG: E= " << ekin << " " << theParticle->GetParticleName()
982 << " P: " << proton << " xtot(b)= " << fTotalXsc/barn
983 << " xel(b)= " << fElasticXsc/barn << " xinel(b)= " << fInelasticXsc/barn
984 << G4endl;
985 */
986 return fTotalXsc;
987}

References cofLogE, cofLogT, G4NuclearRadii::CoulombFactor(), fElasticXsc, fInelasticXsc, fTotalXsc, G4Exp(), G4Log(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), invGeV, LE, G4INCL::Math::max(), CLHEP::millibarn, G4INCL::Math::min(), minLogP, G4InuclParticleNames::neutron, G4InuclParticleNames::nucleon(), anonymous_namespace{G4ChipsKaonPlusInelasticXS.cc}::pM, pMax, pMin, G4InuclParticleNames::proton, G4InuclParticleNames::sp, theKMinus, theKPlus, theNeutron, and theProton.

Referenced by KaonNucleonXscGG().

◆ SCBMesonNucleonXscNS()

G4double G4HadronNucleonXsc::SCBMesonNucleonXscNS ( const G4ParticleDefinition theParticle,
const G4ParticleDefinition nucleon,
G4double  ekin 
)

Definition at line 1056 of file G4HadronNucleonXsc.cc.

1059{
1060 G4double coeff(1.0);
1061 G4int pdg = std::abs(theParticle->GetPDGEncoding());
1062
1063 // B+-0 anti
1064 if( pdg == 511 || pdg == 521 )
1065 {
1066 coeff = 0.610989;
1067 }
1068 // D+-0 anti
1069 else if( pdg == 411 || pdg == 421 )
1070 {
1071 coeff = 0.676568;
1072 }
1073 // Bs, antiBs
1074 else if( pdg == 531 )
1075 {
1076 coeff = 0.430989;
1077 }
1078 // Bc+-
1079 else if( pdg == 541 )
1080 {
1081 coeff = 0.287557;
1082 }
1083 // Ds+-
1084 else if( pdg == 431 )
1085 {
1086 coeff = 0.496568;
1087 }
1088 // etaC, J/Psi
1089 else if( pdg == 441 || pdg == 443 )
1090 {
1091 coeff = 0.353135;
1092 }
1093 // Upsilon
1094 else if( pdg == 553 )
1095 {
1096 coeff = 0.221978;
1097 }
1098 // eta
1099 else if( pdg == 221 )
1100 {
1101 coeff = 0.76;
1102 }
1103 // eta'
1104 else if( pdg == 331 )
1105 {
1106 coeff = 0.88;
1107 }
1109 fElasticXsc *= coeff;
1110 fInelasticXsc *= coeff;
1111 return fTotalXsc;
1112}

References fElasticXsc, fInelasticXsc, fTotalXsc, G4ParticleDefinition::GetPDGEncoding(), HadronNucleonXscNS(), G4InuclParticleNames::nucleon(), and thePiPlus.

Referenced by HadronNucleonXsc().

Field Documentation

◆ fElasticXsc

G4double G4HadronNucleonXsc::fElasticXsc
private

◆ fInelasticXsc

G4double G4HadronNucleonXsc::fInelasticXsc
private

◆ fTotalXsc

G4double G4HadronNucleonXsc::fTotalXsc
private

◆ g4calc

G4Pow* G4HadronNucleonXsc::g4calc
private

Definition at line 137 of file G4HadronNucleonXsc.hh.

Referenced by G4HadronNucleonXsc(), and HadronNucleonXscNS().

◆ theK0L

const G4ParticleDefinition* G4HadronNucleonXsc::theK0L
private

◆ theK0S

const G4ParticleDefinition* G4HadronNucleonXsc::theK0S
private

◆ theKMinus

const G4ParticleDefinition* G4HadronNucleonXsc::theKMinus
private

◆ theKPlus

const G4ParticleDefinition* G4HadronNucleonXsc::theKPlus
private

◆ theNeutron

const G4ParticleDefinition* G4HadronNucleonXsc::theNeutron
private

◆ thePiPlus

const G4ParticleDefinition* G4HadronNucleonXsc::thePiPlus
private

◆ theProton

const G4ParticleDefinition* G4HadronNucleonXsc::theProton
private

The documentation for this class was generated from the following files: