63 G4cout <<
"Screened Rutherford Elastic model is constructed " <<
G4endl
95 G4cout <<
"Calling G4DNAUeharaScreenedRutherfordElasticModel::Initialise()"
102 G4Exception(
"*** WARNING: the G4DNAUeharaScreenedRutherfordElasticModel is "
103 "not intented to be used with another particle than the electron",
110 G4Exception(
"*** WARNING : the G4DNAUeharaScreenedRutherfordElasticModel "
111 "class is not validated below 9 eV",
117 G4Exception(
"*** WARNING: the G4DNAUeharaScreenedRutherfordElasticModel "
118 "class is used above 10 keV",
122 #ifdef UEHARA_VERBOSE
125 G4cout <<
"Screened Rutherford elastic model is initialized " <<
G4endl
196 #ifdef UEHARA_VERBOSE
200 <<
"Calling CrossSectionPerVolume() of G4DNAUeharaScreenedRutherfordElasticModel"
213 if(waterDensity!= 0.0)
218 sigma =
pi * crossSection / (n * (n + 1.));
220 #ifdef UEHARA_VERBOSE
223 G4cout <<
"__________________________________" <<
G4endl;
224 G4cout <<
"=== G4DNAUeharaScreenedRutherfordElasticModel - XS INFO START"
226 G4cout <<
"=== Kinetic energy(eV)=" << ekin/
eV
227 <<
" particle : " << particleDefinition->GetParticleName() <<
G4endl;
228 G4cout <<
"=== Cross section per water molecule (cm^2)=" << sigma/
cm/
cm
230 G4cout <<
"=== Cross section per water molecule (cm^-1)="
231 << sigma*waterDensity/(1./
cm) << G4endl;
232 G4cout <<
"=== G4DNAUeharaScreenedRutherfordElasticModel - XS INFO END"
238 return sigma*waterDensity;
258 G4double cross = z * (z + 1) * length * length;
280 etaC = 1.13 + 3.76 * (z * z / (137 * 137 * beta2));
282 G4double numerator = etaC * constK * std::pow(z, 2. / 3.);
289 if (denominator > 0.)
290 value = numerator / denominator;
305 #ifdef UEHARA_VERBOSE
309 <<
"Calling SampleSecondaries() of G4DNAUeharaScreenedRutherfordElasticModel"
320 #ifdef UEHARA_VERBOSE
322 G4cout <<
"---> Using Brenner & Zaider model" <<
G4endl;
328 #ifdef UEHARA_VERBOSE
330 G4cout <<
"---> Using Screened Rutherford model" <<
G4endl;
342 G4double xDir = std::sqrt(1. - cosTheta*cosTheta);
344 xDir *= std::cos(phi);
345 yDir *= std::sin(phi);
347 G4ThreeVector zPrimeVers((xDir*xVers + yDir*yVers + cosTheta*zVers));
397 / (1. / (4. * gamma * gamma)
398 + beta / ((2. + 2. * delta) * (2. + 2. * delta)));
409 leftDenominator = (1. + 2.*gamma - cosTheta);
410 rightDenominator = (1. + 2.*delta + cosTheta);
411 if ( (leftDenominator * rightDenominator) != 0. )
413 fCosTheta = oneOverMax * (1./(leftDenominator*leftDenominator)
414 + beta/(rightDenominator*rightDenominator));
473 G4double S = 2.0 / (a1 * a2) + 2.0 * beta / (b1 * b2); S = 1.0 /
S;
476 G4double A = S * (b1 - beta * a2) + cp * a2 * b1;
477 G4double B = S * (b1 * b2 + beta * a1 * a2) - cp * a2 * b1 * c1;
478 G4double C = S * (b * b1 + beta * a * a2) - cp * a2 * b1 * c2;
481 return (-1.0 * B + std::sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
531 std::vector<G4double>& vec)
538 size_t size = vec.size();
584 fCosTheta = (1 + 2.*n - cosTheta);
585 if (fCosTheta !=0.) fCosTheta = oneOverMax / (fCosTheta*fCosTheta);
617 G4double numerator = cp * (1.0 + 2.0 *
n) - n;
619 return numerator / denominator;
std::vector< G4double > betaCoeff
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
std::vector< ExP01TrackerHit * > a
static constexpr double MeV
void SetHighEnergyLimit(G4double)
G4double RutherfordCrossSection(G4double energy, G4double z)
static constexpr double keV
std::vector< G4double > gamma035_10Coeff
const G4ThreeVector & GetMomentumDirection() const
const G4String & GetParticleName() const
G4double ScreenedRutherfordRandomizeCosTheta(G4double k, G4double z)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4DNAUeharaScreenedRutherfordElasticModel(const G4ParticleDefinition *p=0, const G4String &nam="DNAUeharaScreenedRutherfordElasticModel")
static constexpr double epsilon0
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4double LowEnergyLimit() const
G4double CalculatePolynomial(G4double k, std::vector< G4double > &vec)
G4double BrennerZaiderRandomizeCosTheta(G4double k)
std::vector< G4double > deltaCoeff
G4double intermediateEnergyLimit
const std::vector< G4double > * fpWaterDensity
const XML_Char int const XML_Char * value
static constexpr double electron_mass_c2
static G4DNAMolecularMaterial * Instance()
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
double A(double temperature)
static constexpr double eV
static constexpr double eV
virtual ~G4DNAUeharaScreenedRutherfordElasticModel()
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
Hep3Vector cross(const Hep3Vector &) const
G4double G4ParticleHPJENDLHEData::G4double result
G4double ScreeningFactor(G4double energy, G4double z)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
void SetLowEnergyLimit(G4double)
std::vector< G4double > gamma100_200Coeff
G4double GetKineticEnergy() const
static constexpr double cm
G4GLOB_DLL std::ostream G4cout
G4ParticleChangeForGamma * fParticleChangeForGamma
Hep3Vector orthogonal() const
static constexpr double pi
G4ParticleChangeForGamma * GetParticleChangeForGamma()
static constexpr double e_squared
std::vector< G4double > gamma10_100Coeff
G4double HighEnergyLimit() const
static constexpr double keV
double B(double temperature)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)