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 // ------------------------------------------- << 26 // $Id: G4VEmModel.cc,v 1.37 2010-10-14 16:27:35 vnivanch Exp $ 27 // << 27 // GEANT4 tag $Name: not supported by cvs2svn $ 28 // GEANT4 Class file << 28 // 29 // << 29 // ------------------------------------------------------------------- 30 // << 30 // 31 // File name: G4VEmModel << 31 // GEANT4 Class file 32 // << 32 // 33 // Author: Vladimir Ivanchenko << 33 // 34 // << 34 // File name: G4VEmModel 35 // Creation date: 25.07.2005 << 35 // 36 // << 36 // Author: Vladimir Ivanchenko 37 // Modifications: << 37 // 38 // 25.10.2005 Set default highLimit=100.TeV (V << 38 // Creation date: 25.07.2005 39 // 06.02.2006 add method ComputeMeanFreePath() << 39 // 40 // 16.02.2009 Move implementations of virtual << 40 // Modifications: 41 // << 41 // 25.10.2005 Set default highLimit=100.TeV (V.Ivanchenko) 42 // << 42 // 06.02.2006 add method ComputeMeanFreePath() (mma) 43 // Class Description: << 43 // 16.02.2009 Move implementations of virtual methods to source (VI) 44 // << 44 // 45 // Abstract interface to energy loss models << 45 // 46 << 46 // Class Description: 47 // ------------------------------------------- << 47 // 48 // << 48 // Abstract interface to energy loss models 49 << 49 50 #include "G4VEmModel.hh" << 50 // ------------------------------------------------------------------- 51 #include "G4ElementData.hh" << 51 // 52 #include "G4LossTableManager.hh" << 52 53 #include "G4LossTableBuilder.hh" << 53 #include "G4VEmModel.hh" 54 #include "G4ProductionCutsTable.hh" << 54 #include "G4LossTableManager.hh" 55 #include "G4ParticleChangeForLoss.hh" << 55 #include "G4ProductionCutsTable.hh" 56 #include "G4ParticleChangeForGamma.hh" << 56 #include "G4ParticleChangeForLoss.hh" 57 #include "G4EmParameters.hh" << 57 #include "G4ParticleChangeForGamma.hh" 58 #include "G4SystemOfUnits.hh" << 58 59 #include "G4EmUtility.hh" << 59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 60 #include "G4Log.hh" << 60 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 61 #include "Randomize.hh" << 61 62 #include <iostream> << 62 G4VEmModel::G4VEmModel(const G4String& nam): 63 << 63 flucModel(0),anglModel(0), name(nam), lowLimit(0.1*keV), highLimit(100.0*TeV), 64 //....oooOO0OOooo........oooOO0OOooo........oo << 64 eMinActive(0.0),eMaxActive(DBL_MAX), 65 //....oooOO0OOooo........oooOO0OOooo........oo << 65 polarAngleLimit(0.0),secondaryThreshold(DBL_MAX),theLPMflag(false), 66 << 66 pParticleChange(0), 67 G4VEmModel::G4VEmModel(const G4String& nam): << 67 currentCouple(0),currentElement(0), 68 inveplus(1.0/CLHEP::eplus), << 68 nsec(5),flagDeexcitation(false) 69 lowLimit(0.1*CLHEP::keV), << 69 { 70 highLimit(100.0*CLHEP::TeV), << 70 xsec.resize(nsec); 71 polarAngleLimit(CLHEP::pi), << 71 nSelectors = 0; 72 name(nam) << 72 G4LossTableManager::Instance()->Register(this); 73 { << 73 } 74 xsec.resize(nsec); << 74 75 fEmManager = G4LossTableManager::Instance(); << 75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 76 fEmManager->Register(this); << 76 77 isMaster = fEmManager->IsMaster(); << 77 G4VEmModel::~G4VEmModel() 78 << 78 { 79 G4LossTableBuilder* bld = fEmManager->GetTab << 79 G4LossTableManager::Instance()->DeRegister(this); 80 theDensityFactor = bld->GetDensityFactors(); << 80 G4int n = elmSelectors.size(); 81 theDensityIdx = bld->GetCoupleIndexes(); << 81 if(n > 0) { 82 } << 82 for(G4int i=0; i<n; ++i) { 83 << 83 delete elmSelectors[i]; 84 //....oooOO0OOooo........oooOO0OOooo........oo << 84 } 85 << 85 } 86 G4VEmModel::~G4VEmModel() << 86 delete anglModel; 87 { << 87 } 88 if(localElmSelectors) { << 88 89 for(G4int i=0; i<nSelectors; ++i) { << 89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 90 delete (*elmSelectors)[i]; << 90 91 } << 91 G4ParticleChangeForLoss* G4VEmModel::GetParticleChangeForLoss() 92 delete elmSelectors; << 92 { 93 } << 93 G4ParticleChangeForLoss* p = 0; 94 delete anglModel; << 94 if (pParticleChange) { 95 << 95 p = static_cast<G4ParticleChangeForLoss*>(pParticleChange); 96 if(localTable && xSectionTable != nullptr) { << 96 } else { 97 xSectionTable->clearAndDestroy(); << 97 p = new G4ParticleChangeForLoss(); 98 delete xSectionTable; << 98 pParticleChange = p; 99 xSectionTable = nullptr; << 99 } 100 } << 100 return p; 101 fEmManager->DeRegister(this); << 101 } 102 } << 102 103 << 103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 104 //....oooOO0OOooo........oooOO0OOooo........oo << 104 105 << 105 G4ParticleChangeForGamma* G4VEmModel::GetParticleChangeForGamma() 106 G4ParticleChangeForLoss* G4VEmModel::GetPartic << 106 { 107 { << 107 G4ParticleChangeForGamma* p = 0; 108 G4ParticleChangeForLoss* p = nullptr; << 108 if (pParticleChange) { 109 if (pParticleChange != nullptr) { << 109 p = static_cast<G4ParticleChangeForGamma*>(pParticleChange); 110 p = static_cast<G4ParticleChangeForLoss*>( << 110 } else { 111 } else { << 111 p = new G4ParticleChangeForGamma(); 112 p = new G4ParticleChangeForLoss(); << 112 pParticleChange = p; 113 pParticleChange = p; << 113 } 114 } << 114 return p; 115 if(fTripletModel != nullptr) { fTripletModel << 115 } 116 return p; << 116 117 } << 117 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 118 << 118 119 //....oooOO0OOooo........oooOO0OOooo........oo << 119 void G4VEmModel::InitialiseElementSelectors(const G4ParticleDefinition* p, 120 << 120 const G4DataVector& cuts) 121 G4ParticleChangeForGamma* G4VEmModel::GetParti << 121 { 122 { << 122 // initialise before run 123 G4ParticleChangeForGamma* p = nullptr; << 123 G4LossTableManager* man = G4LossTableManager::Instance(); 124 if (pParticleChange != nullptr) { << 124 // G4bool spline = man->SplineFlag(); 125 p = static_cast<G4ParticleChangeForGamma*> << 125 G4bool spline = false; 126 } else { << 126 127 p = new G4ParticleChangeForGamma(); << 127 // two times less bins because probability functon is normalized 128 pParticleChange = p; << 128 // so correspondingly is more smooth 129 } << 129 G4int nbins = G4int(man->GetNumberOfBinsPerDecade() 130 if(fTripletModel != nullptr) { fTripletModel << 130 * std::log10(highLimit/lowLimit) / 6.0); 131 return p; << 131 if(nbins < 5) { nbins = 5; } 132 } << 132 133 << 133 G4ProductionCutsTable* theCoupleTable= 134 //....oooOO0OOooo........oooOO0OOooo........oo << 134 G4ProductionCutsTable::GetProductionCutsTable(); 135 << 135 G4int numOfCouples = theCoupleTable->GetTableSize(); 136 void G4VEmModel::InitialiseElementSelectors(co << 136 137 co << 137 // prepare vector 138 { << 138 if(numOfCouples > nSelectors) { 139 if(highLimit <= lowLimit) { return; } << 139 elmSelectors.reserve(numOfCouples); 140 G4EmUtility::InitialiseElementSelectors(this << 140 for(G4int i=nSelectors; i<numOfCouples; ++i) { elmSelectors.push_back(0); } 141 localElmSelectors = true; << 141 nSelectors = numOfCouples; 142 } << 142 } 143 << 143 144 //....oooOO0OOooo........oooOO0OOooo........oo << 144 // initialise vector 145 << 145 for(G4int i=0; i<numOfCouples; ++i) { 146 void G4VEmModel::InitialiseLocal(const G4Parti << 146 currentCouple = theCoupleTable->GetMaterialCutsCouple(i); 147 {} << 147 const G4Material* material = currentCouple->GetMaterial(); 148 << 148 G4int idx = currentCouple->GetIndex(); 149 //....oooOO0OOooo........oooOO0OOooo........oo << 149 150 << 150 // selector already exist check if should be deleted 151 void G4VEmModel::InitialiseForMaterial(const G << 151 G4bool create = true; 152 const G << 152 if(elmSelectors[i]) { 153 { << 153 if(material == elmSelectors[i]->GetMaterial()) { create = false; } 154 if(material != nullptr) { << 154 else { delete elmSelectors[i]; } 155 G4int n = (G4int)material->GetNumberOfElem << 155 } 156 for(G4int i=0; i<n; ++i) { << 156 if(create) { 157 G4int Z = material->GetElement(i)->GetZa << 157 elmSelectors[i] = new G4EmElementSelector(this,material,nbins, 158 InitialiseForElement(part, Z); << 158 lowLimit,highLimit,spline); 159 } << 159 } 160 } << 160 elmSelectors[i]->Initialise(p, cuts[idx]); 161 } << 161 //elmSelectors[i]->Dump(p); 162 << 162 } 163 //....oooOO0OOooo........oooOO0OOooo........oo << 163 } 164 << 164 165 void G4VEmModel::InitialiseForElement(const G4 << 165 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 166 {} << 166 167 << 167 G4double G4VEmModel::ComputeDEDXPerVolume(const G4Material*, 168 //....oooOO0OOooo........oooOO0OOooo........oo << 168 const G4ParticleDefinition*, 169 << 169 G4double,G4double) 170 G4double G4VEmModel::ComputeDEDXPerVolume(cons << 170 { 171 cons << 171 return 0.0; 172 G4do << 172 } 173 { << 173 174 return 0.0; << 174 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 175 } << 175 176 << 176 G4double G4VEmModel::CrossSectionPerVolume(const G4Material* material, 177 //....oooOO0OOooo........oooOO0OOooo........oo << 177 const G4ParticleDefinition* p, 178 << 178 G4double ekin, 179 G4double G4VEmModel::CrossSectionPerVolume(con << 179 G4double emin, 180 con << 180 G4double emax) 181 G4d << 181 { 182 G4d << 182 SetupForMaterial(p, material, ekin); 183 G4d << 183 G4double cross = 0.0; 184 { << 184 const G4ElementVector* theElementVector = material->GetElementVector(); 185 SetupForMaterial(p, mat, ekin); << 185 const G4double* theAtomNumDensityVector = material->GetVecNbOfAtomsPerVolume(); 186 const G4double* theAtomNumDensityVector = ma << 186 G4int nelm = material->GetNumberOfElements(); 187 G4int nelm = (G4int)mat->GetNumberOfElements << 187 if(nelm > nsec) { 188 if(nelm > nsec) { << 188 xsec.resize(nelm); 189 xsec.resize(nelm); << 189 nsec = nelm; 190 nsec = nelm; << 190 } 191 } << 191 for (G4int i=0; i<nelm; i++) { 192 G4double cross = 0.0; << 192 cross += theAtomNumDensityVector[i]* 193 for (G4int i=0; i<nelm; ++i) { << 193 ComputeCrossSectionPerAtom(p,(*theElementVector)[i],ekin,emin,emax); 194 cross += theAtomNumDensityVector[i]* << 194 xsec[i] = cross; 195 ComputeCrossSectionPerAtom(p,mat->GetEle << 195 } 196 xsec[i] = cross; << 196 return cross; 197 } << 197 } 198 return cross; << 198 199 } << 199 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 200 << 200 201 //....oooOO0OOooo........oooOO0OOooo........oo << 201 const G4Element* G4VEmModel::SelectRandomAtom(const G4Material* material, 202 << 202 const G4ParticleDefinition* pd, 203 G4double G4VEmModel::GetPartialCrossSection(co << 203 G4double kinEnergy, 204 co << 204 G4double tcut, 205 G4 << 205 G4double tmax) 206 { << 206 { 207 return 0.0; << 207 const G4ElementVector* theElementVector = material->GetElementVector(); 208 } << 208 G4int n = material->GetNumberOfElements() - 1; 209 << 209 currentElement = (*theElementVector)[n]; 210 //....oooOO0OOooo........oooOO0OOooo........oo << 210 if (n > 0) { 211 << 211 G4double x = G4UniformRand()* 212 void G4VEmModel::StartTracking(G4Track*) << 212 G4VEmModel::CrossSectionPerVolume(material,pd,kinEnergy,tcut,tmax); 213 {} << 213 for(G4int i=0; i<n; ++i) { 214 << 214 if (x <= xsec[i]) { 215 //....oooOO0OOooo........oooOO0OOooo........oo << 215 currentElement = (*theElementVector)[i]; 216 << 216 break; 217 const G4Element* G4VEmModel::SelectRandomAtom( << 217 } 218 << 218 } 219 << 219 } 220 << 220 return currentElement; 221 << 221 } 222 { << 222 223 G4int n = (G4int)mat->GetNumberOfElements(); << 223 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 224 fCurrentElement = mat->GetElement(0); << 224 225 if (n > 1) { << 225 G4double G4VEmModel::ComputeCrossSectionPerAtom(const G4ParticleDefinition*, 226 const G4double x = G4UniformRand()* << 226 G4double, G4double, G4double, 227 G4VEmModel::CrossSectionPerVolume(mat,pd << 227 G4double, G4double) 228 for(G4int i=0; i<n; ++i) { << 228 { 229 if (x <= xsec[i]) { << 229 return 0.0; 230 fCurrentElement = mat->GetElement(i); << 230 } 231 break; << 231 232 } << 232 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 233 } << 233 234 } << 234 void G4VEmModel::DefineForRegion(const G4Region*) 235 return fCurrentElement; << 235 {} 236 } << 236 237 << 237 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 238 //....oooOO0OOooo........oooOO0OOooo........oo << 238 239 << 239 G4double G4VEmModel::MinEnergyCut(const G4ParticleDefinition*, 240 const G4Element* G4VEmModel::GetCurrentElement << 240 const G4MaterialCutsCouple*) 241 { << 241 { 242 const G4Element* elm = fCurrentElement; << 242 return 0.0; 243 if(nullptr == elm && nullptr != mat) { << 243 } 244 elm = G4EmUtility::SampleRandomElement(mat << 244 245 } << 245 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 246 return elm; << 246 247 } << 247 G4double G4VEmModel::ChargeSquareRatio(const G4Track& track) 248 << 248 { 249 //....oooOO0OOooo........oooOO0OOooo........oo << 249 return GetChargeSquareRatio(track.GetParticleDefinition(), 250 << 250 track.GetMaterial(), track.GetKineticEnergy()); 251 G4int G4VEmModel::SelectRandomAtomNumber(const << 251 } 252 { << 252 253 const G4Element* elm = GetCurrentElement(mat << 253 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 254 return (nullptr == elm) ? 0 : elm->GetZasInt << 254 255 } << 255 G4double G4VEmModel::GetChargeSquareRatio(const G4ParticleDefinition* p, 256 << 256 const G4Material*, G4double) 257 //....oooOO0OOooo........oooOO0OOooo........oo << 257 { 258 << 258 G4double q = p->GetPDGCharge()/CLHEP::eplus; 259 const G4Isotope* G4VEmModel::GetCurrentIsotope << 259 return q*q; 260 { << 260 } 261 const G4Isotope* iso = nullptr; << 261 262 const G4Element* el = elm; << 262 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 263 if(nullptr == el && nullptr != fCurrentCoupl << 263 264 el = GetCurrentElement(fCurrentCouple->Get << 264 G4double G4VEmModel::GetParticleCharge(const G4ParticleDefinition* p, 265 } << 265 const G4Material*, G4double) 266 if(nullptr != el) { << 266 { 267 iso = G4EmUtility::SampleRandomIsotope(el) << 267 return p->GetPDGCharge(); 268 } << 268 } 269 return iso; << 269 270 } << 270 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 271 << 271 272 //....oooOO0OOooo........oooOO0OOooo........oo << 272 void G4VEmModel::CorrectionsAlongStep(const G4MaterialCutsCouple*, 273 << 273 const G4DynamicParticle*, 274 G4int G4VEmModel::SelectIsotopeNumber(const G4 << 274 G4double&,G4double&,G4double) 275 { << 275 {} 276 auto iso = GetCurrentIsotope(elm); << 276 277 return (nullptr != iso) ? iso->GetN() : 0; << 277 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 278 } << 278 279 << 279 void G4VEmModel::SampleDeexcitationAlongStep(const G4Material*, 280 //....oooOO0OOooo........oooOO0OOooo........oo << 280 const G4Track&, 281 << 281 G4double& ) 282 G4double G4VEmModel::ComputeCrossSectionPerAto << 282 {} 283 << 283 284 << 284 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 285 { << 285 286 return 0.0; << 286 G4double G4VEmModel::MaxSecondaryEnergy(const G4ParticleDefinition*, 287 } << 287 G4double kineticEnergy) 288 << 288 { 289 //....oooOO0OOooo........oooOO0OOooo........oo << 289 return kineticEnergy; 290 << 290 } 291 G4double << 291 292 G4VEmModel::ComputeCrossSectionPerShell(const << 292 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 293 G4int, << 293 294 G4doub << 294 void G4VEmModel::SetupForMaterial(const G4ParticleDefinition*, 295 { << 295 const G4Material*, G4double) 296 return 0.0; << 296 {} 297 } << 297 298 << 298 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 299 //....oooOO0OOooo........oooOO0OOooo........oo << 299 300 << 300 void 301 void G4VEmModel::DefineForRegion(const G4Regio << 301 G4VEmModel::SetParticleChange(G4VParticleChange* p, G4VEmFluctuationModel* f) 302 {} << 302 { 303 << 303 if(p && pParticleChange != p) { pParticleChange = p; } 304 //....oooOO0OOooo........oooOO0OOooo........oo << 304 flucModel = f; 305 << 305 } 306 void G4VEmModel::FillNumberOfSecondaries(G4int << 306 307 G4int << 307 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 308 { << 309 numberOfTriplets = 0; << 310 numberOfRecoil = 0; << 311 } << 312 << 313 //....oooOO0OOooo........oooOO0OOooo........oo << 314 << 315 G4double G4VEmModel::ChargeSquareRatio(const G << 316 { << 317 return GetChargeSquareRatio(track.GetParticl << 318 track.GetMateria << 319 } << 320 << 321 //....oooOO0OOooo........oooOO0OOooo........oo << 322 << 323 G4double G4VEmModel::GetChargeSquareRatio(cons << 324 cons << 325 { << 326 const G4double q = p->GetPDGCharge()*inveplu << 327 return q*q; << 328 } << 329 << 330 //....oooOO0OOooo........oooOO0OOooo........oo << 331 << 332 G4double G4VEmModel::GetParticleCharge(const G << 333 const G << 334 { << 335 return p->GetPDGCharge(); << 336 } << 337 << 338 //....oooOO0OOooo........oooOO0OOooo........oo << 339 << 340 void G4VEmModel::CorrectionsAlongStep(const G4 << 341 const G4 << 342 const G4 << 343 {} << 344 << 345 //....oooOO0OOooo........oooOO0OOooo........oo << 346 << 347 G4double G4VEmModel::Value(const G4MaterialCut << 348 const G4ParticleDef << 349 { << 350 SetCurrentCouple(couple); << 351 return pFactor*e*e*CrossSectionPerVolume(pBa << 352 } << 353 << 354 //....oooOO0OOooo........oooOO0OOooo........oo << 355 << 356 G4double G4VEmModel::MinPrimaryEnergy(const G4 << 357 const G4 << 358 G4double << 359 { << 360 return 0.0; << 361 } << 362 << 363 //....oooOO0OOooo........oooOO0OOooo........oo << 364 << 365 G4double G4VEmModel::MinEnergyCut(const G4Part << 366 const G4Mate << 367 { << 368 return 0.0; << 369 } << 370 << 371 //....oooOO0OOooo........oooOO0OOooo........oo << 372 << 373 G4double G4VEmModel::MaxSecondaryEnergy(const << 374 G4doub << 375 { << 376 return kineticEnergy; << 377 } << 378 << 379 //....oooOO0OOooo........oooOO0OOooo........oo << 380 << 381 void G4VEmModel::SetupForMaterial(const G4Part << 382 const G4Mate << 383 { << 384 GetChargeSquareRatio(p, mat, ekin); << 385 } << 386 << 387 //....oooOO0OOooo........oooOO0OOooo........oo << 388 << 389 void << 390 G4VEmModel::SetParticleChange(G4VParticleChang << 391 { << 392 if(p != nullptr && pParticleChange != p) { p << 393 if(flucModel != f) { flucModel = f; } << 394 } << 395 << 396 //....oooOO0OOooo........oooOO0OOooo........oo << 397 << 398 void G4VEmModel::SetCrossSectionTable(G4Physic << 399 { << 400 xSectionTable = p; << 401 localTable = isLocal; << 402 } << 403 << 404 //....oooOO0OOooo........oooOO0OOooo........oo << 405 << 406 void G4VEmModel::SetLPMFlag(G4bool) << 407 { << 408 if (G4EmParameters::Instance()->Verbose() > << 409 G4ExceptionDescription ed; << 410 ed << "The obsolete method SetLPMFlag(..) << 411 << " is called. Please, use G4EmParamet << 412 << " instead"; << 413 G4Exception("G4VEmModel::SetLPMFlag", "em0 << 414 } << 415 } << 416 << 417 //....oooOO0OOooo........oooOO0OOooo........oo << 418 << 419 void G4VEmModel::SetMasterThread(G4bool) << 420 {} << 421 << 422 //....oooOO0OOooo........oooOO0OOooo........oo << 423 << 424 void G4VEmModel::ModelDescription(std::ostrea << 425 { << 426 outFile << "The description for this model h << 427 } << 428 << 429 //....oooOO0OOooo........oooOO0OOooo........oo << 430 308