Geant4  10.02.p03
G4ScreeningMottCrossSection Class Reference

#include <G4ScreeningMottCrossSection.hh>

Collaboration diagram for G4ScreeningMottCrossSection:

Public Member Functions

 G4ScreeningMottCrossSection ()
 
virtual ~G4ScreeningMottCrossSection ()
 
void Initialise (const G4ParticleDefinition *, G4double cosThetaLim)
 
G4double GetScreeningAngle ()
 
void SetScreeningCoefficient ()
 
void SetupParticle (const G4ParticleDefinition *)
 
void SetupKinematic (G4double kinEnergy, G4double Z)
 
G4double NuclearCrossSection ()
 
G4ThreeVector GetNewDirection ()
 
G4double GetMom2CM () const
 
G4double GetMom2Lab () const
 
G4double GetTrec () const
 
G4double GetScreeningCoefficient () const
 
G4double GetTotalCross () const
 
G4double McFcorrection (G4double)
 
G4double RatioMottRutherford (G4double)
 
G4double FormFactor2ExpHof (G4double)
 
G4double GetScatteringAngle ()
 
G4double AngleDistribution (G4double)
 

Private Member Functions

G4ScreeningMottCrossSectionoperator= (const G4ScreeningMottCrossSection &right)
 
 G4ScreeningMottCrossSection (const G4ScreeningMottCrossSection &)
 

Private Attributes

G4NistManagerfNistManager
 
G4PowfG4pow
 
G4MottCoefficientsmottcoeff
 
G4double TotalCross
 
G4double cosThetaMin
 
G4double cosThetaMax
 
G4double cosTetMinNuc
 
G4double cosTetMaxNuc
 
G4double ecut
 
G4double etag
 
const G4ParticleDefinitionparticle
 
G4double spin
 
G4double mass
 
G4double tkinLab
 
G4double momLab2
 
G4double invbetaLab2
 
G4double mu_rel
 
G4double tkin
 
G4double mom2
 
G4double invbeta2
 
G4double beta
 
G4double gamma
 
G4double targetZ
 
G4double targetA
 
G4double targetMass
 
G4double Trec
 
G4double As
 
G4double coeffb [5][6]
 
G4double alpha
 
G4double htc2
 
G4double e2
 
G4double cross [DIM]
 

Detailed Description

Definition at line 88 of file G4ScreeningMottCrossSection.hh.

Constructor & Destructor Documentation

◆ G4ScreeningMottCrossSection() [1/2]

G4ScreeningMottCrossSection::G4ScreeningMottCrossSection ( )

Definition at line 86 of file G4ScreeningMottCrossSection.cc.

86  :
87  cosThetaMin(1.0),
88  cosThetaMax(-1.0),
92 {
93  TotalCross=0;
94 
97  particle=0;
98 
99  spin = mass = mu_rel=0;
101  tkin = mom2 = invbeta2=beta=gamma=0;
102 
103  Trec=targetZ = targetMass = As =0;
104  etag = ecut = 0.0;
105 
106  targetA = 0;
107 
108  cosTetMinNuc=0;
109  cosTetMaxNuc=0;
110 
111  for(G4int i=0 ; i<5; ++i){
112  for(G4int j=0; j< 6; ++j){
113  coeffb[i][j]=0;
114  }
115  }
116  if(dangle[0] == 0.0) {
117  for(G4int i=0; i<DIM; ++i){
118  cross[i]=0;
119  }
120 
121 
122  }
123 
125 }
static const G4int DIM
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
float hbarc_squared
Definition: hepunit.py:266
const G4ParticleDefinition * particle
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
int fine_structure_const
Definition: hepunit.py:287
static G4double dangle[DIM]
float electron_mass_c2
Definition: hepunit.py:274
int classic_electr_radius
Definition: hepunit.py:288
Here is the call graph for this function:

◆ ~G4ScreeningMottCrossSection()

G4ScreeningMottCrossSection::~G4ScreeningMottCrossSection ( )
virtual

Definition at line 129 of file G4ScreeningMottCrossSection.cc.

130 {
131  delete mottcoeff;
132 }

◆ G4ScreeningMottCrossSection() [2/2]

G4ScreeningMottCrossSection::G4ScreeningMottCrossSection ( const G4ScreeningMottCrossSection )
private

Member Function Documentation

◆ AngleDistribution()

G4double G4ScreeningMottCrossSection::AngleDistribution ( G4double  anglein)

Definition at line 329 of file G4ScreeningMottCrossSection.cc.

330 {
333  G4double fatt2=fatt*fatt;
334  total/=fatt2;
335 
336  G4double R=0;
337  if (coeffb[0][0]!=0){
338  // cout<<" Mott....targetZ "<< targetZ<<endl;
339  R=RatioMottRutherford(anglein);
340  } else if (coeffb[0][0]==0){
341  // cout<<" McF.... targetZ "<< targetZ<<endl;
342  R=McFcorrection(anglein);
343  }
344 
345  G4double y=twopi*sin(anglein)*R*FormFactor2ExpHof(anglein)/
346  ( (2*As+2.*fG4pow->powN(sin(anglein*0.5),2))*(2.*As+2.*fG4pow->powN(sin(anglein*0.5),2)) );
347  //G4cout<<"AngleDistribution Total Cross: "<<TotalCross<<" y: "<<y<<G4endl;//TO REMOVE
348  return y/total;
349 }
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
Double_t y
static const double twopi
Definition: G4SIunits.hh:75
G4double total(Particle const *const p1, Particle const *const p2)
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FormFactor2ExpHof()

G4double G4ScreeningMottCrossSection::FormFactor2ExpHof ( G4double  angles)

Definition at line 233 of file G4ScreeningMottCrossSection.cc.

234 {
235  G4double M=targetMass;
237  G4double Etot=E+mass;
238  G4double Tmax=2.*M*E*(E+2.*mass)/(mass*mass+M*M+2.*M*Etot);
239  G4double T=Tmax*fG4pow->powN(sin(angles*0.5), 2);
240  G4double q2=T*(T+2.*M);
241  q2/=htc2;//1/cm2
242  G4double RN=1.27e-13*G4Exp(G4Log(targetA)*0.27)*cm;
243  G4double xN= (RN*RN*q2);
244  G4double den=(1.+xN/12.);
245  G4double FN=1./(den*den);
246  G4double form2=(FN*FN);
247 
248  return form2;
249 
250  //cout<<"..................... form2 "<< form2<<endl;
251 }
static const double cm
Definition: G4SIunits.hh:118
Float_t den
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetMom2CM()

G4double G4ScreeningMottCrossSection::GetMom2CM ( ) const
inline

Definition at line 200 of file G4ScreeningMottCrossSection.hh.

201 {
202  return mom2;
203 }

◆ GetMom2Lab()

G4double G4ScreeningMottCrossSection::GetMom2Lab ( ) const
inline

Definition at line 207 of file G4ScreeningMottCrossSection.hh.

208 {
209  return momLab2;
210 }

◆ GetNewDirection()

G4ThreeVector G4ScreeningMottCrossSection::GetNewDirection ( )

Definition at line 381 of file G4ScreeningMottCrossSection.cc.

381  {
382 
383  G4ThreeVector dir(0.0,0.0,1.0);
384 
386 
387  G4double sint = sin(z1);
388  G4double cost = sqrt(1.0 - sint*sint);
389  G4double phi = twopi* G4UniformRand();
390  G4double dirx = sint*cos(phi);
391  G4double diry = sint*sin(phi);
392  G4double dirz = cost;
393 
394  //.......set Trc
395  G4double etot=tkinLab+mass;
396  G4double mass2=targetMass;
397  Trec=(1.0 - cost)* mass2*(etot*etot - mass*mass )/
398  (mass*mass + mass2*mass2+ 2.*mass2*etot);
399 
400  dir.set(dirx,diry,dirz);
401 
402  return dir;
403 }
TDirectory * dir
#define G4UniformRand()
Definition: Randomize.hh:97
static const double twopi
Definition: G4SIunits.hh:75
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ GetScatteringAngle()

G4double G4ScreeningMottCrossSection::GetScatteringAngle ( )

Definition at line 353 of file G4ScreeningMottCrossSection.cc.

354 {
355  // cout<<"................ tkinLab "<< G4BestUnit(tkinLab,"Energy") << " anglemin= "<<anglemin<<endl;
356  //cout<<"anglemax= "<<anglemax<<endl;
358 
359  G4double scattangle=0;
360  G4double y=0;
361  G4double dy=0;
362  G4double area=0;
363 
364  for(G4int i=0; i<DIM; ++i){
365 
366  y+=AngleDistribution(tet[i])*dangle[i];
367  dy= y-area ;
368  area=y;
369 
370  if(r >=y-dy && r<y ){
371  scattangle= angle[i] +G4UniformRand()*dangle[i];
372  //G4cout<<"Energy: "<<tkinLab/MeV<<" Random: "<<r<<" y: "<<y<<" Scattangle: "<<scattangle<<" Angle: "<<angle[i]<<" dAngle: "<<dangle[i]<<G4endl; //TO REMOVE
373  break;
374  }
375  }
376  return scattangle;
377 }
static const G4int DIM
static G4double angle[DIM]
int G4int
Definition: G4Types.hh:78
Double_t y
#define G4UniformRand()
Definition: Randomize.hh:97
static G4double tet[DIM]
static G4double dangle[DIM]
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetScreeningAngle()

G4double G4ScreeningMottCrossSection::GetScreeningAngle ( )

Definition at line 162 of file G4ScreeningMottCrossSection.cc.

163 {
165 
166  G4double screenangle=2.*asin(sqrt(As));
167  // cout<<" screenangle "<< screenangle <<endl;
168  if(screenangle>=pi) screenangle=pi;
169 
170  return screenangle;
171 }
static const double pi
Definition: G4SIunits.hh:74
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ GetScreeningCoefficient()

G4double G4ScreeningMottCrossSection::GetScreeningCoefficient ( ) const
inline

Definition at line 222 of file G4ScreeningMottCrossSection.hh.

223 {
224  return As;
225 }

◆ GetTotalCross()

G4double G4ScreeningMottCrossSection::GetTotalCross ( ) const
inline

Definition at line 230 of file G4ScreeningMottCrossSection.hh.

231 {
232  return TotalCross;
233 }

◆ GetTrec()

G4double G4ScreeningMottCrossSection::GetTrec ( ) const
inline

Definition at line 215 of file G4ScreeningMottCrossSection.hh.

216 {
217  return Trec;
218 }

◆ Initialise()

void G4ScreeningMottCrossSection::Initialise ( const G4ParticleDefinition p,
G4double  cosThetaLim 
)

Definition at line 135 of file G4ScreeningMottCrossSection.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ McFcorrection()

G4double G4ScreeningMottCrossSection::McFcorrection ( G4double  angles)

Definition at line 255 of file G4ScreeningMottCrossSection.cc.

256 {
257  G4double beta2=1./invbeta2;
258  G4double sintmezzi=std::sin(angles/2.);
259  G4double sin2tmezzi = sintmezzi*sintmezzi;
260  G4double R=1.-beta2*sin2tmezzi + targetZ*alpha*beta*pi*sintmezzi*(1.-sintmezzi);
261  return R;
262 }
static const double pi
Definition: G4SIunits.hh:74
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ NuclearCrossSection()

G4double G4ScreeningMottCrossSection::NuclearCrossSection ( )

Definition at line 290 of file G4ScreeningMottCrossSection.cc.

291 {
292  if(cosTetMaxNuc >= cosTetMinNuc) return 0.0;
293 
294  TotalCross=0;
295 
296  for(G4int i=0; i<DIM; ++i){
297  G4double R=0;
299 
300  if (coeffb[0][0]!=0){
301  //cout<<" Mott....targetZ "<< targetZ<<endl;
302  R=RatioMottRutherford(tet[i]);
303  } else if (coeffb[0][0]==0){
304  // cout<<" McF.... targetZ "<< targetZ<<endl;
305  R=McFcorrection(tet[i]);
306  }
307 
308  //cout<<"----------------- R "<<R<<" F2 "<<F2<<endl;
309  // cout<<"angle "<<tet[i] << " F2 "<<F2<<endl;
310 
311  G4double e4=e2*e2;
312  G4double den=2.*As+2.*fG4pow->powN(sin(tet[i]*0.5),2);
313  G4double func=1./(den*den);
314 
316  G4double sigma=e4*fatt*fatt*func;
317  cross[i]=F2*R*sigma;
318  G4double pi2sintet=twopi*sin(tet[i]);
319 
320  TotalCross+=pi2sintet*cross[i]*dangle[i];
321  }//end integral
322 
323  //cout<< "ok ......... TotalCross "<<TotalCross<<endl;
324  return TotalCross;
325 }
static const G4int DIM
Float_t den
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
static const G4double e4
int G4int
Definition: G4Types.hh:78
static G4double tet[DIM]
static G4double dangle[DIM]
static const double twopi
Definition: G4SIunits.hh:75
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

G4ScreeningMottCrossSection& G4ScreeningMottCrossSection::operator= ( const G4ScreeningMottCrossSection right)
private

◆ RatioMottRutherford()

G4double G4ScreeningMottCrossSection::RatioMottRutherford ( G4double  angles)

Definition at line 264 of file G4ScreeningMottCrossSection.cc.

