#include <G4WentzelVIRelXSection.hh>
Definition at line 71 of file G4WentzelVIRelXSection.hh.
G4WentzelVIRelXSection::G4WentzelVIRelXSection |
( |
G4bool |
combined = true | ) |
|
|
explicit |
Definition at line 67 of file G4WentzelVIRelXSection.cc.
80 lowEnergyLimit = 1.0*
eV;
88 if(0.0 == ScreenRSquare[0]) {
92 ScreenRSquare[0] = alpha2*a0*
a0;
93 for(
G4int j=1; j<100; ++j) {
96 ScreenRSquare[j] = 0.5*alpha2*x*
x;
97 x = fNistManager->
GetA27(j);
98 FormFactor[j] = constn*x*
x;
102 factB = factD = formfactA = screenZ = 0.0;
103 cosTetMaxElec = cosTetMaxNuc = invbeta2 = kinFactor = gam0pcmp = pcmp2 = 1.0;
108 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
static G4Positron * Positron()
static G4Electron * Electron()
static constexpr double MeV
static constexpr double pi
G4WentzelVIRelXSection::~G4WentzelVIRelXSection |
( |
| ) |
|
|
virtual |
Definition at line 259 of file G4WentzelVIRelXSection.hh.
266 xsec = kinFactor*(cost1 - cost2)/
267 ((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 245 of file G4WentzelVIRelXSection.hh.
249 if(cosTMax < cosTMin) {
250 xsec = targetZ*kinFactor*(cosTMin - cosTMax)/
251 ((1.0 - cosTMin + screenZ)*(1.0 - cosTMax + screenZ));
G4double G4WentzelVIRelXSection::ComputeTransportCrossSectionPerAtom |
( |
G4double |
CosThetaMax | ) |
|
Definition at line 184 of file G4WentzelVIRelXSection.cc.
187 if(cosTMax >= 1.0) {
return xsec; }
201 x = (1.0 - costm)/screenZ;
204 y = x2*(1.0 - 1.3333333*x + 3*x2);
205 if(0.0 < factB) { y -= fb*x2*x*(0.6666667 -
x); }
208 xlog =
G4Log(1.0 + x);
210 if(0.0 < factB) { y -= fb*(x + x1 - 2*xlog); }
215 if(nwarnings < nwarnlimit) {
216 G4cout <<
"G4WentzelVIRelXSection::ComputeTransportCrossSectionPerAtom scattering on e- <0"
219 <<
" e(MeV)= " << tkin <<
" p(MeV/c)= " << sqrt(mom2)
220 <<
" Z= " << targetZ <<
" "
222 G4cout <<
" 1-costm= " << 1.0-costm <<
" screenZ= " << screenZ
239 x = (1.0 - cosTMax)/screenZ;
242 y = x2*(1.0 - 1.3333333*x + 3*x2);
243 if(0.0 < factB) { y -= fb*x2*x*(0.6666667 -
x); }
246 xlog =
G4Log(1.0 + x);
248 if(0.0 < factB) { y -= fb*(x + x1 - 2*xlog); }
253 if(nwarnings < nwarnlimit) {
254 G4cout <<
"G4WentzelVIRelXSection::ComputeTransportCrossSectionPerAtom scattering on e- <0"
257 <<
" e(MeV)= " << tkin <<
" Z= " << targetZ <<
" "
259 G4cout <<
" formfactA= " << formfactA <<
" screenZ= " << screenZ
260 <<
" x= " <<
" x1= " << x1 <<
G4endl;
264 xSection += y*targetZ;
266 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 G4WentzelVIRelXSection::GetCosThetaElec |
( |
| ) |
const |
|
inline |
G4double G4WentzelVIRelXSection::GetCosThetaNuc |
( |
| ) |
const |
|
inline |
G4double G4WentzelVIRelXSection::GetMomentumSquare |
( |
| ) |
const |
|
inline |
Definition at line 121 of file G4WentzelVIRelXSection.cc.
125 tkin = mom2 = momCM2 = 0.0;
130 if(isCombined) { cosThetaMax = cosThetaLim; }
135 currentMaterial =
nullptr;
std::vector< ExP01TrackerHit * > a
static constexpr double hbarc
void SetupParticle(const G4ParticleDefinition *)
static G4EmParameters * Instance()
static constexpr double fermi
G4double FactorForAngleLimit() const
Definition at line 281 of file G4WentzelVIRelXSection.cc.
285 temp.
set(0.0,0.0,1.0);
292 if(elecRatio > 0.0) {
293 if(rndmEngine->
flat() <= elecRatio) {
295 cost1 =
std::max(cost1,cosTetMaxElec);
296 cost2 =
std::max(cost2,cosTetMaxElec);
299 if(cost1 < cost2) {
return temp; }
303 G4double z1 = w1*w2/(w1 + rndmEngine->
flat()*(w2 - w1)) - screenZ;
306 G4double grej = (1. - z1*factB + factB1*targetZ*sqrt(z1*factB)*(2 - z1))
307 /( (1.0 + z1*factD)*fm*fm );
309 if(rndmEngine->
flat() > grej ) {
return temp; }
313 if(cost > 1.0) { cost = 1.0; }
314 else if(cost < -1.0) { cost =-1.0; }
315 G4double sint = sqrt((1.0 - cost)*(1.0 + cost));
322 temp.
set(vx1,vy1,cost);
void set(double x, double y, double z)
static constexpr double twopi
T max(const T t1, const T t2)
brief Return the largest of the two arguments
Definition at line 180 of file G4WentzelVIRelXSection.hh.
185 if(kinEnergy != tkin || mat != currentMaterial ||
186 ecut != cut || tmass != targetMass) {
188 currentMaterial = mat;
191 G4double momLab2 = tkin*(tkin + 2.0*mass);
203 G4double Ecm = std::sqrt(m12 + targetMass*targetMass + 2.0*etot*targetMass);
204 G4double mu_rel = mass*targetMass/Ecm;
205 G4double momCM = ptot*targetMass/Ecm;
208 invbeta2 = 1.0 + mu_rel*mu_rel/mom2;
210 factB = spin/invbeta2;
211 factD = std::sqrt(mom2)/tmass;
214 if(cost > cosTetMaxNuc) { cosTetMaxNuc = cost; }
G4IonisParamMat * GetIonisation() const
G4double GetInvA23() const
Definition at line 140 of file G4WentzelVIRelXSection.cc.
145 if(0.0 != spin) { spin = 0.5; }
148 charge3 = chargeSquare*q;
150 currentMaterial =
nullptr;
static constexpr double eplus
G4double GetPDGMass() const
G4double GetPDGSpin() const
G4double GetPDGCharge() const
Definition at line 157 of file G4WentzelVIRelXSection.cc.
159 G4double cosTetMaxNuc2 = cosTetMaxNuc;
160 if(
Z != targetZ || tkin != etag) {
164 kinFactor = coeff*targetZ*chargeSquare*invbeta2/mom2;
166 screenZ = ScreenRSquare[targetZ]/mom2;
168 screenZ *=
std::min(
Z*1.13,1.13 +3.76*
Z*
Z*invbeta2*alpha2*chargeSquare);
170 if(targetZ == 1 && cosTetMaxNuc2 < 0.0 && particle == theProton) {
173 formfactA = FormFactor[targetZ]*mom2;
176 ComputeMaxElectronScattering(cut);
178 return cosTetMaxNuc2;
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
The documentation for this class was generated from the following files: