Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/pii/include/G4hImpactIonisation.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/pii/include/G4hImpactIonisation.hh (Version 11.3.0) and /processes/electromagnetic/pii/include/G4hImpactIonisation.hh (Version 4.0.p1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 //                                                
 27 // -------------------------------------------    
 28 // G4hImpactIonisation                            
 29 //                                                
 30 //                                                
 31 // Author: Maria Grazia Pia (MariaGrazia.Pia@g    
 32 //                                                
 33 // 08 Sep 2008 - MGP - Created (initially base    
 34 //                     Added PIXE capabilities    
 35 //                     Partial clean-up of the    
 36 //                     Calculation of Microsco    
 37 //                                                
 38 // -------------------------------------------    
 39                                                   
 40 // Class Description:                             
 41 // Impact Ionisation process of charged hadron    
 42 // Initially based on G4hLowEnergyIonisation,     
 43 // and further evolution of physics capabiliti    
 44 //                                                
 45 // The physics model of G4hLowEnergyIonisation    
 46 // CERN-OPEN-99-121 and CERN-OPEN-99-300.         
 47 //                                                
 48 // Documentation available in:                    
 49 // M.G. Pia et al., PIXE Simulation With Geant    
 50 // IEEE Trans. Nucl. Sci., vol. 56, no. 6, pp.    
 51                                                   
 52 // -------------------------------------------    
 53                                                   
 54 #ifndef G4HIMPACTIONISATION                       
 55 #define G4HIMPACTIONISATION 1                     
 56                                                   
 57 #include <map>                                    
 58 #include <CLHEP/Units/PhysicalConstants.h>        
 59                                                   
 60 #include "globals.hh"                             
 61 #include "G4hRDEnergyLoss.hh"                     
 62 #include "G4DataVector.hh"                        
 63 #include "G4AtomicDeexcitation.hh"                
 64 #include "G4PixeCrossSectionHandler.hh"           
 65                                                   
 66 class G4VLowEnergyModel;                          
 67 class G4VParticleChange;                          
 68 class G4ParticleDefinition;                       
 69 class G4PhysicsTable;                             
 70 class G4MaterialCutsCouple;                       
 71 class G4Track;                                    
 72 class G4Step;                                     
 73                                                   
 74 class G4hImpactIonisation : public G4hRDEnergy    
 75 {                                                 
 76 public: // With description                       
 77                                                   
 78   G4hImpactIonisation(const G4String& processN    
 79   // The ionisation process for hadrons/ions t    
 80   // UserPhysicsList                              
 81                                                   
 82   ~G4hImpactIonisation();                         
 83   // Destructor                                   
 84                                                   
 85   G4bool IsApplicable(const G4ParticleDefiniti    
 86   // True for all charged hadrons/ions            
 87                                                   
 88   void BuildPhysicsTable(const G4ParticleDefin    
 89   // Build physics table during initialisation    
 90                                                   
 91   G4double GetMeanFreePath(const G4Track& trac    
 92          G4double previousStepSize,               
 93          enum G4ForceCondition* condition );      
 94   // Return MeanFreePath until delta-electron     
 95                                                   
 96   void PrintInfoDefinition() const;               
 97   // Print out of the class parameters            
 98                                                   
 99   void SetHighEnergyForProtonParametrisation(G    
100   // Definition of the boundary proton energy.    
101   // Bethe-Bloch formula is used, for lower en    
102   // of the energy losses is performed. Defaul    
103                                                   
104   void SetLowEnergyForProtonParametrisation(G4    
105   // Set of the boundary proton energy. For lo    
106   // the Free Electron Gas model is used for t    
107   // Default is 1 keV.                            
108                                                   
109   void SetHighEnergyForAntiProtonParametrisati    
110   // Set of the boundary antiproton energy. Fo    
111   // Bethe-Bloch formula is used, for lower en    
112   // of the energy losses is performed. Defaul    
113                                                   
114   void SetLowEnergyForAntiProtonParametrisatio    
115   // Set of the boundary antiproton energy. Fo    
116   // the Free Electron Gas model is used for t    
117   // Default is 1 keV.                            
118                                                   
119   G4double GetContinuousStepLimit(const G4Trac    
120           G4double previousStepSize,              
121           G4double currentMinimumStep,            
122           G4double& currentSafety);               
123   // Calculation of the step limit due to ioni    
124                                                   
125   void SetElectronicStoppingPowerModel(const G    
126                                        const G    
127   // This method defines the electron ionisati    
128   // via the name of the table. Default is "IC    
129                                                   
130   void SetNuclearStoppingPowerModel(const G4St    
131   {theNuclearTable = dedxTable; SetNuclearStop    
132   // This method defines the nuclear ionisatio    
133   // via the name of the table. Default is "IC    
134                                                   
135   // ---- MGP ---- The following design of On/    
136   // in a following design iteration              
137                                                   
138   void SetNuclearStoppingOn() {nStopping = tru    
139   // This method switch on calculation of the     
140                                                   
141   void SetNuclearStoppingOff() {nStopping = fa    
142   // This method switch off calculation of the    
143                                                   
144   void SetBarkasOn() {theBarkas = true;};         
145   // This method switch on calculation of the     
146                                                   
147   void SetBarkasOff() {theBarkas = false;};       
148   // This method switch off calculation of the    
149                                                   
150   void SetPixe(const G4bool /* val */ ) {pixeI    
151   // This method switches atomic relaxation on    
152                                                   
153   G4VParticleChange* AlongStepDoIt(const G4Tra    
154                                    const G4Ste    
155   // Function to determine total energy deposi    
156                                                   
157   G4VParticleChange* PostStepDoIt(const G4Trac    
158           const G4Step& Step  ) ;                 
159   // Simulation of delta-ray production.          
160                                                   
161   G4double ComputeDEDX(const G4ParticleDefinit    
162                        const G4MaterialCutsCou    
163            G4double kineticEnergy);               
164   // This method returns electronic dE/dx for     
165                                                   
166   void SetCutForSecondaryPhotons(G4double cut)    
167   // Set threshold energy for fluorescence        
168                                                   
169   void SetCutForAugerElectrons(G4double cut);     
170   // Set threshold energy for Auger electron p    
171                                                   
172   void ActivateAugerElectronProduction(G4bool     
173   // Set Auger electron production flag on/off    
174                                                   
175   // Accessors to configure PIXE                  
176   void SetPixeCrossSectionK(const G4String& na    
177   void SetPixeCrossSectionL(const G4String& na    
178   void SetPixeCrossSectionM(const G4String& na    
179   void SetPixeProjectileMinEnergy(G4double ene    
180   void SetPixeProjectileMaxEnergy(G4double ene    
181                                                   
182 protected:                                        
183                                                   
184 private:                                          
185                                                   
186   void InitializeMe();                            
187   void InitializeParametrisation();               
188   void BuildLossTable(const G4ParticleDefiniti    
189   // void BuildDataForFluorescence(const G4Par    
190   void BuildLambdaTable(const G4ParticleDefini    
191   void SetProtonElectronicStoppingPowerModel(c    
192   {protonTable = dedxTable ;};                    
193   // This method defines the ionisation parame    
194                                                   
195   void SetAntiProtonElectronicStoppingPowerMod    
196   {antiprotonTable = dedxTable;};                 
197                                                   
198   G4double MicroscopicCrossSection(const G4Par    
199            G4double kineticEnergy,                
200            G4double atomicNumber,                 
201            G4double deltaCutInEnergy) const;      
202                                                   
203   G4double GetConstraints(const G4DynamicParti    
204                           const G4MaterialCuts    
205   // Function to determine StepLimit              
206                                                   
207   G4double ProtonParametrisedDEDX(const G4Mate    
208           G4double kineticEnergy) const;          
209                                                   
210   G4double AntiProtonParametrisedDEDX(const G4    
211               G4double kineticEnergy) const;      
212                                                   
213   G4double DeltaRaysEnergy(const G4MaterialCut    
214          G4double kineticEnergy,                  
215          G4double particleMass) const;            
216   // This method returns average energy loss d    
217   // energy higher than the cut energy for giv    
218                                                   
219   G4double BarkasTerm(const G4Material* materi    
220           G4double kineticEnergy) const;          
221   // Function to compute the Barkas term for p    
222                                                   
223   G4double BlochTerm(const G4Material* materia    
224          G4double kineticEnergy,                  
225          G4double cSquare) const;                 
226   // Function to compute the Bloch term for pr    
227                                                   
228   G4double ElectronicLossFluctuation(const G4D    
229                                      const G4M    
230              G4double meanLoss,                   
231              G4double step) const;                
232   // Function to sample electronic losses         
233                                                   
234   // hide assignment operator                     
235   G4hImpactIonisation & operator=(const G4hImp    
236   G4hImpactIonisation(const G4hImpactIonisatio    
237                                                   
238 private:                                          
239   //  private data members ...................    
240   G4VLowEnergyModel* betheBlochModel;             
241   G4VLowEnergyModel* protonModel;                 
242   G4VLowEnergyModel* antiprotonModel;             
243   G4VLowEnergyModel* theIonEffChargeModel;        
244   G4VLowEnergyModel* theNuclearStoppingModel;     
245   G4VLowEnergyModel* theIonChuFluctuationModel    
246   G4VLowEnergyModel* theIonYangFluctuationMode    
247                                                   
248   // std::map<G4int,G4double,std::less<G4int>     
249                                                   
250   // name of parametrisation table of electron    
251   G4String protonTable;                           
252   G4String antiprotonTable;                       
253   G4String theNuclearTable;                       
254                                                   
255   // interval of parametrisation of electron s    
256   G4double protonLowEnergy;                       
257   G4double protonHighEnergy;                      
258   G4double antiprotonLowEnergy;                   
259   G4double antiprotonHighEnergy;                  
260                                                   
261   // flag of parametrisation of nucleus stoppi    
262   G4bool nStopping;                               
263   G4bool theBarkas;                               
264                                                   
265   G4DataVector cutForDelta;                       
266   G4DataVector cutForGamma;                       
267   G4double minGammaEnergy;                        
268   G4double minElectronEnergy;                     
269   G4PhysicsTable* theMeanFreePathTable;           
270                                                   
271   const G4double paramStepLimit; // parameter     
272                                                   
273   G4double fdEdx;        // computed in GetCon    
274   G4double fRangeNow ;   //                       
275   G4double charge;       //                       
276   G4double chargeSquare; //                       
277   G4double initialMass;  // mass to calculate     
278   G4double fBarkas;                               
279                                                   
280   G4PixeCrossSectionHandler* pixeCrossSectionH    
281   G4AtomicDeexcitation atomicDeexcitation;        
282   G4String modelK;                                
283   G4String modelL;                                
284   G4String modelM;                                
285   G4double eMinPixe;                              
286   G4double eMaxPixe;                              
287                                                   
288   G4bool pixeIsActive;                            
289                                                   
290 };                                                
291                                                   
292                                                   
293 inline G4double G4hImpactIonisation::GetContin    
294                   G4double,                       
295                   G4double currentMinimumStep,    
296                   G4double&)                      
297 {                                                 
298   G4double step = GetConstraints(track.GetDyna    
299                                                   
300   // ---- MGP ---- The following line, taken a    
301   // is meaningless: currentMinimumStep is pas    
302   // therefore any local modification to it ha    
303                                                   
304   if ((step > 0.) && (step < currentMinimumSte    
305                                                   
306   return step ;                                   
307 }                                                 
308                                                   
309                                                   
310 inline G4bool G4hImpactIonisation::IsApplicabl    
311 {                                                 
312   // ---- MGP ---- Better criterion for applic    
313   // now hard-coded particle mass > 0.1 * prot    
314                                                   
315   return (particle.GetPDGCharge() != 0.0 && pa    
316 }                                                 
317                                                   
318 #endif                                            
319                                                   
320                                                   
321                                                   
322                                                   
323                                                   
324                                                   
325                                                   
326                                                   
327