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

#include <G4ProjectileFragmentCrossSection.hh>

Public Member Functions

 G4ProjectileFragmentCrossSection ()
 
G4double doit (G4double Ap, G4double Zp, G4double At, G4double Zt, G4double A, G4double Z)
 
void testMe ()
 

Detailed Description

Definition at line 36 of file G4ProjectileFragmentCrossSection.hh.

Constructor & Destructor Documentation

◆ G4ProjectileFragmentCrossSection()

G4ProjectileFragmentCrossSection::G4ProjectileFragmentCrossSection ( )
inline

Definition at line 39 of file G4ProjectileFragmentCrossSection.hh.

40 {
41 p_S[1] = -2.38; // scale factor for xsect in barn
42 p_S[2] = 0.27;
43
44 p_P[1] = -2.5840E+00; // slope of mass yield curve
45 p_P[2] = -7.5700E-03;
46
47 p_Delta[1] = -1.0870E+00; // centroid rel. to beta-stability
48 p_Delta[2] = +3.0470E-02;
49 p_Delta[3] = +2.1353E-04;
50 p_Delta[4] = +7.1350E+01;
51
52 p_R[1] = +0.885E+00; // width parameter R
53 p_R[2] = -9.8160E-03;
54
55 p_Un[1] = 1.65; // slope par. n-rich ride of Z distr.
56
57 p_Up[1] = 1.7880; // slope par. p-rich ride of Z distr.
58 p_Up[2] = +4.7210E-03;
59 p_Up[3] = -1.3030E-05;
60
61 p_mn[1] = 0.400; // memory effect n-rich projectiles
62 p_mn[2] = 0.600;
63
64 p_mp[1] = -10.25; // memory effect p-rich projectiles
65 p_mp[2] = +10.1;
66
67 corr_d[1] = -25.0; // correction close to proj.: centroid dzp
68 corr_d[2] = 0.800;
69 corr_r[1] = +20.0; // correction close to proj.: width R
70 corr_r[2] = 0.820;
71 corr_y[1] = 200.0; // correction close to proj.: Yield_a
72 corr_y[2] = 0.90;
73 }

Member Function Documentation

◆ doit()

G4double G4ProjectileFragmentCrossSection::doit ( G4double  Ap,
G4double  Zp,
G4double  At,
G4double  Zt,
G4double  A,
G4double  Z 
)
inline

Definition at line 75 of file G4ProjectileFragmentCrossSection.hh.

