Changeset 1315 for trunk/source/processes/electromagnetic/standard/include/G4eCoulombScatteringModel.hh
- Timestamp:
- Jun 18, 2010, 11:42:07 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/standard/include/G4eCoulombScatteringModel.hh
r1228 r1315 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4eCoulombScatteringModel.hh,v 1. 49 2009/10/10 15:16:57vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 3$26 // $Id: G4eCoulombScatteringModel.hh,v 1.56 2010/05/27 14:22:05 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-04-beta-cand-01 $ 28 28 // 29 29 // ------------------------------------------------------------------- … … 47 47 // 09.06.08 V.Ivanchenko add SelectIsotope and sampling of the recoil ion 48 48 // 17.06.09 C.Consoalndi modified SetupTarget method - remove kinFactor 49 // 27.05.10 V.Ivanchenko added G4WentzelOKandVIxSection class to 50 // compute cross sections and sample scattering angle 49 51 // 50 52 // … … 66 68 67 69 #include "G4VEmModel.hh" 68 #include "G4PhysicsTable.hh"69 70 #include "globals.hh" 70 #include "G4 NistManager.hh"71 #include <vector>71 #include "G4MaterialCutsCouple.hh" 72 #include "G4WentzelOKandVIxSection.hh" 72 73 73 74 class G4ParticleChangeForGamma; 74 75 class G4ParticleDefinition; 76 class G4ParticleTable; 77 class G4NistManager; 75 78 76 79 class G4eCoulombScatteringModel : public G4VEmModel … … 99 102 G4double maxEnergy); 100 103 104 // defines low energy limit of the model 105 inline void SetLowEnergyLimit(G4double val); 106 107 // obsolete method 101 108 inline void SetRecoilThreshold(G4double eth); 102 109 103 110 protected: 104 105 G4double CrossSectionPerAtom();106 107 G4double SampleCosineTheta();108 111 109 112 inline void DefineMaterial(const G4MaterialCutsCouple*); … … 111 114 inline void SetupParticle(const G4ParticleDefinition*); 112 115 113 inline void SetupKinematic(G4double kinEnergy, G4double cut);114 115 inline void SetupTarget(G4double Z, G4double kinEnergy);116 117 116 private: 118 119 void ComputeMaxElectronScattering(G4double cut);120 117 121 118 // hide assignment operator … … 125 122 protected: 126 123 127 const G4ParticleDefinition* theProton; 128 const G4ParticleDefinition* theElectron; 129 const G4ParticleDefinition* thePositron; 130 131 G4ParticleTable* theParticleTable; 124 G4ParticleTable* theParticleTable; 132 125 G4ParticleChangeForGamma* fParticleChange; 126 G4WentzelOKandVIxSection* wokvi; 133 127 G4NistManager* fNistManager; 134 128 … … 140 134 G4int currentMaterialIndex; 141 135 142 G4double coeff;143 136 G4double cosThetaMin; 144 137 G4double cosThetaMax; 145 138 G4double cosTetMinNuc; 146 139 G4double cosTetMaxNuc; 147 G4double cosTetMaxNuc2;148 G4double cosTetMaxElec;149 G4double cosTetMaxElec2;150 G4double q2Limit;151 140 G4double recoilThreshold; 152 G4double elecXSection; 153 G4double nucXSection; 154 G4double ecut; 141 G4double elecRatio; 142 G4double mass; 155 143 156 144 // projectile 157 145 const G4ParticleDefinition* particle; 146 const G4ParticleDefinition* theProton; 158 147 159 G4double chargeSquare;160 G4double spin;161 G4double mass;162 G4double tkin;163 G4double mom2;164 G4double invbeta2;165 G4double etag;166 148 G4double lowEnergyLimit; 167 149 168 // target169 G4double targetZ;170 G4double targetMass;171 G4double screenZ;172 G4double formfactA;173 G4int idxelm;174 G4int iz;175 176 150 private: 177 178 G4double alpha2;179 G4double faclim;180 181 static G4double ScreenRSquare[100];182 static G4double FormFactor[100];183 151 184 152 G4bool isInitialised; … … 206 174 particle = p; 207 175 mass = particle->GetPDGMass(); 208 spin = particle->GetPDGSpin(); 209 G4double q = particle->GetPDGCharge()/eplus; 210 chargeSquare = q*q; 211 tkin = 0.0; 176 wokvi->SetupParticle(p); 212 177 } 213 178 } … … 215 180 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 216 181 217 inline void G4eCoulombScatteringModel::SetupKinematic(G4double ekin, 218 G4double cut) 182 inline void G4eCoulombScatteringModel::SetLowEnergyLimit(G4double val) 219 183 { 220 if(ekin != tkin || ecut != cut) { 221 tkin = ekin; 222 mom2 = tkin*(tkin + 2.0*mass); 223 invbeta2 = 1.0 + mass*mass/mom2; 224 cosTetMinNuc = cosThetaMin; 225 cosTetMaxNuc = cosThetaMax; 226 if(mass < MeV && cosThetaMin < 1.0 && ekin <= 10.*cut) { 227 cosTetMinNuc = ekin*(cosThetaMin + 1.0)/(10.*cut) - 1.0; 228 } 229 ComputeMaxElectronScattering(cut); 230 } 184 lowEnergyLimit = val; 231 185 } 232 233 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....234 235 inline void G4eCoulombScatteringModel::SetupTarget(G4double Z, G4double e)236 {237 if(Z != targetZ || e != etag) {238 etag = e;239 targetZ = Z;240 iz= G4int(Z);241 if(iz > 99) iz = 99;242 targetMass = fNistManager->GetAtomicMassAmu(iz)*amu_c2;243 screenZ = ScreenRSquare[iz]/mom2;244 screenZ *=(1.13 + std::min(1.0,3.76*Z*Z*invbeta2*alpha2));245 if(mass > MeV) { screenZ *= 2.0; }246 formfactA = FormFactor[iz]*mom2;247 cosTetMaxNuc2 = cosTetMaxNuc;248 if(1 == iz && particle == theProton && cosTetMaxNuc2 < 0.0) {249 cosTetMaxNuc2 = 0.0;250 }251 cosTetMaxElec2 = cosTetMaxElec;252 }253 }254 186 255 187 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Note: See TracChangeset
for help on using the changeset viewer.