56 const G4double piA[5] = {430., 36., 1.37, 2.0, 60.};
57 const G4double pAP[5] = {1.04, 1.26, 1.35, 0.94, 0.94};
58 const G4double pC0[5] = {12.7, 6.0, 6.84, 6.5, 8.0};
59 const G4double pC1[5] = {1.57, 1.6, 1.7, 1.23, 2.6};
60 const G4double pG0[5] = {2.55, 4.6, 3.7, 5.5, 4.6};
61 const G4double pG1[5] = {-0.23, -0.5, 0., 0., -2.};
65 const G4double beta_prime_pi = 0.0410;
66 const G4double beta_prime_eta = 0.0402;
73 G4cout <<
"G4ChargeExchangeXS::G4ChargeExchangeXS" <<
G4endl;
77 const G4String nam[5] = {
"pi0",
"eta",
"eta_prime",
"omega",
"f2(1270)"};
78 for (
G4int i=0; i<5; ++i) {
79 fPionSecPD[i] = table->FindParticle(nam[i]);
80 if (
nullptr == fPionSecPD[i]) {
82 ed <<
"### meson " << nam[i] <<
" is not found out in the particle table";
83 G4Exception(
"G4ChargeExchangeXS::G4ChargeExchangeXS()",
"had044",
92 outFile <<
"G4ChargeExchangeXS calculates charge exchange cross section for "
93 <<
"pi+, pi-, K+, K-, KL\n";
111 if (pE <= fEnergyLimit) {
return result; }
121 G4double lorentz_s = tM*tM + 2*tM*pE + pM*pM;
122 if (lorentz_s <= (tM + pM)*(tM + pM)) {
return result; }
126 const G4double fact = 1e-30*CLHEP::cm2;
127 const G4double pfact = 0.1/CLHEP::GeV;
140 const G4double x = lorentz_s*inv1e7;
141 G4double sum = 122.*z23*g4calc->
powA(x, -1.23)*g4calc->
powZ(
A,-beta_prime_pi*logA);
143 sum += 31.*z23*g4calc->
powA(x, -1.53)*g4calc->
powZ(
A,-beta_prime_eta*logA);
146 for (
G4int i=2; i<5; ++i) {
147 sum += piA[i]*z23*g4calc->
powA(x, -pAP[i])*(1.0 + pG0[i] + pG1[i]*logX)
148 *g4calc->
powA(z23, -0.15*a23)/(pC0[i] + pC1[i]*logX);
155 else if (pdg == 211) {
159 const G4double x = lorentz_s*inv1e7;
160 G4double sum = 122.*n23*g4calc->
powA(x, -1.23)*g4calc->
powZ(
A,-beta_prime_pi*logA);
162 sum += 31.*n23*g4calc->
powA(x, -1.53)*g4calc->
powZ(
A,-beta_prime_eta*logA);
165 for (
G4int i=2; i<5; ++i) {
166 sum += piA[i]*n23*g4calc->
powA(x, -pAP[i])*(1.0 + pG0[i] + pG1[i]*logX)
167 *g4calc->
powA(n23, -0.15*a23)/(pC0[i] + pC1[i]*logX);
174 else if (pdg == -321){
177 const G4double p_momentum = std::sqrt(pE*pE - pM*pM)*pfact;
178 result = g4calc->
Z23(Z)*g4calc->
powA(p_momentum, -1.60)*kfact;
182 else if (pdg == 321) {
183 const G4double p_momentum = std::sqrt(pE*pE - pM*pM)*pfact;
184 result = g4calc->
Z23(
A-Z)*g4calc->
powA(p_momentum, -1.60)*kfact;
188 else if (pdg == 130) {
190 const G4double p_momentum = std::sqrt(pE*pE - pM*pM)*pfact;
191 result = 0.5*(g4calc->
Z23(Z) + g4calc->
Z23(
A-Z))*
192 g4calc->
powA(p_momentum, -1.60)*kfact;
195 return result*fFactor;
206 if (std::abs(pdg) == 211) {
208 for (
G4int i=0; i<5; ++i) {
209 if (x <= fXSecPion[i]) {
210 return fPionSecPD[i];
217 else if (std::abs(pdg) == 321) {
227 else if (std::abs(pdg) == 130) {
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso, const G4Element *elm, const G4Material *mat) override
const G4ParticleDefinition * SampleSecondaryType(const G4ParticleDefinition *, const G4int Z, const G4int A)
G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *, const G4Material *) override
void CrossSectionDescription(std::ostream &) const override
G4ParticleDefinition * GetDefinition() const
G4double GetTotalEnergy() const
static G4KaonMinus * KaonMinus()
static G4KaonPlus * KaonPlus()
static G4KaonZeroLong * KaonZeroLong()
static G4KaonZeroShort * KaonZeroShort()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4int GetPDGEncoding() const
static G4ParticleTable * GetParticleTable()
static G4Pow * GetInstance()
G4double logZ(G4int Z) const
G4double powZ(G4int Z, G4double y) const
G4double powA(G4double A, G4double y) const
G4double Z23(G4int Z) const