Geant4 10.7.0
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 ()
 
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 40 of file G4ParticleHPKallbachMannSyst.hh.

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

◆ ~G4ParticleHPKallbachMannSyst()

G4ParticleHPKallbachMannSyst::~G4ParticleHPKallbachMannSyst ( )
inline

Definition at line 64 of file G4ParticleHPKallbachMannSyst.hh.

64{};

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)){Ma=1;}//neutron,proton,deuteron
128 else if(theProjectileA==4 && theProjectileZ==2){Ma=0;}//alpha
129 else if(theProjectileA==3 && (theProjectileZ==1 || theProjectileZ==2)){Ma=0.5;}//tritum,He3 : set intermediate value
130 else
131 {
132 throw G4HadronicException(__FILE__, __LINE__, "Severe error in the sampling of Kallbach-Mann Systematics");
133 }
134 if(theProductA==1 && theProductZ==0){mb=1./2.;}//neutron
135 else if(theProductA==4 && theProductZ==2){mb=2;}//alpha
136 else{mb=1;}
137
138 result = C1*X1 + C2*G4Pow::GetInstance()->powN(X1, 3) + C3*Ma*mb*G4Pow::GetInstance()->powN(X3, 4);
139 return result;
140
141}
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:166

Referenced by GetKallbachZero(), and Kallbach().

◆ 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:226

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 = 0.5*(G4Exp( theX)*(1+theCompoundFraction)
82 +G4Exp(-theX)*(1-theCompoundFraction));
83 return result;
84}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179

Referenced by Sample().

◆ Sample()

G4double G4ParticleHPKallbachMannSyst::Sample ( G4double  anEnergy)

Definition at line 44 of file G4ParticleHPKallbachMannSyst.cc.

45{
46 G4double result;
47
48 G4double zero = GetKallbachZero(anEnergy);
49 if(zero>1) zero=1.;
50 if(zero<-1)zero=-1.;
51 G4double max = Kallbach(zero, anEnergy);
52 G4double upper = Kallbach(1., anEnergy);
53 G4double lower = Kallbach(-1., anEnergy);
54 if(upper>max) max=upper;
55 if(lower>max) max=lower;
56 G4double value, random;
57
58 G4int icounter=0;
59 G4int icounter_max=1024;
60 do
61 {
62 icounter++;
63 if ( icounter > icounter_max ) {
64 G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl;
65 break;
66 }
67 result = 2.*G4UniformRand()-1;
68 value = Kallbach(result, anEnergy)/max;
69 random = G4UniformRand();
70 }
71 while(random>value); // Loop checking, 11.05.2015, T. Koi
72
73 return result;
74}
#define G4endl
Definition: G4ios.hh:57
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 143 of file G4ParticleHPKallbachMannSyst.cc.

144{
145 G4double result;
146 G4int NA = AA-ZA;
147 G4int Zc = Ac-Nc;
148 result = 15.68*(Ac-AA);
149 result += -28.07*((Nc-Zc)*(Nc-Zc)/(G4double)Ac - (NA-ZA)*(NA-ZA)/(G4double)AA);
150 result += -18.56*(G4Pow::GetInstance()->A23(G4double(Ac)) - G4Pow::GetInstance()->A23(G4double(AA)));
151 result += 33.22*((Nc-Zc)*(Nc-Zc)/G4Pow::GetInstance()->powA(G4double(Ac), 4./3.) - (NA-ZA)*(NA-ZA)/G4Pow::GetInstance()->powA(G4double(AA), 4./3.));
152 result += -0.717*(Zc*Zc/G4Pow::GetInstance()->A13(G4double(Ac))-ZA*ZA/G4Pow::GetInstance()->A13(G4double(AA)));
153 result += 1.211*(Zc*Zc/(G4double)Ac-ZA*ZA/(G4double)AA);
154 G4double totalBinding(0);
155 if(Zbinding==0&&Abinding==1) totalBinding=0;
156 if(Zbinding==1&&Abinding==1) totalBinding=0;
157 if(Zbinding==1&&Abinding==2) totalBinding=2.224596;
158 if(Zbinding==1&&Abinding==3) totalBinding=8.481798;
159 if(Zbinding==2&&Abinding==3) totalBinding=7.718043;
160 if(Zbinding==2&&Abinding==4) totalBinding=28.29566;
161 result += -totalBinding;
162 result *= MeV;
163 return result;
164}
G4double A13(G4double A) const
Definition: G4Pow.cc:120
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: