86 alpha(fine_structure_const),
88 e2(electron_mass_c2*classic_electr_radius)
107 for(
G4int i=0 ; i<5; i++){
108 for(
G4int j=0; j< 6; j++){
156 if(
As < 0.0) {
As = 0.0; }
157 else if(
As > 1.0) {
As = 1.0; }
161 if(screenangle>=
pi) screenangle=
pi;
197 G4double Ecm=sqrt(m12 + mass2*mass2 + 2.0*etot*mass2);
205 beta=std::sqrt(beta2) ;
207 gamma=std::sqrt(gamma2);
227 G4double Tmax=2.*M*E*(E+2.*
mass)/(mass*mass+M*M+2.*M*Etot);
228 G4double T=Tmax*pow(sin(angle/2.),2.);
247 G4double sintmezzi=std::sin(angle/2.);
248 G4double sin2tmezzi = sintmezzi*sintmezzi;
256 G4double fcost=std::sqrt((1. -cos(angle)));
261 for(
G4int j=0 ;j<=4;j++){
265 for(
G4int j=0 ;j<=4;j++){
266 for(
G4int k=0;k<=5;k++ ){
267 a[j]+=
coeffb[j][k]*pow(beta0,k);
271 for(
G4int j=0 ;j<=4 ;j++){
272 R+=a[j]* pow(fcost,j);
288 static const G4double limit = 1.e-9;
289 if(anglemin < limit) {
291 if(anglemin < limit) { anglemin = limit; }
296 G4double loganglemin=log10(anglemin);
297 G4double loganglemax=log10(anglemax);
300 G4int bins=(
G4int)((loganglemax-loganglemin)/logdangle);
302 vector<G4double> angle;
303 vector<G4double> tet;
304 vector<G4double> dangle;
305 vector<G4double> cross;
307 for(
G4int i=0; i<=bins; i++ ){
310 angle.push_back(pow(10.,loganglemin+logdangle*i));
314 G4int dim = tet.size();
317 for(
G4int i=0; i<dim;i++){
320 dangle[i]=(angle[i+1]-angle[i]);
321 tet[i]=(angle[i+1]+angle[i])/2.;
332 }
else if (
coeffb[0][0]==0){
369 }
else if (
coeffb[0][0]==0){
375 ((2*
As+2.*pow(sin(anglein/2.),2.))*(2.*
As+2.*pow(sin(anglein/2.),2.) ));
390 static const G4double limit = 1.e-9;
391 if(anglemin < limit) {
393 if(anglemin < limit) { anglemin = limit; }
400 G4double loganglemin=log10(anglemin);
401 G4double loganglemax=log10(anglemax);
404 G4int bins=(
G4int)((loganglemax-loganglemin)/logdangle);
406 std::vector<G4double> angle;
407 std::vector<G4double> tet;
408 std::vector<G4double> dangle;
410 for(
G4int i=0; i<=bins; i++ ){
413 angle.push_back(pow(10.,loganglemin+logdangle*i));
416 G4int dim = tet.size();
422 for(
G4int i=0; i<dim;i++){
425 dangle[i]=(angle[i+1]-angle[i]);
426 tet[i]=(angle[i+1]+angle[i])/2.;
435 if(r >=y-dy && r<=y+dy ){
453 G4double cost = sqrt(1.0 - sint*sint);
462 Trec=(1.0 - cost)* mass2*(etot*etot - mass*mass )/
463 (mass*mass + mass2*mass2+ 2.*mass2*etot);
465 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)
static const G4double factor
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