61 G4cout <<
"Screened Rutherford Elastic model is constructed " <<
G4endl<<
"Energy range: "
86 G4cout <<
"Calling G4DNAUeharaScreenedRutherfordElasticModel::Initialise()"
93 G4cout <<
"G4DNAUeharaScreenedRutherfordElasticModel: low energy limit increased from " <<
100 G4cout <<
"G4DNAUeharaScreenedRutherfordElasticModel: high energy limit decreased from " <<
147 G4cout <<
"Screened Rutherford elastic model is initialized " << G4endl
175 <<
"Calling CrossSectionPerVolume() of G4DNAUeharaScreenedRutherfordElasticModel"
185 if(waterDensity!= 0.0)
196 sigma =
pi * crossSection / (n * (n + 1.));
201 G4cout <<
"__________________________________" <<
G4endl;
202 G4cout <<
"=== G4DNAUeharaScreenedRutherfordElasticModel - XS INFO START" <<
G4endl;
204 G4cout <<
"=== Cross section per water molecule (cm^2)=" << sigma/
cm/
cm <<
G4endl;
205 G4cout <<
"=== Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./
cm) << G4endl;
207 G4cout <<
"=== G4DNAUeharaScreenedRutherfordElasticModel - XS INFO END" <<
G4endl;
229 G4double length = (e_squared * (k + electron_mass_c2))
230 / (4 *
pi * epsilon0 * k * (k + 2 * electron_mass_c2));
231 G4double cross = z * (z + 1) * length * length;
247 beta2 = 1. - 1. / ((1. + k / electron_mass_c2) * (1. + k / electron_mass_c2));
253 etaC = 1.13 + 3.76 * (z * z / (137 * 137 * beta2));
255 G4double numerator = etaC * constK * std::pow(z, 2. / 3.);
257 k /= electron_mass_c2;
262 if (denominator > 0.)
263 value = numerator / denominator;
281 <<
"Calling SampleSecondaries() of G4DNAUeharaScreenedRutherfordElasticModel"
318 G4double xDir = std::sqrt(1. - cosTheta*cosTheta);
320 xDir *= std::cos(phi);
321 yDir *= std::sin(phi);
323 G4ThreeVector zPrimeVers((xDir*xVers + yDir*yVers + cosTheta*zVers));
373 / (1. / (4. * gamma * gamma)
374 + beta / ((2. + 2. * delta) * (2. + 2. * delta)));
385 leftDenominator = (1. + 2.*gamma - cosTheta);
386 rightDenominator = (1. + 2.*delta + cosTheta);
387 if ( (leftDenominator * rightDenominator) != 0. )
389 fCosTheta = oneOverMax * (1./(leftDenominator*leftDenominator) + beta/(rightDenominator*rightDenominator));
414 for (
G4int i=0; i<iMax; i++)
416 cosTheta = -1 + i*2./(iMax-1);
417 leftDenominator = (1. + 2.*gamma - cosTheta);
418 rightDenominator = (1. + 2.*delta + cosTheta);
419 if ( (leftDenominator * rightDenominator) != 0. )
421 cumul = cumul + (1./(leftDenominator*leftDenominator) + beta/(rightDenominator*rightDenominator));
426 for (
G4int i=0; i<iMax; i++)
428 cosTheta = -1 + i*2./(iMax-1);
429 leftDenominator = (1. + 2.*gamma - cosTheta);
430 rightDenominator = (1. + 2.*delta + cosTheta);
431 if (cumul !=0 && (leftDenominator * rightDenominator) != 0.)
432 value = value + (1./(leftDenominator*leftDenominator) + beta/(rightDenominator*rightDenominator)) / cumul;
433 if (random < value)
break;
454 size_t size = vec.size();
498 fCosTheta = (1 + 2.*n - cosTheta);
499 if (fCosTheta !=0.) fCosTheta = oneOverMax / (fCosTheta*fCosTheta);
522 for (
G4int i=0; i<iMax; i++)
524 cosTheta = -1 + i*2./(iMax-1);
525 fCosTheta = (1 + 2.*n - cosTheta);
526 if (fCosTheta !=0.) cumul = cumul + 1./(fCosTheta*fCosTheta);
530 for (
G4int i=0; i<iMax; i++)
532 cosTheta = -1 + i*2./(iMax-1);
533 fCosTheta = (1 + 2.*n - cosTheta);
534 if (cumul !=0.) value = value + (1./(fCosTheta*fCosTheta)) / cumul;
535 if (random < value)
break;
const std::vector< G4double > * fpWaterDensity
G4double LowEnergyLimit() const
std::vector< G4double > betaCoeff
G4double GetKineticEnergy() const
CLHEP::Hep3Vector G4ThreeVector
G4double HighEnergyLimit() const
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
std::vector< G4double > gamma10_100Coeff
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
const G4String & GetParticleName() const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetHighEnergyLimit(G4double)
G4DNAUeharaScreenedRutherfordElasticModel(const G4ParticleDefinition *p=0, const G4String &nam="DNAUeharaScreenedRutherfordElasticModel")
G4GLOB_DLL std::ostream G4cout
const std::vector< double > * GetNumMolPerVolTableFor(const G4Material *) const
G4double ScreenedRutherfordRandomizeCosTheta(G4double k, G4double z)
G4double RutherfordCrossSection(G4double energy, G4double z)
const G4ThreeVector & GetMomentumDirection() const
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
std::vector< G4double > gamma100_200Coeff
const G4double * GetAtomicNumDensityVector() const
virtual ~G4DNAUeharaScreenedRutherfordElasticModel()
static G4DNAMolecularMaterial * Instance()
G4double ScreeningFactor(G4double energy, G4double z)
G4double intermediateEnergyLimit
void SetProposedKineticEnergy(G4double proposedKinEnergy)
std::vector< G4double > deltaCoeff
G4double CalculatePolynomial(G4double k, std::vector< G4double > &vec)
G4double BrennerZaiderRandomizeCosTheta(G4double k)
void ProposeTrackStatus(G4TrackStatus status)
void SetLowEnergyLimit(G4double)
std::vector< G4double > gamma035_10Coeff
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4ParticleChangeForGamma * fParticleChangeForGamma