64 G4cout <<
"Miller & Green excitation model is constructed " <<
G4endl;
85 G4cout <<
"Calling G4DNAMillerGreenExcitationModel::Initialise()" <<
G4endl;
170 if (particle==protonDef)
176 if (particle==hydrogenDef)
182 if (particle==alphaPlusPlusDef)
188 if (particle==alphaPlusDef)
194 if (particle==heliumDef)
207 G4cout <<
"Miller & Green excitation model is initialized " << G4endl
233 G4cout <<
"Calling CrossSectionPerVolume() of G4DNAMillerGreenExcitationModel" <<
G4endl;
243 particleDefinition != instance->
GetIon(
"hydrogen")
245 particleDefinition != instance->
GetIon(
"alpha++")
247 particleDefinition != instance->
GetIon(
"alpha+")
249 particleDefinition != instance->
GetIon(
"helium")
260 if(waterDensity!= 0.0)
267 std::map< G4String,G4double,std::less<G4String> >::iterator pos1;
272 lowLim = pos1->second;
275 std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
280 highLim = pos2->second;
283 if (k >= lowLim && k < highLim)
285 crossSection =
Sum(k,particleDefinition);
340 G4cout <<
"__________________________________" <<
G4endl;
341 G4cout <<
"G4DNAMillerGreenExcitationModel - XS INFO START" <<
G4endl;
343 G4cout <<
"Cross section per water molecule (cm^2)=" << crossSection/
cm/
cm <<
G4endl;
344 G4cout <<
"Cross section per water molecule (cm^-1)=" << crossSection*waterDensity/(1./
cm) << G4endl;
346 G4cout <<
"G4DNAMillerGreenExcitationModel - XS INFO END" <<
G4endl;
353 G4cout <<
"MillerGreenExcitationModel : WARNING Water density is NULL" <<
G4endl;
357 return crossSection*waterDensity;
372 G4cout <<
"Calling SampleSecondaries() of G4DNAMillerGreenExcitationModel" <<
G4endl;
382 G4double excitationEnergy = excitation[level];
386 if (!
statCode) newEnergy = particleEnergy0 - excitationEnergy;
388 else newEnergy = particleEnergy0;
438 const G4double omegaj[]={0.85, 0.88, 0.88, 0.78, 0.78};
443 G4int particleTypeIndex = 0;
448 if (particleDefinition == instance->
GetIon(
"hydrogen")) particleTypeIndex=0;
449 if (particleDefinition == instance->
GetIon(
"alpha++")) particleTypeIndex=1;
450 if (particleDefinition == instance->
GetIon(
"alpha+")) particleTypeIndex=2;
451 if (particleDefinition == instance->
GetIon(
"helium")) particleTypeIndex=3;
457 if (tCorrected < Eliq[excitationLevel])
return 0;
463 numerator = std::pow(z * aj[excitationLevel], omegaj[excitationLevel]) *
464 std::pow(tCorrected - Eliq[excitationLevel], nu);
468 if (particleDefinition == instance->
GetIon(
"hydrogen"))
469 numerator = std::pow(z * 0.75*aj[excitationLevel], omegaj[excitationLevel]) *
470 std::pow(tCorrected - Eliq[excitationLevel], nu);
474 power = omegaj[excitationLevel] + nu;
477 denominator = std::pow(jj[excitationLevel], power) + std::pow(tCorrected, power);
485 if (particleDefinition == instance->
GetIon(
"hydrogen")) zEff = 1.;
487 G4double cross = sigma0 * zEff * zEff * numerator / denominator;
499 std::deque<double> values;
504 if ( particle == instance->
GetIon(
"alpha++") ||
506 particle == instance->
GetIon(
"hydrogen") ||
507 particle == instance->
GetIon(
"alpha+") ||
508 particle == instance->
GetIon(
"helium")
515 values.push_front(partial);
526 if (values[i] > value)
return i;
587 return totalCrossSection;
600 G4double r =
R(t, energyTransferred, _slaterEffectiveCharge, shellNumber);
601 G4double value = 1. - std::exp(-2 * r) * ( ( 2. * r + 2. ) * r + 1. );
617 G4double r =
R(t, energyTransferred, _slaterEffectiveCharge, shellNumber);
618 G4double value = 1. - std::exp(-2 * r) * (((2. * r * r + 2.) * r + 2.) * r + 1.);
634 G4double r =
R(t, energyTransferred, _slaterEffectiveCharge, shellNumber);
635 G4double value = 1. - std::exp(-2 * r) * (((( 2./3. * r + 4./3.) * r + 2.) * r + 2.) * r + 1.);
650 G4double tElectron = 0.511/3728. * t;
654 G4double value = std::sqrt ( 2. * tElectron / H ) / ( energyTransferred / H ) * (_slaterEffectiveCharge/shellNumber);
std::map< G4String, G4double, std::less< G4String > > lowEnergyLimit
G4double LowEnergyLimit() const
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
G4DNAWaterExcitationStructure waterExcitation
G4double GetKineticEnergy() const
G4double HighEnergyLimit() const
G4double S_1s(G4double t, G4double energyTransferred, G4double slaterEffectiveCharge, G4double shellNumber)
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
const std::vector< G4double > * fpMolWaterDensity
G4double sCoefficient[3][4]
static G4Proton * ProtonDefinition()
G4double R(G4double t, G4double energyTransferred, G4double slaterEffectiveCharge, G4double shellNumber)
G4DNAMillerGreenExcitationModel(const G4ParticleDefinition *p=0, const G4String &nam="DNAMillerGreenExcitationModel")
G4int RandomSelect(G4double energy, const G4ParticleDefinition *particle)
std::map< G4String, G4double, std::less< G4String > > highEnergyLimit
G4double slaterEffectiveCharge[3][4]
G4ParticleDefinition * GetDefinition() const
G4double Sum(G4double energy, const G4ParticleDefinition *particle)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
const G4String & GetParticleName() const
G4double kineticEnergyCorrection[4]
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetHighEnergyLimit(G4double)
virtual G4double GetPartialCrossSection(const G4Material *, G4int, const G4ParticleDefinition *, G4double)
G4GLOB_DLL std::ostream G4cout
const std::vector< double > * GetNumMolPerVolTableFor(const G4Material *) const
G4ParticleChangeForGamma * fParticleChangeForGamma
const G4ThreeVector & GetMomentumDirection() const
static G4DNAGenericIonsManager * Instance(void)
static G4DNAChemistryManager * Instance()
static G4DNAMolecularMaterial * Instance()
G4double PartialCrossSection(G4double energy, G4int level, const G4ParticleDefinition *particle)
G4double S_2s(G4double t, G4double energyTransferred, G4double slaterEffectiveCharge, G4double shellNumber)
virtual ~G4DNAMillerGreenExcitationModel()
void CreateWaterMolecule(ElectronicModification, G4int, const G4Track *)
Method used by DNA physics model to create a water molecule.
const G4Track * GetCurrentTrack() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
static MCTruthManager * instance
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
void SetLowEnergyLimit(G4double)
static const double eplus
G4double GetPDGCharge() const
G4double S_2p(G4double t, G4double energyTransferred, G4double slaterEffectiveCharge, G4double shellNumber)
G4int GetLeptonNumber() const
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4ParticleDefinition * GetIon(const G4String &name)