76 {
77// calculate mass yield
78 G4double Ap13 = std::pow(Ap, 1./3.);
79 G4double At13 = std::pow(At, 1./3.);
80 G4double S = p_S[2] * (At13 + Ap13 + p_S[1]);
81// cout << "debug0 "<<S<<" "<<At13<<" "<<Ap13<<" "<<p_S[1]<<" "<<p_S[2]<<endl;
82 G4double p = std::exp(p_P[2]*Ap + p_P[1]);
83 G4double yield_a = p * S * std::exp(-p * (Ap - A));
84 cout << "debug1 "<<yield_a<<endl;
85// modification close to projectile
86 G4double f_mod_y=1.0;
87 if (A/Ap > corr_y[2])
88 {
89 f_mod_y=corr_y[1]*std::pow(A/Ap-corr_y[2], 2) + 1.0;
90 }
91 yield_a= yield_a * f_mod_y;
92 cout << "debug1 "<<yield_a<<endl;
93
94// calculate maximum of charge dispersion zprob
95 G4double zbeta = A/(1.98+0.0155*std::pow(A, (2./3.)));
96 G4double zbeta_p = Ap/(1.98+0.0155*std::pow(Ap, (2./3.)));
97 G4double delta;
98 if(A > p_Delta[4])
99 {
100 delta = p_Delta[1] + p_Delta[2]*A;
101 }
102 else
103 {
104 delta = p_Delta[3]*A*A;
105 }
106
107// modification close to projectile
108 G4double f_mod=1.0;
109 if(A/Ap > corr_d[2])
110 {
111 f_mod = corr_d[1]*std::pow(A/Ap-corr_d[2], 2) + 1.0;
112 }
113 delta = delta*f_mod;
114 G4double zprob = zbeta+delta;
115
116// correction for proton- and neutron-rich projectiles
117 G4double dq;
118 if((Zp-zbeta_p)>0)
119 {
120 dq = std::exp(p_mp[1] + G4double(A)/G4double(Ap)*p_mp[2]);
121 cout << "dq "<<A<<" "<<Ap<<" "<<p_mp[1]
122 <<" "<<p_mp[2]<<" "<<dq<<" "<<p_mp[1] + A/Ap*p_mp[2]<<endl;
123 }
124 else
125 {
126 dq = p_mn[1]*std::pow(A/Ap, 2.0) + p_mn[2]*std::pow(A/Ap, 4.0);
127 }
128 zprob = zprob + dq * (Zp-zbeta_p);
129
130// small corr. since Xe-129 and Pb-208 are not on Z_beta line
131 zprob = zprob + 0.0020*A;
132 cout <<"zprob "<<A<<" "<<dq<<" "<<Zp<<" "<<zbeta_p
133 <<" "<<zbeta<<" "<<delta<<endl;
134
135// calculate width parameter R
136 G4double r = std::exp(p_R[1] + p_R[2]*A);
137
138// modification close to projectile
139 f_mod=1.0;
140 if (A/Ap > corr_r[2])
141 {
142 f_mod = corr_r[1]*Ap*std::pow(A/Ap-corr_r[2], 4.0)+1.0;
143 }
144 r = r*f_mod;
145
146// change width according to dev. from beta-stability
147 if ((Zp-zbeta_p) < 0.0)
148 {
149 r=r*(1.0-0.0833*std::abs(Zp-zbeta_p));
150 }
151
152// calculate slope parameters u_n, u_p
153 G4double u_n = p_Un[1];
154 G4double u_p = p_Up[1] + p_Up[2]*A + p_Up[3]*A*A;
155
156// calculate charge dispersion
157 G4double expo, fract;
158 if((zprob-Z) > 0)
159 {
160// neutron-rich
161 expo = -r*std::pow(std::abs(zprob-Z), u_n);
162 fract = std::exp(expo)*std::sqrt(r/3.14159);
163 }
164 else
165 {
166// proton-rich
167 expo = -r*std::pow(std::abs(zprob-Z), u_p);
168 fract = std::exp(expo)*std::sqrt(r/3.14159);
169 cout << "1 "<<expo<<" "<<r<<" "<<zprob<<" "<<Z<<" "<<u_p<<endl;
170// go to exponential slope
171 G4double dfdz = 1.2 + 0.647*std::pow(A/2.,0.3);
172 G4double z_exp = zprob + dfdz * std::log(10.) / (2.*r);
173 if( Z>z_exp )
174 {
175 expo = -r*std::pow(std::abs(zprob-z_exp), u_p);
176 fract = std::exp(expo)*std::sqrt(r/3.14159)
177 / std::pow(std::pow(10, dfdz), Z-z_exp);
178 }
179 }
180
181 cout << "debug "<<fract<<" "<<yield_a<<endl;
182 G4double epaxv2=fract*yield_a;
183 return epaxv2;
184 }
double G4double
Definition: G4Types.hh:64

Referenced by testMe().

◆ testMe()

void G4ProjectileFragmentCrossSection::testMe ( )
inline

Definition at line 186 of file G4ProjectileFragmentCrossSection.hh.

187 {
189 cout << i.doit(58, 28, 9, 4, 49, 28) << endl;
190 // Sigma = 9.800163E-13 b
191 }
G4double doit(G4double Ap, G4double Zp, G4double At, G4double Zt, G4double A, G4double Z)

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