86 alpha(fine_structure_const),
88 e2(electron_mass_c2*classic_electr_radius)
96 spin = mass = mu_rel=0;
97 tkinLab = momLab2 = invbetaLab2=0;
98 tkin = mom2 = invbeta2=beta=gamma=0;
100 Trec=targetZ = targetMass = As =0;
108 for(
G4int i=0 ; i<5; i++){
109 for(
G4int j=0; j< 6; j++){
129 tkin = targetZ = mom2 =
DBL_MIN;
132 cosThetaMin = CosThetaLim;
142 G4double aU=0.88534*a0/pow(targetZ,1./3.);
145 G4double factor= 1.13 + 3.76*targetZ*targetZ*invbeta2*alpha2;
146 As=0.25*(htc2)/(twoR2*mom2)*factor;
162 if(As < 0.0) { As = 0.0; }
163 else if(As > 1.0) { As = 1.0; }
165 G4double screenangle=2.*asin(sqrt(As));
169 if(screenangle>=pi) screenangle=pi;
197 momLab2 = tkinLab*(tkinLab + 2.0*mass);
198 invbetaLab2 = 1.0 + mass*mass/momLab2;
209 G4double Ecm=sqrt(m12 + mass2*mass2 + 2.0*etot*mass2);
210 mu_rel=mass*mass2/Ecm;
214 invbeta2 = 1.0 + mu_rel*mu_rel/mom2;
215 tkin = momCM*sqrt(invbeta2) - mu_rel;
217 beta=std::sqrt(beta2) ;
219 gamma=std::sqrt(gamma2);
229 cosTetMinNuc =min( cosThetaMin ,cos(screenangle));
230 cosTetMaxNuc =cosThetaMax;
243 G4double Tmax=2.*M*E*(E+2.*mass)/(mass*mass+M*M+2.*M*Etot);
244 G4double T=Tmax*pow(sin(angle/2.),2.);
247 G4double RN=1.27e-13*pow(targetA,0.27)*cm;
265 G4double sintmezzi=std::sin(angle/2.);
266 G4double sin2tmezzi = sintmezzi*sintmezzi;
267 G4double R=1.-beta2*sin2tmezzi + targetZ*alpha*beta*pi*sintmezzi*(1.-sintmezzi);
277 G4double fcost=std::sqrt((1. -cos(angle)));
282 for(
G4int j=0 ;j<=4;j++){
286 for(
G4int j=0 ;j<=4;j++){
287 for(
G4int k=0;k<=5;k++ ){
288 a[j]+=coeffb[j][k]*pow(beta0,k);
292 for(
G4int j=0 ;j<=4 ;j++){
293 R+=a[j]* pow(fcost,j);
305 if(cosTetMaxNuc >= cosTetMinNuc)
return 0.0;
309 G4double anglemin =std::acos(cosTetMinNuc);
310 G4double anglemax =std::acos(cosTetMaxNuc);
313 if(anglemin < limit) {
315 if(anglemin < limit) { anglemin = limit; }
320 G4double loganglemin=log10(anglemin);
321 G4double loganglemax=log10(anglemax);
324 G4int bins=(
G4int)((loganglemax-loganglemin)/logdangle);
327 vector<G4double> angle;
328 vector<G4double> tet;
329 vector<G4double> dangle;
330 vector<G4double> cross;
332 for(
G4int i=0; i<=bins; i++ ){
335 angle.push_back(pow(10.,loganglemin+logdangle*i));
340 G4int dim = tet.size();
344 for(
G4int i=0; i<dim;i++){
347 dangle[i]=(angle[i+1]-angle[i]);
348 tet[i]=(angle[i+1]+angle[i])/2.;
357 if (coeffb[0][0]!=0){
362 else if (coeffb[0][0]==0){
374 G4double den=2.*As+2.*pow(sin(tet[i]/2.),2.);
377 G4double fatt= targetZ/(mu_rel*gamma*beta*beta);
380 G4double pi2sintet=2.*pi*sin(tet[i]);
382 TotalCross+=pi2sintet*cross[i]*dangle[i];
397 G4double fatt= e2*targetZ/(mu_rel*gamma*beta*beta);
402 if (coeffb[0][0]!=0){
407 else if (coeffb[0][0]==0){
414 ((2*As+2.*pow(sin(anglein/2.),2.))*(2.*As+2.*pow(sin(anglein/2.),2.) ));
428 if(cosTetMaxNuc >= cosTetMinNuc)
return 0.0;
430 G4double anglemin=std::acos(cosTetMinNuc);
431 G4double anglemax= std::acos(cosTetMaxNuc);
434 if(anglemin < limit) {
436 if(anglemin < limit) { anglemin = limit; }
443 G4double loganglemin=log10(anglemin);
444 G4double loganglemax=log10(anglemax);
447 G4int bins=(
G4int)((loganglemax-loganglemin)/logdangle);
449 std::vector<G4double> angle;
450 std::vector<G4double> tet;
451 std::vector<G4double> dangle;
453 for(
G4int i=0; i<=bins; i++ ){
456 angle.push_back(pow(10.,loganglemin+logdangle*i));
460 G4int dim = tet.size();
466 for(
G4int i=0; i<dim;i++){
469 dangle[i]=(angle[i+1]-angle[i]);
470 tet[i]=(angle[i+1]+angle[i])/2.;
479 if(r >=y-dy && r<=y+dy ){
514 Trec=(1.0 - cost)* mass2*(etot*etot - mass*mass )/
515 (mass*mass + mass2*mass2+ 2.*mass2*etot);
519 dir.
set(dirx,diry,dirz);
void set(double x, double y, double z)
void SetMottCoeff(G4double targetZ, G4double coeff[5][6])
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
static G4double GetNuclearMass(const G4double A, const G4double Z)
void SetScreeningCoefficient()
G4double AngleDistribution(G4double)
G4ScreeningMottCrossSection()
void SetupKinematic(G4double kinEnergy, G4double Z)
void Initialise(const G4ParticleDefinition *, G4double cosThetaLim)
G4double McFcorrection(G4double)
G4double FormFactor2ExpHof(G4double)
void SetupParticle(const G4ParticleDefinition *)
G4double GetScatteringAngle()
G4double RatioMottRutherford(G4double)
G4double NuclearCrossSection()
G4ThreeVector GetNewDirection()
virtual ~G4ScreeningMottCrossSection()
G4double GetScreeningAngle()