129 if(regnamesPAI.size() > 0)
134 if(regnamesME.size() > 0)
139 if(regnamesMSC.size() > 0)
150 G4int nreg = regnamesPhys.size();
151 if(0 == nreg) {
return; }
154 G4cout <<
"### G4EmModelActivator::ActivateEmOptions for " << nreg <<
" regions"
179 for(
G4int i=0; i<nreg; ++i) {
182 G4cout << i <<
". region <" << reg <<
">; type <" << typesPhys[i] <<
"> "
186 if(
baseName == typesPhys[i]) {
continue; }
188 if(
"G4EmStandard" == typesPhys[i]) {
197 }
else if(
"G4EmStandard_opt1" == typesPhys[i] ||
198 "G4EmStandard_opt2" == typesPhys[i]) {
211 }
else if(
"G4EmStandard_opt3" == typesPhys[i]) {
250 }
else if(
"G4EmStandard_opt4" == typesPhys[i]) {
279 }
else if(
"G4EmStandardGS" == typesPhys[i]) {
290 }
else if(
"G4EmStandardWVI" == typesPhys[i]) {
302 em_config->
SetExtraEmModel(
"e-",
"CoulombScat", mod, reg, 0.0, mscEnergyLimit);
304 em_config->
SetExtraEmModel(
"e+",
"CoulombScat", mod, reg, 0.0, mscEnergyLimit);
311 }
else if(
"G4EmStandardSS" == typesPhys[i] &&
314 for(
const auto& particleName : emList.
PartNames()) {
322 if(particleName ==
"mu+" || particleName ==
"mu-") {
336 }
else if(
"G4EmLivermore" == typesPhys[i]) {
353 em_config->
SetExtraEmModel(
"e-",
"eBrem", mod, reg, 0.0, highEnergyLimit);
360 }
else if(
"G4EmPenelope" == typesPhys[i]) {
374 em_config->
SetExtraEmModel(
"e-",
"eIoni", mod, reg, 0.0, highEnergyLimit, uf);
376 em_config->
SetExtraEmModel(
"e-",
"eBrem", mod, reg, 0.0, highEnergyLimit);
380 em_config->
SetExtraEmModel(
"e+",
"eIoni", mod, reg, 0.0, highEnergyLimit, uf);
382 em_config->
SetExtraEmModel(
"e+",
"eBrem", mod, reg, 0.0, highEnergyLimit);
384 em_config->
SetExtraEmModel(
"e+",
"annihil", mod, reg, 0.0, highEnergyLimit);
391 }
else if(
"G4RadioactiveDecay" == typesPhys[i]) {
401 G4cout <<
"### G4EmModelActivator::ActivateEmOptions WARNING: \n"
402 <<
" EM Physics configuration name <" << typesPhys[i]
403 <<
"> is not known - ignored" <<
G4endl;
414 G4int nreg = regnamesPAI.size();
415 if(0 == nreg) {
return; }
418 G4cout <<
"### G4EmModelActivator::ActivatePAI for " << nreg <<
" regions"
426 std::vector<G4VEnergyLossProcess*>::const_iterator itr;
435 for(
G4int i = 0; i < nreg; ++i) {
437 if(particlesPAI[i] !=
"all") {
440 G4cout <<
"### WARNING: ActivatePAI::FindParticle fails to find "
441 << particlesPAI[i] <<
G4endl;
447 G4cout <<
"### WARNING: ActivatePAI::GetRegion fails to find "
448 << regnamesPAI[i] <<
G4endl;
453 if(p == elec || p == posi)
455 else if (p == mupl || p == mumi)
458 { name =
"ionIoni"; }
463 if(!proc->IsIonisationProcess()) {
continue; }
465 G4String namep = proc->GetProcessName();
467 if(name != namep) {
continue; }
469 if(namep !=
"hIoni" && namep !=
"muIoni" &&
470 namep !=
"eIoni" && namep !=
"ionIoni")
475 if(typesPAI[i] ==
"PAIphoton" || typesPAI[i] ==
"pai_photon") {
484 proc->AddEmModel(0, em, fm, r);
486 G4cout <<
"### G4EmModelActivator: add <" << typesPAI[i]
487 <<
"> model for " << particlesPAI[i]
488 <<
" in the " << regnamesPAI[i] <<
G4endl;
499 G4int nreg = regnamesME.size();
507 G4cout <<
"### G4EmModelActivator::ActivateMicroElec for " << nreg
552 for(
G4int i = 0; i < nreg; ++i)
556 G4cout <<
"### MicroElec models are activated for G4Region " << reg
558 <<
" Energy limits for e- elastic: " << elowest/
eV <<
" eV - "
559 << elimel/
MeV <<
" MeV"
561 <<
" Energy limits for e- inelastic: " << elowest/
eV <<
" eV - "
562 << elimin/
MeV <<
" MeV"
564 <<
" Energy limits for hadrons/ions: " << pmin/
MeV <<
" MeV - "
565 << pmax/
MeV <<
" MeV"
578 em_config->
SetExtraEmModel(
"e-",
"CoulombScat", mod, reg, 0.0, elimel);
583 "e-G4MicroElecElastic",
601 "e-G4MicroElecInelastic",
630 "p_G4MicroElecInelastic",
659 "ion_G4MicroElecInelastic",
674 for(
G4int i = 0; i < nproc; ++i)
715 for(
G4int i = 0; i<nproc; ++i) {
716 if(((*pv)[i])->GetProcessName() == name) {
return; }
718 if(name ==
"CoulombScat") {
722 }
else if(name ==
"Rayl") {
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4GenericIon * GenericIon()
void SetDeexcitationIgnoreCut(G4bool val)
const std::vector< G4String > & PartNames() const
const std::vector< G4String > & RegionsPhysics() const
static G4ParticleTable * GetParticleTable()
G4VAtomDeexcitation * AtomDeexcitation()
static constexpr double MeV
void SetHighEnergyLimit(G4double)
G4int GetProcessListLength() const
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
static constexpr double keV
const G4String & GetParticleName() const
void SetActivationHighEnergyLimit(G4double)
G4double GetPDGCharge() const
void SetStepFunctionMuHad(G4double v1, G4double v2)
static G4MuonMinus * MuonMinus()
static G4Proton * Proton()
void SetExtraEmModel(const G4String &particleName, const G4String &processName, G4VEmModel *, const G4String ®ionName="", G4double emin=0.0, G4double emax=DBL_MAX, G4VEmFluctuationModel *fm=nullptr)
G4ProcessVector * GetProcessList() const
const std::vector< G4VEnergyLossProcess * > & GetEnergyLossProcessVector()
const std::vector< G4String > & RegionsPAI() const
static constexpr double um
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
const std::vector< G4String > & RegionsMicroElec() const
void AddStandardScattering(const G4ParticleDefinition *, G4EmConfigurator *, G4VMscModel *, const G4String &, G4double, G4double)
static constexpr double TeV
G4EmParameters * theParameters
void SetEmModel(G4VEmModel *, G4int index=0)
void SetActivationLowEnergyLimit(G4double)
void SetStepFunction(G4double v1, G4double v2)
const std::vector< G4String > & TypesPAI() const
void SetStepLimitType(G4MscStepLimitType)
void SetPolarAngleLimit(G4double)
static G4Positron * Positron()
static constexpr double eV
static G4Electron * Electron()
void SetRangeFactor(G4double)
G4bool HasMsc(G4ProcessManager *) const
void FindOrAddProcess(const G4ParticleDefinition *, const G4String &)
const std::vector< G4String > & TypesMsc() const
void SetAugerCascade(G4bool val)
static G4RegionStore * GetInstance()
G4ProcessManager * GetProcessManager() const
static G4MuonPlus * MuonPlus()
G4EmModelActivator(const G4String &emphys="")
G4GLOB_DLL std::ostream G4cout
void DefineRegParamForDeex(G4VAtomDeexcitation *) const
static G4LossTableManager * Instance()
static const G4double reg
void SetDeexActiveRegion(const G4String ®ion, G4bool fdeex, G4bool fauger, G4bool fpixe)
G4EmConfigurator * EmConfigurator()
G4double MscEnergyLimit() const
const std::vector< G4String > & RegionsMsc() const
static constexpr double GeV
const std::vector< G4String > & ParticlesPAI() const
static G4EmParameters * Instance()