ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4hImpactIonisation.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4hImpactIonisation.hh
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"
63 #include "G4AtomicDeexcitation.hh"
65 
66 class G4VLowEnergyModel;
67 class G4VParticleChange;
69 class G4PhysicsTable;
71 class G4Track;
72 class G4Step;
73 
75 {
76 public: // 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 
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 
130  void SetNuclearStoppingPowerModel(const G4String& dedxTable)
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 
138  void SetNuclearStoppingOn() {nStopping = true;};
139  // This method switch on calculation of the nuclear stopping power.
140 
141  void SetNuclearStoppingOff() {nStopping = false;};
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 
157  G4VParticleChange* PostStepDoIt(const G4Track& track,
158  const G4Step& Step ) ;
159  // Simulation of delta-ray production.
160 
161  G4double ComputeDEDX(const G4ParticleDefinition* aParticle,
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 
182 protected:
183 
184 private:
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 
238 private:
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