Geant4 11.3.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4DNARuddIonisationExtendedModel Class Reference

#include <G4DNARuddIonisationExtendedModel.hh>

+ Inheritance diagram for G4DNARuddIonisationExtendedModel:

Public Member Functions

 G4DNARuddIonisationExtendedModel (const G4ParticleDefinition *p=nullptr, const G4String &nam="DNARuddIonisationExtendedModel")
 
 ~G4DNARuddIonisationExtendedModel () override
 
void Initialise (const G4ParticleDefinition *, const G4DataVector &) override
 
G4double CrossSectionPerVolume (const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax) override
 
void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
 
void SelectStationary (G4bool val)
 
G4double ComputeProbabilityFunction (const G4ParticleDefinition *, G4double kine, G4double deltae, G4int shell)
 
G4DNARuddIonisationExtendedModeloperator= (const G4DNARuddIonisationExtendedModel &right)=delete
 
 G4DNARuddIonisationExtendedModel (const G4DNARuddIonisationExtendedModel &)=delete
 
- Public Member Functions inherited from G4VEmModel
 G4VEmModel (const G4String &nam)
 
virtual ~G4VEmModel ()
 
virtual void InitialiseLocal (const G4ParticleDefinition *, G4VEmModel *masterModel)
 
virtual void InitialiseForMaterial (const G4ParticleDefinition *, const G4Material *)
 
virtual void InitialiseForElement (const G4ParticleDefinition *, G4int Z)
 
virtual G4double ComputeDEDXPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
 
virtual G4double GetPartialCrossSection (const G4Material *, G4int level, const G4ParticleDefinition *, G4double kineticEnergy)
 
virtual G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
virtual G4double ComputeCrossSectionPerShell (const G4ParticleDefinition *, G4int Z, G4int shellIdx, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
virtual G4double ChargeSquareRatio (const G4Track &)
 
virtual G4double GetChargeSquareRatio (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual G4double GetParticleCharge (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual void StartTracking (G4Track *)
 
virtual void CorrectionsAlongStep (const G4MaterialCutsCouple *, const G4DynamicParticle *, const G4double &length, G4double &eloss)
 
virtual G4double Value (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
 
virtual G4double MinPrimaryEnergy (const G4Material *, const G4ParticleDefinition *, G4double cut=0.0)
 
virtual G4double MinEnergyCut (const G4ParticleDefinition *, const G4MaterialCutsCouple *)
 
virtual void SetupForMaterial (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual void DefineForRegion (const G4Region *)
 
virtual void FillNumberOfSecondaries (G4int &numberOfTriplets, G4int &numberOfRecoil)
 
virtual void ModelDescription (std::ostream &outFile) const
 
void InitialiseElementSelectors (const G4ParticleDefinition *, const G4DataVector &)
 
std::vector< G4EmElementSelector * > * GetElementSelectors ()
 
void SetElementSelectors (std::vector< G4EmElementSelector * > *)
 
G4double ComputeDEDX (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
 
G4double CrossSection (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeMeanFreePath (const G4ParticleDefinition *, G4double kineticEnergy, const G4Material *, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *, const G4Element *, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementSelectRandomAtom (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementSelectTargetAtom (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double logKineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementSelectRandomAtom (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementGetCurrentElement (const G4Material *mat=nullptr) const
 
G4int SelectRandomAtomNumber (const G4Material *) const
 
const G4IsotopeGetCurrentIsotope (const G4Element *elm=nullptr) const
 
G4int SelectIsotopeNumber (const G4Element *) const
 
void SetParticleChange (G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
 
void SetCrossSectionTable (G4PhysicsTable *, G4bool isLocal)
 
G4ElementDataGetElementData ()
 
G4PhysicsTableGetCrossSectionTable ()
 
G4VEmFluctuationModelGetModelOfFluctuations ()
 
G4VEmAngularDistributionGetAngularDistribution ()
 
G4VEmModelGetTripletModel ()
 
void SetTripletModel (G4VEmModel *)
 
void SetAngularDistribution (G4VEmAngularDistribution *)
 
G4double HighEnergyLimit () const
 
G4double LowEnergyLimit () const
 
G4double HighEnergyActivationLimit () const
 
G4double LowEnergyActivationLimit () const
 
G4double PolarAngleLimit () const
 
G4double SecondaryThreshold () const
 
G4bool DeexcitationFlag () const
 
G4bool ForceBuildTableFlag () const
 
G4bool UseAngularGeneratorFlag () const
 
void SetAngularGeneratorFlag (G4bool)
 
void SetHighEnergyLimit (G4double)
 
void SetLowEnergyLimit (G4double)
 
void SetActivationHighEnergyLimit (G4double)
 
void SetActivationLowEnergyLimit (G4double)
 
G4bool IsActive (G4double kinEnergy) const
 
void SetPolarAngleLimit (G4double)
 
void SetSecondaryThreshold (G4double)
 
void SetDeexcitationFlag (G4bool val)
 
void SetForceBuildTable (G4bool val)
 
void SetFluctuationFlag (G4bool val)
 
G4bool IsMaster () const
 
void SetUseBaseMaterials (G4bool val)
 
G4bool UseBaseMaterials () const
 
G4double MaxSecondaryKinEnergy (const G4DynamicParticle *dynParticle)
 
const G4StringGetName () const
 
void SetCurrentCouple (const G4MaterialCutsCouple *)
 
G4bool IsLocked () const
 
void SetLocked (G4bool)
 
void SetLPMFlag (G4bool)
 
void SetMasterThread (G4bool)
 
G4VEmModeloperator= (const G4VEmModel &right)=delete
 
 G4VEmModel (const G4VEmModel &)=delete
 

Protected Attributes

G4ParticleChangeForGammafParticleChangeForGamma {nullptr}
 
- Protected Attributes inherited from G4VEmModel
G4ElementDatafElementData = nullptr
 
G4VParticleChangepParticleChange = nullptr
 
G4PhysicsTablexSectionTable = nullptr
 
const G4MaterialpBaseMaterial = nullptr
 
const std::vector< G4double > * theDensityFactor = nullptr
 
const std::vector< G4int > * theDensityIdx = nullptr
 
G4double inveplus
 
G4double pFactor = 1.0
 
std::size_t currentCoupleIndex = 0
 
std::size_t basedCoupleIndex = 0
 
G4bool lossFlucFlag = true
 

Additional Inherited Members

- Protected Member Functions inherited from G4VEmModel
G4ParticleChangeForLossGetParticleChangeForLoss ()
 
G4ParticleChangeForGammaGetParticleChangeForGamma ()
 
virtual G4double MaxSecondaryEnergy (const G4ParticleDefinition *, G4double kineticEnergy)
 
const G4MaterialCutsCoupleCurrentCouple () const
 
void SetCurrentElement (const G4Element *)
 

Detailed Description

Definition at line 51 of file G4DNARuddIonisationExtendedModel.hh.

Constructor & Destructor Documentation

◆ G4DNARuddIonisationExtendedModel() [1/2]

G4DNARuddIonisationExtendedModel::G4DNARuddIonisationExtendedModel ( const G4ParticleDefinition * p = nullptr,
const G4String & nam = "DNARuddIonisationExtendedModel" )
explicit

Definition at line 72 of file G4DNARuddIonisationExtendedModel.cc.

74 : G4VEmModel(nam)
75{
76 fEmCorrections = G4LossTableManager::Instance()->EmCorrections();
77 fGpow = G4Pow::GetInstance();
78 fLowestEnergy = 100*CLHEP::eV;
79 fLimitEnergy = 1*CLHEP::keV;
80
81 // Mark this model as "applicable" for atomic deexcitation
83
84 // Define default angular generator
85 SetAngularDistribution(new G4DNARuddAngle());
86
87 if (nullptr == xshelium) { LoadData(); }
88}
static G4LossTableManager * Instance()
G4EmCorrections * EmCorrections()
static G4Pow * GetInstance()
Definition G4Pow.cc:41
void SetDeexcitationFlag(G4bool val)
G4VEmModel(const G4String &nam)
Definition G4VEmModel.cc:67
void SetAngularDistribution(G4VEmAngularDistribution *)

Referenced by G4DNARuddIonisationExtendedModel(), and operator=().

◆ ~G4DNARuddIonisationExtendedModel()

G4DNARuddIonisationExtendedModel::~G4DNARuddIonisationExtendedModel ( )
override

Definition at line 92 of file G4DNARuddIonisationExtendedModel.cc.

93{
94 if(isFirst) {
95 for(auto & i : xsdata) { delete i; }
96 }
97}

◆ G4DNARuddIonisationExtendedModel() [2/2]

G4DNARuddIonisationExtendedModel::G4DNARuddIonisationExtendedModel ( const G4DNARuddIonisationExtendedModel & )
delete

Member Function Documentation

◆ ComputeProbabilityFunction()

G4double G4DNARuddIonisationExtendedModel::ComputeProbabilityFunction ( const G4ParticleDefinition * p,
G4double kine,
G4double deltae,
G4int shell )

Definition at line 592 of file G4DNARuddIonisationExtendedModel.cc.

594{
595 if (fParticle != p) { SetParticle(p); }
596 MaxEnergy(e, shell);
597 return ProbabilityFunction(e, deltae, shell);
598}

◆ CrossSectionPerVolume()

G4double G4DNARuddIonisationExtendedModel::CrossSectionPerVolume ( const G4Material * material,
const G4ParticleDefinition * p,
G4double ekin,
G4double emin,
G4double emax )
overridevirtual

Reimplemented from G4VEmModel.

Definition at line 247 of file G4DNARuddIonisationExtendedModel.cc.

251{
252 // check if model is applicable for given material
253 G4double density = (material->GetIndex() < fpWaterDensity->size())
254 ? (*fpWaterDensity)[material->GetIndex()] : 0.0;
255 if (0.0 == density) { return 0.0; }
256
257 // ion may be different
258 if (fParticle != part) { SetParticle(part); }
259
260 // ion shoud be stopped - check on kinetic energy and not scaled energy
261 if (kinE < fLowestEnergy) { return DBL_MAX; }
262
263 G4double e = kinE*fMassRate;
264
265 G4double sigma = (e > fElow) ? xscurrent->FindValue(e)
266 : xscurrent->FindValue(fElow) * e / fElow;
267
268 if (idx == -1) {
269 sigma *= fEmCorrections->EffectiveChargeSquareRatio(part, material, kinE);
270 }
271
272 sigma *= density;
273
274 if (verbose > 1) {
275 G4cout << "G4DNARuddIonisationExtendedModel for " << part->GetParticleName()
276 << " Ekin(keV)=" << kinE/CLHEP::keV
277 << " sigma(cm^2)=" << sigma/CLHEP::cm2 << G4endl;
278 }
279 return sigma;
280}
double G4double
Definition G4Types.hh:83
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
std::size_t GetIndex() const
#define DBL_MAX
Definition templates.hh:62

◆ Initialise()

void G4DNARuddIonisationExtendedModel::Initialise ( const G4ParticleDefinition * p,
const G4DataVector &  )
overridevirtual

Implements G4VEmModel.

Definition at line 165 of file G4DNARuddIonisationExtendedModel.cc.

167{
168 if (p != fParticle) { SetParticle(p); }
169
170 // particle change object may be externally set
171 if (nullptr == fParticleChangeForGamma) {
173 }
174
175 // initialisation once in each thread
176 if (!isInitialised) {
177 isInitialised = true;
178 const G4String& pname = fParticle->GetParticleName();
179 if (pname == "proton") {
180 idx = 1;
181 xscurrent = xsdata[1];
182 fElow = fLowestEnergy;
183 } else if (pname == "hydrogen") {
184 idx = 0;
185 xscurrent = xsdata[0];
186 fElow = fLowestEnergy;
187 } else if (pname == "alpha") {
188 idx = 1;
189 xscurrent = xsdata[2];
190 isHelium = true;
191 fElow = fLimitEnergy;
192 } else if (pname == "alpha+") {
193 idx = 1;
194 isHelium = true;
195 xscurrent = xsalphaplus;
196 fElow = fLimitEnergy;
197 // The following values are provided by M. Dingfelder (priv. comm)
198 slaterEffectiveCharge[0]=2.0;
199 slaterEffectiveCharge[1]=2.0;
200 slaterEffectiveCharge[2]=2.0;
201 sCoefficient[0]=0.7;
202 sCoefficient[1]=0.15;
203 sCoefficient[2]=0.15;
204 } else if (pname == "helium") {
205 idx = 0;
206 isHelium = true;
207 fElow = fLimitEnergy;
208 xscurrent = xshelium;
209 slaterEffectiveCharge[0]=1.7;
210 slaterEffectiveCharge[1]=1.15;
211 slaterEffectiveCharge[2]=1.15;
212 sCoefficient[0]=0.5;
213 sCoefficient[1]=0.25;
214 sCoefficient[2]=0.25;
215 } else {
216 isIon = true;
217 idx = -1;
218 xscurrent = xsdata[1];
219 fElow = fLowestEnergy;
220 }
221 // defined stationary mode
223
224 // initialise atomic de-excitation
225 fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation();
226
227 if (verbose > 0) {
228 G4cout << "### G4DNARuddIonisationExtendedModel::Initialise(..) " << pname
229 << "/n idx=" << idx << " isIon=" << isIon
230 << " isHelium=" << isHelium << G4endl;
231 }
232 }
233}
static G4EmParameters * Instance()
G4bool DNAStationary() const
G4VAtomDeexcitation * AtomDeexcitation()
G4ParticleChangeForGamma * GetParticleChangeForGamma()

◆ operator=()

G4DNARuddIonisationExtendedModel & G4DNARuddIonisationExtendedModel::operator= ( const G4DNARuddIonisationExtendedModel & right)
delete

◆ SampleSecondaries()

void G4DNARuddIonisationExtendedModel::SampleSecondaries ( std::vector< G4DynamicParticle * > * fvect,
const G4MaterialCutsCouple * couple,
const G4DynamicParticle * dpart,
G4double tmin,
G4double maxEnergy )
overridevirtual

Implements G4VEmModel.

Definition at line 285 of file G4DNARuddIonisationExtendedModel.cc.

289{
290 const G4ParticleDefinition* pd = dpart->GetDefinition();
291 if (fParticle != pd) { SetParticle(pd); }
292
293 // stop ion with energy below low energy limit
294 G4double kinE = dpart->GetKineticEnergy();
295 // ion shoud be stopped - check on kinetic energy and not scaled energy
296 if (kinE <= fLowestEnergy) {
297 fParticleChangeForGamma->SetProposedKineticEnergy(0.);
298 fParticleChangeForGamma->ProposeTrackStatus(fStopButAlive);
299 fParticleChangeForGamma->ProposeLocalEnergyDeposit(kinE);
300 return;
301 }
302
303 G4int shell = SelectShell(kinE*fMassRate);
304 G4double bindingEnergy = (useDNAWaterStructure)
305 ? waterStructure.IonisationEnergy(shell) : Bj[shell];
306
307 //Si: additional protection if tcs interpolation method is modified
308 if (kinE < bindingEnergy) { return; }
309
310 G4double esec = SampleElectronEnergy(kinE, shell);
311 G4double esum = 0.0;
312
313 // sample deexcitation
314 // here we assume that H2O electronic levels are the same as Oxygen.
315 // this can be considered true with a rough 10% error in energy on K-shell,
316 G4int Z = 8;
317 G4ThreeVector deltaDir =
318 GetAngularDistribution()->SampleDirectionForShell(dpart, esec, Z, shell, couple->GetMaterial());
319
320 // SI: only atomic deexcitation from K shell is considered
321 if(fAtomDeexcitation != nullptr && shell == 4) {
322 auto as = G4AtomicShellEnumerator(0);
323 auto ashell = fAtomDeexcitation->GetAtomicShell(Z, as);
324 fAtomDeexcitation->GenerateParticles(fvect, ashell, Z, 0, 0);
325
326 // compute energy sum from de-excitation
327 for (auto const & ptr : *fvect) {
328 esum += ptr->GetKineticEnergy();
329 }
330 }
331 // check energy balance
332 // remaining excitation energy of water molecule
333 G4double exc = bindingEnergy - esum;
334
335 // remaining projectile energy
336 G4double scatteredEnergy = kinE - bindingEnergy - esec;
337 if(scatteredEnergy < -tolerance || exc < -tolerance) {
338 G4cout << "G4DNARuddIonisationExtendedModel::SampleSecondaries: "
339 << "negative final E(keV)=" << scatteredEnergy/CLHEP::keV << " Ein(keV)="
340 << kinE/CLHEP::keV << " " << pd->GetParticleName()
341 << " Edelta(keV)=" << esec/CLHEP::keV << " MeV, Exc(keV)=" << exc/CLHEP::keV
342 << G4endl;
343 }
344
345 // projectile
346 if (!statCode) {
347 fParticleChangeForGamma->SetProposedKineticEnergy(scatteredEnergy);
348 fParticleChangeForGamma->ProposeLocalEnergyDeposit(exc);
349 } else {
350 fParticleChangeForGamma->SetProposedKineticEnergy(kinE);
351 fParticleChangeForGamma->ProposeLocalEnergyDeposit(kinE - scatteredEnergy);
352 }
353
354 // delta-electron
355 auto dp = new G4DynamicParticle(G4Electron::Electron(), deltaDir, esec);
356 fvect->push_back(dp);
357
358 // create radical
359 const G4Track* theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack();
361 theIncomingTrack);
362}
@ eIonizedMolecule
CLHEP::Hep3Vector G4ThreeVector
@ fStopButAlive
int G4int
Definition G4Types.hh:85
static G4DNAChemistryManager * Instance()
void CreateWaterMolecule(ElectronicModification, G4int, const G4Track *)
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4Electron * Electron()
Definition G4Electron.cc:91
const G4Material * GetMaterial() const
const G4String & GetParticleName() const
virtual G4ThreeVector & SampleDirectionForShell(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, G4int shellID, const G4Material *)
G4VEmAngularDistribution * GetAngularDistribution()
G4double bindingEnergy(G4int A, G4int Z)

◆ SelectStationary()

void G4DNARuddIonisationExtendedModel::SelectStationary ( G4bool val)
inline

Definition at line 74 of file G4DNARuddIonisationExtendedModel.hh.

74{ statCode = val; };

Member Data Documentation

◆ fParticleChangeForGamma

G4ParticleChangeForGamma* G4DNARuddIonisationExtendedModel::fParticleChangeForGamma {nullptr}
protected

Definition at line 123 of file G4DNARuddIonisationExtendedModel.hh.

123{nullptr};

Referenced by Initialise(), and SampleSecondaries().


The documentation for this class was generated from the following files: