Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ParticleHPKallbachMannSyst Class Reference

#include <G4ParticleHPKallbachMannSyst.hh>

Public Member Functions

 G4ParticleHPKallbachMannSyst (G4double aCompoundFraction, G4double anIncidentEnergy, G4double anIncidentMass, G4double aProductEnergy, G4double aProductMass, G4double aResidualMass, G4int aResidualA, G4int aResidualZ, G4double aTargetMass, G4int aTargetA, G4int aTargetZ, G4int aProjectileA, G4int aProjectileZ, G4int aProductA, G4int aProductZ)
 
 ~G4ParticleHPKallbachMannSyst ()=default
 
G4double Sample (G4double anEnergy)
 
G4double Kallbach (G4double cosTh, G4double anEnergy)
 
G4double GetKallbachZero (G4double anEnergy)
 
G4double A (G4double anEnergy)
 
G4double SeparationEnergy (G4int Ac, G4int Nc, G4int AA, G4int ZA, G4int Abinding, G4int Zbinding)
 

Detailed Description

Definition at line 36 of file G4ParticleHPKallbachMannSyst.hh.

Constructor & Destructor Documentation

◆ G4ParticleHPKallbachMannSyst()

G4ParticleHPKallbachMannSyst::G4ParticleHPKallbachMannSyst ( G4double aCompoundFraction,
G4double anIncidentEnergy,
G4double anIncidentMass,
G4double aProductEnergy,
G4double aProductMass,
G4double aResidualMass,
G4int aResidualA,
G4int aResidualZ,
G4double aTargetMass,
G4int aTargetA,
G4int aTargetZ,
G4int aProjectileA,
G4int aProjectileZ,
G4int aProductA,
G4int aProductZ )
inline

Definition at line 39 of file G4ParticleHPKallbachMannSyst.hh.

45 {
46 theCompoundFraction = aCompoundFraction;
47 theIncidentEnergy = anIncidentEnergy;
48 theIncidentMass = anIncidentMass;
49 theProductEnergy = aProductEnergy;
50 theProductMass = aProductMass;
51 theResidualMass = aResidualMass;
52 theResidualA = aResidualA;
53 theResidualZ = aResidualZ;
54 theTargetMass = aTargetMass;
55 theTargetA = aTargetA;
56 theTargetZ = aTargetZ;
57 theProjectileA = aProjectileA;
58 theProjectileZ = aProjectileZ;
59 theProductA = aProductA;
60 theProductZ = aProductZ;
61 }

◆ ~G4ParticleHPKallbachMannSyst()

G4ParticleHPKallbachMannSyst::~G4ParticleHPKallbachMannSyst ( )
default

Member Function Documentation

◆ A()

G4double G4ParticleHPKallbachMannSyst::A ( G4double anEnergy)

Definition at line 100 of file G4ParticleHPKallbachMannSyst.cc.

101{
102 G4double result;
103 G4double C1 = 0.04 / MeV;
104 G4double C2 = 1.8E-6 / (MeV * MeV * MeV);
105 G4double C3 = 6.7E-7 / (MeV * MeV * MeV * MeV);
106
107 G4double epsa = anEnergy * theTargetMass / (theTargetMass + theIncidentMass);
108 G4int Ac = theTargetA + theProjectileA;
109 G4int Nc = Ac - theTargetZ - theProjectileZ;
110 G4int AA = theTargetA;
111 G4int ZA = theTargetZ;
112 G4double ea = epsa + SeparationEnergy(Ac, Nc, AA, ZA, theProjectileA, theProjectileZ);
113 G4double Et1 = 130 * MeV;
114 G4double R1 = std::min(ea, Et1);
115 // theProductEnergy is still in CMS!!!
116 G4double epsb = theProductEnergy * (theProductMass + theResidualMass) / theResidualMass;
117 G4int AB = theResidualA;
118 G4int ZB = theResidualZ;
119 G4double eb = epsb + SeparationEnergy(Ac, Nc, AB, ZB, theProductA, theProductZ);
120 G4double X1 = R1 * eb / ea;
121 G4double Et3 = 41 * MeV;
122 G4double R3 = std::min(ea, Et3);
123 G4double X3 = R3 * eb / ea;
124
125 G4double Ma = 1;
126 G4double mb = 1;
127 if (theProjectileA == 1 || (theProjectileZ == 1 && theProjectileA == 2)) {
128 Ma = 1;
129 } // neutron,proton,deuteron
130 else if (theProjectileA == 4 && theProjectileZ == 2) {
131 Ma = 0;
132 } // alpha
133 else if (theProjectileA == 3 && (theProjectileZ == 1 || theProjectileZ == 2)) {
134 Ma = 0.5;
135 } // tritum,He3 : set intermediate value
136 else {
137 throw G4HadronicException(__FILE__, __LINE__,
138 "Severe error in the sampling of Kallbach-Mann Systematics");
139 }
140 if (theProductA == 1 && theProductZ == 0) {
141 mb = 1. / 2.;
142 } // neutron
143 else if (theProductA == 4 && theProductZ == 2) {
144 mb = 2;
145 } // alpha
146 else {
147 mb = 1;
148 }
149
150 result = C1 * X1 + C2 * G4Pow::GetInstance()->powN(X1, 3)
151 + C3 * Ma * mb * G4Pow::GetInstance()->powN(X3, 4);
152 return result;
153}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
const double C2
#define C1
#define C3
G4double SeparationEnergy(G4int Ac, G4int Nc, G4int AA, G4int ZA, G4int Abinding, G4int Zbinding)
static G4Pow * GetInstance()
Definition G4Pow.cc:41
G4double powN(G4double x, G4int n) const
Definition G4Pow.cc:162

