86 alpha(fine_structure_const),
88 e2(electron_mass_c2*classic_electr_radius)
108 for(
G4int i=0 ; i<5; i++){
109 for(
G4int j=0; j< 6; j++){
163 if(
As < 0.0) {
As = 0.0; }
164 else if(
As > 1.0) {
As = 1.0; }
170 if(screenangle>=
pi) screenangle=
pi;
210 G4double Ecm=sqrt(m12 + mass2*mass2 + 2.0*etot*mass2);
218 beta=std::sqrt(beta2) ;
220 gamma=std::sqrt(gamma2);
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;
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);
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.;
363 else 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.) ));
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);
G4double GetScreeningAngle()
static G4double GetNuclearMass(const G4double A, const G4double Z)
const G4ParticleDefinition * particle
CLHEP::Hep3Vector G4ThreeVector
void Initialise(const G4ParticleDefinition *, G4double cosThetaLim)
G4double RatioMottRutherford(G4double)
void SetupParticle(const G4ParticleDefinition *)
virtual ~G4ScreeningMottCrossSection()
static G4NistManager * Instance()
G4MottCoefficients * mottcoeff
G4double FormFactor2ExpHof(G4double)
G4double NuclearCrossSection()
static const G4double A[nN]
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()
G4NistManager * fNistManager
void SetMottCoeff(G4double targetZ, G4double coeff[5][6])
G4double McFcorrection(G4double)
G4ScreeningMottCrossSection()
G4ThreeVector GetNewDirection()
void SetupKinematic(G4double kinEnergy, G4double Z)
static const G4double alpha