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++){
130 tkin = targetZ = mom2 =
DBL_MIN;
133 cosThetaMin = CosThetaLim;
143 G4double aU=0.88534*a0/pow(targetZ,1./3.);
146 G4double factor= 1.13 + 3.76*targetZ*targetZ*invbeta2*alpha2;
147 As=0.25*(htc2)/(twoR2*mom2)*factor;
163 if(As < 0.0) { As = 0.0; }
164 else if(As > 1.0) { As = 1.0; }
166 G4double screenangle=2.*asin(sqrt(As));
170 if(screenangle>=
pi) screenangle=
pi;
198 momLab2 = tkinLab*(tkinLab + 2.0*mass);
199 invbetaLab2 = 1.0 + mass*mass/momLab2;
210 G4double Ecm=sqrt(m12 + mass2*mass2 + 2.0*etot*mass2);
211 mu_rel=mass*mass2/Ecm;
215 invbeta2 = 1.0 + mu_rel*mu_rel/mom2;
216 tkin = momCM*sqrt(invbeta2) - mu_rel;
218 beta=std::sqrt(beta2) ;
220 gamma=std::sqrt(gamma2);
230 cosTetMinNuc =
min( cosThetaMin ,cos(screenangle));
231 cosTetMaxNuc =cosThetaMax;
244 G4double Tmax=2.*M*E*(E+2.*mass)/(mass*mass+M*M+2.*M*Etot);
245 G4double T=Tmax*pow(sin(angle/2.),2.);
266 G4double sintmezzi=std::sin(angle/2.);
267 G4double sin2tmezzi = sintmezzi*sintmezzi;
268 G4double R=1.-beta2*sin2tmezzi + targetZ*alpha*beta*
pi*sintmezzi*(1.-sintmezzi);
278 G4double fcost=std::sqrt((1. -cos(angle)));
283 for(
G4int j=0 ;j<=4;j++){
287 for(
G4int j=0 ;j<=4;j++){
288 for(
G4int k=0;k<=5;k++ ){
289 a[j]+=coeffb[j][k]*pow(beta0,k);
293 for(
G4int j=0 ;j<=4 ;j++){
294 R+=a[j]* pow(fcost,j);
306 if(cosTetMaxNuc >= cosTetMinNuc)
return 0.0;
310 G4double anglemin =std::acos(cosTetMinNuc);
311 G4double anglemax =std::acos(cosTetMaxNuc);
313 static const G4double limit = 1.e-9;
314 if(anglemin < limit) {
316 if(anglemin < limit) { anglemin = limit; }
321 G4double loganglemin=log10(anglemin);
322 G4double loganglemax=log10(anglemax);
325 G4int bins=(
G4int)((loganglemax-loganglemin)/logdangle);
328 vector<G4double> angle;
329 vector<G4double> tet;
330 vector<G4double> dangle;
331 vector<G4double> cross;
333 for(
G4int i=0; i<=bins; i++ ){
336 angle.push_back(pow(10.,loganglemin+logdangle*i));
341 G4int dim = tet.size();
345 for(
G4int i=0; i<dim;i++){
348 dangle[i]=(angle[i+1]-angle[i]);
349 tet[i]=(angle[i+1]+angle[i])/2.;
358 if (coeffb[0][0]!=0){
363 else if (coeffb[0][0]==0){
378 G4double fatt= targetZ/(mu_rel*gamma*beta*beta);
383 TotalCross+=pi2sintet*cross[i]*dangle[i];
398 G4double fatt= e2*targetZ/(mu_rel*gamma*beta*beta);
403 if (coeffb[0][0]!=0){
408 else if (coeffb[0][0]==0){
415 ((2*As+2.*pow(sin(anglein/2.),2.))*(2.*As+2.*pow(sin(anglein/2.),2.) ));
429 if(cosTetMaxNuc >= cosTetMinNuc)
return 0.0;
431 G4double anglemin=std::acos(cosTetMinNuc);
432 G4double anglemax= std::acos(cosTetMaxNuc);
434 static const G4double limit = 1.e-9;
435 if(anglemin < limit) {
437 if(anglemin < limit) { anglemin = limit; }
444 G4double loganglemin=log10(anglemin);
445 G4double loganglemax=log10(anglemax);
448 G4int bins=(
G4int)((loganglemax-loganglemin)/logdangle);
450 std::vector<G4double> angle;
451 std::vector<G4double> tet;
452 std::vector<G4double> dangle;
454 for(
G4int i=0; i<=bins; i++ ){
457 angle.push_back(pow(10.,loganglemin+logdangle*i));
461 G4int dim = tet.size();
467 for(
G4int i=0; i<dim;i++){
470 dangle[i]=(angle[i+1]-angle[i]);
471 tet[i]=(angle[i+1]+angle[i])/2.;
480 if(r >=y-dy && r<=y+dy ){
505 G4double cost = sqrt(1.0 - sint*sint);
515 Trec=(1.0 - cost)* mass2*(etot*etot - mass*mass )/
516 (mass*mass + mass2*mass2+ 2.*mass2*etot);
518 dir.
set(dirx,diry,dirz);
void set(double x, double y, double z)
G4double GetScreeningAngle()
static G4double GetNuclearMass(const G4double A, const G4double Z)
void Initialise(const G4ParticleDefinition *, G4double cosThetaLim)
G4double RatioMottRutherford(G4double)
void SetupParticle(const G4ParticleDefinition *)
virtual ~G4ScreeningMottCrossSection()
static G4NistManager * Instance()
G4double FormFactor2ExpHof(G4double)
G4double NuclearCrossSection()
G4double AngleDistribution(G4double)
G4double total(Particle const *const p1, Particle const *const p2)
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetScatteringAngle()
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
void SetScreeningCoefficient()
void SetMottCoeff(G4double targetZ, G4double coeff[5][6])
complex function form2(MNUM, QQ, S1, SDWA)
G4double McFcorrection(G4double)
G4ScreeningMottCrossSection()
G4ThreeVector GetNewDirection()
void SetupKinematic(G4double kinEnergy, G4double Z)