58 FragmentAthrd = ResidualAthrd;
59 FragmentA = theA + ResidualA;
88 FragmentA = theA + ResidualA;
89 FragmentAthrd =
g4pow->
Z13(FragmentA);
96 std::ostringstream errOs;
97 errOs <<
"BAD PROTON CROSS SECTION OPTION !!" <<
G4endl;
105 G4int aZ = ResidualZ;
113 C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
131 if (K > 50*MeV) { Kc = 50*MeV; }
133 G4double landa, landa0, landa1, mu, mm0, mu1,nu, nu0, nu1, nu2,xs;
134 G4double p, p0, p1, p2,Ec,delta,q,r,ji;
148 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
149 p = p0 + p1/Ec + p2/(Ec*Ec);
150 landa = landa0*ResidualA + landa1;
154 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
155 q = landa - nu/(Ec*Ec) - 2*p*Ec;
156 r = mu + 2*nu/Ec + p*(Ec*Ec);
159 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
160 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
161 if (xs <0.0) {xs=0.0;}
171 G4double eekin,ekin,ff1,ff2,ff3,r0,fac,fac1,fac2,b0,xine_th(0);
180 G4int rnneu=ResidualA-ResidualZ;
184 b0=2.247-0.915*(1.-1./ResidualAthrd);
185 fac1=b0*(1.-1./ResidualAthrd);
187 if(rnneu > 1.5) { fac2 =
g4pow->
logZ(rnneu); }
188 xine_th= 1.e+31*fac*fac2*(1.+ResidualAthrd-fac1);
189 xine_th=(1.-0.15*std::exp(-ekin))*xine_th/(1.00-0.0007*ResidualA);
190 ff1=0.70-0.0020*ResidualA;
192 ff3=0.8+18/
G4double(ResidualA)-0.002*ResidualA;
193 fac=1.-(1./(1.+std::exp(-8.*ff1*(std::log10(ekin)+1.37*ff2))));
194 xine_th=xine_th*(1.+ff3*fac);
195 ff1=1.-1/
G4double(ResidualA)-0.001*ResidualA;
196 ff2=1.17-2.7/
G4double(ResidualA)-0.0014*ResidualA;
197 fac=-8.*ff1*(std::log10(ekin)+2.0*ff2);
198 fac=1./(1.+std::exp(fac));
201 std::ostringstream errOs;
202 G4cout<<
"WARNING: negative Wellisch cross section "<<
G4endl;
203 errOs <<
"RESIDUAL: A=" << ResidualA <<
" Z=" << ResidualZ <<
G4endl;
204 errOs <<
" xsec("<<ekin<<
" MeV) ="<<xine_th <<
G4endl;
216 G4double landa, landa0, landa1, mu, mm0, mu1,nu, nu0, nu1, nu2;
238 G4double ec,ecsq,xnulam,etest(0.),ra(0.),a,w,c,signor(1.),signor2,sig;
239 G4double b,ecut,cut,ecut2,geom,elab;
244 if (ResidualA <= 60) { signor = 0.92; }
245 else if (ResidualA < 100) { signor = 0.8 + ResidualA*0.002; }
247 ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
249 p = p0 + p1/ec + p2/ecsq;
250 landa = landa0*ResidualA + landa1;
253 nu = a* (nu0+nu1*ec+nu2*ecsq);
255 c =std::min(3.15,ec*0.5);
259 if (xnulam > spill) { xnulam=0.; }
260 if (xnulam >= flow) { etest =std::sqrt(xnulam) + 7.; }
262 a = -2.*p*ec + landa - nu/ecsq;
263 b = p*ecsq + mu + 2.*nu/ec;
266 if (cut > 0.) { ecut = std::sqrt(cut); }
267 ecut = (ecut-a) / (p+p);
273 if (cut < 0.) { ecut2 = ecut; }
274 elab = K * FragmentA /
G4double(ResidualA);
277 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
279 signor2 = (ec-elab-c) / w;
280 signor2 = 1. + std::exp(signor2);
284 sig = (landa*elab+mu+nu/elab) * signor;
287 if (xnulam < flow || elab < etest)
289 if (sig <0.0) {sig=0.0;}
292 geom = std::sqrt(theA*K);
293 geom = 1.23*ResidualAthrd + ra + 4.573/geom;
294 geom = 31.416 * geom * geom;
295 sig = std::max(geom,sig);
G4DLLIMPORT std::ostream G4cout
G4double powZ(G4int Z, G4double y)
G4double GetOpt0(G4double ekin)
virtual G4double GetRj(G4int NumberParticles, G4int NumberCharged)
virtual G4double GetAlpha()
G4double GetOpt3(G4double K)
virtual G4double GetBeta()
G4double GetOpt2(G4double K)
virtual G4double CrossSection(G4double ekin)
G4double GetOpt1(G4double K)
virtual ~G4PreCompoundProton()
G4double ResidualA13() const
G4double GetCoulombBarrier() const
G4double theCoulombBarrier