◆ GetKallbachZero()

G4double G4ParticleHPKallbachMannSyst::GetKallbachZero ( G4double anEnergy)

Definition at line 86 of file G4ParticleHPKallbachMannSyst.cc.

87{
88 G4double result;
89 // delta 2.0e-16 in not good.
90 // delta 4.0e-16 is OK
91 // safety factor of 2
92 G4double delta = 8.0e-16;
93 if (std::abs(theCompoundFraction - 1) < delta) {
94 theCompoundFraction = 1.0 - delta;
95 }
96 result = 0.5 * (1. / A(anEnergy)) * G4Log((1 - theCompoundFraction) / (1 + theCompoundFraction));
97 return result;
98}
G4double G4Log(G4double x)
Definition G4Log.hh:227
const G4double A[17]

Referenced by Sample().

◆ Kallbach()

G4double G4ParticleHPKallbachMannSyst::Kallbach ( G4double cosTh,
G4double anEnergy )

Definition at line 76 of file G4ParticleHPKallbachMannSyst.cc.

77{
78 // Kallbach-Mann systematics without normalization.
79 G4double result;
80 G4double theX = A(anEnergy) * cosTh;
81 result =
82 0.5 * (G4Exp(theX) * (1 + theCompoundFraction) + G4Exp(-theX) * (1 - theCompoundFraction));
83 return result;
84}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:180

Referenced by Sample().

◆ Sample()

G4double G4ParticleHPKallbachMannSyst::Sample ( G4double anEnergy)

Definition at line 45 of file G4ParticleHPKallbachMannSyst.cc.

46{
47 G4double result = 0.;
48
49 G4double zero = GetKallbachZero(anEnergy);
50 if (zero > 1) zero = 1.;
51 if (zero < -1) zero = -1.;
52 G4double max = Kallbach(zero, anEnergy);
53 G4double upper = Kallbach(1., anEnergy);
54 G4double lower = Kallbach(-1., anEnergy);
55 if (upper > max) max = upper;
56 if (lower > max) max = lower;
57 G4double value, random;
58
59 G4int icounter = 0;
60 G4int icounter_max = 1024;
61 do {
62 icounter++;
63 if (icounter > icounter_max) {
64 G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of "
65 << __FILE__ << "." << G4endl;
66 break;
67 }
68 result = 2. * G4UniformRand() - 1;
69 value = Kallbach(result, anEnergy) / max;
70 random = G4UniformRand();
71 } while (random > value); // Loop checking, 11.05.2015, T. Koi
72
73 return result;
74}
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition Randomize.hh:52
G4double Kallbach(G4double cosTh, G4double anEnergy)
G4double GetKallbachZero(G4double anEnergy)
T max(const T t1, const T t2)
brief Return the largest of the two arguments

Referenced by G4ParticleHPContAngularPar::Sample().

◆ SeparationEnergy()

G4double G4ParticleHPKallbachMannSyst::SeparationEnergy ( G4int Ac,
G4int Nc,
G4int AA,
G4int ZA,
G4int Abinding,
G4int Zbinding )

Definition at line 155 of file G4ParticleHPKallbachMannSyst.cc.

157{
158 G4double result;
159 G4int NA = AA - ZA;
160 G4int Zc = Ac - Nc;
161 result = 15.68 * (Ac - AA);
162 result += -28.07 * ((Nc - Zc) * (Nc - Zc) / (G4double)Ac - (NA - ZA) * (NA - ZA) / (G4double)AA);
163 result +=
164 -18.56 * (G4Pow::GetInstance()->A23(G4double(Ac)) - G4Pow::GetInstance()->A23(G4double(AA)));
165 result += 33.22
166 * ((Nc - Zc) * (Nc - Zc) / G4Pow::GetInstance()->powA(G4double(Ac), 4. / 3.)
167 - (NA - ZA) * (NA - ZA) / G4Pow::GetInstance()->powA(G4double(AA), 4. / 3.));
168 result += -0.717
169 * (Zc * Zc / G4Pow::GetInstance()->A13(G4double(Ac))
170 - ZA * ZA / G4Pow::GetInstance()->A13(G4double(AA)));
171 result += 1.211 * (Zc * Zc / (G4double)Ac - ZA * ZA / (G4double)AA);
172 G4double totalBinding(0);
173 if (Zbinding == 0 && Abinding == 1) totalBinding = 0;
174 if (Zbinding == 1 && Abinding == 1) totalBinding = 0;
175 if (Zbinding == 1 && Abinding == 2) totalBinding = 2.224596;
176 if (Zbinding == 1 && Abinding == 3) totalBinding = 8.481798;
177 if (Zbinding == 2 && Abinding == 3) totalBinding = 7.718043;
178 if (Zbinding == 2 && Abinding == 4) totalBinding = 28.29566;
179 result += -totalBinding;
180 result *= MeV;
181 return result;
182}
G4double A13(G4double A) const
Definition G4Pow.cc:116
G4double powA(G4double A, G4double y) const
Definition G4Pow.hh:230
G4double A23(G4double A) const
Definition G4Pow.hh:131

Referenced by A().


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