// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // $Id: G4EmParameters.cc 69320 2013-04-30 15:59:36Z vnivanch $ // // ------------------------------------------------------------------- // // GEANT4 Class file // // // File name: G4EmParameters // // Author: Vladimir Ivanchenko // // Creation date: 18.05.2013 // // Modifications: // // // // ------------------------------------------------------------------- // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... #include "G4EmParameters.hh" #include "G4PhysicalConstants.hh" #include "G4UnitsTable.hh" #include "G4SystemOfUnits.hh" #include "G4VEmProcess.hh" #include "G4VEnergyLossProcess.hh" #include "G4VAtomDeexcitation.hh" #include "G4EmParametersMessenger.hh" #include "G4NistManager.hh" #include "G4RegionStore.hh" #include "G4Region.hh" #include "G4ApplicationState.hh" #include "G4StateManager.hh" G4EmParameters* G4EmParameters::theInstance = nullptr; #ifdef G4MULTITHREADED G4Mutex G4EmParameters::emParametersMutex = G4MUTEX_INITIALIZER; #endif //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... G4EmParameters* G4EmParameters::Instance() { if(nullptr == theInstance) { #ifdef G4MULTITHREADED G4MUTEXLOCK(&emParametersMutex); if(nullptr == theInstance) { #endif static G4EmParameters manager; theInstance = &manager; #ifdef G4MULTITHREADED } G4MUTEXUNLOCK(&emParametersMutex); #endif } return theInstance; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... G4EmParameters::~G4EmParameters() { delete theMessenger; delete emSaturation; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... G4EmParameters::G4EmParameters() { G4NistManager::Instance(); theMessenger = new G4EmParametersMessenger(this); fStateManager = G4StateManager::GetStateManager(); Initialise(); emSaturation = nullptr; } void G4EmParameters::SetDefaults() { if(!IsLocked()) { Initialise(); } } void G4EmParameters::Initialise() { lossFluctuation = true; buildCSDARange = false; flagLPM = true; spline = true; cutAsFinalRange = false; applyCuts = false; fluo = false; beardenFluoDir = false; auger = false; augerCascade = false; pixe = false; deexIgnoreCut = false; lateralDisplacement = true; lateralDisplacementAlg96 = true; muhadLateralDisplacement = false; latDisplacementBeyondSafety = false; useAngGeneratorForIonisation = false; useMottCorrection = false; integral = true; birks = false; dnaFast = false; dnaStationary = false; dnaMsc = false; gammaShark = false; onIsolated = false; minSubRange = 1.0; minKinEnergy = 0.1*CLHEP::keV; maxKinEnergy = 100.0*CLHEP::TeV; maxKinEnergyCSDA = 1.0*CLHEP::GeV; lowestElectronEnergy = 1.0*CLHEP::keV; lowestMuHadEnergy = 1.0*CLHEP::keV; lowestTripletEnergy = 1.0*CLHEP::MeV; linLossLimit = 0.01; bremsTh = maxKinEnergy; lambdaFactor = 0.8; factorForAngleLimit = 1.0; thetaLimit = CLHEP::pi; energyLimit = 100.0*CLHEP::MeV; rangeFactor = 0.04; rangeFactorMuHad = 0.2; geomFactor = 2.5; skin = 1.0; dRoverRange = 0.2; finalRange = CLHEP::mm; dRoverRangeMuHad = 0.2; finalRangeMuHad = 0.1*CLHEP::mm; factorScreen = 1.0; nbins = 84; nbinsPerDecade = 7; verbose = 1; workerVerbose = 0; tripletConv = 0; mscStepLimit = fUseSafety; mscStepLimitMuHad = fMinimal; nucFormfactor = fExponentialNF; dnaElectronSolvation = fMeesungnoen2002eSolvation; namePIXE = "Empirical"; nameElectronPIXE = "Livermore"; } void G4EmParameters::SetLossFluctuations(G4bool val) { if(IsLocked()) { return; } lossFluctuation = val; } G4bool G4EmParameters::LossFluctuation() const { return lossFluctuation; } void G4EmParameters::SetBuildCSDARange(G4bool val) { if(IsLocked()) { return; } buildCSDARange = val; } G4bool G4EmParameters::BuildCSDARange() const { return buildCSDARange; } void G4EmParameters::SetLPM(G4bool val) { if(IsLocked()) { return; } flagLPM = val; } G4bool G4EmParameters::LPM() const { return flagLPM; } void G4EmParameters::SetSpline(G4bool val) { if(IsLocked()) { return; } spline = val; } G4bool G4EmParameters::Spline() const { return spline; } void G4EmParameters::SetUseCutAsFinalRange(G4bool val) { if(IsLocked()) { return; } cutAsFinalRange = val; } G4bool G4EmParameters::UseCutAsFinalRange() const { return cutAsFinalRange; } void G4EmParameters::SetApplyCuts(G4bool val) { if(IsLocked()) { return; } applyCuts = val; } G4bool G4EmParameters::ApplyCuts() const { return applyCuts; } void G4EmParameters::SetFluo(G4bool val) { if(IsLocked()) { return; } fluo = val; } G4bool G4EmParameters::Fluo() const { return fluo; } void G4EmParameters::SetBeardenFluoDir(G4bool val) { if(IsLocked()) { return; } beardenFluoDir = val; } G4bool G4EmParameters::BeardenFluoDir() const { return beardenFluoDir; } void G4EmParameters::SetAuger(G4bool val) { SetAugerCascade(val); } G4bool G4EmParameters::Auger() const { return auger; } void G4EmParameters::SetAugerCascade(G4bool val) { if(IsLocked()) { return; } augerCascade = val; auger = val; if(val) { fluo = true; } } G4bool G4EmParameters::AugerCascade() const { return augerCascade; } void G4EmParameters::SetPixe(G4bool val) { if(IsLocked()) { return; } pixe = val; if(val) { fluo = true; } } G4bool G4EmParameters::Pixe() const { return pixe; } void G4EmParameters::SetDeexcitationIgnoreCut(G4bool val) { if(IsLocked()) { return; } deexIgnoreCut = val; } G4bool G4EmParameters::DeexcitationIgnoreCut() const { return deexIgnoreCut; } void G4EmParameters::SetLateralDisplacement(G4bool val) { if(IsLocked()) { return; } lateralDisplacement = val; } G4bool G4EmParameters::LateralDisplacement() const { return lateralDisplacement; } void G4EmParameters::SetLateralDisplacementAlg96(G4bool val) { if(IsLocked()) { return; } lateralDisplacementAlg96 = val; } G4bool G4EmParameters::LateralDisplacementAlg96() const { return lateralDisplacementAlg96; } void G4EmParameters::SetMuHadLateralDisplacement(G4bool val) { if(IsLocked()) { return; } muhadLateralDisplacement = val; } G4bool G4EmParameters::MuHadLateralDisplacement() const { return muhadLateralDisplacement; } void G4EmParameters::SetLatDisplacementBeyondSafety(G4bool val) { if(IsLocked()) { return; } latDisplacementBeyondSafety = val; } G4bool G4EmParameters::LatDisplacementBeyondSafety() const { return latDisplacementBeyondSafety; } void G4EmParameters::ActivateAngularGeneratorForIonisation(G4bool val) { if(IsLocked()) { return; } useAngGeneratorForIonisation = val; } G4bool G4EmParameters::UseAngularGeneratorForIonisation() const { return useAngGeneratorForIonisation; } void G4EmParameters::SetUseMottCorrection(G4bool val) { if(IsLocked()) { return; } useMottCorrection = val; } G4bool G4EmParameters::UseMottCorrection() const { return useMottCorrection; } void G4EmParameters::SetIntegral(G4bool val) { if(IsLocked()) { return; } integral = val; } G4bool G4EmParameters::Integral() const { return integral; } void G4EmParameters::SetBirksActive(G4bool val) { birks = val; #ifdef G4MULTITHREADED G4MUTEXLOCK(&G4EmParameters::emParametersMutex); #endif if(birks) { if(!emSaturation) { emSaturation = new G4EmSaturation(1); } emSaturation->InitialiseG4Saturation(); } #ifdef G4MULTITHREADED G4MUTEXUNLOCK(&G4EmParameters::emParametersMutex); #endif } G4bool G4EmParameters::BirksActive() const { return birks; } void G4EmParameters::SetDNAFast(G4bool val) { if(IsLocked()) { return; } dnaFast = val; } G4bool G4EmParameters::DNAFast() const { return dnaFast; } void G4EmParameters::SetDNAStationary(G4bool val) { if(IsLocked()) { return; } dnaStationary = val; } G4bool G4EmParameters::DNAStationary() const { return dnaStationary; } void G4EmParameters::SetDNAElectronMsc(G4bool val) { if(IsLocked()) { return; } dnaMsc = val; } G4bool G4EmParameters::DNAElectronMsc() const { return dnaMsc; } void G4EmParameters::SetGammaSharkActive(G4bool val) { if(IsLocked()) { return; } gammaShark = val; } G4bool G4EmParameters::GammaSharkActive() const { return gammaShark; } void G4EmParameters::SetEmSaturation(G4EmSaturation* ptr) { if(emSaturation != ptr) { delete emSaturation; emSaturation = ptr; SetBirksActive(true); } } void G4EmParameters::SetOnIsolated(G4bool val) { if(IsLocked()) { return; } onIsolated = val; } G4bool G4EmParameters::OnIsolated() const { return onIsolated; } G4EmSaturation* G4EmParameters::GetEmSaturation() { if(!emSaturation) { SetBirksActive(true); } return emSaturation; } void G4EmParameters::SetMinSubRange(G4double val) { if(IsLocked()) { return; } if(val > 0.0 && val < 1.0) { minSubRange = val; } else { G4ExceptionDescription ed; ed << "Value of MinSubRange is out of range (0 - 1): " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MinSubRange() const { return minSubRange; } void G4EmParameters::SetMinEnergy(G4double val) { if(IsLocked()) { return; } if(val > 1.e-3*eV && val < maxKinEnergy) { minKinEnergy = val; nbins = nbinsPerDecade*G4lrint(std::log10(maxKinEnergy/minKinEnergy)); } else { G4ExceptionDescription ed; ed << "Value of MinKinEnergy is out of range: " << val/MeV << " MeV is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MinKinEnergy() const { return minKinEnergy; } void G4EmParameters::SetMaxEnergy(G4double val) { if(IsLocked()) { return; } if(val > minKinEnergy && val < 1.e+7*TeV) { maxKinEnergy = val; nbins = nbinsPerDecade*G4lrint(std::log10(maxKinEnergy/minKinEnergy)); } else { G4ExceptionDescription ed; ed << "Value of MaxKinEnergy is out of range: " << val/GeV << " GeV is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MaxKinEnergy() const { return maxKinEnergy; } void G4EmParameters::SetMaxEnergyForCSDARange(G4double val) { if(IsLocked()) { return; } if(val > minKinEnergy && val <= 100*TeV) { maxKinEnergyCSDA = val; } else { G4ExceptionDescription ed; ed << "Value of MaxKinEnergyCSDA is out of range: " << val/GeV << " GeV is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MaxEnergyForCSDARange() const { return maxKinEnergyCSDA; } void G4EmParameters::SetLowestElectronEnergy(G4double val) { if(IsLocked()) { return; } if(val >= 0.0) { lowestElectronEnergy = val; } else { G4ExceptionDescription ed; ed << "Value of lowestElectronEnergy is out of range: " << val/MeV << " MeV is ignored"; PrintWarning(ed); } } G4double G4EmParameters::LowestElectronEnergy() const { return lowestElectronEnergy; } void G4EmParameters::SetLowestMuHadEnergy(G4double val) { if(IsLocked()) { return; } if(val >= 0.0) { lowestMuHadEnergy = val; } else { G4ExceptionDescription ed; ed << "Value of lowestMuHadEnergy is out of range: " << val/MeV << " MeV is ignored"; PrintWarning(ed); } } G4double G4EmParameters::LowestMuHadEnergy() const { return lowestMuHadEnergy; } void G4EmParameters::SetLowestTripletEnergy(G4double val) { if(IsLocked()) { return; } if(val > 0.0) { lowestTripletEnergy = val; } } G4double G4EmParameters::LowestTripletEnergy() const { return lowestTripletEnergy; } void G4EmParameters::SetLinearLossLimit(G4double val) { if(IsLocked()) { return; } if(val > 0.0 && val < 0.5) { linLossLimit = val; } else { G4ExceptionDescription ed; ed << "Value of linLossLimit is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::LinearLossLimit() const { return linLossLimit; } void G4EmParameters::SetBremsstrahlungTh(G4double val) { if(IsLocked()) { return; } if(val > 0.0) { bremsTh = val; } else { G4ExceptionDescription ed; ed << "Value of bremsstrahlung threshold is out of range: " << val/GeV << " GeV is ignored"; PrintWarning(ed); } } G4double G4EmParameters::BremsstrahlungTh() const { return bremsTh; } void G4EmParameters::SetLambdaFactor(G4double val) { if(IsLocked()) { return; } if(val > 0.0 && val < 1.0) { lambdaFactor = val; } else { G4ExceptionDescription ed; ed << "Value of lambda factor is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::LambdaFactor() const { return lambdaFactor; } void G4EmParameters::SetFactorForAngleLimit(G4double val) { if(IsLocked()) { return; } if(val > 0.0) { factorForAngleLimit = val; } else { G4ExceptionDescription ed; ed << "Value of factor for enegry limit is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::FactorForAngleLimit() const { return factorForAngleLimit; } void G4EmParameters::SetMscThetaLimit(G4double val) { if(IsLocked()) { return; } if(val >= 0.0 && val <= pi) { thetaLimit = val; } else { G4ExceptionDescription ed; ed << "Value of polar angle limit is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MscThetaLimit() const { return thetaLimit; } void G4EmParameters::SetMscEnergyLimit(G4double val) { if(IsLocked()) { return; } if(val >= 0.0) { energyLimit = val; } else { G4ExceptionDescription ed; ed << "Value of msc energy limit is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MscEnergyLimit() const { return energyLimit; } void G4EmParameters::SetMscRangeFactor(G4double val) { if(IsLocked()) { return; } if(val > 0.0 && val < 1.0) { rangeFactor = val; } else { G4ExceptionDescription ed; ed << "Value of rangeFactor is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MscRangeFactor() const { return rangeFactor; } void G4EmParameters::SetMscMuHadRangeFactor(G4double val) { if(IsLocked()) { return; } if(val > 0.0 && val < 1.0) { rangeFactorMuHad = val; } else { G4ExceptionDescription ed; ed << "Value of rangeFactorMuHad is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MscMuHadRangeFactor() const { return rangeFactorMuHad; } void G4EmParameters::SetMscGeomFactor(G4double val) { if(IsLocked()) { return; } if(val >= 1.0) { geomFactor = val; } else { G4ExceptionDescription ed; ed << "Value of geomFactor is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MscGeomFactor() const { return geomFactor; } void G4EmParameters::SetMscSkin(G4double val) { if(IsLocked()) { return; } if(val >= 1.0) { skin = val; } else { G4ExceptionDescription ed; ed << "Value of skin is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::MscSkin() const { return skin; } void G4EmParameters::SetScreeningFactor(G4double val) { if(IsLocked()) { return; } if(val > 0.0) { factorScreen = val; } else { G4ExceptionDescription ed; ed << "Value of factorScreen is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4double G4EmParameters::ScreeningFactor() const { return factorScreen; } void G4EmParameters::SetStepFunction(G4double v1, G4double v2) { if(IsLocked()) { return; } if(v1 > 0.0 && v1 <= 1.0 && v2 > 0.0) { dRoverRange = v1; finalRange = v2; } else { G4ExceptionDescription ed; ed << "Values of step function are out of range: " << v1 << ", " << v2/CLHEP::mm << " mm - are ignored"; PrintWarning(ed); } } void G4EmParameters::SetStepFunctionMuHad(G4double v1, G4double v2) { if(IsLocked()) { return; } if(v1 > 0.0 && v1 <= 1.0 && v2 > 0.0) { dRoverRangeMuHad = v1; finalRangeMuHad = v2; } else { G4ExceptionDescription ed; ed << "Values of step function are out of range: " << v1 << ", " << v2/CLHEP::mm << " mm - are ignored"; PrintWarning(ed); } } void G4EmParameters::SetNumberOfBins(G4int val) { if(IsLocked()) { return; } if(val >= 5 && val < 10000000) { nbins = val; nbinsPerDecade = G4lrint(nbins/std::log10(maxKinEnergy/minKinEnergy)); } else { G4ExceptionDescription ed; ed << "Value of number of bins is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4int G4EmParameters::NumberOfBins() const { return nbins; } void G4EmParameters::SetNumberOfBinsPerDecade(G4int val) { if(IsLocked()) { return; } if(val >= 5 && val < 1000000) { nbinsPerDecade = val; nbins = nbinsPerDecade*G4lrint(std::log10(maxKinEnergy/minKinEnergy)); } else { G4ExceptionDescription ed; ed << "Value of number of bins per decade is out of range: " << val << " is ignored"; PrintWarning(ed); } } G4int G4EmParameters::NumberOfBinsPerDecade() const { return nbinsPerDecade; } void G4EmParameters::SetVerbose(G4int val) { if(IsLocked()) { return; } verbose = val; workerVerbose = std::min(workerVerbose, verbose); } G4int G4EmParameters::Verbose() const { return verbose; } void G4EmParameters::SetWorkerVerbose(G4int val) { if(IsLocked()) { return; } workerVerbose = val; } G4int G4EmParameters::WorkerVerbose() const { return workerVerbose; } void G4EmParameters::SetMscStepLimitType(G4MscStepLimitType val) { if(IsLocked()) { return; } mscStepLimit = val; } G4MscStepLimitType G4EmParameters::MscStepLimitType() const { return mscStepLimit; } void G4EmParameters::SetMscMuHadStepLimitType(G4MscStepLimitType val) { if(IsLocked()) { return; } mscStepLimitMuHad = val; } G4MscStepLimitType G4EmParameters::MscMuHadStepLimitType() const { return mscStepLimitMuHad; } void G4EmParameters::SetNuclearFormfactorType(G4NuclearFormfactorType val) { if(IsLocked()) { return; } nucFormfactor = val; } G4NuclearFormfactorType G4EmParameters::NuclearFormfactorType() const { return nucFormfactor; } void G4EmParameters::SetDNAeSolvationSubType(G4DNAModelSubType val) { if(IsLocked()) { return; } dnaElectronSolvation = val; } G4DNAModelSubType G4EmParameters::DNAeSolvationSubType() const { return dnaElectronSolvation; } void G4EmParameters::SetConversionType(G4int val) { if(IsLocked()) { return; } tripletConv = val; } G4int G4EmParameters::GetConversionType() const { return tripletConv; } void G4EmParameters::SetPIXECrossSectionModel(const G4String& sss) { if(IsLocked()) { return; } G4cout << "G4EmParameters::SetPIXECrossSectionModel " << sss << G4endl; namePIXE = sss; } const G4String& G4EmParameters::PIXECrossSectionModel() { return namePIXE; } void G4EmParameters::SetPIXEElectronCrossSectionModel(const G4String& sss) { if(IsLocked()) { return; } nameElectronPIXE = sss; } const G4String& G4EmParameters::PIXEElectronCrossSectionModel() { return nameElectronPIXE; } void G4EmParameters::PrintWarning(G4ExceptionDescription& ed) const { G4Exception("G4EmParameters", "em0044", JustWarning, ed); } G4String G4EmParameters::CheckRegion(const G4String& reg) const { G4String r = reg; if(r == "" || r == "world" || r == "World") { r = "DefaultRegionForTheWorld"; } return r; } void G4EmParameters::AddPAIModel(const G4String& particle, const G4String& region, const G4String& type) { if(IsLocked()) { return; } G4String r = CheckRegion(region); G4int nreg = m_regnamesPAI.size(); for(G4int i=0; i& G4EmParameters::ParticlesPAI() const { return m_particlesPAI; } const std::vector& G4EmParameters::RegionsPAI() const { return m_regnamesPAI; } const std::vector& G4EmParameters::TypesPAI() const { return m_typesPAI; } void G4EmParameters::AddMicroElec(const G4String& region) { if(IsLocked()) { return; } G4String r = CheckRegion(region); G4int nreg = m_regnamesME.size(); for(G4int i=0; i& G4EmParameters::RegionsMicroElec() const { return m_regnamesME; } void G4EmParameters::AddDNA(const G4String& region, const G4String& type) { if(IsLocked()) { return; } G4String r = CheckRegion(region); G4int nreg = m_regnamesDNA.size(); for(G4int i=0; i& G4EmParameters::RegionsDNA() const { return m_regnamesDNA; } const std::vector& G4EmParameters::TypesDNA() const { return m_typesDNA; } void G4EmParameters::AddMsc(const G4String& region, const G4String& type) { AddPhysics(region, type); } const std::vector& G4EmParameters::RegionsMsc() const { return m_regnamesMsc; } const std::vector& G4EmParameters::TypesMsc() const { return m_typesMsc; } void G4EmParameters::AddPhysics(const G4String& region, const G4String& type) { if(IsLocked()) { return; } G4String r = CheckRegion(region); G4int nreg = m_regnamesMsc.size(); for(G4int i=0; i& G4EmParameters::RegionsPhysics() const { return m_regnamesMsc; } const std::vector& G4EmParameters::TypesPhysics() const { return m_typesMsc; } void G4EmParameters::SetSubCutoff(G4bool val, const G4String& region) { if(IsLocked()) { return; } G4String r = CheckRegion(region); G4int nreg = m_regnamesSubCut.size(); for(G4int i=0; i 0.0) { G4int n = m_procBiasedXS.size(); for(G4int i=0; i= 0.0) { G4int n = m_procForced.size(); for(G4int i=0; i= 0.0 && energyLim >= 0.0) { G4int n = m_procBiasedSec.size(); for(G4int i=0; iSetStepFunction(dRoverRange, finalRange, false); } else { ptr->SetStepFunction(dRoverRangeMuHad, finalRangeMuHad, false); } G4RegionStore* regionStore = G4RegionStore::GetInstance(); G4int n = m_regnamesSubCut.size(); for(G4int i=0; iGetRegion(m_regnamesSubCut[i], false); if(reg) { ptr->ActivateSubCutoff(m_subCuts[i], reg); } } n = m_procBiasedXS.size(); for(G4int i=0; iGetProcessName() == m_procBiasedXS[i]) { ptr->SetCrossSectionBiasingFactor(m_factBiasedXS[i], m_weightBiasedXS[i]); break; } } n = m_procForced.size(); for(G4int i=0; iGetProcessName() == m_procForced[i]) { ptr->ActivateForcedInteraction(m_lengthForced[i], m_regnamesForced[i], m_weightForced[i]); break; } } n = m_procBiasedSec.size(); for(G4int i=0; iGetProcessName() == m_procBiasedSec[i]) { ptr->ActivateSecondaryBiasing(m_regnamesBiasedSec[i], m_factBiasedSec[i], m_elimBiasedSec[i]); break; } } } void G4EmParameters::DefineRegParamForEM(G4VEmProcess* ptr) const { G4int n = m_procBiasedXS.size(); for(G4int i=0; iGetProcessName() == m_procBiasedXS[i]) { ptr->SetCrossSectionBiasingFactor(m_factBiasedXS[i], m_weightBiasedXS[i]); break; } } n = m_procForced.size(); for(G4int i=0; iGetProcessName() == m_procForced[i]) { ptr->ActivateForcedInteraction(m_lengthForced[i], m_regnamesForced[i], m_weightForced[i]); break; } } n = m_procBiasedSec.size(); for(G4int i=0; iGetProcessName() == m_procBiasedSec[i]) { ptr->ActivateSecondaryBiasing(m_regnamesBiasedSec[i], m_factBiasedSec[i], m_elimBiasedSec[i]); break; } } } void G4EmParameters::DefineRegParamForDeex(G4VAtomDeexcitation* ptr) const { G4int n = m_regnamesDeex.size(); for(G4int i=0; iSetDeexcitationActiveRegion(m_regnamesDeex[i], m_fluo[i], m_auger[i], m_pixe[i]); } } std::ostream& G4EmParameters::StreamInfo(std::ostream& os) const { G4int prec = os.precision(5); os << "=======================================================================" << "\n"; os << "====== Electromagnetic Physics Parameters ========" << "\n"; os << "=======================================================================" << "\n"; os << "LPM effect enabled " <GetCurrentState() != G4State_PreInit && fStateManager->GetCurrentState() != G4State_Init && fStateManager->GetCurrentState() != G4State_Idle)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....