- Timestamp:
- Apr 6, 2009, 12:21:12 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/utils/include/G4EmCorrections.hh
r819 r961 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4EmCorrections.hh,v 1. 10 2008/01/11 19:55:29vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 1-patch-02 $26 // $Id: G4EmCorrections.hh,v 1.24 2008/09/12 14:44:48 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 28 28 // 29 29 // ------------------------------------------------------------------- … … 41 41 // 28.04.2006 General cleanup, add finite size corrections (V.Ivanchenko) 42 42 // 13.05.2006 Add corrections for ion stopping (V.Ivanhcenko) 43 // 20.05.2008 Removed Finite Size correction (V.Ivanchenko) 44 // 12.09.2008 Added inlined interfaces to effective charge (V.Ivanchenko) 43 45 // 44 46 // Class Description: … … 58 60 #include "G4Material.hh" 59 61 #include "G4ParticleDefinition.hh" 62 #include "G4NistManager.hh" 60 63 61 64 class G4VEmModel; 62 65 class G4PhysicsVector; 63 66 class G4IonTable; 64 class G4 NistManager;67 class G4MaterialCutsCouple; 65 68 66 69 class G4EmCorrections … … 73 76 virtual ~G4EmCorrections(); 74 77 75 G4double HighOrderCorrections(const G4ParticleDefinition* p, 76 const G4Material* material, 77 G4double kineticEnergy); 78 79 G4double Bethe(const G4ParticleDefinition* p, 80 const G4Material* material, 78 G4double HighOrderCorrections(const G4ParticleDefinition*, 79 const G4Material*, 80 G4double kineticEnergy, 81 G4double cutEnergy); 82 83 G4double IonHighOrderCorrections(const G4ParticleDefinition*, 84 const G4MaterialCutsCouple*, 85 G4double kineticEnergy); 86 87 G4double ComputeIonCorrections(const G4ParticleDefinition*, 88 const G4Material*, 89 G4double kineticEnergy); 90 91 G4double IonBarkasCorrection(const G4ParticleDefinition*, 92 const G4Material*, 93 G4double kineticEnergy); 94 95 G4double Bethe(const G4ParticleDefinition*, 96 const G4Material*, 81 97 G4double kineticEnergy); 82 98 83 G4double SpinCorrection(const G4ParticleDefinition* p,84 const G4Material* material,99 G4double SpinCorrection(const G4ParticleDefinition*, 100 const G4Material*, 85 101 G4double kineticEnergy); 86 102 87 G4double KShellCorrection(const G4ParticleDefinition* p,88 const G4Material* material,103 G4double KShellCorrection(const G4ParticleDefinition*, 104 const G4Material*, 89 105 G4double kineticEnergy); 90 106 91 G4double LShellCorrection(const G4ParticleDefinition* p,92 const G4Material* material,107 G4double LShellCorrection(const G4ParticleDefinition*, 108 const G4Material*, 93 109 G4double kineticEnergy); 94 110 95 G4double ShellCorrection(const G4ParticleDefinition* p,96 const G4Material* material,111 G4double ShellCorrection(const G4ParticleDefinition*, 112 const G4Material*, 97 113 G4double kineticEnergy); 98 114 99 G4double ShellCorrectionSTD(const G4ParticleDefinition* p,100 const G4Material* material,115 G4double ShellCorrectionSTD(const G4ParticleDefinition*, 116 const G4Material*, 101 117 G4double kineticEnergy); 102 118 103 G4double DensityCorrection(const G4ParticleDefinition* p,104 const G4Material* material,119 G4double DensityCorrection(const G4ParticleDefinition*, 120 const G4Material*, 105 121 G4double kineticEnergy); 106 122 107 G4double BarkasCorrection(const G4ParticleDefinition* p,108 const G4Material* material,123 G4double BarkasCorrection(const G4ParticleDefinition*, 124 const G4Material*, 109 125 G4double kineticEnergy); 110 126 111 G4double BlochCorrection(const G4ParticleDefinition* p,112 const G4Material* material,127 G4double BlochCorrection(const G4ParticleDefinition*, 128 const G4Material*, 113 129 G4double kineticEnergy); 114 130 115 G4double MottCorrection(const G4ParticleDefinition* p,116 const G4Material* material,131 G4double MottCorrection(const G4ParticleDefinition*, 132 const G4Material*, 117 133 G4double kineticEnergy); 118 134 119 G4double FiniteSizeCorrection(const G4ParticleDefinition* p, 120 const G4Material* material, 121 G4double kineticEnergy); 122 123 G4double NuclearDEDX(const G4ParticleDefinition* p, 124 const G4Material* material, 135 G4double NuclearDEDX(const G4ParticleDefinition*, 136 const G4Material*, 125 137 G4double kineticEnergy, 126 138 G4bool fluct = true); 127 139 128 140 void AddStoppingData(G4int Z, G4int A, const G4String& materialName, 129 G4PhysicsVector& dVector); 130 141 G4PhysicsVector* dVector); 142 143 void InitialiseForNewRun(); 144 145 // effective charge correction using stopping power data 131 146 G4double EffectiveChargeCorrection(const G4ParticleDefinition*, 132 147 const G4Material*, 133 G4double); 134 135 G4ionEffectiveCharge* GetIonEffectiveCharge(G4VEmModel* m = 0); 136 137 G4int GetNumberOfStoppingVectors(); 148 G4double kineticEnergy); 149 150 // effective charge of an ion 151 inline G4double GetParticleCharge(const G4ParticleDefinition*, 152 const G4Material*, 153 G4double kineticEnergy); 154 155 inline 156 G4double EffectiveChargeSquareRatio(const G4ParticleDefinition*, 157 const G4Material*, 158 G4double kineticEnergy); 159 160 // ionisation models for ions 161 inline void SetIonisationModels(G4VEmModel* m1 = 0, G4VEmModel* m2 = 0); 162 163 inline G4int GetNumberOfStoppingVectors(); 138 164 139 165 private: … … 141 167 void Initialise(); 142 168 143 G4PhysicsVector* InitialiseMaterial(const G4Material* mat);144 145 void SetupKinematics(const G4ParticleDefinition* p,146 const G4Material* material,169 void BuildCorrectionVector(); 170 171 void SetupKinematics(const G4ParticleDefinition*, 172 const G4Material*, 147 173 G4double kineticEnergy); 148 174 … … 207 233 G4double Z23[100]; 208 234 235 std::vector<const G4Material*> currmat; 236 std::vector<G4double> thcorr[100]; 237 size_t ncouples; 238 209 239 const G4ParticleDefinition* particle; 210 240 const G4ParticleDefinition* curParticle; … … 218 248 G4double mass; 219 249 G4double massFactor; 250 G4double formfact; 251 G4double eth; 220 252 G4double tau; 221 253 G4double gamma; … … 225 257 G4double ba2; 226 258 G4double tmax; 227 G4double tmax0;228 259 G4double charge; 229 260 G4double q2; 261 G4double eCorrMin; 262 G4double eCorrMax; 263 G4int nbinCorr; 230 264 231 265 G4AtomicShells shells; … … 234 268 G4NistManager* nist; 235 269 const G4IonTable* ionTable; 236 G4VEmModel* ionModel; 270 G4VEmModel* ionLEModel; 271 G4VEmModel* ionHEModel; 237 272 238 273 // Ion stopping data 239 274 G4int nIons; 240 275 G4int idx; 276 G4int currentZ; 241 277 std::vector<G4int> Zion; 242 278 std::vector<G4int> Aion; 243 279 std::vector<G4String> materialName; 280 281 std::vector<const G4ParticleDefinition*> ionList; 244 282 245 283 std::vector<const G4Material*> materialList; … … 271 309 z21*((xv-x1)*(y2-yv)+(yv-y1)*(x2-xv)))) 272 310 / ((x2-x1)*(y2-y1)); 311 } 312 313 inline 314 void G4EmCorrections::SetIonisationModels(G4VEmModel* m1, G4VEmModel* m2) 315 { 316 if(m1) ionLEModel = m1; 317 if(m2) ionHEModel = m2; 318 } 319 320 inline G4int G4EmCorrections::GetNumberOfStoppingVectors() 321 { 322 return nIons; 323 } 324 325 inline G4double 326 G4EmCorrections::GetParticleCharge(const G4ParticleDefinition* p, 327 const G4Material* mat, 328 G4double kineticEnergy) 329 { 330 return effCharge.EffectiveCharge(p,mat,kineticEnergy); 331 } 332 333 inline G4double 334 G4EmCorrections::EffectiveChargeSquareRatio(const G4ParticleDefinition* p, 335 const G4Material* mat, 336 G4double kineticEnergy) 337 { 338 return effCharge.EffectiveChargeSquareRatio(p,mat,kineticEnergy); 273 339 } 274 340 … … 289 355 G4double ratio = electron_mass_c2/mass; 290 356 tmax = 2.0*electron_mass_c2*bg2 /(1. + 2.0*gamma*ratio + ratio*ratio); 291 tmax0 = tmax;292 357 charge = p->GetPDGCharge()/eplus; 293 if(charge < 1.5) q2 = charge*charge;358 if(charge < 1.5) {q2 = charge*charge;} 294 359 else { 295 360 q2 = effCharge.EffectiveChargeSquareRatio(p,mat,kinEnergy); 296 361 charge = std::sqrt(q2); 297 362 } 298 if(mass > 120.*MeV)299 tmax = std::min(tmax,51200.*electron_mass_c2*std::pow(proton_mass_c2/mass,0.666667));300 363 } 301 364 if(mat != material) {
Note: See TracChangeset
for help on using the changeset viewer.