265 {
266  G4double R=0;
267  G4double fcost=std::sqrt((1. -cos(angles)));
268  G4double a[5];
269  const G4double shift=0.7181228;
270  G4double beta0= beta -shift;
271 
272  for(G4int j=0 ;j<=4;j++){
273  a[j]=0;
274  }
275 
276  for(G4int j=0 ;j<=4;j++){
277  for(G4int k=0;k<=5;k++ ){
278  a[j]+=coeffb[j][k]*fG4pow->powN(beta0,k);
279  }
280  }
281 
282  for(G4int j=0; j<=4; ++j){
283  R+=a[j]*fG4pow->powN(fcost,j);
284  }
285  return R;
286 }
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
int G4int
Definition: G4Types.hh:78
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetScreeningCoefficient()

void G4ScreeningMottCrossSection::SetScreeningCoefficient ( )

Definition at line 146 of file G4ScreeningMottCrossSection.cc.

147 {
148  G4double alpha2=alpha*alpha;
149  //Bohr radius
150  G4double a0= Bohr_radius ;//0.529e-8*cm;
151  //Thomas-Fermi screening length
152  G4double aU=0.88534*a0/fG4pow->Z13(targetZ);
153  G4double twoR2=aU*aU;
154 
155  G4double factor= 1.13 + 3.76*targetZ*targetZ*invbeta2*alpha2;
156  As=0.25*(htc2)/(twoR2*mom2)*factor;
157  //cout<<"0k .........................As "<<As<<endl;
158 }
const G4double a0
float Bohr_radius
Definition: hepunit.py:290
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
static const G4double factor
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetupKinematic()

void G4ScreeningMottCrossSection::SetupKinematic ( G4double  kinEnergy,
G4double  Z 
)

Definition at line 174 of file G4ScreeningMottCrossSection.cc.

175 {
176  //...Target
177  G4int iz = G4int(Z);
179  G4int ia = G4int(A);
181 
182  targetZ = Z;
184  targetMass= mass2;
185 
187 
188  //cout<<"......... targetA "<< targetA <<endl;
189  //cout<<"......... targetMass "<< targetMass/MeV <<endl;
190 
191  // incident particle lab
192  tkinLab = ekin;
193  momLab2 = tkinLab*(tkinLab + 2.0*mass);
194  invbetaLab2 = 1.0 + mass*mass/momLab2;
195 
196  G4double etot = tkinLab + mass;
197  G4double ptot = sqrt(momLab2);
198  G4double m12 = mass*mass;
199 
200  // relativistic reduced mass from publucation
201  // A.P. Martynenko, R.N. Faustov, Teoret. mat. Fiz. 64 (1985) 179
202 
203  //incident particle & target nucleus
204  G4double Ecm=sqrt(m12 + mass2*mass2 + 2.0*etot*mass2);
205  mu_rel=mass*mass2/Ecm;
206  G4double momCM= ptot*mass2/Ecm;
207  // relative system
208  mom2 = momCM*momCM;
209  invbeta2 = 1.0 + mu_rel*mu_rel/mom2;
210  tkin = momCM*sqrt(invbeta2) - mu_rel;//Ekin of mu_rel
211  G4double beta2=1./invbeta2;
212  beta=std::sqrt(beta2) ;
213  G4double gamma2= 1./(1.-beta2);
214  gamma=std::sqrt(gamma2);
215 
216  //.........................................................
217 
218 
220 
221  //Integration Angles definition
222 
225 
226  for(G4int i=0; i<DIM; ++i ){
227  cross[i]=0;
228  }
229 }
static const G4int DIM
static G4double GetNuclearMass(const G4double A, const G4double Z)
int G4int
Definition: G4Types.hh:78
double A(double temperature)
Float_t Z
G4double iz
Definition: TRTMaterials.hh:39
void SetMottCoeff(G4double targetZ, G4double coeff[5][6])
double G4double
Definition: G4Types.hh:76
G4double GetAtomicMassAmu(const G4String &symb) const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetupParticle()

void G4ScreeningMottCrossSection::SetupParticle ( const G4ParticleDefinition p)
inline

Definition at line 189 of file G4ScreeningMottCrossSection.hh.

190 {
191  particle = p;
192  mass = particle->GetPDGMass();
193  spin = particle->GetPDGSpin();
194  if(0.0 != spin) { spin = 0.5; }
195  tkin = 0.0;
196 }
const G4ParticleDefinition * particle
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ alpha

G4double G4ScreeningMottCrossSection::alpha
private

Definition at line 178 of file G4ScreeningMottCrossSection.hh.

◆ As

G4double G4ScreeningMottCrossSection::As
private

Definition at line 174 of file G4ScreeningMottCrossSection.hh.

◆ beta

G4double G4ScreeningMottCrossSection::beta
private

Definition at line 165 of file G4ScreeningMottCrossSection.hh.

◆ coeffb

G4double G4ScreeningMottCrossSection::coeffb[5][6]
private

Definition at line 175 of file G4ScreeningMottCrossSection.hh.

◆ cosTetMaxNuc

G4double G4ScreeningMottCrossSection::cosTetMaxNuc
private

Definition at line 142 of file G4ScreeningMottCrossSection.hh.

◆ cosTetMinNuc

G4double G4ScreeningMottCrossSection::cosTetMinNuc
private

Definition at line 141 of file G4ScreeningMottCrossSection.hh.

◆ cosThetaMax

G4double G4ScreeningMottCrossSection::cosThetaMax
private

Definition at line 139 of file G4ScreeningMottCrossSection.hh.

◆ cosThetaMin

G4double G4ScreeningMottCrossSection::cosThetaMin
private

Definition at line 138 of file G4ScreeningMottCrossSection.hh.

◆ cross

G4double G4ScreeningMottCrossSection::cross[DIM]
private

Definition at line 183 of file G4ScreeningMottCrossSection.hh.

◆ e2

G4double G4ScreeningMottCrossSection::e2
private

Definition at line 180 of file G4ScreeningMottCrossSection.hh.

◆ ecut

G4double G4ScreeningMottCrossSection::ecut
private

Definition at line 146 of file G4ScreeningMottCrossSection.hh.

◆ etag

G4double G4ScreeningMottCrossSection::etag
private

Definition at line 147 of file G4ScreeningMottCrossSection.hh.

◆ fG4pow

G4Pow* G4ScreeningMottCrossSection::fG4pow
private

Definition at line 132 of file G4ScreeningMottCrossSection.hh.

◆ fNistManager

G4NistManager* G4ScreeningMottCrossSection::fNistManager
private

Definition at line 131 of file G4ScreeningMottCrossSection.hh.

◆ gamma

G4double G4ScreeningMottCrossSection::gamma
private

Definition at line 166 of file G4ScreeningMottCrossSection.hh.

◆ htc2

G4double G4ScreeningMottCrossSection::htc2
private

Definition at line 179 of file G4ScreeningMottCrossSection.hh.

◆ invbeta2

G4double G4ScreeningMottCrossSection::invbeta2
private

Definition at line 164 of file G4ScreeningMottCrossSection.hh.

◆ invbetaLab2

G4double G4ScreeningMottCrossSection::invbetaLab2
private

Definition at line 158 of file G4ScreeningMottCrossSection.hh.

◆ mass

G4double G4ScreeningMottCrossSection::mass
private

Definition at line 153 of file G4ScreeningMottCrossSection.hh.

◆ mom2

G4double G4ScreeningMottCrossSection::mom2
private

Definition at line 163 of file G4ScreeningMottCrossSection.hh.

◆ momLab2

G4double G4ScreeningMottCrossSection::momLab2
private

Definition at line 157 of file G4ScreeningMottCrossSection.hh.

◆ mottcoeff

G4MottCoefficients* G4ScreeningMottCrossSection::mottcoeff
private

Definition at line 133 of file G4ScreeningMottCrossSection.hh.

◆ mu_rel

G4double G4ScreeningMottCrossSection::mu_rel
private

Definition at line 161 of file G4ScreeningMottCrossSection.hh.

◆ particle

const G4ParticleDefinition* G4ScreeningMottCrossSection::particle
private

Definition at line 150 of file G4ScreeningMottCrossSection.hh.

◆ spin

G4double G4ScreeningMottCrossSection::spin
private

Definition at line 152 of file G4ScreeningMottCrossSection.hh.

◆ targetA

G4double G4ScreeningMottCrossSection::targetA
private

Definition at line 171 of file G4ScreeningMottCrossSection.hh.

◆ targetMass

G4double G4ScreeningMottCrossSection::targetMass
private

Definition at line 172 of file G4ScreeningMottCrossSection.hh.

◆ targetZ

G4double G4ScreeningMottCrossSection::targetZ
private

Definition at line 170 of file G4ScreeningMottCrossSection.hh.

◆ tkin

G4double G4ScreeningMottCrossSection::tkin
private

Definition at line 162 of file G4ScreeningMottCrossSection.hh.

◆ tkinLab

G4double G4ScreeningMottCrossSection::tkinLab
private

Definition at line 156 of file G4ScreeningMottCrossSection.hh.

◆ TotalCross

G4double G4ScreeningMottCrossSection::TotalCross
private

Definition at line 135 of file G4ScreeningMottCrossSection.hh.

◆ Trec

G4double G4ScreeningMottCrossSection::Trec
private

Definition at line 173 of file G4ScreeningMottCrossSection.hh.


The documentation for this class was generated from the following files: