Geant4-11
G4hImpactIonisation.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// ------------------------------------------------------------
28// G4hImpactIonisation
29//
30//
31// Author: Maria Grazia Pia (MariaGrazia.Pia@ge.infn.it)
32//
33// 08 Sep 2008 - MGP - Created (initially based on G4hLowEnergyIonisation)
34// Added PIXE capabilities
35// Partial clean-up of the implementation (more needed)
36// Calculation of MicroscopicCrossSection delegated to specialised class
37//
38// ------------------------------------------------------------
39
40// Class Description:
41// Impact Ionisation process of charged hadrons and ions
42// Initially based on G4hLowEnergyIonisation, to be subject to redesign
43// and further evolution of physics capabilities
44//
45// The physics model of G4hLowEnergyIonisation is described in
46// CERN-OPEN-99-121 and CERN-OPEN-99-300.
47//
48// Documentation available in:
49// M.G. Pia et al., PIXE Simulation With Geant4,
50// IEEE Trans. Nucl. Sci., vol. 56, no. 6, pp. 3614-3649, Dec. 2009.
51
52// ------------------------------------------------------------
53
54#ifndef G4HIMPACTIONISATION
55#define G4HIMPACTIONISATION 1
56
57#include <map>
59
60#include "globals.hh"
61#include "G4hRDEnergyLoss.hh"
62#include "G4DataVector.hh"
65
69class G4PhysicsTable;
71class G4Track;
72class G4Step;
73
75{
76public: // With description
77
78 G4hImpactIonisation(const G4String& processName = "hImpactIoni");
79 // The ionisation process for hadrons/ions to be include in the
80 // UserPhysicsList
81
83 // Destructor
84
86 // True for all charged hadrons/ions
87
88 void BuildPhysicsTable(const G4ParticleDefinition& aParticleType) ;
89 // Build physics table during initialisation
90
91 G4double GetMeanFreePath(const G4Track& track,
92 G4double previousStepSize,
94 // Return MeanFreePath until delta-electron production
95
96 void PrintInfoDefinition() const;
97 // Print out of the class parameters
98
100 // Definition of the boundary proton energy. For higher energies
101 // Bethe-Bloch formula is used, for lower energies a parametrisation
102 // of the energy losses is performed. Default is 2 MeV.
103
105 // Set of the boundary proton energy. For lower energies
106 // the Free Electron Gas model is used for the energy losses.
107 // Default is 1 keV.
108
110 // Set of the boundary antiproton energy. For higher energies
111 // Bethe-Bloch formula is used, for lower energies parametrisation
112 // of the energy losses is performed. Default is 2 MeV.
113
115 // Set of the boundary antiproton energy. For lower energies
116 // the Free Electron Gas model is used for the energy losses.
117 // Default is 1 keV.
118
120 G4double previousStepSize,
121 G4double currentMinimumStep,
122 G4double& currentSafety);
123 // Calculation of the step limit due to ionisation losses
124
126 const G4String& dedxTable);
127 // This method defines the electron ionisation parametrisation method
128 // via the name of the table. Default is "ICRU_49p".
129
131 {theNuclearTable = dedxTable; SetNuclearStoppingOn();};
132 // This method defines the nuclear ionisation parametrisation method
133 // via the name of the table. Default is "ICRU_49".
134
135 // ---- MGP ---- The following design of On/Off is nonsense; to be modified
136 // in a following design iteration
137
139 // This method switch on calculation of the nuclear stopping power.
140
142 // This method switch off calculation of the nuclear stopping power.
143
144 void SetBarkasOn() {theBarkas = true;};
145 // This method switch on calculation of the Barkas and Bloch effects.
146
147 void SetBarkasOff() {theBarkas = false;};
148 // This method switch off calculation of the Barkas and Bloch effects.
149
150 void SetPixe(const G4bool /* val */ ) {pixeIsActive = true;};
151 // This method switches atomic relaxation on/off; currently always on
152
153 G4VParticleChange* AlongStepDoIt(const G4Track& trackData ,
154 const G4Step& stepData ) ;
155 // Function to determine total energy deposition on the step
156
158 const G4Step& Step ) ;
159 // Simulation of delta-ray production.
160
162 const G4MaterialCutsCouple* couple,
163 G4double kineticEnergy);
164 // This method returns electronic dE/dx for protons or antiproton
165
167 // Set threshold energy for fluorescence
168
170 // Set threshold energy for Auger electron production
171
173 // Set Auger electron production flag on/off
174
175 // Accessors to configure PIXE
181
182protected:
183
184private:
185
186 void InitializeMe();
188 void BuildLossTable(const G4ParticleDefinition& aParticleType);
189 // void BuildDataForFluorescence(const G4ParticleDefinition& aParticleType);
190 void BuildLambdaTable(const G4ParticleDefinition& aParticleType);
192 {protonTable = dedxTable ;};
193 // This method defines the ionisation parametrisation method via its name
194
196 {antiprotonTable = dedxTable;};
197
199 G4double kineticEnergy,
200 G4double atomicNumber,
201 G4double deltaCutInEnergy) const;
202
204 const G4MaterialCutsCouple* couple);
205 // Function to determine StepLimit
206
208 G4double kineticEnergy) const;
209
211 G4double kineticEnergy) const;
212
214 G4double kineticEnergy,
215 G4double particleMass) const;
216 // This method returns average energy loss due to delta-rays emission with
217 // energy higher than the cut energy for given material.
218
220 G4double kineticEnergy) const;
221 // Function to compute the Barkas term for protons
222
224 G4double kineticEnergy,
225 G4double cSquare) const;
226 // Function to compute the Bloch term for protons
227
230 G4double meanLoss,
231 G4double step) const;
232 // Function to sample electronic losses
233
234 // hide assignment operator
237
238private:
239 // private data members ...............................
247
248 // std::map<G4int,G4double,std::less<G4int> > totalCrossSectionMap;
249
250 // name of parametrisation table of electron stopping power
254
255 // interval of parametrisation of electron stopping power
260
261 // flag of parametrisation of nucleus stopping power
264
270
271 const G4double paramStepLimit; // parameter limits the step at low energy
272
273 G4double fdEdx; // computed in GetContraints
277 G4double initialMass; // mass to calculate Lambda tables
279
287
289
290};
291
292
294 G4double,
295 G4double currentMinimumStep,
296 G4double&)
297{
299
300 // ---- MGP ---- The following line, taken as is from G4hLowEnergyIonisation,
301 // is meaningless: currentMinimumStep is passed by value,
302 // therefore any local modification to it has no effect
303
304 if ((step > 0.) && (step < currentMinimumStep)) currentMinimumStep = step ;
305
306 return step ;
307}
308
309
311{
312 // ---- MGP ---- Better criterion for applicability to be defined;
313 // now hard-coded particle mass > 0.1 * proton_mass
314
315 return (particle.GetPDGCharge() != 0.0 && particle.GetPDGMass() > CLHEP::proton_mass_c2*0.1);
316}
317
318#endif
319
320
321
322
323
324
325
326
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
G4double GetPDGCharge() const
Definition: G4Step.hh:62
const G4DynamicParticle * GetDynamicParticle() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
void BuildPhysicsTable(const G4ParticleDefinition &aParticleType)
void SetPixeCrossSectionM(const G4String &name)
void SetPixeCrossSectionL(const G4String &name)
void SetProtonElectronicStoppingPowerModel(const G4String &dedxTable)
G4double GetConstraints(const G4DynamicParticle *particle, const G4MaterialCutsCouple *couple)
void SetLowEnergyForProtonParametrisation(G4double energy)
void SetHighEnergyForAntiProtonParametrisation(G4double energy)
G4VLowEnergyModel * theIonChuFluctuationModel
void SetNuclearStoppingPowerModel(const G4String &dedxTable)
G4double DeltaRaysEnergy(const G4MaterialCutsCouple *couple, G4double kineticEnergy, G4double particleMass) const
G4VLowEnergyModel * theIonYangFluctuationModel
G4double ComputeDEDX(const G4ParticleDefinition *aParticle, const G4MaterialCutsCouple *couple, G4double kineticEnergy)
void BuildLambdaTable(const G4ParticleDefinition &aParticleType)
G4VLowEnergyModel * theNuclearStoppingModel
void SetLowEnergyForAntiProtonParametrisation(G4double energy)
void SetAntiProtonElectronicStoppingPowerModel(const G4String &dedxTable)
G4AtomicDeexcitation atomicDeexcitation
G4bool IsApplicable(const G4ParticleDefinition &)
void SetCutForAugerElectrons(G4double cut)
G4VLowEnergyModel * antiprotonModel
void BuildLossTable(const G4ParticleDefinition &aParticleType)
G4VLowEnergyModel * theIonEffChargeModel
G4VParticleChange * AlongStepDoIt(const G4Track &trackData, const G4Step &stepData)
G4hImpactIonisation & operator=(const G4hImpactIonisation &right)
G4PhysicsTable * theMeanFreePathTable
G4PixeCrossSectionHandler * pixeCrossSectionHandler
void SetPixeProjectileMaxEnergy(G4double energy)
G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &currentSafety)
void SetPixeProjectileMinEnergy(G4double energy)
G4double BlochTerm(const G4Material *material, G4double kineticEnergy, G4double cSquare) const
G4VLowEnergyModel * protonModel
void SetElectronicStoppingPowerModel(const G4ParticleDefinition *aParticle, const G4String &dedxTable)
G4double ProtonParametrisedDEDX(const G4MaterialCutsCouple *couple, G4double kineticEnergy) const
G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &Step)
void SetHighEnergyForProtonParametrisation(G4double energy)
G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, enum G4ForceCondition *condition)
G4double MicroscopicCrossSection(const G4ParticleDefinition &aParticleType, G4double kineticEnergy, G4double atomicNumber, G4double deltaCutInEnergy) const
void SetPixeCrossSectionK(const G4String &name)
const G4double paramStepLimit
G4VLowEnergyModel * betheBlochModel
void SetCutForSecondaryPhotons(G4double cut)
void ActivateAugerElectronProduction(G4bool val)
G4hImpactIonisation(const G4String &processName="hImpactIoni")
G4double BarkasTerm(const G4Material *material, G4double kineticEnergy) const
G4hImpactIonisation(const G4hImpactIonisation &)
void SetPixe(const G4bool)
G4double ElectronicLossFluctuation(const G4DynamicParticle *particle, const G4MaterialCutsCouple *material, G4double meanLoss, G4double step) const
G4double AntiProtonParametrisedDEDX(const G4MaterialCutsCouple *couple, G4double kineticEnergy) const
static constexpr double proton_mass_c2
G4double energy(const ThreeVector &p, const G4double m)
const char * name(G4int ptype)
string material
Definition: eplot.py:19