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: G4EmConfigurator.cc 91745 2015-08-04 11:51:12Z gcosmo $ 26 // 27 // 27 // ------------------------------------------- 28 // ------------------------------------------------------------------- 28 // 29 // 29 // GEANT4 Class 30 // GEANT4 Class 30 // 31 // 31 // File name: G4EmConfigurator 32 // File name: G4EmConfigurator 32 // 33 // 33 // Author: Vladimir Ivanchenko 34 // Author: Vladimir Ivanchenko 34 // 35 // 35 // Creation date: 14.07.2008 36 // Creation date: 14.07.2008 36 // 37 // 37 // Modifications: 38 // Modifications: 38 // 39 // 39 // Class Description: 40 // Class Description: 40 // 41 // 41 // This class provides configuration EM models 42 // This class provides configuration EM models for 42 // particles/processes/regions 43 // particles/processes/regions 43 // 44 // 44 45 45 // ------------------------------------------- 46 // ------------------------------------------------------------------- 46 // 47 // 47 48 48 #include "G4EmConfigurator.hh" 49 #include "G4EmConfigurator.hh" 49 #include "G4EmUtility.hh" << 50 #include "G4SystemOfUnits.hh" 50 #include "G4SystemOfUnits.hh" 51 #include "G4ParticleTable.hh" 51 #include "G4ParticleTable.hh" 52 #include "G4ParticleDefinition.hh" 52 #include "G4ParticleDefinition.hh" 53 #include "G4ProcessManager.hh" 53 #include "G4ProcessManager.hh" 54 #include "G4VProcess.hh" 54 #include "G4VProcess.hh" 55 #include "G4ProcessVector.hh" 55 #include "G4ProcessVector.hh" 56 #include "G4RegionStore.hh" 56 #include "G4RegionStore.hh" 57 #include "G4Region.hh" 57 #include "G4Region.hh" 58 #include "G4DummyModel.hh" 58 #include "G4DummyModel.hh" 59 #include "G4VEnergyLossProcess.hh" 59 #include "G4VEnergyLossProcess.hh" 60 #include "G4VEmProcess.hh" 60 #include "G4VEmProcess.hh" 61 #include "G4VMultipleScattering.hh" 61 #include "G4VMultipleScattering.hh" 62 #include "G4TransportationWithMsc.hh" << 63 62 64 //....oooOO0OOooo........oooOO0OOooo........oo 63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 65 64 66 G4EmConfigurator::G4EmConfigurator(G4int val): 65 G4EmConfigurator::G4EmConfigurator(G4int val):verbose(val) 67 { 66 { 68 index = -10; 67 index = -10; 69 } 68 } 70 69 71 //....oooOO0OOooo........oooOO0OOooo........oo 70 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 72 71 73 G4EmConfigurator::~G4EmConfigurator() = defaul << 72 G4EmConfigurator::~G4EmConfigurator() >> 73 {} 74 74 75 //....oooOO0OOooo........oooOO0OOooo........oo 75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 76 76 77 void G4EmConfigurator::SetExtraEmModel(const G 77 void G4EmConfigurator::SetExtraEmModel(const G4String& particleName, 78 const G 78 const G4String& processName, 79 G4VEmMo 79 G4VEmModel* mod, 80 const G 80 const G4String& regionName, 81 G4doubl 81 G4double emin, 82 G4doubl 82 G4double emax, 83 G4VEmFl 83 G4VEmFluctuationModel* fm) 84 { 84 { 85 if(nullptr == mod) { return; } << 86 if(1 < verbose) { 85 if(1 < verbose) { 87 G4cout << " G4EmConfigurator::SetExtraEmMo 86 G4cout << " G4EmConfigurator::SetExtraEmModel " << mod->GetName() 88 << " for " << particleName 87 << " for " << particleName 89 << " and " << processName 88 << " and " << processName 90 << " in the region <" << regionName 89 << " in the region <" << regionName 91 << "> Emin(MeV)= " << emin/MeV 90 << "> Emin(MeV)= " << emin/MeV 92 << " Emax(MeV)= " << emax/MeV 91 << " Emax(MeV)= " << emax/MeV 93 << G4endl; 92 << G4endl; 94 } 93 } 95 << 94 if(mod) { 96 models.push_back(mod); << 95 models.push_back(mod); 97 flucModels.push_back(fm); << 96 flucModels.push_back(fm); 98 G4double emin0 = std::max(emin, mod->LowEner << 97 emax = std::min(emax, mod->HighEnergyLimit()); 99 G4double emax0 = std::min(emax, mod->HighEne << 98 mod->SetActivationHighEnergyLimit(emax); 100 mod->SetActivationHighEnergyLimit(emax0); << 99 } else { >> 100 models.push_back(new G4DummyModel()); >> 101 flucModels.push_back(0); >> 102 } 101 103 102 particles.push_back(particleName); 104 particles.push_back(particleName); 103 processes.push_back(processName); 105 processes.push_back(processName); 104 regions.push_back(regionName); 106 regions.push_back(regionName); 105 lowEnergy.push_back(emin0); << 107 lowEnergy.push_back(emin); 106 highEnergy.push_back(emax0); << 108 highEnergy.push_back(emax); 107 } 109 } 108 110 109 //....oooOO0OOooo........oooOO0OOooo........oo 111 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 110 112 111 void G4EmConfigurator::AddModels() 113 void G4EmConfigurator::AddModels() 112 { 114 { 113 size_t n = models.size(); 115 size_t n = models.size(); 114 if(1 < verbose) { << 116 if(0 < verbose) { 115 G4cout << "### G4EmConfigurator::AddModels 117 G4cout << "### G4EmConfigurator::AddModels n= " << n << G4endl; 116 } 118 } 117 if(n > 0) { 119 if(n > 0) { 118 for(size_t i=0; i<n; ++i) { 120 for(size_t i=0; i<n; ++i) { 119 if(nullptr != models[i]) { << 121 if(models[i]) { 120 const G4Region* reg = G4EmUtility::Fin << 122 G4Region* reg = FindRegion(regions[i]); 121 if(nullptr != reg) { << 123 if(reg) { 122 --index; 124 --index; 123 SetModelForRegion(models[i],flucMode 125 SetModelForRegion(models[i],flucModels[i],reg, 124 particles[i],proce 126 particles[i],processes[i], 125 lowEnergy[i],highE 127 lowEnergy[i],highEnergy[i]); 126 } 128 } 127 } 129 } 128 } 130 } 129 } 131 } 130 Clear(); 132 Clear(); 131 } 133 } 132 134 133 //....oooOO0OOooo........oooOO0OOooo........oo 135 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 134 136 135 void G4EmConfigurator::SetModelForRegion(G4VEm 137 void G4EmConfigurator::SetModelForRegion(G4VEmModel* mod, 136 G4VEm 138 G4VEmFluctuationModel* fm, 137 const << 139 G4Region* reg, 138 const 140 const G4String& particleName, 139 const 141 const G4String& processName, 140 G4dou 142 G4double emin, G4double emax) 141 { 143 { 142 if(nullptr == mod) { return; } << 143 if(1 < verbose) { 144 if(1 < verbose) { 144 G4cout << " G4EmConfigurator::SetModelForR 145 G4cout << " G4EmConfigurator::SetModelForRegion: " << mod->GetName() 145 << G4endl; 146 << G4endl; 146 G4cout << " For " << particleName 147 G4cout << " For " << particleName 147 << " and " << processName 148 << " and " << processName 148 << " in the region <" << reg->GetNa 149 << " in the region <" << reg->GetName() 149 << " Emin(MeV)= " << emin/MeV 150 << " Emin(MeV)= " << emin/MeV 150 << " Emax(MeV)= " << emax/MeV; 151 << " Emax(MeV)= " << emax/MeV; 151 if(nullptr != fm) { G4cout << " FLmodel " << 152 if(fm) { G4cout << " FLmodel " << fm->GetName(); } 152 G4cout << G4endl; 153 G4cout << G4endl; 153 } 154 } >> 155 G4ParticleTable::G4PTblDicIterator* theParticleIterator = >> 156 G4ParticleTable::GetParticleTable()->GetIterator(); 154 157 155 // Loop checking, 03-Aug-2015, Vladimir Ivan 158 // Loop checking, 03-Aug-2015, Vladimir Ivanchenko 156 auto myParticleIterator = G4ParticleTable::G << 159 theParticleIterator->reset(); 157 myParticleIterator->reset(); << 160 while( (*theParticleIterator)() ) { 158 while( (*myParticleIterator)() ) { << 161 const G4ParticleDefinition* part = theParticleIterator->value(); 159 const G4ParticleDefinition* part = myParti << 162 >> 163 //G4cout << particleName << " " << part->GetParticleName() << G4endl; 160 164 161 if((part->GetParticleName() == particleNam 165 if((part->GetParticleName() == particleName) || 162 (particleName == "all") || 166 (particleName == "all") || 163 (particleName == "charged" && part->Get 167 (particleName == "charged" && part->GetPDGCharge() != 0.0)) { 164 168 165 // search for process 169 // search for process 166 G4ProcessManager* pmanager = part->GetPr 170 G4ProcessManager* pmanager = part->GetProcessManager(); 167 G4ProcessVector* plist = pmanager->GetPr 171 G4ProcessVector* plist = pmanager->GetProcessList(); 168 G4int np = pmanager->GetProcessListLengt 172 G4int np = pmanager->GetProcessListLength(); 169 173 170 if(1 < verbose) { << 174 //G4cout << processName << " in list of " << np << G4endl; 171 G4cout << "Check process <" << process << 175 172 << np << " processes" << G4endl << 176 G4VProcess* proc = 0; 173 } << 174 G4VProcess* proc = nullptr; << 175 for(G4int i=0; i<np; ++i) { 177 for(G4int i=0; i<np; ++i) { 176 if(processName == (*plist)[i]->GetProc 178 if(processName == (*plist)[i]->GetProcessName()) { 177 proc = (*plist)[i]; 179 proc = (*plist)[i]; 178 break; 180 break; 179 } 181 } 180 } 182 } 181 if(nullptr == proc) { << 183 if(!proc) { 182 if(processName == "msc") { << 184 G4cout << "### G4EmConfigurator WARNING: fails to find a process <" 183 for (G4int i = 0; i < np; ++i) { << 185 << processName << "> for " << particleName << G4endl; 184 auto* trans = dynamic_cast<G4Trans << 186 return; 185 if (nullptr != trans) { << 187 } 186 G4cout << "G4TransportationWithM << 187 proc = trans; << 188 break; << 189 } << 190 } << 191 } << 192 if (nullptr == proc) { << 193 if (0 < verbose) { << 194 G4cout << "### G4EmConfigurator WA << 195 << "> for " << particleName << 196 } << 197 return; << 198 } << 199 } << 200 188 201 if(!UpdateModelEnergyRange(mod, emin, em << 189 if(mod) { >> 190 if(!UpdateModelEnergyRange(mod, emin, emax)) { return; } >> 191 } 202 // classify process 192 // classify process 203 G4int ii = proc->GetProcessSubType(); 193 G4int ii = proc->GetProcessSubType(); 204 auto msc = dynamic_cast<G4VMscModel*>(mo << 194 if(10 == ii && mod) { 205 if (nullptr != msc) { << 195 G4VMultipleScattering* p = static_cast<G4VMultipleScattering*>(proc); 206 if (auto* trans = dynamic_cast<G4Trans << 196 p->AddEmModel(index,mod,reg); 207 trans->AddMscModel(msc, index, reg); << 197 if(1 < verbose) { 208 if (1 < verbose) { << 198 G4cout << "### Added msc model order= " << index << " for " 209 G4cout << "### Added msc model ord << 199 << particleName << " and " << processName << G4endl; 210 << proc->GetProcessName() < << 200 } 211 } << 201 return; 212 } << 202 } else if(2 <= ii && 4 >= ii) { 213 else if (10 == ii) { << 203 G4VEnergyLossProcess* p = static_cast<G4VEnergyLossProcess*>(proc); 214 auto p = dynamic_cast<G4VMultipleSca << 204 if(!mod && fm) { 215 if (nullptr != p) { << 205 p->SetFluctModel(fm); 216 p->AddEmModel(index, msc, reg); << 206 } else { 217 if (1 < verbose) { << 207 p->AddEmModel(index,mod,fm,reg); 218 G4cout << "### Added msc model o << 208 if(1 < verbose) { 219 << processName << G4endl; << 209 G4cout << "### Added eloss model order= " << index << " for " 220 } << 210 << particleName << " and " << processName << G4endl; 221 } << 222 } << 223 else { << 224 G4cout << "### Unable to add msc mod << 225 << G4endl; << 226 } << 227 } << 228 else if (2 <= ii && 4 >= ii) { << 229 auto p = dynamic_cast<G4VEnergyLossPro << 230 if (nullptr != p) { << 231 p->AddEmModel(index, mod, fm, reg); << 232 if (1 < verbose) { << 233 G4cout << "### Added eloss model o << 234 << processName << G4endl; << 235 } << 236 } << 237 } << 238 else { << 239 auto p = dynamic_cast<G4VEmProcess*>(p << 240 if (nullptr != p) { << 241 p->AddEmModel(index, mod, reg); << 242 if (1 < verbose) { << 243 G4cout << "### Added em model orde << 244 << processName << G4endl; << 245 } 211 } 246 } 212 } 247 else { << 213 return; 248 G4cout << "### Unable to add em mode << 214 } else if(mod) { 249 << G4endl; << 215 G4VEmProcess* p = static_cast<G4VEmProcess*>(proc); 250 } << 216 p->AddEmModel(index,mod,reg); >> 217 if(1 < verbose) { >> 218 G4cout << "### Added em model order= " << index << " for " >> 219 << particleName << " and " << processName << G4endl; >> 220 } >> 221 return; >> 222 } else { >> 223 return; 251 } 224 } 252 return; << 253 } 225 } 254 } 226 } 255 } 227 } 256 228 257 //....oooOO0OOooo........oooOO0OOooo........oo 229 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 258 230 259 void 231 void 260 G4EmConfigurator::PrepareModels(const G4Partic 232 G4EmConfigurator::PrepareModels(const G4ParticleDefinition* aParticle, 261 G4VEnergyLossP 233 G4VEnergyLossProcess* p) 262 { 234 { 263 size_t n = particles.size(); 235 size_t n = particles.size(); 264 if(1 < verbose) { 236 if(1 < verbose) { 265 G4cout << " G4EmConfigurator::PrepareModel 237 G4cout << " G4EmConfigurator::PrepareModels for EnergyLoss n= " 266 << n << G4endl; 238 << n << G4endl; 267 } 239 } 268 if(n > 0) { 240 if(n > 0) { 269 G4String particleName = aParticle->GetPart 241 G4String particleName = aParticle->GetParticleName(); 270 G4String processName = p->GetProcessName( 242 G4String processName = p->GetProcessName(); 271 //G4cout << particleName << " " << proc 243 //G4cout << particleName << " " << processName << G4endl; 272 for(size_t i=0; i<n; ++i) { 244 for(size_t i=0; i<n; ++i) { 273 //G4cout << particles[i] << " " << pr 245 //G4cout << particles[i] << " " << processes[i] << G4endl; 274 if(processName == processes[i]) { 246 if(processName == processes[i]) { 275 if((particleName == particles[i]) || 247 if((particleName == particles[i]) || 276 (particles[i] == "all") || 248 (particles[i] == "all") || 277 (particles[i] == "charged" && aPart 249 (particles[i] == "charged" && aParticle->GetPDGCharge() != 0.0)) { 278 const G4Region* reg = G4EmUtility::F << 250 G4Region* reg = FindRegion(regions[i]); 279 //G4cout << "Region " << reg << G4en 251 //G4cout << "Region " << reg << G4endl; 280 if(nullptr != reg) { << 252 if(reg) { 281 --index; 253 --index; 282 G4VEmModel* mod = models[i]; 254 G4VEmModel* mod = models[i]; 283 G4VEmFluctuationModel* fm = flucMo 255 G4VEmFluctuationModel* fm = flucModels[i]; 284 if(nullptr != mod) { << 256 if(mod) { 285 if(UpdateModelEnergyRange(mod, l 257 if(UpdateModelEnergyRange(mod, lowEnergy[i], highEnergy[i])) { 286 p->AddEmModel(index,mod,fm,reg 258 p->AddEmModel(index,mod,fm,reg); 287 if(1 < verbose) { 259 if(1 < verbose) { 288 G4cout << "### Added eloss m << 260 G4cout << "### Added eloss model order= " << index << " for " 289 << " and " << process << 261 << particleName << " and " << processName << G4endl; 290 } 262 } 291 } 263 } 292 } else if(nullptr != fm) { << 264 } else if(fm) { 293 p->SetFluctModel(fm); 265 p->SetFluctModel(fm); 294 } 266 } 295 } 267 } 296 } 268 } 297 } 269 } 298 } 270 } 299 } 271 } 300 } 272 } 301 273 302 //....oooOO0OOooo........oooOO0OOooo........oo 274 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 303 275 304 void 276 void 305 G4EmConfigurator::PrepareModels(const G4Partic 277 G4EmConfigurator::PrepareModels(const G4ParticleDefinition* aParticle, 306 G4VEmProcess* 278 G4VEmProcess* p) 307 { 279 { 308 size_t n = particles.size(); 280 size_t n = particles.size(); 309 if(1 < verbose) { 281 if(1 < verbose) { 310 G4cout << " G4EmConfigurator::PrepareModel 282 G4cout << " G4EmConfigurator::PrepareModels for EM process n= " 311 << n << G4endl; 283 << n << G4endl; 312 } 284 } 313 if(n > 0) { 285 if(n > 0) { 314 G4String particleName = aParticle->GetPart 286 G4String particleName = aParticle->GetParticleName(); 315 G4String processName = p->GetProcessName( 287 G4String processName = p->GetProcessName(); 316 //G4cout << particleName << " " << part 288 //G4cout << particleName << " " << particleName << G4endl; 317 for(size_t i=0; i<n; ++i) { 289 for(size_t i=0; i<n; ++i) { 318 if(processName == processes[i]) { 290 if(processName == processes[i]) { 319 if((particleName == particles[i]) || 291 if((particleName == particles[i]) || 320 (particles[i] == "all") || 292 (particles[i] == "all") || 321 (particles[i] == "charged" && aPart 293 (particles[i] == "charged" && aParticle->GetPDGCharge() != 0.0)) { 322 const G4Region* reg = G4EmUtility::F << 294 G4Region* reg = FindRegion(regions[i]); 323 //G4cout << "Region " << reg << G4en 295 //G4cout << "Region " << reg << G4endl; 324 if(nullptr != reg) { << 296 if(reg) { 325 --index; 297 --index; 326 G4VEmModel* mod = models[i]; 298 G4VEmModel* mod = models[i]; 327 if(nullptr != mod) { << 299 if(mod) { 328 if(UpdateModelEnergyRange(mod, l 300 if(UpdateModelEnergyRange(mod, lowEnergy[i], highEnergy[i])) { 329 p->AddEmModel(index,mod,reg); 301 p->AddEmModel(index,mod,reg); 330 if(1 < verbose) { 302 if(1 < verbose) { 331 G4cout << "### Added em mode 303 G4cout << "### Added em model order= " << index << " for " 332 << particleName << " 304 << particleName << " and " << processName << G4endl; 333 } 305 } 334 } 306 } 335 } 307 } 336 } 308 } 337 } 309 } 338 } 310 } 339 } 311 } 340 } 312 } 341 } 313 } 342 314 343 //....oooOO0OOooo........oooOO0OOooo........oo 315 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 344 316 345 void 317 void 346 G4EmConfigurator::PrepareModels(const G4Partic 318 G4EmConfigurator::PrepareModels(const G4ParticleDefinition* aParticle, 347 G4VMultipleSca << 319 G4VMultipleScattering* p) 348 G4Transportati << 349 { 320 { 350 size_t n = particles.size(); 321 size_t n = particles.size(); 351 if(1 < verbose) { 322 if(1 < verbose) { 352 G4cout << " G4EmConfigurator::PrepareModel 323 G4cout << " G4EmConfigurator::PrepareModels for MSC process n= " 353 << n << G4endl; 324 << n << G4endl; 354 } 325 } 355 326 356 if(n > 0) { 327 if(n > 0) { 357 G4String particleName = aParticle->GetPart << 328 G4String particleName = aParticle->GetParticleName(); 358 G4String processName = (nullptr == p) ? G4 << 329 G4String processName = p->GetProcessName(); 359 for(size_t i=0; i<n; ++i) { 330 for(size_t i=0; i<n; ++i) { 360 if(processName == processes[i]) { 331 if(processName == processes[i]) { 361 if ((particleName == particles[i]) || << 332 if((particleName == particles[i]) || 362 || (particles[i] == "charged" && a << 333 (particles[i] == "all") || 363 { << 334 (particles[i] == "charged" && aParticle->GetPDGCharge() != 0.0)) { 364 const G4Region* reg = G4EmUtility::F << 335 G4Region* reg = FindRegion(regions[i]); 365 if (nullptr != reg) { << 336 if(reg) { 366 --index; 337 --index; 367 auto mod = dynamic_cast<G4VMscMode << 338 G4VEmModel* mod = models[i]; 368 if(nullptr != mod) { << 339 if(mod) { 369 if(UpdateModelEnergyRange(mod, l << 340 if(UpdateModelEnergyRange(mod, lowEnergy[i], highEnergy[i])) { 370 if(nullptr != p) { << 341 p->AddEmModel(index,mod,reg); 371 p->AddEmModel(index, mod, re << 372 } << 373 else { << 374 trans->AddMscModel(mod, inde << 375 } << 376 //G4cout << "### Added msc mod 342 //G4cout << "### Added msc model order= " << index << " for " 377 // << particleName << " and << 343 // << particleName << " and " << processName << G4endl; 378 } 344 } 379 } 345 } 380 } 346 } 381 } 347 } 382 } 348 } 383 } 349 } 384 } 350 } 385 } 351 } 386 352 387 //....oooOO0OOooo........oooOO0OOooo........oo 353 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 388 354 389 void G4EmConfigurator::Clear() 355 void G4EmConfigurator::Clear() 390 { 356 { 391 particles.clear(); 357 particles.clear(); 392 processes.clear(); 358 processes.clear(); 393 models.clear(); 359 models.clear(); 394 flucModels.clear(); 360 flucModels.clear(); 395 regions.clear(); 361 regions.clear(); 396 lowEnergy.clear(); 362 lowEnergy.clear(); 397 highEnergy.clear(); 363 highEnergy.clear(); >> 364 } >> 365 >> 366 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 367 >> 368 G4Region* G4EmConfigurator::FindRegion(const G4String& regionName) >> 369 { >> 370 // search for region >> 371 G4Region* reg = 0; >> 372 G4RegionStore* regStore = G4RegionStore::GetInstance(); >> 373 G4String r = regionName; >> 374 if(r == "" || r == "world" || r == "World") { >> 375 r = "DefaultRegionForTheWorld"; >> 376 } >> 377 reg = regStore->GetRegion(r, true); >> 378 if(!reg) { >> 379 G4cout << "### G4EmConfigurator WARNING: fails to find a region <" >> 380 << r << G4endl; >> 381 } else if(verbose > 1) { >> 382 G4cout << "### G4EmConfigurator finds out G4Region <" << r << ">" >> 383 << G4endl; >> 384 } >> 385 return reg; 398 } 386 } 399 387 400 //....oooOO0OOooo........oooOO0OOooo........oo 388 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 401 389 402 G4bool G4EmConfigurator::UpdateModelEnergyRang 390 G4bool G4EmConfigurator::UpdateModelEnergyRange(G4VEmModel* mod, 403 391 G4double emin, G4double emax) 404 { 392 { 405 // energy limits 393 // energy limits 406 G4double e1 = std::max(emin,mod->LowEnergyLi 394 G4double e1 = std::max(emin,mod->LowEnergyLimit()); 407 G4double e2 = std::min(emax,mod->HighEnergyL 395 G4double e2 = std::min(emax,mod->HighEnergyLimit()); 408 if(e2 <= e1) { 396 if(e2 <= e1) { 409 G4cout << "### G4EmConfigurator WARNING: e 397 G4cout << "### G4EmConfigurator WARNING: empty energy interval" 410 << " for <" << mod->GetName() 398 << " for <" << mod->GetName() 411 << "> Emin(MeV)= " << e1/CLHEP::Me 399 << "> Emin(MeV)= " << e1/CLHEP::MeV 412 << "> Emax(MeV)= " << e2/CLHEP::Me 400 << "> Emax(MeV)= " << e2/CLHEP::MeV 413 << G4endl; 401 << G4endl; 414 return false; 402 return false; 415 } 403 } 416 mod->SetLowEnergyLimit(e1); 404 mod->SetLowEnergyLimit(e1); 417 mod->SetHighEnergyLimit(e2); 405 mod->SetHighEnergyLimit(e2); 418 if(verbose > 1) { 406 if(verbose > 1) { 419 G4cout << "### G4EmConfigurator for " << m 407 G4cout << "### G4EmConfigurator for " << mod->GetName() 420 << " Emin(MeV)= " << e1/MeV << " Em 408 << " Emin(MeV)= " << e1/MeV << " Emax(MeV)= " << e2/MeV 421 << G4endl; 409 << G4endl; 422 } 410 } 423 return true; 411 return true; 424 } 412 } 425 413 426 //....oooOO0OOooo........oooOO0OOooo........oo 414 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 427 415