Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // >> 26 // $Id$ >> 27 // 26 // 28 // 27 // ------------------------------------------- 29 // ------------------------------------------------------------------- 28 // 30 // 29 // GEANT4 Class header file 31 // GEANT4 Class header file 30 // 32 // 31 // 33 // 32 // File name: G4EmCalculator 34 // File name: G4EmCalculator 33 // 35 // 34 // Author: Vladimir Ivanchenko 36 // Author: Vladimir Ivanchenko 35 // 37 // 36 // Creation date: 27.06.2004 38 // Creation date: 27.06.2004 37 // 39 // 38 // Modifications: 40 // Modifications: 39 // 17.11.2004 Change signature of methods, add 41 // 17.11.2004 Change signature of methods, add new methods (V.Ivanchenko) 40 // 11.01.2006 Add GetCSDARange (V.Ivanchenko) 42 // 11.01.2006 Add GetCSDARange (V.Ivanchenko) 41 // 26.01.2006 Rename GetRange -> GetRangeFromR 43 // 26.01.2006 Rename GetRange -> GetRangeFromRestricteDEDX (V.Ivanchenko) 42 // 22.03.2006 Add ComputeElectronicDEDX and Co 44 // 22.03.2006 Add ComputeElectronicDEDX and ComputeTotalDEDX (V.Ivanchenko) 43 // 29.09.2006 Add member loweModel (V.Ivanchen 45 // 29.09.2006 Add member loweModel (V.Ivanchenko) 44 // 15.03.2007 Add ComputeEnergyCutFromRangeCut 46 // 15.03.2007 Add ComputeEnergyCutFromRangeCut methods (V.Ivanchenko) 45 // 02.02.2018 Add parameter to FindLambdaTable << 46 // 47 // 47 // Class Description: 48 // Class Description: 48 // 49 // 49 // Provide access to dE/dx and cross sections 50 // Provide access to dE/dx and cross sections 50 51 51 // ------------------------------------------- 52 // ------------------------------------------------------------------- 52 // 53 // 53 54 54 #ifndef G4EmCalculator_h 55 #ifndef G4EmCalculator_h 55 #define G4EmCalculator_h 1 56 #define G4EmCalculator_h 1 56 57 57 #include <vector> 58 #include <vector> 58 #include "globals.hh" 59 #include "globals.hh" >> 60 #include "G4DataVector.hh" >> 61 #include "G4DynamicParticle.hh" 59 #include "G4VAtomDeexcitation.hh" 62 #include "G4VAtomDeexcitation.hh" 60 63 61 class G4LossTableManager; 64 class G4LossTableManager; 62 class G4NistManager; << 63 class G4Material; 65 class G4Material; 64 class G4MaterialCutsCouple; 66 class G4MaterialCutsCouple; 65 class G4ParticleDefinition; 67 class G4ParticleDefinition; 66 class G4PhysicsTable; 68 class G4PhysicsTable; 67 class G4VEmModel; 69 class G4VEmModel; 68 class G4VEnergyLossProcess; 70 class G4VEnergyLossProcess; 69 class G4VEmProcess; 71 class G4VEmProcess; 70 class G4VMultipleScattering; 72 class G4VMultipleScattering; 71 class G4VProcess; 73 class G4VProcess; 72 class G4ionEffectiveCharge; 74 class G4ionEffectiveCharge; 73 class G4Region; 75 class G4Region; 74 class G4Element; 76 class G4Element; 75 class G4EmCorrections; 77 class G4EmCorrections; 76 class G4EmParameters; << 77 class G4IonTable; << 78 78 79 class G4EmCalculator 79 class G4EmCalculator 80 { 80 { 81 81 82 public: 82 public: 83 83 84 G4EmCalculator(); 84 G4EmCalculator(); 85 85 86 ~G4EmCalculator(); 86 ~G4EmCalculator(); 87 87 88 //========================================== 88 //=========================================================================== 89 // Methods to access precalculated dE/dx and 89 // Methods to access precalculated dE/dx and cross sections 90 // Materials should exist in the list of the 90 // Materials should exist in the list of the G4MaterialCutsCouple 91 //========================================== 91 //=========================================================================== 92 92 93 G4double GetDEDX(G4double kinEnergy, const G 93 G4double GetDEDX(G4double kinEnergy, const G4ParticleDefinition*, 94 const G4Material*, 94 const G4Material*, 95 const G4Region* r = nullptr << 95 const G4Region* r = 0); 96 inline G4double GetDEDX(G4double kinEnergy, << 96 G4double GetDEDX(G4double kinEnergy, const G4String& part, 97 const G4String& mat, 97 const G4String& mat, 98 const G4String& regname = " << 98 const G4String& s = "world"); 99 99 100 G4double GetRangeFromRestricteDEDX(G4double 100 G4double GetRangeFromRestricteDEDX(G4double kinEnergy, 101 const G4ParticleDefinition*, 101 const G4ParticleDefinition*, 102 const G4Material*, 102 const G4Material*, 103 const G4Region* r = nullptr); << 103 const G4Region* r = 0); 104 inline G4double GetRangeFromRestricteDEDX(G4 << 104 G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4String& part, 105 const G4String& part, << 105 const G4String& mat, 106 const G4String& mat, << 106 const G4String& s = "world"); 107 const G4String& regname = "world << 108 107 109 G4double GetCSDARange(G4double kinEnergy, co 108 G4double GetCSDARange(G4double kinEnergy, const G4ParticleDefinition*, 110 const G4Material*, 109 const G4Material*, 111 const G4Region* r = nullptr); << 110 const G4Region* r = 0); 112 inline G4double GetCSDARange(G4double kinEne << 111 G4double GetCSDARange(G4double kinEnergy, const G4String& part, 113 const G4String& mat, 112 const G4String& mat, 114 const G4String& regname = "world"); << 113 const G4String& s = "world"); 115 114 116 G4double GetRange(G4double kinEnergy, const 115 G4double GetRange(G4double kinEnergy, const G4ParticleDefinition*, 117 const G4Material*, 116 const G4Material*, 118 const G4Region* r = nullptr); << 117 const G4Region* r = 0); 119 inline G4double GetRange(G4double kinEnergy, << 118 G4double GetRange(G4double kinEnergy, const G4String& part, 120 const G4String& mat, 119 const G4String& mat, 121 const G4String& regname = "world"); << 120 const G4String& s = "world"); 122 121 123 G4double GetKinEnergy(G4double range, const 122 G4double GetKinEnergy(G4double range, const G4ParticleDefinition*, 124 const G4Material*, 123 const G4Material*, 125 const G4Region* r = nullptr); << 124 const G4Region* r = 0); 126 inline G4double GetKinEnergy(G4double range, << 125 G4double GetKinEnergy(G4double range, const G4String& part, 127 const G4String& mat, 126 const G4String& mat, 128 const G4String& regname = "world"); << 127 const G4String& s = "world"); 129 128 130 G4double GetCrossSectionPerVolume( 129 G4double GetCrossSectionPerVolume( 131 G4double kinEnergy, const G 130 G4double kinEnergy, const G4ParticleDefinition*, 132 const G4String& processName 131 const G4String& processName, const G4Material*, 133 const G4Region* r = nullptr); << 132 const G4Region* r = 0); 134 inline G4double GetCrossSectionPerVolume( << 133 G4double GetCrossSectionPerVolume( 135 G4double kinEnergy, const G 134 G4double kinEnergy, const G4String& part, const G4String& proc, 136 const G4String& mat, const << 135 const G4String& mat, const G4String& s = "world"); 137 136 138 G4double GetShellIonisationCrossSectionPerAt 137 G4double GetShellIonisationCrossSectionPerAtom( 139 const G4String& part, G4int 138 const G4String& part, G4int Z, 140 G4AtomicShellEnumerator shell, 139 G4AtomicShellEnumerator shell, 141 G4double kinEnergy); 140 G4double kinEnergy); 142 141 143 G4double GetMeanFreePath(G4double kinEnergy, 142 G4double GetMeanFreePath(G4double kinEnergy, const G4ParticleDefinition*, 144 const G4String& processName, const G << 143 const G4String& processName, const G4Material*, 145 const G4Region* r = nullptr); << 144 const G4Region* r = 0); 146 inline G4double GetMeanFreePath(G4double kin << 145 G4double GetMeanFreePath(G4double kinEnergy, const G4String& part, 147 const G4String& proc, const G4String << 146 const G4String& proc, 148 const G4String& regname = "world"); << 147 const G4String& mat, const G4String& s = "world"); 149 148 150 void PrintDEDXTable(const G4ParticleDefiniti 149 void PrintDEDXTable(const G4ParticleDefinition*); 151 150 152 void PrintRangeTable(const G4ParticleDefinit 151 void PrintRangeTable(const G4ParticleDefinition*); 153 152 154 void PrintInverseRangeTable(const G4Particle 153 void PrintInverseRangeTable(const G4ParticleDefinition*); 155 154 156 //========================================== 155 //=========================================================================== 157 // Methods to calculate dE/dx and cross sect 156 // Methods to calculate dE/dx and cross sections "on fly" 158 // Existing tables and G4MaterialCutsCouples 157 // Existing tables and G4MaterialCutsCouples are not used 159 //========================================== 158 //=========================================================================== 160 159 161 G4double ComputeDEDX(G4double kinEnergy, con 160 G4double ComputeDEDX(G4double kinEnergy, const G4ParticleDefinition*, 162 const G4String& process 161 const G4String& processName, const G4Material*, 163 G4double cut = DBL_MAX); 162 G4double cut = DBL_MAX); 164 inline G4double ComputeDEDX(G4double kinEner << 163 G4double ComputeDEDX(G4double kinEnergy, const G4String& part, 165 const G4String& proc, 164 const G4String& proc, 166 const G4String& mat, G4 165 const G4String& mat, G4double cut = DBL_MAX); 167 166 168 G4double ComputeElectronicDEDX(G4double kinE 167 G4double ComputeElectronicDEDX(G4double kinEnergy, 169 const G4ParticleDefinition*, 168 const G4ParticleDefinition*, 170 const G4Material* mat, G4double cut = 169 const G4Material* mat, G4double cut = DBL_MAX); 171 inline G4double ComputeElectronicDEDX(G4doub << 170 G4double ComputeElectronicDEDX(G4double kinEnergy, const G4String& part, 172 const G4String& mat, G4double cut = D 171 const G4String& mat, G4double cut = DBL_MAX); 173 172 174 G4double ComputeDEDXForCutInRange(G4double k << 175 const G4ParticleDefinition*, << 176 const G4Material* mat, G4double ra << 177 inline G4double ComputeDEDXForCutInRange(G4d << 178 const G4String& mat, << 179 G4double rangecut = DBL_MAX); << 180 << 181 G4double ComputeNuclearDEDX(G4double kinEner 173 G4double ComputeNuclearDEDX(G4double kinEnergy, const G4ParticleDefinition*, 182 const G4Material*); 174 const G4Material*); 183 inline G4double ComputeNuclearDEDX(G4double << 175 G4double ComputeNuclearDEDX(G4double kinEnergy, const G4String& part, 184 const G4String& mat); 176 const G4String& mat); 185 177 186 G4double ComputeTotalDEDX(G4double kinEnergy 178 G4double ComputeTotalDEDX(G4double kinEnergy, const G4ParticleDefinition*, 187 const G4Material*, G4double cut = DB 179 const G4Material*, G4double cut = DBL_MAX); 188 inline G4double ComputeTotalDEDX(G4double ki << 180 G4double ComputeTotalDEDX(G4double kinEnergy, const G4String& part, 189 const G4String& mat, G4double cut = 181 const G4String& mat, G4double cut = DBL_MAX); 190 182 191 G4double ComputeCrossSectionPerVolume( 183 G4double ComputeCrossSectionPerVolume( 192 G4double kinEnergy, con 184 G4double kinEnergy, const G4ParticleDefinition*, 193 const G4String& process 185 const G4String& processName, const G4Material*, 194 G4double cut = 0.0); 186 G4double cut = 0.0); 195 inline G4double ComputeCrossSectionPerVolume << 187 G4double ComputeCrossSectionPerVolume( 196 G4double kinEnergy, con 188 G4double kinEnergy, const G4String& part, 197 const G4String& proc, 189 const G4String& proc, 198 const G4String& mat, G4 190 const G4String& mat, G4double cut = 0.0); 199 191 200 G4double ComputeCrossSectionPerAtom( 192 G4double ComputeCrossSectionPerAtom( 201 G4double kinEnergy, con 193 G4double kinEnergy, const G4ParticleDefinition*, 202 const G4String& process 194 const G4String& processName, G4double Z, G4double A, 203 G4double cut = 0.0); 195 G4double cut = 0.0); 204 inline G4double ComputeCrossSectionPerAtom( << 196 G4double ComputeCrossSectionPerAtom( 205 G4double kinEnergy, con << 206 const G4String& process << 207 G4double cut = 0.0); << 208 << 209 G4double ComputeCrossSectionPerShell( << 210 G4double kinEnergy, con << 211 const G4String& process << 212 G4double cut = 0.0); << 213 inline G4double ComputeCrossSectionPerShell( << 214 G4double kinEnergy, con 197 G4double kinEnergy, const G4String& part, 215 const G4String& process 198 const G4String& processName, const G4Element*, 216 G4int shellIdx, << 217 G4double cut = 0.0); 199 G4double cut = 0.0); 218 200 219 G4double ComputeGammaAttenuationLength(G4dou 201 G4double ComputeGammaAttenuationLength(G4double kinEnergy, 220 const G4Material*); 202 const G4Material*); 221 203 222 G4double ComputeShellIonisationCrossSectionP 204 G4double ComputeShellIonisationCrossSectionPerAtom( 223 const G4String& part, G4int 205 const G4String& part, G4int Z, 224 G4AtomicShellEnumerator shell, 206 G4AtomicShellEnumerator shell, 225 G4double kinEnergy, 207 G4double kinEnergy, 226 const G4Material* mat = nul << 208 const G4Material* mat = 0); 227 209 228 G4double ComputeMeanFreePath( 210 G4double ComputeMeanFreePath( 229 G4double kinEnergy, con 211 G4double kinEnergy, const G4ParticleDefinition*, 230 const G4String& process 212 const G4String& processName, const G4Material*, 231 G4double cut = 0.0); 213 G4double cut = 0.0); 232 inline G4double ComputeMeanFreePath( << 214 G4double ComputeMeanFreePath( 233 G4double kinEnergy, con 215 G4double kinEnergy, const G4String&, const G4String&, 234 const G4String& process 216 const G4String& processName, G4double cut = 0.0); 235 217 236 G4double ComputeEnergyCutFromRangeCut( 218 G4double ComputeEnergyCutFromRangeCut( 237 G4double range, const G 219 G4double range, const G4ParticleDefinition*, 238 const G4Material*); 220 const G4Material*); 239 inline G4double ComputeEnergyCutFromRangeCut << 221 G4double ComputeEnergyCutFromRangeCut( 240 G4double range, const G 222 G4double range, const G4String&, 241 const G4String&); 223 const G4String&); 242 224 243 //========================================== 225 //=========================================================================== 244 // Methods to access particles, materials, r << 226 // Methods to access particles, materials, regions 245 //========================================== 227 //=========================================================================== 246 228 247 const G4ParticleDefinition* FindParticle(con 229 const G4ParticleDefinition* FindParticle(const G4String&); 248 230 249 const G4ParticleDefinition* FindIon(G4int Z, 231 const G4ParticleDefinition* FindIon(G4int Z, G4int A); 250 232 251 const G4Material* FindMaterial(const G4Strin 233 const G4Material* FindMaterial(const G4String&); 252 234 253 const G4Region* FindRegion(const G4String&); 235 const G4Region* FindRegion(const G4String&); 254 236 255 const G4MaterialCutsCouple* FindCouple(const 237 const G4MaterialCutsCouple* FindCouple(const G4Material*, 256 const G4Region* r = nullptr); << 238 const G4Region* r = 0); 257 << 258 G4VProcess* FindProcess(const G4ParticleDefi << 259 const G4String& processName); << 260 << 261 void SetupMaterial(const G4Material*); << 262 << 263 void SetupMaterial(const G4String&); << 264 239 265 void SetVerbose(G4int val); 240 void SetVerbose(G4int val); 266 241 267 inline void SetApplySmoothing(G4int val); << 242 //=========================================================================== 268 << 243 // Private methods 269 // hide copy and assign << 244 //=========================================================================== 270 G4EmCalculator & operator=(const G4EmCalcul << 271 G4EmCalculator(const G4EmCalculator&) = del << 272 245 273 private: 246 private: 274 247 275 G4bool UpdateParticle(const G4ParticleDefini 248 G4bool UpdateParticle(const G4ParticleDefinition*, G4double kinEnergy); 276 249 277 G4bool UpdateCouple(const G4Material*, G4dou 250 G4bool UpdateCouple(const G4Material*, G4double cut); 278 251 279 void FindLambdaTable(const G4ParticleDefinit 252 void FindLambdaTable(const G4ParticleDefinition*, 280 const G4String& process << 253 const G4String& processName, 281 G4double kinEnergy, G4i << 254 G4double kinEnergy); 282 255 283 G4bool FindEmModel(const G4ParticleDefinitio 256 G4bool FindEmModel(const G4ParticleDefinition*, 284 const G4String& processNa 257 const G4String& processName, 285 G4double kinEnergy) 258 G4double kinEnergy); 286 259 >> 260 G4VEnergyLossProcess* FindEnergyLossProcess(const G4ParticleDefinition*); >> 261 287 G4VEnergyLossProcess* FindEnLossProcess(cons 262 G4VEnergyLossProcess* FindEnLossProcess(const G4ParticleDefinition*, 288 const G4String& processName); 263 const G4String& processName); 289 264 290 G4VEmProcess* FindDiscreteProcess(const G4Pa 265 G4VEmProcess* FindDiscreteProcess(const G4ParticleDefinition*, 291 const G4String& processName); 266 const G4String& processName); 292 267 293 G4VMultipleScattering* FindMscProcess(const 268 G4VMultipleScattering* FindMscProcess(const G4ParticleDefinition*, 294 const G4String& processName); 269 const G4String& processName); 295 270 296 G4bool ActiveForParticle(const G4ParticleDef 271 G4bool ActiveForParticle(const G4ParticleDefinition* part, 297 G4VProcess* proc); 272 G4VProcess* proc); 298 273 299 void CheckMaterial(G4int Z); << 274 G4EmCalculator & operator=(const G4EmCalculator &right); >> 275 G4EmCalculator(const G4EmCalculator&); >> 276 >> 277 std::vector<const G4Material*> localMaterials; >> 278 std::vector<const G4MaterialCutsCouple*> localCouples; 300 279 301 G4EmParameters* theParameters; << 302 G4LossTableManager* manager; 280 G4LossTableManager* manager; 303 G4NistManager* nist; << 304 G4IonTable* ionTable; << 305 G4EmCorrections* corr; 281 G4EmCorrections* corr; >> 282 G4DataVector localCuts; >> 283 G4int nLocalMaterials; >> 284 >> 285 G4int verbose; 306 286 307 // cache << 287 // cash 308 const G4MaterialCutsCouple* currentCouple = << 288 G4int currentCoupleIndex; 309 const G4Material* currentMaterial << 289 const G4MaterialCutsCouple* currentCouple; 310 const G4Material* cutMaterial = n << 290 const G4Material* currentMaterial; 311 const G4ParticleDefinition* currentParticle << 291 const G4ParticleDefinition* currentParticle; 312 const G4ParticleDefinition* lambdaParticle << 292 const G4ParticleDefinition* lambdaParticle; 313 const G4ParticleDefinition* baseParticle = << 293 const G4ParticleDefinition* baseParticle; 314 const G4PhysicsTable* currentLambda = << 294 const G4PhysicsTable* currentLambda; 315 << 295 G4VEmModel* currentModel; 316 G4VEmModel* currentModel = << 296 G4VEmModel* loweModel; 317 G4VEmModel* loweModel = nul << 297 G4VEnergyLossProcess* currentProcess; 318 G4VEnergyLossProcess* currentProcess << 319 G4VProcess* curProcess = nu << 320 G4DynamicParticle* dynParticle = n << 321 298 322 const G4ParticleDefinition* theGenericIon; 299 const G4ParticleDefinition* theGenericIon; 323 G4ionEffectiveCharge* ionEffCharge; 300 G4ionEffectiveCharge* ionEffCharge; >> 301 G4DynamicParticle dynParticle; 324 302 325 G4double currentCut = DB << 303 G4String currentName; 326 G4double chargeSquare = << 304 G4String lambdaName; 327 G4double massRatio = 1.0 << 305 G4double currentCut; 328 G4double mass = 0; << 306 G4double chargeSquare; 329 G4double cutenergy[3]; << 307 G4double massRatio; 330 << 308 G4double mass; 331 G4int currentCoupleIn << 309 G4bool isIon; 332 G4int nLocalMaterials << 310 G4bool isApplicable; 333 G4int verbose = 0; << 311 334 << 312 G4String currentParticleName; 335 G4bool isIon = false; << 313 G4String currentMaterialName; 336 G4bool isApplicable = << 314 G4String currentProcessName; 337 G4bool applySmoothing << 338 << 339 std::vector<const G4Material*> lo << 340 std::vector<const G4MaterialCutsCouple*> lo << 341 std::vector<G4double> lo << 342 << 343 G4String currentName = " << 344 G4String lambdaName = "" << 345 G4String currentParticle << 346 G4String currentMaterial << 347 G4String currentProcessN << 348 }; 315 }; 349 316 350 //....oooOO0OOooo.......oooOO0OOooo........ooo 317 //....oooOO0OOooo.......oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 351 //....oooOO0OOooo........oooOO0OOooo........oo << 352 << 353 inline << 354 G4double G4EmCalculator::GetDEDX(G4double kinE << 355 const G4Strin << 356 { << 357 return GetDEDX(kinEnergy,FindParticle(partic << 358 FindMaterial(material),FindRegion(reg)); << 359 } << 360 << 361 //....oooOO0OOooo........oooOO0OOooo........oo << 362 << 363 inline << 364 G4double G4EmCalculator::GetRangeFromRestricte << 365 const G4String& particle, << 366 const G4String& material, << 367 const G4String& reg) << 368 { << 369 return GetRangeFromRestricteDEDX(kinEnergy,F << 370 FindMaterial(material),FindRegion(r << 371 } << 372 << 373 //....oooOO0OOooo........oooOO0OOooo........oo << 374 << 375 inline << 376 G4double G4EmCalculator::GetCSDARange(G4double << 377 const G4String& particle, << 378 const G4String& material, << 379 const G4String& reg) << 380 { << 381 return GetCSDARange(kinEnergy,FindParticle(p << 382 FindMaterial(material),FindRegion(reg)); << 383 } << 384 << 385 //....oooOO0OOooo........oooOO0OOooo........oo << 386 << 387 inline << 388 G4double G4EmCalculator::GetRange(G4double kin << 389 const G4String& particle, << 390 const G4String& material, << 391 const G4String& reg) << 392 { << 393 return GetRange(kinEnergy,FindParticle(parti << 394 FindMaterial(material),FindRegion(reg)); << 395 } << 396 << 397 //....oooOO0OOooo........oooOO0OOooo........oo << 398 << 399 inline << 400 G4double G4EmCalculator::GetKinEnergy(G4double << 401 const G4 << 402 { << 403 return GetKinEnergy(range,FindParticle(parti << 404 FindMaterial(material),FindRegion(re << 405 } << 406 << 407 //....oooOO0OOooo........oooOO0OOooo........oo << 408 << 409 inline << 410 G4double G4EmCalculator::GetCrossSectionPerVol << 411 co << 412 const G4String& processName, << 413 co << 414 const G4String& reg) << 415 { << 416 return GetCrossSectionPerVolume(kinEnergy,Fi << 417 FindMaterial << 418 } << 419 << 420 //....oooOO0OOooo........oooOO0OOooo........oo << 421 << 422 inline << 423 G4double G4EmCalculator::GetMeanFreePath(G4dou << 424 const << 425 const G4String& processName, << 426 const << 427 const G4String& reg) << 428 { << 429 return GetMeanFreePath(kinEnergy,FindParticl << 430 FindMaterial(material << 431 } << 432 << 433 //....oooOO0OOooo........oooOO0OOooo........oo << 434 << 435 inline G4double << 436 G4EmCalculator::ComputeElectronicDEDX(G4double << 437 const G4String& mat, G4double cu << 438 { << 439 return << 440 ComputeElectronicDEDX(kinEnergy,FindPartic << 441 } << 442 << 443 //....oooOO0OOooo........oooOO0OOooo........oo << 444 << 445 inline G4double << 446 G4EmCalculator::ComputeDEDXForCutInRange(G4dou << 447 const G4String& part, << 448 const G4String& mat, << 449 G4double rangecut) << 450 { << 451 return ComputeDEDXForCutInRange(kinEnergy,Fi << 452 FindMaterial(mat), rangecut); << 453 } << 454 << 455 //....oooOO0OOooo........oooOO0OOooo........oo << 456 << 457 inline << 458 G4double G4EmCalculator::ComputeTotalDEDX(G4do << 459 const G4String& part, << 460 const G4String& mat, << 461 G4double cut) << 462 { << 463 return ComputeTotalDEDX(kinEnergy,FindPartic << 464 } << 465 << 466 //....oooOO0OOooo........oooOO0OOooo........oo << 467 << 468 inline << 469 G4double G4EmCalculator::ComputeDEDX(G4double << 470 const G4S << 471 const G4String& processName, << 472 const G4S << 473 G4d << 474 { << 475 return ComputeDEDX(kinEnergy,FindParticle(pa << 476 FindMaterial(material),cu << 477 } << 478 << 479 //....oooOO0OOooo........oooOO0OOooo........oo << 480 << 481 inline << 482 G4double G4EmCalculator::ComputeNuclearDEDX(G4 << 483 const G4 << 484 const G4String& material) << 485 { << 486 return ComputeNuclearDEDX(kinEnergy,FindPart << 487 FindMaterial(material)); << 488 } << 489 << 490 //....oooOO0OOooo........oooOO0OOooo........oo << 491 << 492 inline << 493 G4double G4EmCalculator::ComputeCrossSectionPe << 494 << 495 c << 496 const G4String& processName, << 497 c << 498 << 499 { << 500 return ComputeCrossSectionPerVolume(kinEnerg << 501 processName, << 502 FindMate << 503 } << 504 << 505 //....oooOO0OOooo........oooOO0OOooo........oo << 506 << 507 inline << 508 G4double G4EmCalculator::ComputeCrossSectionPe << 509 << 510 << 511 const G4Element* elm, << 512 G4doub << 513 { << 514 return ComputeCrossSectionPerAtom(kinEnergy, << 515 processName, << 516 elm->GetZ( << 517 } << 518 << 519 //....oooOO0OOooo........oooOO0OOooo........oo << 520 << 521 inline G4double G4EmCalculator::ComputeCrossSe << 522 G4double kinEnergy, con << 523 const G4String& process << 524 G4int shellIdx, G4doubl << 525 { << 526 return ComputeCrossSectionPerShell(kinEnergy << 527 processName, elm->GetZasInt(), << 528 shellIdx, cut); << 529 } << 530 << 531 //....oooOO0OOooo........oooOO0OOooo........oo << 532 << 533 inline << 534 G4double G4EmCalculator::ComputeEnergyCutFromR << 535 G4double range, << 536 const G4String& particle, << 537 const G4String& material) << 538 { << 539 return ComputeEnergyCutFromRangeCut(range,Fi << 540 FindMaterial(material)); << 541 } << 542 << 543 //....oooOO0OOooo........oooOO0OOooo........oo << 544 << 545 inline << 546 G4double G4EmCalculator::ComputeMeanFreePath(G << 547 c << 548 c << 549 c << 550 << 551 { << 552 return ComputeMeanFreePath(kinEnergy,FindPar << 553 FindMaterial(mate << 554 } << 555 << 556 //....oooOO0OOooo........oooOO0OOooo........oo << 557 << 558 inline void G4EmCalculator::SetApplySmoothing( << 559 { << 560 applySmoothing = val; << 561 } << 562 << 563 //....oooOO0OOooo........oooOO0OOooo........oo << 564 318 565 #endif 319 #endif 566 320