66 G4cout <<
"Screened Rutherford Elastic model is constructed "
96 G4cout <<
"Calling G4DNAScreenedRutherfordElasticModel::Initialise()"
103 G4Exception (
"*** WARNING: the G4DNAScreenedRutherfordElasticModel is not "
104 "intented to be used with another particle than the electron",
111 G4Exception(
"*** WARNING: the G4DNAScreenedRutherfordElasticModel class is "
112 "not validated below 9 eV",
118 G4Exception(
"*** WARNING: the G4DNAScreenedRutherfordElasticModel class is "
119 "not validated above 1 MeV",
127 G4cout <<
"Screened Rutherford elastic model is initialized " <<
G4endl
204 G4cout <<
"Calling CrossSectionPerVolume() of "
205 "G4DNAScreenedRutherfordElasticModel"
220 sigma =
pi * crossSection / (
n * (
n + 1.));
226 G4cout <<
"__________________________________" <<
G4endl;
227 G4cout <<
"=== G4DNAScreenedRutherfordElasticModel - XS INFO START"
229 G4cout <<
"=== Kinetic energy(eV)=" << ekin/
eV
230 <<
" particle : " << particleDefinition->GetParticleName()
232 G4cout <<
"=== Cross section per water molecule (cm^2)=" << sigma/
cm/
cm
234 G4cout <<
"=== Cross section per water molecule (cm^-1)="
235 << sigma*waterDensity/(1./
cm) <<
G4endl;
236 G4cout <<
"=== G4DNAScreenedRutherfordElasticModel - XS INFO END"
241 return sigma*waterDensity;
260 G4double cross = z * (z + 1) * length * length;
287 * std::pow(z, 2. / 3.);
294 if (denominator > 0.) value = numerator / denominator;
311 G4cout <<
"Calling SampleSecondaries() of "
312 "G4DNAScreenedRutherfordElasticModel"
324 {
G4cout <<
"---> Using Brenner & Zaider model" <<
G4endl;}
333 {
G4cout <<
"---> Using Screened Rutherford model" <<
G4endl;}
345 G4double xDir = std::sqrt(1. - cosTheta*cosTheta);
347 xDir *= std::cos(phi);
348 yDir *= std::sin(phi);
350 G4ThreeVector zPrimeVers((xDir*xVers + yDir*yVers + cosTheta*zVers));
401 / (1. / (4. * gamma * gamma) +
beta
402 / ((2. + 2. * delta) * (2. + 2. * delta)));
413 leftDenominator = (1. + 2.*gamma - cosTheta);
414 rightDenominator = (1. + 2.*delta + cosTheta);
415 if ( (leftDenominator * rightDenominator) != 0. )
417 fCosTheta = oneOverMax * (1./(leftDenominator*leftDenominator)
418 +
beta/(rightDenominator*rightDenominator));
485 return (-1.0 *
B + std::sqrt(
B *
B - 4.0 *
A *
C)) / (2.0 *
A);
533 std::vector<G4double>& vec)
540 size_t size = vec.size();
585 fCosTheta = (1 + 2.*
n - cosTheta);
586 if (fCosTheta !=0.) fCosTheta = oneOverMax / (fCosTheta*fCosTheta);
620 return numerator / denominator;
G4double C(G4double temp)
G4double S(G4double temp)
G4double B(G4double temperature)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
static constexpr double eV
static constexpr double MeV
static constexpr double pi
static constexpr double cm
G4GLOB_DLL std::ostream G4cout
Hep3Vector orthogonal() const
Hep3Vector cross(const Hep3Vector &) const
static G4DNAMolecularMaterial * Instance()
G4double CalculatePolynomial(G4double k, std::vector< G4double > &vec)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
G4ParticleChangeForGamma * fParticleChangeForGamma
G4double RutherfordCrossSection(G4double energy, G4double z)
G4DNAScreenedRutherfordElasticModel(const G4ParticleDefinition *p=0, const G4String &nam="DNAScreenedRutherfordElasticModel")
G4double ScreeningFactor(G4double energy, G4double z)
const std::vector< G4double > * fpWaterDensity
virtual ~G4DNAScreenedRutherfordElasticModel()
std::vector< G4double > gamma100_200Coeff
std::vector< G4double > gamma035_10Coeff
std::vector< G4double > deltaCoeff
G4double intermediateEnergyLimit
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
G4double ScreenedRutherfordRandomizeCosTheta(G4double k, G4double z)
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
std::vector< G4double > betaCoeff
std::vector< G4double > gamma10_100Coeff
G4double BrennerZaiderRandomizeCosTheta(G4double k)
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
const G4String & GetParticleName() const
void SetHighEnergyLimit(G4double)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4double LowEnergyLimit() const
G4double HighEnergyLimit() const
void SetLowEnergyLimit(G4double)