Geant4 Cross Reference |
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