#include <G4WentzelOKandVIxSection.hh>
Definition at line 72 of file G4WentzelOKandVIxSection.hh.
G4WentzelOKandVIxSection::G4WentzelOKandVIxSection |
( |
G4bool |
combined = true | ) |
|
|
explicit |
Definition at line 66 of file G4WentzelOKandVIxSection.cc.
80 lowEnergyLimit = 1.0*
eV;
90 if(0.0 == ScreenRSquare[0]) {
94 ScreenRSquare[0] = alpha2*a0*
a0;
95 ScreenRSquareElec[0] = ScreenRSquare[0];
96 for(
G4int j=1; j<100; ++j) {
98 if(1 == j) { ScreenRSquare[j] = 0.5*alpha2*a0*
a0; }
100 ScreenRSquare[j] = 0.5*(1 +
G4Exp(-j*j*0.001))*alpha2*x*x;
101 ScreenRSquareElec[j] = 0.5*alpha2*x*
x;
103 x = fNistManager->
GetA27(j);
104 FormFactor[j] = constn*x*
x;
108 factB = factD = formfactA = screenZ = 0.0;
109 cosTetMaxElec = cosTetMaxNuc = invbeta2 = kinFactor = gam0pcmp = pcmp2 = 1.0;
113 tkin = mom2 = momCM2 = factorA2 = mass = spin = chargeSquare = charge3 = 0.0;
static G4Pow * GetInstance()
G4double GetA27(G4int Z) const
static G4NistManager * Instance()
static constexpr double twopi
G4double Z13(G4int Z) const
static G4Proton * Proton()
static constexpr double eV
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static G4Positron * Positron()
static G4Electron * Electron()
static constexpr double MeV
static constexpr double pi
G4WentzelOKandVIxSection::~G4WentzelOKandVIxSection |
( |
| ) |
|
|
virtual |
Definition at line 250 of file G4WentzelOKandVIxSection.hh.
257 xsec = kinFactor*(cost1 - cost2)/
258 ((1.0 - cost1 + screenZ)*(1.0 - cost2 + screenZ));
T max(const T t1, const T t2)
brief Return the largest of the two arguments
Definition at line 236 of file G4WentzelOKandVIxSection.hh.
240 if(cosTMax < cosTMin) {
241 xsec = targetZ*kinFactor*(cosTMin - cosTMax)/
242 ((1.0 - cosTMin + screenZ)*(1.0 - cosTMax + screenZ));
G4double G4WentzelOKandVIxSection::ComputeSecondTransportMoment |
( |
G4double |
CosThetaMax | ) |
|
G4double G4WentzelOKandVIxSection::ComputeTransportCrossSectionPerAtom |
( |
G4double |
CosThetaMax | ) |
|
Definition at line 210 of file G4WentzelOKandVIxSection.cc.
213 if(cosTMax >= 1.0) {
return xSection; }
226 x = (1.0 - costm)/screenZ;
229 y = x2*(1.0 - 1.3333333*x + 3*x2);
230 if(0.0 < factB) { y -= fb*x2*x*(0.6666667 -
x); }
233 xlog =
G4Log(1.0 + x);
235 if(0.0 < factB) { y -= fb*(x + x1 - 2*xlog); }
240 if(nwarnings < nwarnlimit) {
241 G4cout <<
"G4WentzelOKandVIxSection::ComputeTransportCrossSectionPerAtom"
242 <<
" scattering on e- <0"
245 <<
" e(MeV)= " << tkin <<
" p(MeV/c)= " << sqrt(mom2)
246 <<
" Z= " << targetZ <<
" "
248 G4cout <<
" 1-costm= " << 1.0-costm <<
" screenZ= " << screenZ
265 x = (1.0 - cosTMax)/screenZ;
268 y = x2*(1.0 - 1.3333333*x + 3*x2);
269 if(0.0 < factB) { y -= fb*x2*x*(0.6666667 -
x); }
272 xlog =
G4Log(1.0 + x);
274 if(0.0 < factB) { y -= fb*(x + x1 - 2*xlog); }
279 if(nwarnings < nwarnlimit) {
280 G4cout <<
"G4WentzelOKandVIxSection::ComputeTransportCrossSectionPerAtom"
281 <<
" scattering on nucleus <0"
284 <<
" e(MeV)= " << tkin <<
" Z= " << targetZ <<
" "
286 G4cout <<
" formfactA= " << formfactA <<
" screenZ= " << screenZ
287 <<
" x= " <<
" x1= " << x1 <<
G4endl;
291 xSection += y*targetZ;
293 xSection *= kinFactor;
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
G4double G4Log(G4double x)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double G4WentzelOKandVIxSection::GetCosThetaElec |
( |
| ) |
const |
|
inline |
G4double G4WentzelOKandVIxSection::GetCosThetaNuc |
( |
| ) |
const |
|
inline |
G4double G4WentzelOKandVIxSection::GetMomentumSquare |
( |
| ) |
const |
|
inline |
Definition at line 127 of file G4WentzelOKandVIxSection.cc.
131 tkin = mom2 = momCM2 = 0.0;
136 if(isCombined) { cosThetaMax = cosThetaLim; }
141 currentMaterial =
nullptr;
void SetupParticle(const G4ParticleDefinition *)
std::vector< ExP01TrackerHit * > a
static constexpr double hbarc
G4NuclearFormfactorType NuclearFormfactorType() const
static G4EmParameters * Instance()
static constexpr double fermi
G4double FactorForAngleLimit() const
Definition at line 309 of file G4WentzelOKandVIxSection.cc.
313 temp.
set(0.0,0.0,1.0);
319 if(elecRatio > 0.0) {
320 if(rndmEngineMod->
flat() <= elecRatio) {
322 cost1 =
std::max(cost1,cosTetMaxElec);
323 cost2 =
std::max(cost2,cosTetMaxElec);
329 G4double z1 = w1*w2/(w1 + rndmEngineMod->
flat()*(w2 - w1)) - screenZ;
336 fm =
G4Exp(-2*formf*z1);
337 }
else if(fNucFormfactor ==
fFlatNF) {
339 G4double x = std::sqrt(2.*mom2*z1)*ccoef*2.;
340 fm = FlatFormfactor(x);
341 fm *= FlatFormfactor(x*0.6
345 G4double grej = (1. - z1*factB + factB1*targetZ*sqrt(z1*factB)*(2. - z1))
346 *fm*fm/(1.0 + z1*factD);
348 if(rndmEngineMod->
flat() <= grej) {
351 if(cost > 1.0) { cost = 1.0; }
352 else if(cost < -1.0) { cost =-1.0; }
353 G4double sint = sqrt((1.0 - cost)*(1.0 + cost));
356 temp.
set(sint*cos(phi),sint*sin(phi),cost);
void set(double x, double y, double z)
static constexpr double twopi
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double A13(G4double A) const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double GetAtomicMassAmu(const G4String &symb) const
static constexpr double MeV
void G4WentzelOKandVIxSection::SetTargetMass |
( |
G4double |
value | ) |
|
|
inline |
Definition at line 187 of file G4WentzelOKandVIxSection.hh.
189 if(ekin != tkin || mat != currentMaterial) {
190 currentMaterial = mat;
192 mom2 = tkin*(tkin + 2.0*mass);
193 invbeta2 = 1.0 + mass*mass/mom2;
194 factB = spin/invbeta2;
195 cosTetMaxNuc = cosThetaMax;
197 cosTetMaxNuc =
std::max(cosTetMaxNuc,
G4IonisParamMat * GetIonisation() const
G4double GetInvA23() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
Definition at line 153 of file G4WentzelOKandVIxSection.cc.
158 if(0.0 != spin) { spin = 0.5; }
161 charge3 = chargeSquare*q;
static constexpr double eplus
G4double GetPDGMass() const
G4double GetPDGSpin() const
G4double GetPDGCharge() const
Definition at line 170 of file G4WentzelOKandVIxSection.cc.
172 G4double cosTetMaxNuc2 = cosTetMaxNuc;
173 if(
Z != targetZ || tkin != etag) {
176 if(targetZ > 99) { targetZ = 99; }
183 kinFactor = coeff*
Z*chargeSquare*invbeta2/mom2;
186 screenZ = ScreenRSquare[targetZ]/mom2;
187 }
else if(mass >
MeV) {
188 screenZ =
std::min(
Z*1.13,1.13 +3.76*
Z*
Z*invbeta2*alpha2*chargeSquare)*
189 ScreenRSquare[targetZ]/mom2;
193 *invbeta2*alpha2*std::sqrt(tau/(tau + fG4pow->
Z23(targetZ)))))*
194 ScreenRSquareElec[targetZ]/mom2;
196 if(targetZ == 1 && cosTetMaxNuc2 < 0.0 && particle == theProton) {
199 formfactA = FormFactor[targetZ]*mom2;
202 ComputeMaxElectronScattering(cut);
204 return cosTetMaxNuc2;
void SetTargetMass(G4double value)
static constexpr double amu_c2
G4double GetAtomicMassAmu(const G4String &symb) const
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4double Z23(G4int Z) const
static constexpr double MeV
The documentation for this class was generated from the following files: