Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4UrbanAdjointMscModel Class Reference

#include <G4UrbanAdjointMscModel.hh>

Inheritance diagram for G4UrbanAdjointMscModel:
G4VMscModel G4VEmModel

Public Member Functions

virtual G4double ChargeSquareRatio (const G4Track &)
 
G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *, const G4Element *, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *particle, G4double KineticEnergy, G4double AtomicNumber, G4double AtomicWeight=0., G4double cut=0., G4double emax=DBL_MAX) override
 
virtual G4double ComputeCrossSectionPerShell (const G4ParticleDefinition *, G4int Z, G4int shellIdx, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeDEDX (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
 
virtual G4double ComputeDEDXPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
 
G4double ComputeGeomLimit (const G4Track &, G4double &presafety, G4double limit)
 
G4double ComputeGeomPathLength (G4double truePathLength) override
 
G4double ComputeMeanFreePath (const G4ParticleDefinition *, G4double kineticEnergy, const G4Material *, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeSafety (const G4ThreeVector &position, G4double limit=DBL_MAX)
 
G4double ComputeTheta0 (G4double truePathLength, G4double KineticEnergy)
 
G4double ComputeTruePathLengthLimit (const G4Track &track, G4double &currentMinimalStep) override
 
G4double ComputeTrueStepLength (G4double geomStepLength) override
 
virtual void CorrectionsAlongStep (const G4MaterialCutsCouple *, const G4DynamicParticle *, const G4double &length, G4double &eloss)
 
G4double CrossSection (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
virtual G4double CrossSectionPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4bool DeexcitationFlag () const
 
virtual void DefineForRegion (const G4Region *)
 
void DumpParameters (std::ostream &out) const
 
virtual void FillNumberOfSecondaries (G4int &numberOfTriplets, G4int &numberOfRecoil)
 
G4bool ForceBuildTableFlag () const
 
 G4UrbanAdjointMscModel (const G4String &nam="UrbanMsc")
 
 G4UrbanAdjointMscModel (const G4UrbanAdjointMscModel &)=delete
 
G4VEmAngularDistributionGetAngularDistribution ()
 
virtual G4double GetChargeSquareRatio (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4PhysicsTableGetCrossSectionTable ()
 
const G4ElementGetCurrentElement () const
 
const G4IsotopeGetCurrentIsotope () const
 
G4double GetDEDX (const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
 
G4double GetDEDX (const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple, G4double logKineticEnergy)
 
G4ElementDataGetElementData ()
 
std::vector< G4EmElementSelector * > * GetElementSelectors ()
 
G4double GetEnergy (const G4ParticleDefinition *part, G4double range, const G4MaterialCutsCouple *couple)
 
G4VEnergyLossProcessGetIonisation () const
 
G4VEmFluctuationModelGetModelOfFluctuations ()
 
const G4StringGetName () const
 
virtual G4double GetPartialCrossSection (const G4Material *, G4int level, const G4ParticleDefinition *, G4double kineticEnergy)
 
virtual G4double GetParticleCharge (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double GetRange (const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
 
G4double GetRange (const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple, G4double logKineticEnergy)
 
G4double GetTransportMeanFreePath (const G4ParticleDefinition *part, G4double kinEnergy)
 
G4double GetTransportMeanFreePath (const G4ParticleDefinition *part, G4double kinEnergy, G4double logKinEnergy)
 
G4VEmModelGetTripletModel ()
 
G4double HighEnergyActivationLimit () const
 
G4double HighEnergyLimit () const
 
void Initialise (const G4ParticleDefinition *, const G4DataVector &) override
 
void InitialiseElementSelectors (const G4ParticleDefinition *, const G4DataVector &)
 
virtual void InitialiseForElement (const G4ParticleDefinition *, G4int Z)
 
virtual void InitialiseForMaterial (const G4ParticleDefinition *, const G4Material *)
 
virtual void InitialiseLocal (const G4ParticleDefinition *, G4VEmModel *masterModel)
 
void InitialiseParameters (const G4ParticleDefinition *)
 
G4bool IsActive (G4double kinEnergy) const
 
G4bool IsLocked () const
 
G4bool IsMaster () const
 
G4double LowEnergyActivationLimit () const
 
G4double LowEnergyLimit () const
 
G4bool LPMFlag () const
 
G4double MaxSecondaryKinEnergy (const G4DynamicParticle *dynParticle)
 
virtual G4double MinEnergyCut (const G4ParticleDefinition *, const G4MaterialCutsCouple *)
 
virtual G4double MinPrimaryEnergy (const G4Material *, const G4ParticleDefinition *, G4double cut=0.0)
 
virtual void ModelDescription (std::ostream &outFile) const
 
G4UrbanAdjointMscModeloperator= (const G4UrbanAdjointMscModel &right)=delete
 
G4double PolarAngleLimit () const
 
G4ThreeVectorSampleScattering (const G4ThreeVector &, G4double safety) override
 
void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double tmax) override
 
G4double SecondaryThreshold () const
 
G4int SelectIsotopeNumber (const G4Element *)
 
const G4ElementSelectRandomAtom (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementSelectRandomAtom (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4int SelectRandomAtomNumber (const G4Material *)
 
const G4ElementSelectTargetAtom (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double logKineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
void SetActivationHighEnergyLimit (G4double)
 
void SetActivationLowEnergyLimit (G4double)
 
void SetAngularDistribution (G4VEmAngularDistribution *)
 
void SetAngularGeneratorFlag (G4bool)
 
void SetCrossSectionTable (G4PhysicsTable *, G4bool isLocal)
 
void SetCurrentCouple (const G4MaterialCutsCouple *)
 
void SetDeexcitationFlag (G4bool val)
 
void SetElementSelectors (std::vector< G4EmElementSelector * > *)
 
void SetFluctuationFlag (G4bool val)
 
void SetForceBuildTable (G4bool val)
 
void SetGeomFactor (G4double)
 
void SetHighEnergyLimit (G4double)
 
void SetIonisation (G4VEnergyLossProcess *, const G4ParticleDefinition *part)
 
void SetLambdaLimit (G4double)
 
void SetLateralDisplasmentFlag (G4bool val)
 
void SetLocked (G4bool)
 
void SetLowEnergyLimit (G4double)
 
void SetLPMFlag (G4bool val)
 
void SetMasterThread (G4bool val)
 
void SetNewDisplacementFlag (G4bool)
 
void SetParticleChange (G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
 
void SetPolarAngleLimit (G4double)
 
void SetRangeFactor (G4double)
 
void SetSafetyFactor (G4double)
 
void SetSampleZ (G4bool)
 
void SetSecondaryThreshold (G4double)
 
void SetSkin (G4double)
 
void SetStepLimitType (G4MscStepLimitType)
 
void SetTripletModel (G4VEmModel *)
 
virtual void SetupForMaterial (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
void SetUseBaseMaterials (G4bool val)
 
void StartTracking (G4Track *) override
 
G4bool UseAngularGeneratorFlag () const
 
G4bool UseBaseMaterials () const
 
virtual G4double Value (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
 
 ~G4UrbanAdjointMscModel () override
 

Protected Member Functions

G4double ConvertTrueToGeom (G4double &tLength, G4double &gLength)
 
const G4MaterialCutsCoupleCurrentCouple () const
 
G4ParticleChangeForGammaGetParticleChangeForGamma ()
 
G4ParticleChangeForLossGetParticleChangeForLoss ()
 
G4ParticleChangeForMSCGetParticleChangeForMSC (const G4ParticleDefinition *p=nullptr)
 
virtual G4double MaxSecondaryEnergy (const G4ParticleDefinition *, G4double kineticEnergy)
 
void SetCurrentElement (const G4Element *)
 

Protected Attributes

size_t basedCoupleIndex = 0
 
size_t currentCoupleIndex = 0
 
G4double dtrl = 0.05
 
G4double facgeom = 2.5
 
G4double facrange = 0.04
 
G4double facsafety = 0.6
 
G4ThreeVector fDisplacement
 
G4ElementDatafElementData = nullptr
 
G4double geomMax
 
G4double geomMin
 
G4double inveplus
 
G4bool latDisplasment = true
 
G4bool lossFlucFlag = true
 
const G4MaterialpBaseMaterial = nullptr
 
G4double pFactor = 1.0
 
G4VParticleChangepParticleChange = nullptr
 
G4bool samplez = false
 
G4double skin = 1.0
 
G4MscStepLimitType steppingAlgorithm
 
const std::vector< G4double > * theDensityFactor = nullptr
 
const std::vector< G4int > * theDensityIdx = nullptr
 
G4PhysicsTablexSectionTable = nullptr
 

Private Member Functions

G4double Randomizetlimit ()
 
G4double SampleCosineTheta (G4double trueStepLength, G4double KineticEnergy)
 
void SampleDisplacement (G4double sinTheta, G4double phi)
 
void SampleDisplacementNew (G4double sinTheta, G4double phi)
 
void SetParticle (const G4ParticleDefinition *)
 
G4double SimpleScattering (G4double xmeanth, G4double x2meanth)
 
void UpdateCache ()
 

Private Attributes

G4VEmAngularDistributionanglModel = nullptr
 
G4double charge
 
G4double ChargeSquare
 
G4double coeffc1
 
G4double coeffc2
 
G4double coeffc3
 
G4double coeffc4
 
G4double coeffth1
 
G4double coeffth2
 
const G4MaterialCutsCouplecouple
 
G4double currentKinEnergy
 
G4int currentMaterialIndex
 
const G4ParticleDefinitioncurrentPart = nullptr
 
G4double currentRadLength
 
G4double currentRange
 
G4double currentTau
 
G4double dedx = 0.0
 
G4bool displacementFlag
 
G4double drr
 
std::vector< G4EmElementSelector * > * elmSelectors = nullptr
 
G4double eMaxActive = DBL_MAX
 
G4double eMinActive = 0.0
 
const G4MaterialCutsCouplefCurrentCouple = nullptr
 
const G4ElementfCurrentElement = nullptr
 
const G4IsotopefCurrentIsotope = nullptr
 
G4LossTableManagerfEmManager
 
G4double finalr
 
G4bool firstStep
 
G4bool flagDeexcitation = false
 
G4bool flagForceBuildTable = false
 
G4VEmFluctuationModelflucModel = nullptr
 
G4ParticleChangeForMSCfParticleChange
 
G4double fr
 
G4VEmModelfTripletModel = nullptr
 
G4double geombig
 
G4double geomlimit
 
G4double geommin
 
G4double highLimit
 
G4bool insideskin
 
G4VEnergyLossProcessionisation = nullptr
 
G4bool isLocked = false
 
G4bool isMaster = true
 
G4double lambda0
 
G4double lambdaeff
 
G4double lambdalimit
 
G4bool latDisplasmentbackup
 
G4double lnZ
 
G4bool localElmSelectors = true
 
G4double localrange = DBL_MAX
 
G4bool localTable = true
 
G4double localtkin = 0.0
 
G4double lowLimit
 
G4double mass
 
G4double masslimite
 
const G4String name
 
G4int nsec = 5
 
G4int nSelectors = 0
 
G4double par1
 
G4double par2
 
G4double par3
 
const G4ParticleDefinitionparticle
 
G4double polarAngleLimit
 
const G4ParticleDefinitionpositron
 
G4double presafety
 
G4double rangecut
 
G4double rangeinit
 
CLHEP::HepRandomEnginerndmEngineMod
 
G4SafetyHelpersafetyHelper = nullptr
 
G4double secondaryThreshold = DBL_MAX
 
G4double skindepth
 
G4double smallstep
 
G4double stepmin
 
G4double taubig
 
G4double taulim
 
G4double tausmall
 
G4double tgeom
 
G4bool theLPMflag = false
 
G4LossTableManagertheManager
 
G4double tlimit
 
G4double tlimitmin
 
G4double tlimitminfix
 
G4double tlimitminfix2
 
G4double tPathLength
 
G4bool useAngularGenerator = false
 
G4bool useBaseMaterials = false
 
std::vector< G4doublexsec
 
G4double Z2
 
G4double Z23
 
G4double Zeff
 
G4double Zold
 
G4double zPathLength
 

Detailed Description

Definition at line 52 of file G4UrbanAdjointMscModel.hh.

Constructor & Destructor Documentation

◆ G4UrbanAdjointMscModel() [1/2]

G4UrbanAdjointMscModel::G4UrbanAdjointMscModel ( const G4String nam = "UrbanMsc")
explicit

Definition at line 63 of file G4UrbanAdjointMscModel.cc.

64 : G4VMscModel(nam)
65{
66 masslimite = 0.6 * MeV;
67 lambdalimit = 1. * mm;
68 fr = 0.02;
69 taubig = 8.0;
70 tausmall = 1.e-16;
71 taulim = 1.e-6;
73 tlimitminfix = 0.01 * nm;
74 tlimitminfix2 = 1. * nm;
76 smallstep = 1.e10;
77 currentRange = 0.;
78 rangeinit = 0.;
79 tlimit = 1.e10 * mm;
80 tlimitmin = 10. * tlimitminfix;
81 tgeom = 1.e50 * mm;
82 geombig = 1.e50 * mm;
83 geommin = 1.e-3 * mm;
85 presafety = 0. * mm;
86
87 facsafety = 0.6;
88
89 Zold = 0.;
90 Zeff = 1.;
91 Z2 = 1.;
92 Z23 = 1.;
93 lnZ = 0.;
94 coeffth1 = 0.;
95 coeffth2 = 0.;
96 coeffc1 = 0.;
97 coeffc2 = 0.;
98 coeffc3 = 0.;
99 coeffc4 = 0.;
100 particle = nullptr;
101
104 rndmEngineMod = G4Random::getTheEngine();
105
106 firstStep = true;
107 insideskin = false;
108 latDisplasmentbackup = false;
109 displacementFlag = true;
110
112 drr = 0.35;
113 finalr = 10. * um;
114
116
118 charge = ChargeSquare = 1.0;
120 zPathLength = par1 = par2 = par3 = 0.;
121
123 fParticleChange = nullptr;
124 couple = nullptr;
125}
static constexpr double nm
Definition: G4SIunits.hh:92
static constexpr double mm
Definition: G4SIunits.hh:95
static constexpr double um
Definition: G4SIunits.hh:93
static constexpr double MeV
Definition: G4SIunits.hh:200
static G4LossTableManager * Instance()
static G4Positron * Positron()
Definition: G4Positron.cc:93
CLHEP::HepRandomEngine * rndmEngineMod
G4ParticleChangeForMSC * fParticleChange
const G4ParticleDefinition * positron
const G4ParticleDefinition * particle
G4LossTableManager * theManager
const G4MaterialCutsCouple * couple
G4double skin
Definition: G4VMscModel.hh:199
G4VMscModel(const G4String &nam)
Definition: G4VMscModel.cc:59
G4double facsafety
Definition: G4VMscModel.hh:198
float proton_mass_c2
Definition: hepunit.py:274

References charge, ChargeSquare, coeffc1, coeffc2, coeffc3, coeffc4, coeffth1, coeffth2, couple, currentKinEnergy, currentMaterialIndex, currentRadLength, currentRange, currentTau, displacementFlag, drr, G4VMscModel::facsafety, finalr, firstStep, fParticleChange, fr, geombig, geomlimit, geommin, insideskin, G4LossTableManager::Instance(), lambda0, lambdaeff, lambdalimit, latDisplasmentbackup, lnZ, mass, masslimite, MeV, mm, nm, par1, par2, par3, particle, G4Positron::Positron(), positron, presafety, source.hepunit::proton_mass_c2, rangecut, rangeinit, rndmEngineMod, G4VMscModel::skin, skindepth, smallstep, stepmin, taubig, taulim, tausmall, tgeom, theManager, tlimit, tlimitmin, tlimitminfix, tlimitminfix2, tPathLength, um, Z2, Z23, Zeff, Zold, and zPathLength.

◆ ~G4UrbanAdjointMscModel()

G4UrbanAdjointMscModel::~G4UrbanAdjointMscModel ( )
override

Definition at line 128 of file G4UrbanAdjointMscModel.cc.

128{}

◆ G4UrbanAdjointMscModel() [2/2]

G4UrbanAdjointMscModel::G4UrbanAdjointMscModel ( const G4UrbanAdjointMscModel )
delete

Member Function Documentation

◆ ChargeSquareRatio()

G4double G4VEmModel::ChargeSquareRatio ( const G4Track track)
virtualinherited

Reimplemented in G4BraggIonGasModel, and G4BetheBlochIonGasModel.

Definition at line 374 of file G4VEmModel.cc.

375{
377 track.GetMaterial(), track.GetKineticEnergy());
378}
const G4ParticleDefinition * GetParticleDefinition() const
G4Material * GetMaterial() const
G4double GetKineticEnergy() const
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
Definition: G4VEmModel.cc:382

References G4VEmModel::GetChargeSquareRatio(), G4Track::GetKineticEnergy(), G4Track::GetMaterial(), and G4Track::GetParticleDefinition().

Referenced by G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength().

◆ ComputeCrossSectionPerAtom() [1/2]

G4double G4VEmModel::ComputeCrossSectionPerAtom ( const G4ParticleDefinition part,
const G4Element elm,
G4double  kinEnergy,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
)
inlineinherited

Definition at line 566 of file G4VEmModel.hh.

571{
573 return ComputeCrossSectionPerAtom(part,kinEnergy,elm->GetZ(),elm->GetN(),
574 cutEnergy,maxEnergy);
575}
G4double GetZ() const
Definition: G4Element.hh:131
G4double GetN() const
Definition: G4Element.hh:135
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.cc:341
void SetCurrentElement(const G4Element *)
Definition: G4VEmModel.hh:497

References G4VEmModel::ComputeCrossSectionPerAtom(), G4Element::GetN(), G4Element::GetZ(), and G4VEmModel::SetCurrentElement().

◆ ComputeCrossSectionPerAtom() [2/2]

G4double G4UrbanAdjointMscModel::ComputeCrossSectionPerAtom ( const G4ParticleDefinition particle,
G4double  KineticEnergy,
G4double  AtomicNumber,
G4double  AtomicWeight = 0.,
G4double  cut = 0.,
G4double  emax = DBL_MAX 
)
overridevirtual

Reimplemented from G4VEmModel.

Definition at line 148 of file G4UrbanAdjointMscModel.cc.

151{
152 static constexpr G4double epsmin = 1.e-4;
153 static constexpr G4double epsmax = 1.e10;
154
155 static constexpr G4double Zdat[15] = { 4., 6., 13., 20., 26., 29., 32., 38.,
156 47., 50., 56., 64., 74., 79., 82. };
157
158 // corr. factors for e-/e+ lambda for T <= Tlim
159 static constexpr G4double celectron[15][22] = {
160 { 1.125, 1.072, 1.051, 1.047, 1.047, 1.050, 1.052, 1.054,
161 1.054, 1.057, 1.062, 1.069, 1.075, 1.090, 1.105, 1.111,
162 1.112, 1.108, 1.100, 1.093, 1.089, 1.087 },
163 { 1.408, 1.246, 1.143, 1.096, 1.077, 1.059, 1.053, 1.051,
164 1.052, 1.053, 1.058, 1.065, 1.072, 1.087, 1.101, 1.108,
165 1.109, 1.105, 1.097, 1.090, 1.086, 1.082 },
166 { 2.833, 2.268, 1.861, 1.612, 1.486, 1.309, 1.204, 1.156,
167 1.136, 1.114, 1.106, 1.106, 1.109, 1.119, 1.129, 1.132,
168 1.131, 1.124, 1.113, 1.104, 1.099, 1.098 },
169 { 3.879, 3.016, 2.380, 2.007, 1.818, 1.535, 1.340, 1.236,
170 1.190, 1.133, 1.107, 1.099, 1.098, 1.103, 1.110, 1.113,
171 1.112, 1.105, 1.096, 1.089, 1.085, 1.098 },
172 { 6.937, 4.330, 2.886, 2.256, 1.987, 1.628, 1.395, 1.265,
173 1.203, 1.122, 1.080, 1.065, 1.061, 1.063, 1.070, 1.073,
174 1.073, 1.070, 1.064, 1.059, 1.056, 1.056 },
175 { 9.616, 5.708, 3.424, 2.551, 2.204, 1.762, 1.485, 1.330,
176 1.256, 1.155, 1.099, 1.077, 1.070, 1.068, 1.072, 1.074,
177 1.074, 1.070, 1.063, 1.059, 1.056, 1.052 },
178 { 11.72, 6.364, 3.811, 2.806, 2.401, 1.884, 1.564, 1.386,
179 1.300, 1.180, 1.112, 1.082, 1.073, 1.066, 1.068, 1.069,
180 1.068, 1.064, 1.059, 1.054, 1.051, 1.050 },
181 { 18.08, 8.601, 4.569, 3.183, 2.662, 2.025, 1.646, 1.439,
182 1.339, 1.195, 1.108, 1.068, 1.053, 1.040, 1.039, 1.039,
183 1.039, 1.037, 1.034, 1.031, 1.030, 1.036 },
184 { 18.22, 10.48, 5.333, 3.713, 3.115, 2.367, 1.898, 1.631,
185 1.498, 1.301, 1.171, 1.105, 1.077, 1.048, 1.036, 1.033,
186 1.031, 1.028, 1.024, 1.022, 1.021, 1.024 },
187 { 14.14, 10.65, 5.710, 3.929, 3.266, 2.453, 1.951, 1.669,
188 1.528, 1.319, 1.178, 1.106, 1.075, 1.040, 1.027, 1.022,
189 1.020, 1.017, 1.015, 1.013, 1.013, 1.020 },
190 { 14.11, 11.73, 6.312, 4.240, 3.478, 2.566, 2.022, 1.720,
191 1.569, 1.342, 1.186, 1.102, 1.065, 1.022, 1.003, 0.997,
192 0.995, 0.993, 0.993, 0.993, 0.993, 1.011 },
193 { 22.76, 20.01, 8.835, 5.287, 4.144, 2.901, 2.219, 1.855,
194 1.677, 1.410, 1.224, 1.121, 1.073, 1.014, 0.986, 0.976,
195 0.974, 0.972, 0.973, 0.974, 0.975, 0.987 },
196 { 50.77, 40.85, 14.13, 7.184, 5.284, 3.435, 2.520, 2.059,
197 1.837, 1.512, 1.283, 1.153, 1.091, 1.010, 0.969, 0.954,
198 0.950, 0.947, 0.949, 0.952, 0.954, 0.963 },
199 { 65.87, 59.06, 15.87, 7.570, 5.567, 3.650, 2.682, 2.182,
200 1.939, 1.579, 1.325, 1.178, 1.108, 1.014, 0.965, 0.947,
201 0.941, 0.938, 0.940, 0.944, 0.946, 0.954 },
202 { 55.60, 47.34, 15.92, 7.810, 5.755, 3.767, 2.760, 2.239,
203 1.985, 1.609, 1.343, 1.188, 1.113, 1.013, 0.960, 0.939,
204 0.933, 0.930, 0.933, 0.936, 0.939, 0.949 }
205 };
206
207 static constexpr G4double cpositron[15][22] = {
208 { 2.589, 2.044, 1.658, 1.446, 1.347, 1.217, 1.144, 1.110,
209 1.097, 1.083, 1.080, 1.086, 1.092, 1.108, 1.123, 1.131,
210 1.131, 1.126, 1.117, 1.108, 1.103, 1.100 },
211 { 3.904, 2.794, 2.079, 1.710, 1.543, 1.325, 1.202, 1.145,
212 1.122, 1.096, 1.089, 1.092, 1.098, 1.114, 1.130, 1.137,
213 1.138, 1.132, 1.122, 1.113, 1.108, 1.102 },
214 { 7.970, 6.080, 4.442, 3.398, 2.872, 2.127, 1.672, 1.451,
215 1.357, 1.246, 1.194, 1.179, 1.178, 1.188, 1.201, 1.205,
216 1.203, 1.190, 1.173, 1.159, 1.151, 1.145 },
217 { 9.714, 7.607, 5.747, 4.493, 3.815, 2.777, 2.079, 1.715,
218 1.553, 1.353, 1.253, 1.219, 1.211, 1.214, 1.225, 1.228,
219 1.225, 1.210, 1.191, 1.175, 1.166, 1.174 },
220 { 17.97, 12.95, 8.628, 6.065, 4.849, 3.222, 2.275, 1.820,
221 1.624, 1.382, 1.259, 1.214, 1.202, 1.202, 1.214, 1.219,
222 1.217, 1.203, 1.184, 1.169, 1.160, 1.151 },
223 { 24.83, 17.06, 10.84, 7.355, 5.767, 3.707, 2.546, 1.996,
224 1.759, 1.465, 1.311, 1.252, 1.234, 1.228, 1.238, 1.241,
225 1.237, 1.222, 1.201, 1.184, 1.174, 1.159 },
226 { 23.26, 17.15, 11.52, 8.049, 6.375, 4.114, 2.792, 2.155,
227 1.880, 1.535, 1.353, 1.281, 1.258, 1.247, 1.254, 1.256,
228 1.252, 1.234, 1.212, 1.194, 1.183, 1.170 },
229 { 22.33, 18.01, 12.86, 9.212, 7.336, 4.702, 3.117, 2.348,
230 2.015, 1.602, 1.385, 1.297, 1.268, 1.251, 1.256, 1.258,
231 1.254, 1.237, 1.214, 1.195, 1.185, 1.179 },
232 { 33.91, 24.13, 15.71, 10.80, 8.507, 5.467, 3.692, 2.808,
233 2.407, 1.873, 1.564, 1.425, 1.374, 1.330, 1.324, 1.320,
234 1.312, 1.288, 1.258, 1.235, 1.221, 1.205 },
235 { 32.14, 24.11, 16.30, 11.40, 9.015, 5.782, 3.868, 2.917,
236 2.490, 1.925, 1.596, 1.447, 1.391, 1.342, 1.332, 1.327,
237 1.320, 1.294, 1.264, 1.240, 1.226, 1.214 },
238 { 29.51, 24.07, 17.19, 12.28, 9.766, 6.238, 4.112, 3.066,
239 2.602, 1.995, 1.641, 1.477, 1.414, 1.356, 1.342, 1.336,
240 1.328, 1.302, 1.270, 1.245, 1.231, 1.233 },
241 { 38.19, 30.85, 21.76, 15.35, 12.07, 7.521, 4.812, 3.498,
242 2.926, 2.188, 1.763, 1.563, 1.484, 1.405, 1.382, 1.371,
243 1.361, 1.330, 1.294, 1.267, 1.251, 1.239 },
244 { 49.71, 39.80, 27.96, 19.63, 15.36, 9.407, 5.863, 4.155,
245 3.417, 2.478, 1.944, 1.692, 1.589, 1.480, 1.441, 1.423,
246 1.409, 1.372, 1.330, 1.298, 1.280, 1.258 },
247 { 59.25, 45.08, 30.36, 20.83, 16.15, 9.834, 6.166, 4.407,
248 3.641, 2.648, 2.064, 1.779, 1.661, 1.531, 1.482, 1.459,
249 1.442, 1.400, 1.354, 1.319, 1.299, 1.272 },
250 { 56.38, 44.29, 30.50, 21.18, 16.51, 10.11, 6.354, 4.542,
251 3.752, 2.724, 2.116, 1.817, 1.692, 1.554, 1.499, 1.474,
252 1.456, 1.412, 1.364, 1.328, 1.307, 1.282 }
253 };
254
255 // data/corrections for T > Tlim
256 static constexpr G4double hecorr[15] = { 120.70, 117.50, 105.00, 92.92,
257 79.23, 74.510, 68.29, 57.39,
258 41.97, 36.14, 24.53, 10.21,
259 -7.855, -16.84, -22.30 };
260
261 G4double sigma;
262 SetParticle(part);
263
264 Z23 = G4Pow::GetInstance()->Z23(G4lrint(AtomicNumber));
265
266 // correction if particle .ne. e-/e+
267 // compute equivalent kinetic energy
268 // lambda depends on p*beta ....
269
270 G4double eKineticEnergy = KineticEnergy;
271
273 {
274 G4double tau1 = KineticEnergy / mass;
275 G4double c = mass * tau1 * (tau1 + 2.) / (electron_mass_c2 * (tau1 + 1.));
276 G4double w = c - 2.;
277 G4double tau = 0.5 * (w + sqrt(w * w + 4. * c));
278 eKineticEnergy = electron_mass_c2 * tau;
279 }
280
281 G4double eTotalEnergy = eKineticEnergy + electron_mass_c2;
282 G4double beta2 = eKineticEnergy * (eTotalEnergy + electron_mass_c2) /
283 (eTotalEnergy * eTotalEnergy);
284 G4double bg2 = eKineticEnergy * (eTotalEnergy + electron_mass_c2) /
286
287 static constexpr G4double epsfactor =
290 G4double eps = epsfactor * bg2 / Z23;
291
292 if(eps < epsmin)
293 sigma = 2. * eps * eps;
294 else if(eps < epsmax)
295 sigma = G4Log(1. + 2. * eps) - 2. * eps / (1. + 2. * eps);
296 else
297 sigma = G4Log(2. * eps) - 1. + 1. / eps;
298
299 sigma *= ChargeSquare * AtomicNumber * AtomicNumber / (beta2 * bg2);
300
301 // interpolate in AtomicNumber and beta2
302 G4double c1, c2, cc1, cc2, corr;
303
304 // get bin number in Z
305 G4int iZ = 14;
306 while((iZ >= 0) && (Zdat[iZ] >= AtomicNumber))
307 iZ -= 1;
308 if(iZ == 14)
309 iZ = 13;
310 if(iZ == -1)
311 iZ = 0;
312
313 G4double ZZ1 = Zdat[iZ];
314 G4double ZZ2 = Zdat[iZ + 1];
315 G4double ratZ =
316 (AtomicNumber - ZZ1) * (AtomicNumber + ZZ1) / ((ZZ2 - ZZ1) * (ZZ2 + ZZ1));
317
318 static constexpr G4double Tlim = 10. * CLHEP::MeV;
319 static constexpr G4double sigmafactor =
321 static const G4double beta2lim =
322 Tlim * (Tlim + 2. * CLHEP::electron_mass_c2) /
324 static const G4double bg2lim =
325 Tlim * (Tlim + 2. * CLHEP::electron_mass_c2) /
327
328 static constexpr G4double sig0[15] = {
329 0.2672 * CLHEP::barn, 0.5922 * CLHEP::barn, 2.653 * CLHEP::barn,
330 6.235 * CLHEP::barn, 11.69 * CLHEP::barn, 13.24 * CLHEP::barn,
331 16.12 * CLHEP::barn, 23.00 * CLHEP::barn, 35.13 * CLHEP::barn,
332 39.95 * CLHEP::barn, 50.85 * CLHEP::barn, 67.19 * CLHEP::barn,
333 91.15 * CLHEP::barn, 104.4 * CLHEP::barn, 113.1 * CLHEP::barn
334 };
335
336 static constexpr G4double Tdat[22] = {
337 100 * CLHEP::eV, 200 * CLHEP::eV, 400 * CLHEP::eV, 700 * CLHEP::eV,
338 1 * CLHEP::keV, 2 * CLHEP::keV, 4 * CLHEP::keV, 7 * CLHEP::keV,
339 10 * CLHEP::keV, 20 * CLHEP::keV, 40 * CLHEP::keV, 70 * CLHEP::keV,
340 100 * CLHEP::keV, 200 * CLHEP::keV, 400 * CLHEP::keV, 700 * CLHEP::keV,
341 1 * CLHEP::MeV, 2 * CLHEP::MeV, 4 * CLHEP::MeV, 7 * CLHEP::MeV,
342 10 * CLHEP::MeV, 20 * CLHEP::MeV
343 };
344
345 if(eKineticEnergy <= Tlim)
346 {
347 // get bin number in T (beta2)
348 G4int iT = 21;
349 while((iT >= 0) && (Tdat[iT] >= eKineticEnergy))
350 iT -= 1;
351 if(iT == 21)
352 iT = 20;
353 if(iT == -1)
354 iT = 0;
355
356 // calculate betasquare values
357 G4double T = Tdat[iT], E = T + electron_mass_c2;
358 G4double b2small = T * (E + electron_mass_c2) / (E * E);
359
360 T = Tdat[iT + 1];
361 E = T + electron_mass_c2;
362 G4double b2big = T * (E + electron_mass_c2) / (E * E);
363 G4double ratb2 = (beta2 - b2small) / (b2big - b2small);
364
365 if(charge < 0.)
366 {
367 c1 = celectron[iZ][iT];
368 c2 = celectron[iZ + 1][iT];
369 cc1 = c1 + ratZ * (c2 - c1);
370
371 c1 = celectron[iZ][iT + 1];
372 c2 = celectron[iZ + 1][iT + 1];
373 cc2 = c1 + ratZ * (c2 - c1);
374
375 corr = cc1 + ratb2 * (cc2 - cc1);
376
377 sigma *= sigmafactor / corr;
378 }
379 else
380 {
381 c1 = cpositron[iZ][iT];
382 c2 = cpositron[iZ + 1][iT];
383 cc1 = c1 + ratZ * (c2 - c1);
384
385 c1 = cpositron[iZ][iT + 1];
386 c2 = cpositron[iZ + 1][iT + 1];
387 cc2 = c1 + ratZ * (c2 - c1);
388
389 corr = cc1 + ratb2 * (cc2 - cc1);
390
391 sigma *= sigmafactor / corr;
392 }
393 }
394 else
395 {
396 c1 = bg2lim * sig0[iZ] * (1. + hecorr[iZ] * (beta2 - beta2lim)) / bg2;
397 c2 =
398 bg2lim * sig0[iZ + 1] * (1. + hecorr[iZ + 1] * (beta2 - beta2lim)) / bg2;
399 if((AtomicNumber >= ZZ1) && (AtomicNumber <= ZZ2))
400 sigma = c1 + ratZ * (c2 - c1);
401 else if(AtomicNumber < ZZ1)
402 sigma = AtomicNumber * AtomicNumber * c1 / (ZZ1 * ZZ1);
403 else if(AtomicNumber > ZZ2)
404 sigma = AtomicNumber * AtomicNumber * c2 / (ZZ2 * ZZ2);
405 }
406 return sigma;
407}
static const G4double eps
G4double G4Log(G4double x)
Definition: G4Log.hh:226
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double Z23(G4int Z) const
Definition: G4Pow.hh:125
void SetParticle(const G4ParticleDefinition *)
static constexpr double electron_mass_c2
static constexpr double barn
Definition: SystemOfUnits.h:86
static constexpr double keV
static constexpr double twopi
Definition: SystemOfUnits.h:56
static constexpr double MeV
static constexpr double Bohr_radius
static constexpr double classic_electr_radius
static constexpr double eV
static constexpr double hbarc
float electron_mass_c2
Definition: hepunit.py:273
int G4lrint(double ad)
Definition: templates.hh:134

References CLHEP::barn, CLHEP::Bohr_radius, charge, ChargeSquare, CLHEP::classic_electr_radius, source.hepunit::electron_mass_c2, CLHEP::electron_mass_c2, eps, CLHEP::eV, G4Log(), G4lrint(), G4Pow::GetInstance(), CLHEP::hbarc, CLHEP::keV, mass, CLHEP::MeV, SetParticle(), CLHEP::twopi, G4Pow::Z23(), and Z23.

◆ ComputeCrossSectionPerShell()

G4double G4VEmModel::ComputeCrossSectionPerShell ( const G4ParticleDefinition ,
G4int  Z,
G4int  shellIdx,
G4double  kinEnergy,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
)
virtualinherited

Definition at line 351 of file G4VEmModel.cc.

354{
355 return 0.0;
356}

Referenced by G4EmCalculator::ComputeCrossSectionPerShell().

◆ ComputeDEDX()

G4double G4VEmModel::ComputeDEDX ( const G4MaterialCutsCouple couple,
const G4ParticleDefinition part,
G4double  kineticEnergy,
G4double  cutEnergy = DBL_MAX 
)
inlineinherited

Definition at line 528 of file G4VEmModel.hh.

532{
533 SetCurrentCouple(couple);
534 return pFactor*ComputeDEDXPerVolume(pBaseMaterial,part,kinEnergy,cutEnergy);
535}
void SetCurrentCouple(const G4MaterialCutsCouple *)
Definition: G4VEmModel.hh:472
const G4Material * pBaseMaterial
Definition: G4VEmModel.hh:427
G4double pFactor
Definition: G4VEmModel.hh:432
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
Definition: G4VEmModel.cc:228

References G4VEmModel::ComputeDEDXPerVolume(), G4VEmModel::pBaseMaterial, G4VEmModel::pFactor, and G4VEmModel::SetCurrentCouple().

◆ ComputeDEDXPerVolume()

G4double G4VEmModel::ComputeDEDXPerVolume ( const G4Material ,
const G4ParticleDefinition ,
G4double  kineticEnergy,
G4double  cutEnergy = DBL_MAX 
)
virtualinherited

◆ ComputeGeomLimit()

G4double G4VMscModel::ComputeGeomLimit ( const G4Track track,
G4double presafety,
G4double  limit 
)
inlineinherited

Definition at line 290 of file G4VMscModel.hh.

293{
295 track.GetStep()->GetPreStepPoint()->GetPosition(),
296 track.GetMomentumDirection(),
297 limit, presafety);
298}
G4double CheckNextStep(const G4ThreeVector &position, const G4ThreeVector &direction, const G4double currentMaxStep, G4double &newSafety)
const G4ThreeVector & GetPosition() const
G4StepPoint * GetPreStepPoint() const
const G4ThreeVector & GetMomentumDirection() const
const G4Step * GetStep() const
G4SafetyHelper * safetyHelper
Definition: G4VMscModel.hh:186

References G4SafetyHelper::CheckNextStep(), G4Track::GetMomentumDirection(), G4StepPoint::GetPosition(), G4Step::GetPreStepPoint(), G4Track::GetStep(), and G4VMscModel::safetyHelper.

Referenced by ComputeTruePathLengthLimit(), G4LowEWentzelVIModel::ComputeTruePathLengthLimit(), G4GoudsmitSaundersonMscModel::ComputeTruePathLengthLimit(), G4UrbanMscModel::ComputeTruePathLengthLimit(), and G4WentzelVIModel::ComputeTruePathLengthLimit().

◆ ComputeGeomPathLength()

G4double G4UrbanAdjointMscModel::ComputeGeomPathLength ( G4double  truePathLength)
overridevirtual

Implements G4VMscModel.

Definition at line 731 of file G4UrbanAdjointMscModel.cc.

732{
734 par1 = -1.;
735 par2 = par3 = 0.;
736
737 // this correction needed to run MSC with eIoni and eBrem inactivated
738 // and makes no harm for a normal run
740
741 // do the true -> geom transformation
743
744 // z = t for very small tPathLength
746 return zPathLength;
747
749
750 if((tau <= tausmall) || insideskin)
751 {
753 }
754 else if(tPathLength < currentRange * dtrl)
755 {
756 if(tau < taulim)
757 zPathLength = tPathLength * (1. - 0.5 * tau);
758 else
759 zPathLength = lambda0 * (1. - G4Exp(-tau));
760 }
762 {
763 par1 = 1. / currentRange;
764 par2 = 1. / (par1 * lambda0);
765 par3 = 1. + par2;
767 {
769 (1. - G4Exp(par3 * G4Log(1. - tPathLength / currentRange))) /
770 (par1 * par3);
771 }
772 else
773 {
774 zPathLength = 1. / (par1 * par3);
775 }
776 }
777 else
778 {
780 G4double T1 = GetEnergy(particle, rfin, couple);
782
783 par1 = (lambda0 - lambda1) / (lambda0 * tPathLength);
784 par2 = 1. / (par1 * lambda0);
785 par3 = 1. + par2;
786 zPathLength = (1. - G4Exp(par3 * G4Log(lambda1 / lambda0))) / (par1 * par3);
787 }
788
790 return zPathLength;
791}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
G4double dtrl
Definition: G4VMscModel.hh:200
G4double GetTransportMeanFreePath(const G4ParticleDefinition *part, G4double kinEnergy)
Definition: G4VMscModel.hh:319
G4double GetEnergy(const G4ParticleDefinition *part, G4double range, const G4MaterialCutsCouple *couple)
Definition: G4VMscModel.cc:224
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments

References couple, currentKinEnergy, currentRange, G4VMscModel::dtrl, G4Exp(), G4Log(), G4VMscModel::GetEnergy(), G4VMscModel::GetTransportMeanFreePath(), insideskin, lambda0, lambdaeff, mass, G4INCL::Math::max(), G4INCL::Math::min(), par1, par2, par3, particle, taulim, tausmall, tlimitminfix2, tPathLength, and zPathLength.

◆ ComputeMeanFreePath()

G4double G4VEmModel::ComputeMeanFreePath ( const G4ParticleDefinition part,
G4double  kineticEnergy,
const G4Material material,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
)
inlineinherited

Definition at line 553 of file G4VEmModel.hh.

558{
559 G4double cross = CrossSectionPerVolume(material,part,ekin,emin,emax);
560 return (cross > 0.0) ? 1./cross : DBL_MAX;
561}
static const G4double emax
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.cc:237
string material
Definition: eplot.py:19
#define DBL_MAX
Definition: templates.hh:62

References G4VEmModel::CrossSectionPerVolume(), DBL_MAX, emax, and eplot::material.

◆ ComputeSafety()

G4double G4VMscModel::ComputeSafety ( const G4ThreeVector position,
G4double  limit = DBL_MAX 
)
inlineinherited

◆ ComputeTheta0()

G4double G4UrbanAdjointMscModel::ComputeTheta0 ( G4double  truePathLength,
G4double  KineticEnergy 
)

Definition at line 1070 of file G4UrbanAdjointMscModel.cc.

1072{
1073 // for all particles take the width of the central part
1074 // from a parametrization similar to the Highland formula
1075 // ( Highland formula: Particle Physics Booklet, July 2002, eq. 26.10)
1076 G4double invbetacp =
1077 std::sqrt((currentKinEnergy + mass) * (KineticEnergy + mass) /
1079 KineticEnergy * (KineticEnergy + 2. * mass)));
1080 G4double y = trueStepLength / currentRadLength;
1081
1082 if(particle == positron)
1083 {
1084 static constexpr G4double xl = 0.6;
1085 static constexpr G4double xh = 0.9;
1086 static constexpr G4double e = 113.0;
1087 G4double corr;
1088
1089 G4double tau = std::sqrt(currentKinEnergy * KineticEnergy) / mass;
1090 G4double x = std::sqrt(tau * (tau + 2.) / ((tau + 1.) * (tau + 1.)));
1091 G4double a = 0.994 - 4.08e-3 * Zeff;
1092 G4double b = 7.16 + (52.6 + 365. / Zeff) / Zeff;
1093 G4double c = 1.000 - 4.47e-3 * Zeff;
1094 G4double d = 1.21e-3 * Zeff;
1095 if(x < xl)
1096 {
1097 corr = a * (1. - G4Exp(-b * x));
1098 }
1099 else if(x > xh)
1100 {
1101 corr = c + d * G4Exp(e * (x - 1.));
1102 }
1103 else
1104 {
1105 G4double yl = a * (1. - G4Exp(-b * xl));
1106 G4double yh = c + d * G4Exp(e * (xh - 1.));
1107 G4double y0 = (yh - yl) / (xh - xl);
1108 G4double y1 = yl - y0 * xl;
1109 corr = y0 * x + y1;
1110 }
1111 y *= corr * (1. + Zeff * (1.84035e-4 * Zeff - 1.86427e-2) + 0.41125);
1112 }
1113
1114 static constexpr G4double c_highland = 13.6 * CLHEP::MeV;
1115 G4double theta0 = c_highland * std::abs(charge) * std::sqrt(y) * invbetacp;
1116
1117 // correction factor from e- scattering data
1118 theta0 *= (coeffth1 + coeffth2 * G4Log(y));
1119 return theta0;
1120}

References charge, coeffth1, coeffth2, currentKinEnergy, currentRadLength, G4Exp(), G4Log(), mass, CLHEP::MeV, particle, positron, anonymous_namespace{G4PionRadiativeDecayChannel.cc}::xl, anonymous_namespace{G4PionRadiativeDecayChannel.cc}::yl, and Zeff.

Referenced by SampleCosineTheta().

◆ ComputeTruePathLengthLimit()

G4double G4UrbanAdjointMscModel::ComputeTruePathLengthLimit ( const G4Track track,
G4double currentMinimalStep 
)
overridevirtual

Implements G4VMscModel.

Definition at line 424 of file G4UrbanAdjointMscModel.cc.

426{
427 tPathLength = currentMinimalStep;
428 const G4DynamicParticle* dp = track.GetDynamicParticle();
429
431 G4StepStatus stepStatus = sp->GetStepStatus();
436
440
441 // set flag to default values
443
444 if(Zold != Zeff)
445 UpdateCache();
446
447 // stop here if small step
449 {
450 latDisplasment = false;
451 return ConvertTrueToGeom(tPathLength, currentMinimalStep);
452 }
453
454 // upper limit for the straight line distance the particle can travel
455 // for electrons and positrons
456 G4double distance = currentRange;
457 // for muons, hadrons
458 if(mass > masslimite)
459 {
460 distance *= (1.15 - 9.76e-4 * Zeff);
461 }
462 else
463 {
464 distance *= (1.20 - Zeff * (1.62e-2 - 9.22e-5 * Zeff));
465 }
466 presafety = sp->GetSafety();
467
468 // far from geometry boundary
469 if(distance < presafety)
470 {
471 latDisplasment = false;
472 return ConvertTrueToGeom(tPathLength, currentMinimalStep);
473 }
474
476 static constexpr G4double invmev = 1.0 / CLHEP::MeV;
477
478 // standard version
480 {
481 // compute geomlimit and presafety
483
484 // is it far from boundary ?
485 if(distance < presafety)
486 {
487 latDisplasment = false;
488 return ConvertTrueToGeom(tPathLength, currentMinimalStep);
489 }
490
491 smallstep += 1.;
492 insideskin = false;
493
494 // initialisation at firs step and at the boundary
495 if(firstStep || (stepStatus == fGeomBoundary))
496 {
498 if(!firstStep)
499 {
500 smallstep = 1.;
501 }
502
503 // define stepmin here (it depends on lambda!)
504 // rough estimation of lambda_elastic/lambda_transport
505 G4double rat = currentKinEnergy * invmev;
506 rat = 1.e-3 / (rat * (10. + rat));
507 // stepmin ~ lambda_elastic
508 stepmin = rat * lambda0;
511
512 // constraint from the geometry
513 if((geomlimit < geombig) && (geomlimit > geommin))
514 {
515 // geomlimit is a geometrical step length
516 // transform it to true path length (estimation)
517 if((1. - geomlimit / lambda0) > 0.)
519
520 if(stepStatus == fGeomBoundary)
522 else
523 tgeom = 2. * geomlimit / facgeom;
524 }
525 else
526 tgeom = geombig;
527 }
528
529 // step limit
531
532 // lower limit for tlimit
535
536 // shortcut
537 if((tPathLength < tlimit) && (tPathLength < presafety) &&
538 (smallstep > skin) && (tPathLength < geomlimit - 0.999 * skindepth))
539 {
540 return ConvertTrueToGeom(tPathLength, currentMinimalStep);
541 }
542
543 // step reduction near to boundary
544 if(smallstep <= skin)
545 {
546 tlimit = stepmin;
547 insideskin = true;
548 }
549 else if(geomlimit < geombig)
550 {
551 if(geomlimit > skindepth)
552 {
553 tlimit = min(tlimit, geomlimit - 0.999 * skindepth);
554 }
555 else
556 {
557 insideskin = true;
559 }
560 }
561
563
564 // randomise if not 'small' step and step determined by msc
565 if((tlimit < tPathLength) && (smallstep > skin) && !insideskin)
566 {
568 }
569 else
570 {
572 }
573 }
574 // for 'normal' simulation with or without magnetic field
575 // there no small step/single scattering at boundaries
576 else if(steppingAlgorithm == fUseSafety)
577 {
578 if(stepStatus != fGeomBoundary)
579 {
580 presafety = ComputeSafety(sp->GetPosition(), tPathLength);
581 }
582 // is far from boundary
583 if(distance < presafety)
584 {
585 latDisplasment = false;
586 return ConvertTrueToGeom(tPathLength, currentMinimalStep);
587 }
588
589 if(firstStep || (stepStatus == fGeomBoundary))
590 {
592 fr = facrange;
593 // Geant4 version 9.1 like stepping for e+/e- only (not for muons,hadrons)
594 if(mass < masslimite)
595 {
597 if(lambda0 > lambdalimit)
598 {
599 fr *= (0.75 + 0.25 * lambda0 / lambdalimit);
600 }
601 }
602 // lower limit for tlimit
603 G4double rat = currentKinEnergy * invmev;
604 rat = 1.e-3 / (rat * (10 + rat));
605 stepmin = lambda0 * rat;
607 }
608
609 // step limit
611
612 // lower limit for tlimit
614
615 // randomise if step determined by msc
616 if(tlimit < tPathLength)
617 {
619 }
620 else
621 {
623 }
624 }
625 // new stepping mode UseSafetyPlus
627 {
628 if(stepStatus != fGeomBoundary)
629 {
630 presafety = ComputeSafety(sp->GetPosition(), tPathLength);
631 }
632
633 // is far from boundary
634 if(distance < presafety)
635 {
636 latDisplasment = false;
637 return ConvertTrueToGeom(tPathLength, currentMinimalStep);
638 }
639
640 if(firstStep || (stepStatus == fGeomBoundary))
641 {
643 fr = facrange;
645 if(mass < masslimite)
646 {
647 G4int index = 1;
648 if(charge > 0.)
649 index = 2;
651 if(lambda0 > lambdalimit)
652 {
653 fr *= (0.84 + 0.16 * lambda0 / lambdalimit);
654 }
655 }
656 // lower limit for tlimit
657 G4double rat = currentKinEnergy * invmev;
658 rat = 1.e-3 / (rat * (10 + rat));
659 stepmin = lambda0 * rat;
661 }
662 // step limit
664
665 // lower limit for tlimit
667
668 // condition for tPathLength from drr and finalr
669 if(currentRange > finalr)
670 {
671 G4double tmax =
672 drr * currentRange + finalr * (1. - drr) * (2. - finalr / currentRange);
673 tPathLength = min(tPathLength, tmax);
674 }
675
676 // condition safety
678 {
679 if(firstStep)
680 {
682 }
683 else if(stepStatus != fGeomBoundary && presafety > stepmin)
684 {
686 }
687 }
688
689 // randomise if step determined by msc
690 if(tPathLength < tlimit)
691 {
693 }
694 else
695 {
697 }
698 }
699
700 // version similar to 7.1 (needed for some experiments)
701 else
702 {
703 if(stepStatus == fGeomBoundary)
704 {
706 {
708 }
709 else
710 {
712 }
713
715 }
716 // randomise if step determined by msc
717 if(tlimit < tPathLength)
718 {
720 }
721 else
722 {
724 }
725 }
726 firstStep = false;
727 return ConvertTrueToGeom(tPathLength, currentMinimalStep);
728}
@ fUseSafety
@ fUseSafetyPlus
@ fUseDistanceToBoundary
G4StepStatus
Definition: G4StepStatus.hh:40
@ fGeomBoundary
Definition: G4StepStatus.hh:43
G4double GetKineticEnergy() const
G4double GetZeffective() const
const G4Material * GetMaterial() const
G4ProductionCuts * GetProductionCuts() const
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:222
G4double GetProductionCut(G4int index) const
const G4DynamicParticle * GetDynamicParticle() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
G4double facrange
Definition: G4VMscModel.hh:196
G4double ComputeGeomLimit(const G4Track &, G4double &presafety, G4double limit)
Definition: G4VMscModel.hh:290
G4double GetRange(const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
Definition: G4VMscModel.cc:189
G4MscStepLimitType steppingAlgorithm
Definition: G4VMscModel.hh:209
G4double ConvertTrueToGeom(G4double &tLength, G4double &gLength)
Definition: G4VMscModel.hh:280
G4bool latDisplasment
Definition: G4VMscModel.hh:206
G4double ComputeSafety(const G4ThreeVector &position, G4double limit=DBL_MAX)
Definition: G4VMscModel.hh:272
G4double facgeom
Definition: G4VMscModel.hh:197

References charge, G4VMscModel::ComputeGeomLimit(), G4VMscModel::ComputeSafety(), G4VMscModel::ConvertTrueToGeom(), couple, currentKinEnergy, currentMaterialIndex, currentRange, drr, G4VMscModel::facgeom, G4VMscModel::facrange, G4VMscModel::facsafety, fGeomBoundary, finalr, firstStep, fr, fUseDistanceToBoundary, fUseSafety, fUseSafetyPlus, G4Log(), geombig, geomlimit, geommin, G4Track::GetDynamicParticle(), G4MaterialCutsCouple::GetIndex(), G4Material::GetIonisation(), G4DynamicParticle::GetKineticEnergy(), G4MaterialCutsCouple::GetMaterial(), G4Track::GetMaterialCutsCouple(), G4Step::GetPreStepPoint(), G4ProductionCuts::GetProductionCut(), G4MaterialCutsCouple::GetProductionCuts(), G4VMscModel::GetRange(), G4Track::GetStep(), G4VMscModel::GetTransportMeanFreePath(), G4IonisParamMat::GetZeffective(), insideskin, lambda0, lambdalimit, G4VMscModel::latDisplasment, latDisplasmentbackup, mass, masslimite, G4INCL::Math::max(), CLHEP::MeV, G4INCL::Math::min(), particle, presafety, Randomizetlimit(), rangecut, rangeinit, G4VEmModel::SetCurrentCouple(), G4VMscModel::skin, skindepth, smallstep, G4InuclParticleNames::sp, stepmin, G4VMscModel::steppingAlgorithm, tgeom, tlimit, tlimitmin, tlimitminfix, tPathLength, UpdateCache(), Zeff, and Zold.

◆ ComputeTrueStepLength()

G4double G4UrbanAdjointMscModel::ComputeTrueStepLength ( G4double  geomStepLength)
overridevirtual

Implements G4VMscModel.

Definition at line 794 of file G4UrbanAdjointMscModel.cc.

795{
796 // step defined other than transportation
797 if(geomStepLength == zPathLength)
798 {
799 return tPathLength;
800 }
801
802 zPathLength = geomStepLength;
803
804 // t = z for very small step
805 if(geomStepLength < tlimitminfix2)
806 {
807 tPathLength = geomStepLength;
808
809 // recalculation
810 }
811 else
812 {
813 G4double tlength = geomStepLength;
814 if((geomStepLength > lambda0 * tausmall) && !insideskin)
815 {
816 if(par1 < 0.)
817 {
818 tlength = -lambda0 * G4Log(1. - geomStepLength / lambda0);
819 }
820 else
821 {
822 if(par1 * par3 * geomStepLength < 1.)
823 {
824 tlength =
825 (1. - G4Exp(G4Log(1. - par1 * par3 * geomStepLength) / par3)) /
826 par1;
827 }
828 else
829 {
830 tlength = currentRange;
831 }
832 }
833
834 if(tlength < geomStepLength)
835 {
836 tlength = geomStepLength;
837 }
838 else if(tlength > tPathLength)
839 {
840 tlength = tPathLength;
841 }
842 }
843 tPathLength = tlength;
844 }
845
846 return tPathLength;
847}

References currentRange, G4Exp(), G4Log(), insideskin, lambda0, par1, par3, tausmall, tlimitminfix2, tPathLength, and zPathLength.

◆ ConvertTrueToGeom()

G4double G4VMscModel::ConvertTrueToGeom ( G4double tLength,
G4double gLength 
)
inlineprotectedinherited

Definition at line 280 of file G4VMscModel.hh.

282{
283 glength = ComputeGeomPathLength(tlength);
284 // should return true length
285 return tlength;
286}
virtual G4double ComputeGeomPathLength(G4double truePathLength)=0

References G4VMscModel::ComputeGeomPathLength().

Referenced by ComputeTruePathLengthLimit(), G4LowEWentzelVIModel::ComputeTruePathLengthLimit(), G4GoudsmitSaundersonMscModel::ComputeTruePathLengthLimit(), G4UrbanMscModel::ComputeTruePathLengthLimit(), and G4WentzelVIModel::ComputeTruePathLengthLimit().

◆ CorrectionsAlongStep()

void G4VEmModel::CorrectionsAlongStep ( const G4MaterialCutsCouple ,
const G4DynamicParticle ,
const G4double length,
G4double eloss 
)
virtualinherited

◆ CrossSection()

G4double G4VEmModel::CrossSection ( const G4MaterialCutsCouple couple,
const G4ParticleDefinition part,
G4double  kineticEnergy,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
)
inlineinherited

◆ CrossSectionPerVolume()

G4double G4VEmModel::CrossSectionPerVolume ( const G4Material mat,
const G4ParticleDefinition p,
G4double  kineticEnergy,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
)
virtualinherited

Reimplemented in G4LivermorePhotoElectricModel, G4PAIModel, G4PAIPhotModel, G4BetheBlochNoDeltaModel, G4BraggNoDeltaModel, G4eeToHadronsModel, G4eeToHadronsMultiModel, G4ICRU73NoDeltaModel, G4MuBetheBlochModel, G4AtimaEnergyLossModel, G4BetheBlochModel, G4BraggIonModel, G4BraggModel, G4ICRU73QOModel, G4LindhardSorensenIonModel, G4MollerBhabhaModel, G4PEEffectFluoModel, G4PenelopeRayleighModelMI, G4LEPTSAttachmentModel, G4LEPTSDissociationModel, G4LEPTSElasticModel, G4LEPTSExcitationModel, G4LEPTSIonisationModel, G4LEPTSPositroniumModel, G4LEPTSRotExcitationModel, G4LEPTSVibExcitationModel, G4eplusTo2GammaOKVIModel, G4eplusTo3GammaOKVIModel, G4PenelopeComptonModel, G4eeToTwoGammaModel, G4GoudsmitSaundersonMscModel, G4IonParametrisedLossModel, G4DNABornExcitationModel1, G4DNABornExcitationModel2, G4DNABornIonisationModel1, G4DNABornIonisationModel2, G4DNAChampionElasticModel, G4DNACPA100ElasticModel, G4DNACPA100ExcitationModel, G4DNACPA100IonisationModel, G4DNADingfelderChargeDecreaseModel, G4DNADingfelderChargeIncreaseModel, G4DNADiracRMatrixExcitationModel, G4DNAEmfietzoglouExcitationModel, G4DNAEmfietzoglouIonisationModel, G4DNAIonElasticModel, G4DNAMeltonAttachmentModel, G4DNAMillerGreenExcitationModel, G4DNAModelInterface, G4TDNAOneStepThermalizationModel< MODEL >, G4DNAQuinnPlasmonExcitationModel, G4DNARelativisticIonisationModel, G4DNARuddIonisationExtendedModel, G4DNARuddIonisationModel, G4DNASancheExcitationModel, G4DNAScreenedRutherfordElasticModel, G4DNATransformElectronModel, G4DNAUeharaScreenedRutherfordElasticModel, G4MicroElecElasticModel, G4MicroElecElasticModel_new, G4MicroElecInelasticModel, G4MicroElecInelasticModel_new, G4MicroElecLOPhononModel, G4DNAELSEPAElasticModel, G4PenelopeBremsstrahlungModel, and G4PenelopeIonisationModel.

Definition at line 237 of file G4VEmModel.cc.

242{
243 SetupForMaterial(p, mat, ekin);
244 const G4double* theAtomNumDensityVector = mat->GetVecNbOfAtomsPerVolume();
245 G4int nelm = mat->GetNumberOfElements();
246 if(nelm > nsec) {
247 xsec.resize(nelm);
248 nsec = nelm;
249 }
250 G4double cross = 0.0;
251 for (G4int i=0; i<nelm; ++i) {
252 cross += theAtomNumDensityVector[i]*
253 ComputeCrossSectionPerAtom(p,mat->GetElement(i),ekin,emin,emax);
254 xsec[i] = cross;
255 }
256 return cross;
257}
const G4Element * GetElement(G4int iel) const
Definition: G4Material.hh:198
size_t GetNumberOfElements() const
Definition: G4Material.hh:182
const G4double * GetVecNbOfAtomsPerVolume() const
Definition: G4Material.hh:202
std::vector< G4double > xsec
Definition: G4VEmModel.hh:466
G4int nsec
Definition: G4VEmModel.hh:444
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
Definition: G4VEmModel.cc:440

References G4VEmModel::ComputeCrossSectionPerAtom(), emax, G4Material::GetElement(), G4Material::GetNumberOfElements(), G4Material::GetVecNbOfAtomsPerVolume(), G4VEmModel::nsec, G4VEmModel::SetupForMaterial(), and G4VEmModel::xsec.

Referenced by G4AdjointBremsstrahlungModel::AdjointCrossSection(), G4EmCalculator::ComputeCrossSectionPerVolume(), G4VEmProcess::ComputeCurrentLambda(), G4VEmModel::ComputeMeanFreePath(), G4TablesForExtrapolator::ComputeTrasportXS(), G4VEmModel::CrossSection(), G4LivermorePhotoElectricModel::CrossSectionPerVolume(), G4PenelopeRayleighModelMI::CrossSectionPerVolume(), G4DNADummyModel::CrossSectionPerVolume(), G4VEnergyLossProcess::CrossSectionPerVolume(), G4VEmAdjointModel::DiffCrossSectionPerVolumePrimToSecond(), G4VMscModel::GetTransportMeanFreePath(), G4VEmModel::SelectRandomAtom(), and G4VEmModel::Value().

◆ CurrentCouple()

const G4MaterialCutsCouple * G4VEmModel::CurrentCouple ( ) const
inlineprotectedinherited

◆ DeexcitationFlag()

G4bool G4VEmModel::DeexcitationFlag ( ) const
inlineinherited

Definition at line 704 of file G4VEmModel.hh.

705{
706 return flagDeexcitation;
707}
G4bool flagDeexcitation
Definition: G4VEmModel.hh:455

References G4VEmModel::flagDeexcitation.

Referenced by G4EmModelManager::DumpModelList().

◆ DefineForRegion()

void G4VEmModel::DefineForRegion ( const G4Region )
virtualinherited

Reimplemented in G4PAIModel, and G4PAIPhotModel.

Definition at line 360 of file G4VEmModel.cc.

361{}

Referenced by G4EmModelManager::AddEmModel().

◆ DumpParameters()

void G4VMscModel::DumpParameters ( std::ostream &  out) const
inherited

Definition at line 137 of file G4VMscModel.cc.

138{
139 G4String alg = "UseSafety";
140 if (steppingAlgorithm == fUseDistanceToBoundary) alg = "DistanceToBoundary";
141 else if (steppingAlgorithm == fMinimal) alg = "Minimal";
142 else if (steppingAlgorithm == fUseSafetyPlus) alg = "SafetyPlus";
143
144 out << std::setw(18) << "StepLim=" << alg << " Rfact=" << facrange
145 << " Gfact=" << facgeom << " Sfact=" << facsafety << " DispFlag:" << latDisplasment
146 << " Skin=" << skin << " Llim=" << lambdalimit/CLHEP::mm << " mm" << G4endl;
147}
@ fMinimal
#define G4endl
Definition: G4ios.hh:57
G4double lambdalimit
Definition: G4VMscModel.hh:201
static constexpr double mm
Definition: SystemOfUnits.h:96

References G4VMscModel::facgeom, G4VMscModel::facrange, G4VMscModel::facsafety, fMinimal, fUseDistanceToBoundary, fUseSafetyPlus, G4endl, G4VMscModel::lambdalimit, G4VMscModel::latDisplasment, CLHEP::mm, G4VMscModel::skin, and G4VMscModel::steppingAlgorithm.

Referenced by G4EmModelManager::DumpModelList().

◆ FillNumberOfSecondaries()

void G4VEmModel::FillNumberOfSecondaries ( G4int numberOfTriplets,
G4int numberOfRecoil 
)
virtualinherited

Definition at line 365 of file G4VEmModel.cc.

367{
368 numberOfTriplets = 0;
369 numberOfRecoil = 0;
370}

Referenced by G4VEmProcess::PostStepDoIt(), and G4VEnergyLossProcess::PostStepDoIt().

◆ ForceBuildTableFlag()

G4bool G4VEmModel::ForceBuildTableFlag ( ) const
inlineinherited

Definition at line 711 of file G4VEmModel.hh.

712{
713 return flagForceBuildTable;
714}
G4bool flagForceBuildTable
Definition: G4VEmModel.hh:456

References G4VEmModel::flagForceBuildTable.

Referenced by G4VMscModel::GetParticleChangeForMSC().

◆ GetAngularDistribution()

G4VEmAngularDistribution * G4VEmModel::GetAngularDistribution ( )
inlineinherited

Definition at line 621 of file G4VEmModel.hh.

622{
623 return anglModel;
624}
G4VEmAngularDistribution * anglModel
Definition: G4VEmModel.hh:414

References G4VEmModel::anglModel.

Referenced by G4EmModelManager::DumpModelList(), G4AtimaEnergyLossModel::Initialise(), G4BetheBlochModel::Initialise(), G4BraggIonModel::Initialise(), G4BraggModel::Initialise(), G4ICRU73QOModel::Initialise(), G4LindhardSorensenIonModel::Initialise(), G4MollerBhabhaModel::Initialise(), G4AdjointBremsstrahlungModel::RapidSampleSecondaries(), G4LivermoreBremsstrahlungModel::SampleSecondaries(), G4eBremParametrizedModel::SampleSecondaries(), G4eBremsstrahlungRelModel::SampleSecondaries(), G4SeltzerBergerModel::SampleSecondaries(), G4DNABornIonisationModel1::SampleSecondaries(), G4DNABornIonisationModel2::SampleSecondaries(), G4DNAEmfietzoglouIonisationModel::SampleSecondaries(), G4DNARuddIonisationExtendedModel::SampleSecondaries(), G4DNARuddIonisationModel::SampleSecondaries(), G4PAIModel::SampleSecondaries(), G4PAIPhotModel::SampleSecondaries(), G4LivermoreIonisationModel::SampleSecondaries(), G4LivermorePhotoElectricModel::SampleSecondaries(), G4LivermoreRayleighModel::SampleSecondaries(), G4MicroElecInelasticModel::SampleSecondaries(), G4MicroElecInelasticModel_new::SampleSecondaries(), G4MuBremsstrahlungModel::SampleSecondaries(), G4MuPairProductionModel::SampleSecondaries(), G4AtimaEnergyLossModel::SampleSecondaries(), G4BetheBlochModel::SampleSecondaries(), G4BetheHeitlerModel::SampleSecondaries(), G4BraggIonModel::SampleSecondaries(), G4BraggModel::SampleSecondaries(), G4ICRU73QOModel::SampleSecondaries(), G4LindhardSorensenIonModel::SampleSecondaries(), G4MollerBhabhaModel::SampleSecondaries(), G4PairProductionRelModel::SampleSecondaries(), G4PEEffectFluoModel::SampleSecondaries(), and G4IonParametrisedLossModel::SampleSecondaries().

◆ GetChargeSquareRatio()

G4double G4VEmModel::GetChargeSquareRatio ( const G4ParticleDefinition p,
const G4Material ,
G4double  kineticEnergy 
)
virtualinherited

◆ GetCrossSectionTable()

G4PhysicsTable * G4VEmModel::GetCrossSectionTable ( )
inlineinherited

◆ GetCurrentElement()

const G4Element * G4VEmModel::GetCurrentElement ( ) const
inlineinherited

◆ GetCurrentIsotope()

const G4Isotope * G4VEmModel::GetCurrentIsotope ( ) const
inlineinherited

Definition at line 512 of file G4VEmModel.hh.

513{
514 return fCurrentIsotope;
515}
const G4Isotope * fCurrentIsotope
Definition: G4VEmModel.hh:418

References G4VEmModel::fCurrentIsotope.

Referenced by G4VEmProcess::GetTargetIsotope().

◆ GetDEDX() [1/2]

G4double G4VMscModel::GetDEDX ( const G4ParticleDefinition part,
G4double  kineticEnergy,
const G4MaterialCutsCouple couple 
)
inherited

Definition at line 159 of file G4VMscModel.cc.

161{
162 G4double x;
163 if (nullptr != ionisation) {
164 x = ionisation->GetDEDX(kinEnergy, couple);
165 } else {
166 const G4double q = part->GetPDGCharge()*inveplus;
167 x = dedx*q*q;
168 }
169 return x;
170}
G4double GetDEDX(G4double kineticEnergy, const G4MaterialCutsCouple *)
G4VEnergyLossProcess * ionisation
Definition: G4VMscModel.hh:187
G4double dedx
Definition: G4VMscModel.hh:190

References G4VMscModel::dedx, G4VEnergyLossProcess::GetDEDX(), G4ParticleDefinition::GetPDGCharge(), G4VEmModel::inveplus, and G4VMscModel::ionisation.

Referenced by SampleScattering(), and G4UrbanMscModel::SampleScattering().

◆ GetDEDX() [2/2]

G4double G4VMscModel::GetDEDX ( const G4ParticleDefinition part,
G4double  kineticEnergy,
const G4MaterialCutsCouple couple,
G4double  logKineticEnergy 
)
inherited

Definition at line 174 of file G4VMscModel.cc.

176{
177 G4double x;
178 if (nullptr != ionisation) {
179 x = ionisation->GetDEDX(kinEnergy, couple, logKinEnergy);
180 } else {
181 const G4double q = part->GetPDGCharge()*inveplus;
182 x = dedx*q*q;
183 }
184 return x;
185}

References G4VMscModel::dedx, G4VEnergyLossProcess::GetDEDX(), G4ParticleDefinition::GetPDGCharge(), G4VEmModel::inveplus, and G4VMscModel::ionisation.

◆ GetElementData()

G4ElementData * G4VEmModel::GetElementData ( )
inlineinherited

◆ GetElementSelectors()

std::vector< G4EmElementSelector * > * G4VEmModel::GetElementSelectors ( )
inlineinherited

◆ GetEnergy()

G4double G4VMscModel::GetEnergy ( const G4ParticleDefinition part,
G4double  range,
const G4MaterialCutsCouple couple 
)
inherited

Definition at line 224 of file G4VMscModel.cc.

226{
227 G4double e;
228 //G4cout << "G4VMscModel::GetEnergy R(mm)= " << range << " " << ionisation
229 // << " Rlocal(mm)= " << localrange << " Elocal(MeV)= " << localtkin << G4endl;
230 if(nullptr != ionisation) { e = ionisation->GetKineticEnergy(range, couple); }
231 else {
232 e = localtkin;
233 if(localrange > range) {
234 G4double q = part->GetPDGCharge()*inveplus;
235 e -= (localrange - range)*dedx*q*q*couple->GetMaterial()->GetDensity();
236 }
237 }
238 return e;
239}
G4double GetDensity() const
Definition: G4Material.hh:176
G4double GetKineticEnergy(G4double range, const G4MaterialCutsCouple *)
G4double localtkin
Definition: G4VMscModel.hh:191
G4double localrange
Definition: G4VMscModel.hh:192

References G4VMscModel::dedx, G4Material::GetDensity(), G4VEnergyLossProcess::GetKineticEnergy(), G4MaterialCutsCouple::GetMaterial(), G4ParticleDefinition::GetPDGCharge(), G4VEmModel::inveplus, G4VMscModel::ionisation, G4VMscModel::localrange, and G4VMscModel::localtkin.

Referenced by ComputeGeomPathLength(), G4GoudsmitSaundersonMscModel::ComputeGeomPathLength(), G4UrbanMscModel::ComputeGeomPathLength(), G4WentzelVIModel::ComputeGeomPathLength(), G4WentzelVIModel::ComputeTrueStepLength(), G4GoudsmitSaundersonMscModel::SampleMSC(), SampleScattering(), and G4UrbanMscModel::SampleScattering().

◆ GetIonisation()

G4VEnergyLossProcess * G4VMscModel::GetIonisation ( ) const
inlineinherited

Definition at line 302 of file G4VMscModel.hh.

303{
304 return ionisation;
305}

References G4VMscModel::ionisation.

◆ GetModelOfFluctuations()

G4VEmFluctuationModel * G4VEmModel::GetModelOfFluctuations ( )
inlineinherited

◆ GetName()

const G4String & G4VEmModel::GetName ( ) const
inlineinherited

◆ GetPartialCrossSection()

G4double G4VEmModel::GetPartialCrossSection ( const G4Material ,
G4int  level,
const G4ParticleDefinition ,
G4double  kineticEnergy 
)
virtualinherited

◆ GetParticleChangeForGamma()

G4ParticleChangeForGamma * G4VEmModel::GetParticleChangeForGamma ( )
protectedinherited

Definition at line 123 of file G4VEmModel.cc.

124{
125 G4ParticleChangeForGamma* p = nullptr;
126 if (pParticleChange != nullptr) {
127 p = static_cast<G4ParticleChangeForGamma*>(pParticleChange);
128 } else {
129 p = new G4ParticleChangeForGamma();
130 pParticleChange = p;
131 }
132 if(fTripletModel != nullptr) { fTripletModel->SetParticleChange(p); }
133 return p;
134}
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
Definition: G4VEmModel.cc:447
G4VParticleChange * pParticleChange
Definition: G4VEmModel.hh:425
G4VEmModel * fTripletModel
Definition: G4VEmModel.hh:415

References G4VEmModel::fTripletModel, G4VEmModel::pParticleChange, and G4VEmModel::SetParticleChange().

Referenced by G4MicroElecLOPhononModel::G4MicroElecLOPhononModel(), G4DNAChampionElasticModel::Initialise(), G4DNACPA100ElasticModel::Initialise(), G4DNADingfelderChargeDecreaseModel::Initialise(), G4DNADingfelderChargeIncreaseModel::Initialise(), G4DNAMeltonAttachmentModel::Initialise(), G4DNAMillerGreenExcitationModel::Initialise(), G4DNARuddIonisationExtendedModel::Initialise(), G4DNARuddIonisationModel::Initialise(), G4DNASancheExcitationModel::Initialise(), G4DNAScreenedRutherfordElasticModel::Initialise(), G4DNATransformElectronModel::Initialise(), G4DNAUeharaScreenedRutherfordElasticModel::Initialise(), G4LEPTSAttachmentModel::Initialise(), G4LEPTSDissociationModel::Initialise(), G4LEPTSElasticModel::Initialise(), G4LEPTSExcitationModel::Initialise(), G4LEPTSIonisationModel::Initialise(), G4LEPTSPositroniumModel::Initialise(), G4LEPTSRotExcitationModel::Initialise(), G4LEPTSVibExcitationModel::Initialise(), G4BoldyshevTripletModel::Initialise(), G4eplusTo3GammaOKVIModel::Initialise(), G4eSingleCoulombScatteringModel::Initialise(), G4IonCoulombScatteringModel::Initialise(), G4eeToHadronsMultiModel::Initialise(), G4JAEAElasticScatteringModel::Initialise(), G4JAEAPolarizedElasticScatteringModel::Initialise(), G4LivermoreComptonModel::Initialise(), G4LivermoreGammaConversion5DModel::Initialise(), G4LivermoreGammaConversionModel::Initialise(), G4LivermoreNuclearGammaConversionModel::Initialise(), G4LivermorePhotoElectricModel::Initialise(), G4LivermorePolarizedComptonModel::Initialise(), G4LivermorePolarizedGammaConversionModel::Initialise(), G4LivermorePolarizedRayleighModel::Initialise(), G4LivermoreRayleighModel::Initialise(), G4LowEPComptonModel::Initialise(), G4LowEPPolarizedComptonModel::Initialise(), G4MicroElecElasticModel::Initialise(), G4MicroElecElasticModel_new::Initialise(), G4MicroElecInelasticModel::Initialise(), G4MicroElecInelasticModel_new::Initialise(), G4MicroElecLOPhononModel::Initialise(), G4PenelopeAnnihilationModel::Initialise(), G4PenelopeComptonModel::Initialise(), G4PenelopeGammaConversionModel::Initialise(), G4PenelopePhotoElectricModel::Initialise(), G4PenelopeRayleighModel::Initialise(), G4PenelopeRayleighModelMI::Initialise(), G4PolarizedAnnihilationModel::Initialise(), G4BetheHeitlerModel::Initialise(), G4eCoulombScatteringModel::Initialise(), G4eDPWACoulombScatteringModel::Initialise(), G4eeToTwoGammaModel::Initialise(), G4eplusTo2GammaOKVIModel::Initialise(), G4hCoulombScatteringModel::Initialise(), G4KleinNishinaCompton::Initialise(), G4KleinNishinaModel::Initialise(), G4PairProductionRelModel::Initialise(), G4PEEffectFluoModel::Initialise(), G4XrayRayleighModel::Initialise(), G4DNABornExcitationModel1::Initialise(), G4DNABornExcitationModel2::Initialise(), G4DNABornIonisationModel1::Initialise(), G4DNABornIonisationModel2::Initialise(), G4DNACPA100ExcitationModel::Initialise(), G4DNACPA100IonisationModel::Initialise(), G4DNADiracRMatrixExcitationModel::Initialise(), G4DNAEmfietzoglouExcitationModel::Initialise(), G4DNAEmfietzoglouIonisationModel::Initialise(), G4DNAQuinnPlasmonExcitationModel::Initialise(), G4DNARelativisticIonisationModel::Initialise(), G4DNAELSEPAElasticModel::Initialise(), G4DNAModelInterface::Initialise(), and G4DNAIonElasticModel::Initialise().

◆ GetParticleChangeForLoss()

G4ParticleChangeForLoss * G4VEmModel::GetParticleChangeForLoss ( )
protectedinherited

◆ GetParticleChangeForMSC()

G4ParticleChangeForMSC * G4VMscModel::GetParticleChangeForMSC ( const G4ParticleDefinition p = nullptr)
protectedinherited

Definition at line 78 of file G4VMscModel.cc.

79{
80 // recomputed for each new run
81 if(nullptr == safetyHelper) {
85 }
86 G4ParticleChangeForMSC* change = nullptr;
87 if (nullptr != pParticleChange) {
88 change = static_cast<G4ParticleChangeForMSC*>(pParticleChange);
89 } else {
90 change = new G4ParticleChangeForMSC();
91 }
92 if(IsMaster() && nullptr != p) {
93
94 // table is always built for low mass particles
95 if(p->GetParticleName() != "GenericIon" &&
97
99 G4LossTableBuilder* builder =
103 emin = std::max(emin, param->MinKinEnergy());
104 emax = std::min(emax, param->MaxKinEnergy());
105 if(emin < emax) {
107 emin, emax, true);
108 }
109 }
110 }
111 return change;
112}
static G4EmParameters * Instance()
G4double MinKinEnergy() const
G4double MaxKinEnergy() const
G4PhysicsTable * BuildTableForModel(G4PhysicsTable *table, G4VEmModel *model, const G4ParticleDefinition *, G4double emin, G4double emax, G4bool spline)
G4LossTableBuilder * GetTableBuilder()
const G4String & GetParticleName() const
void InitialiseHelper()
static G4TransportationManager * GetTransportationManager()
G4SafetyHelper * GetSafetyHelper() const
G4double LowEnergyLimit() const
Definition: G4VEmModel.hh:662
G4bool IsMaster() const
Definition: G4VEmModel.hh:746
G4double HighEnergyLimit() const
Definition: G4VEmModel.hh:655
G4double HighEnergyActivationLimit() const
Definition: G4VEmModel.hh:669
G4double LowEnergyActivationLimit() const
Definition: G4VEmModel.hh:676
G4bool ForceBuildTableFlag() const
Definition: G4VEmModel.hh:711
static constexpr double GeV

References G4LossTableBuilder::BuildTableForModel(), emax, G4VEmModel::ForceBuildTableFlag(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4TransportationManager::GetSafetyHelper(), G4LossTableManager::GetTableBuilder(), G4TransportationManager::GetTransportationManager(), CLHEP::GeV, G4VEmModel::HighEnergyActivationLimit(), G4VEmModel::HighEnergyLimit(), G4SafetyHelper::InitialiseHelper(), G4EmParameters::Instance(), G4LossTableManager::Instance(), G4VEmModel::IsMaster(), G4VEmModel::LowEnergyActivationLimit(), G4VEmModel::LowEnergyLimit(), G4INCL::Math::max(), G4EmParameters::MaxKinEnergy(), G4INCL::Math::min(), G4EmParameters::MinKinEnergy(), G4VEmModel::pParticleChange, G4VMscModel::safetyHelper, and G4VEmModel::xSectionTable.

Referenced by Initialise(), G4GoudsmitSaundersonMscModel::Initialise(), G4UrbanMscModel::Initialise(), and G4WentzelVIModel::Initialise().

◆ GetParticleCharge()

G4double G4VEmModel::GetParticleCharge ( const G4ParticleDefinition p,
const G4Material ,
G4double  kineticEnergy 
)
virtualinherited

◆ GetRange() [1/2]

G4double G4VMscModel::GetRange ( const G4ParticleDefinition part,
G4double  kineticEnergy,
const G4MaterialCutsCouple couple 
)
inherited

Definition at line 189 of file G4VMscModel.cc.

191{
192 // << ionisation << " " << part->GetParticleName() << G4endl;
193 localtkin = kinEnergy;
194 if (nullptr != ionisation) {
195 localrange = ionisation->GetRange(kinEnergy, couple);
196 } else {
197 const G4double q = part->GetPDGCharge()*inveplus;
198 localrange = kinEnergy/(dedx*q*q*couple->GetMaterial()->GetDensity());
199 }
200 //G4cout << "R(mm)= " << localrange << " " << ionisation << G4endl;
201 return localrange;
202}
G4double GetRange(G4double kineticEnergy, const G4MaterialCutsCouple *)

References G4VMscModel::dedx, G4Material::GetDensity(), G4MaterialCutsCouple::GetMaterial(), G4ParticleDefinition::GetPDGCharge(), G4VEnergyLossProcess::GetRange(), G4VEmModel::inveplus, G4VMscModel::ionisation, G4VMscModel::localrange, and G4VMscModel::localtkin.

Referenced by G4VMultipleScattering::AlongStepDoIt(), ComputeTruePathLengthLimit(), G4LowEWentzelVIModel::ComputeTruePathLengthLimit(), G4GoudsmitSaundersonMscModel::ComputeTruePathLengthLimit(), G4UrbanMscModel::ComputeTruePathLengthLimit(), and G4WentzelVIModel::ComputeTruePathLengthLimit().

◆ GetRange() [2/2]

G4double G4VMscModel::GetRange ( const G4ParticleDefinition part,
G4double  kineticEnergy,
const G4MaterialCutsCouple couple,
G4double  logKineticEnergy 
)
inherited

Definition at line 206 of file G4VMscModel.cc.

208{
209 //G4cout << "G4VMscModel::GetRange E(MeV)= " << kinEnergy << " "
210 // << ionisation << " " << part->GetParticleName() << G4endl;
211 localtkin = kinEnergy;
212 if (nullptr != ionisation) {
213 localrange = ionisation->GetRange(kinEnergy, couple, logKinEnergy);
214 } else {
215 const G4double q = part->GetPDGCharge()*inveplus;
216 localrange = kinEnergy/(dedx*q*q*couple->GetMaterial()->GetDensity());
217 }
218 //G4cout << "R(mm)= " << localrange << " " << ionisation << G4endl;
219 return localrange;
220}

References G4VMscModel::dedx, G4Material::GetDensity(), G4MaterialCutsCouple::GetMaterial(), G4ParticleDefinition::GetPDGCharge(), G4VEnergyLossProcess::GetRange(), G4VEmModel::inveplus, G4VMscModel::ionisation, G4VMscModel::localrange, and G4VMscModel::localtkin.

◆ GetTransportMeanFreePath() [1/2]

G4double G4VMscModel::GetTransportMeanFreePath ( const G4ParticleDefinition part,
G4double  kinEnergy 
)
inlineinherited

◆ GetTransportMeanFreePath() [2/2]

G4double G4VMscModel::GetTransportMeanFreePath ( const G4ParticleDefinition part,
G4double  kinEnergy,
G4double  logKinEnergy 
)
inlineinherited

Definition at line 332 of file G4VMscModel.hh.

334{
335 G4double x;
336 if (nullptr != xSectionTable) {
337 x = pFactor*(*xSectionTable)[basedCoupleIndex]->LogVectorValue(ekin, logekin)/(ekin*ekin);
338 } else {
339 x = pFactor*CrossSectionPerVolume(pBaseMaterial, part, ekin, 0.0, DBL_MAX);
340 }
341 return (x > 0.0) ? 1.0/x : DBL_MAX;
342}

References G4VEmModel::basedCoupleIndex, G4VEmModel::CrossSectionPerVolume(), DBL_MAX, G4VEmModel::pBaseMaterial, G4VEmModel::pFactor, and G4VEmModel::xSectionTable.

◆ GetTripletModel()

G4VEmModel * G4VEmModel::GetTripletModel ( )
inlineinherited

◆ HighEnergyActivationLimit()

G4double G4VEmModel::HighEnergyActivationLimit ( ) const
inlineinherited

◆ HighEnergyLimit()

G4double G4VEmModel::HighEnergyLimit ( ) const
inlineinherited

Definition at line 655 of file G4VEmModel.hh.

656{
657 return highLimit;
658}
G4double highLimit
Definition: G4VEmModel.hh:437

References G4VEmModel::highLimit.

Referenced by G4DNAChampionElasticModel::CrossSectionPerVolume(), G4DNACPA100ElasticModel::CrossSectionPerVolume(), G4DNACPA100ExcitationModel::CrossSectionPerVolume(), G4DNACPA100IonisationModel::CrossSectionPerVolume(), G4DNAEmfietzoglouExcitationModel::CrossSectionPerVolume(), G4DNAEmfietzoglouIonisationModel::CrossSectionPerVolume(), G4DNAMeltonAttachmentModel::CrossSectionPerVolume(), G4DNASancheExcitationModel::CrossSectionPerVolume(), G4DNAScreenedRutherfordElasticModel::CrossSectionPerVolume(), G4DNATransformElectronModel::CrossSectionPerVolume(), G4DNAELSEPAElasticModel::CrossSectionPerVolume(), G4DNAChampionElasticModel::G4DNAChampionElasticModel(), G4DNACPA100ElasticModel::G4DNACPA100ElasticModel(), G4DNAMeltonAttachmentModel::G4DNAMeltonAttachmentModel(), G4DNASancheExcitationModel::G4DNASancheExcitationModel(), G4DNAUeharaScreenedRutherfordElasticModel::G4DNAUeharaScreenedRutherfordElasticModel(), G4eeToHadronsModel::G4eeToHadronsModel(), G4IonParametrisedLossModel::G4IonParametrisedLossModel(), G4LivermorePolarizedRayleighModel::G4LivermorePolarizedRayleighModel(), G4ContinuousGainOfEnergy::GetContinuousStepLimit(), G4PenelopeBremsstrahlungModel::GetCrossSectionTableForCouple(), G4VMscModel::GetParticleChangeForMSC(), G4DNAChampionElasticModel::Initialise(), G4DNACPA100ElasticModel::Initialise(), G4DNADingfelderChargeDecreaseModel::Initialise(), G4DNADingfelderChargeIncreaseModel::Initialise(), G4DNAMeltonAttachmentModel::Initialise(), G4DNAMillerGreenExcitationModel::Initialise(), G4DNARuddIonisationExtendedModel::Initialise(), G4DNARuddIonisationModel::Initialise(), G4DNASancheExcitationModel::Initialise(), G4DNAScreenedRutherfordElasticModel::Initialise(), G4DNAUeharaScreenedRutherfordElasticModel::Initialise(), G4BoldyshevTripletModel::Initialise(), G4PAIModel::Initialise(), G4PAIPhotModel::Initialise(), G4JAEAElasticScatteringModel::Initialise(), G4JAEAPolarizedElasticScatteringModel::Initialise(), G4LivermoreComptonModel::Initialise(), G4LivermoreGammaConversion5DModel::Initialise(), G4LivermoreGammaConversionModel::Initialise(), G4LivermoreIonisationModel::Initialise(), G4LivermoreNuclearGammaConversionModel::Initialise(), G4LivermorePolarizedComptonModel::Initialise(), G4LivermorePolarizedGammaConversionModel::Initialise(), G4LivermoreRayleighModel::Initialise(), G4LowEPComptonModel::Initialise(), G4LowEPPolarizedComptonModel::Initialise(), G4MicroElecElasticModel::Initialise(), G4MicroElecElasticModel_new::Initialise(), G4MicroElecInelasticModel::Initialise(), G4MicroElecInelasticModel_new::Initialise(), G4PenelopeAnnihilationModel::Initialise(), G4PenelopeBremsstrahlungModel::Initialise(), G4PenelopeComptonModel::Initialise(), G4PenelopeGammaConversionModel::Initialise(), G4PenelopeIonisationModel::Initialise(), G4PenelopePhotoElectricModel::Initialise(), G4PenelopeRayleighModel::Initialise(), G4PenelopeRayleighModelMI::Initialise(), G4MuBremsstrahlungModel::Initialise(), G4MuPairProductionModel::Initialise(), G4eBremsstrahlungRelModel::Initialise(), G4eDPWACoulombScatteringModel::Initialise(), G4GoudsmitSaundersonMscModel::Initialise(), G4PairProductionRelModel::Initialise(), G4SeltzerBergerModel::Initialise(), G4WentzelVIModel::Initialise(), G4DNABornExcitationModel1::Initialise(), G4DNABornExcitationModel2::Initialise(), G4DNABornIonisationModel1::Initialise(), G4DNABornIonisationModel2::Initialise(), G4DNACPA100ExcitationModel::Initialise(), G4DNACPA100IonisationModel::Initialise(), G4DNADiracRMatrixExcitationModel::Initialise(), G4DNAEmfietzoglouExcitationModel::Initialise(), G4DNAEmfietzoglouIonisationModel::Initialise(), G4DNAQuinnPlasmonExcitationModel::Initialise(), G4DNARelativisticIonisationModel::Initialise(), G4EmModelManager::Initialise(), G4DNAELSEPAElasticModel::Initialise(), G4DNADummyModel::Initialise(), G4DNAIonElasticModel::Initialise(), G4mplIonisation::InitialiseEnergyLossProcess(), G4ionIonisation::InitialiseEnergyLossProcess(), G4MuBremsstrahlungModel::InitialiseLocal(), G4MuPairProductionModel::InitialiseLocal(), G4eBremsstrahlungRelModel::InitialiseLocal(), G4PairProductionRelModel::InitialiseLocal(), G4CoulombScattering::InitialiseProcess(), G4VEmProcess::PostStepDoIt(), G4VEmProcess::PreparePhysicsTable(), G4VEnergyLossProcess::PreparePhysicsTable(), G4VMultipleScattering::PreparePhysicsTable(), G4DNACPA100IonisationModel::SampleSecondaries(), G4DNAEmfietzoglouIonisationModel::SampleSecondaries(), G4DNASancheExcitationModel::SampleSecondaries(), G4EmConfigurator::SetExtraEmModel(), G4mplIonisationModel::SetParticle(), G4mplIonisationWithDeltaModel::SetParticle(), G4eBremsstrahlung::StreamProcessInfo(), and G4EmConfigurator::UpdateModelEnergyRange().

◆ Initialise()

void G4UrbanAdjointMscModel::Initialise ( const G4ParticleDefinition p,
const G4DataVector  
)
overridevirtual

Implements G4VEmModel.

Definition at line 131 of file G4UrbanAdjointMscModel.cc.

133{
134 const G4ParticleDefinition* p1 = p;
135
136 if(p->GetParticleName() == "adj_e-")
138 // set values of some data members
139 SetParticle(p1);
140
142
144}
static G4Electron * Electron()
Definition: G4Electron.cc:93
G4ParticleChangeForMSC * GetParticleChangeForMSC(const G4ParticleDefinition *p=nullptr)
Definition: G4VMscModel.cc:78

References G4Electron::Electron(), fParticleChange, G4VMscModel::GetParticleChangeForMSC(), G4ParticleDefinition::GetParticleName(), G4VMscModel::latDisplasment, latDisplasmentbackup, and SetParticle().

◆ InitialiseElementSelectors()

void G4VEmModel::InitialiseElementSelectors ( const G4ParticleDefinition part,
const G4DataVector cuts 
)
inherited

Definition at line 138 of file G4VEmModel.cc.

140{
141 // using spline for element selectors should be investigated in details
142 // because small number of points may provide biased results
143 // large number of points requires significant increase of memory
144 G4bool spline = false;
145
146 //G4cout << "IES: for " << GetName() << " Emin(MeV)= " << lowLimit/MeV
147 // << " Emax(MeV)= " << highLimit/MeV << G4endl;
148
149 // two times less bins because probability functon is normalized
150 // so correspondingly is more smooth
151 if(highLimit <= lowLimit) { return; }
152
154
155 G4ProductionCutsTable* theCoupleTable=
157 G4int numOfCouples = theCoupleTable->GetTableSize();
158
159 // prepare vector
160 if(!elmSelectors) {
161 elmSelectors = new std::vector<G4EmElementSelector*>;
162 }
163 if(numOfCouples > nSelectors) {
164 for(G4int i=nSelectors; i<numOfCouples; ++i) {
165 elmSelectors->push_back(nullptr);
166 }
167 nSelectors = numOfCouples;
168 }
169
170 // initialise vector
171 for(G4int i=0; i<numOfCouples; ++i) {
172
173 // no need in element selectors for infinite cuts
174 if(cuts[i] == DBL_MAX) { continue; }
175
176 auto couple = theCoupleTable->GetMaterialCutsCouple(i);
177 auto material = couple->GetMaterial();
178 SetCurrentCouple(couple);
179
180 // selector already exist then delete
181 delete (*elmSelectors)[i];
182
183 G4double emin = std::max(lowLimit, MinPrimaryEnergy(material, part, cuts[i]));
184 G4double emax = std::max(highLimit, 10*emin);
185 static const G4double invlog106 = 1.0/(6*G4Log(10.));
186 G4int nbins = (G4int)(nbinsPerDec*G4Log(emax/emin)*invlog106);
187 nbins = std::max(nbins, 3);
188
189 (*elmSelectors)[i] = new G4EmElementSelector(this,material,nbins,
190 emin,emax,spline);
191 ((*elmSelectors)[i])->Initialise(part, cuts[i]);
192 /*
193 G4cout << "G4VEmModel::InitialiseElmSelectors i= " << i
194 << " " << part->GetParticleName()
195 << " for " << GetName() << " cut= " << cuts[i]
196 << " " << (*elmSelectors)[i] << G4endl;
197 ((*elmSelectors)[i])->Dump(part);
198 */
199 }
200}
bool G4bool
Definition: G4Types.hh:86
G4int NumberOfBinsPerDecade() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
virtual G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double cut=0.0)
Definition: G4VEmModel.cc:415
G4double lowLimit
Definition: G4VEmModel.hh:436
G4int nSelectors
Definition: G4VEmModel.hh:443
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)=0

References DBL_MAX, G4VEmModel::elmSelectors, emax, G4Log(), G4ProductionCutsTable::GetMaterialCutsCouple(), G4ProductionCutsTable::GetProductionCutsTable(), G4ProductionCutsTable::GetTableSize(), G4VEmModel::highLimit, G4VEmModel::Initialise(), G4EmParameters::Instance(), G4VEmModel::lowLimit, eplot::material, G4INCL::Math::max(), G4VEmModel::MinPrimaryEnergy(), G4VEmModel::nSelectors, G4EmParameters::NumberOfBinsPerDecade(), and G4VEmModel::SetCurrentCouple().

Referenced by G4eSingleCoulombScatteringModel::Initialise(), G4PAIModel::Initialise(), G4PAIPhotModel::Initialise(), G4JAEAElasticScatteringModel::Initialise(), G4JAEAPolarizedElasticScatteringModel::Initialise(), G4LivermoreComptonModel::Initialise(), G4LivermoreGammaConversion5DModel::Initialise(), G4LivermoreGammaConversionModel::Initialise(), G4LivermoreNuclearGammaConversionModel::Initialise(), G4LivermorePolarizedComptonModel::Initialise(), G4LivermorePolarizedGammaConversionModel::Initialise(), G4LivermorePolarizedRayleighModel::Initialise(), G4LivermoreRayleighModel::Initialise(), G4LowEPComptonModel::Initialise(), G4LowEPPolarizedComptonModel::Initialise(), G4PenelopePhotoElectricModel::Initialise(), G4MuBremsstrahlungModel::Initialise(), G4MuPairProductionModel::Initialise(), G4BetheHeitlerModel::Initialise(), G4eBremParametrizedModel::Initialise(), G4eBremsstrahlungRelModel::Initialise(), G4eCoulombScatteringModel::Initialise(), G4eDPWACoulombScatteringModel::Initialise(), G4hCoulombScatteringModel::Initialise(), G4KleinNishinaCompton::Initialise(), G4KleinNishinaModel::Initialise(), G4PairProductionRelModel::Initialise(), G4SeltzerBergerModel::Initialise(), and G4XrayRayleighModel::Initialise().

◆ InitialiseForElement()

void G4VEmModel::InitialiseForElement ( const G4ParticleDefinition ,
G4int  Z 
)
virtualinherited

◆ InitialiseForMaterial()

void G4VEmModel::InitialiseForMaterial ( const G4ParticleDefinition part,
const G4Material material 
)
virtualinherited

Definition at line 209 of file G4VEmModel.cc.

211{
212 if(material != nullptr) {
213 size_t n = material->GetNumberOfElements();
214 for(size_t i=0; i<n; ++i) {
215 G4int Z = material->GetElement(i)->GetZasInt();
216 InitialiseForElement(part, Z);
217 }
218 }
219}
const G4int Z[17]
virtual void InitialiseForElement(const G4ParticleDefinition *, G4int Z)
Definition: G4VEmModel.cc:223

References G4VEmModel::InitialiseForElement(), eplot::material, CLHEP::detail::n, and Z.

Referenced by G4EmCalculator::FindEmModel().

◆ InitialiseLocal()

void G4VEmModel::InitialiseLocal ( const G4ParticleDefinition ,
G4VEmModel masterModel 
)
virtualinherited

◆ InitialiseParameters()

void G4VMscModel::InitialiseParameters ( const G4ParticleDefinition part)
inherited

Definition at line 116 of file G4VMscModel.cc.

117{
118 if(IsLocked()) { return; }
120 if(std::abs(part->GetPDGEncoding()) == 11) {
122 facrange = param->MscRangeFactor();
124 } else {
126 facrange = param->MscMuHadRangeFactor();
128 }
129 skin = param->MscSkin();
130 facgeom = param->MscGeomFactor();
131 facsafety = param->MscSafetyFactor();
132 lambdalimit = param->MscLambdaLimit();
133}
G4double MscMuHadRangeFactor() const
G4MscStepLimitType MscMuHadStepLimitType() const
G4double MscSafetyFactor() const
G4MscStepLimitType MscStepLimitType() const
G4double MscGeomFactor() const
G4bool LateralDisplacement() const
G4bool MuHadLateralDisplacement() const
G4double MscLambdaLimit() const
G4double MscRangeFactor() const
G4double MscSkin() const
G4bool IsLocked() const
Definition: G4VEmModel.hh:877

References G4VMscModel::facgeom, G4VMscModel::facrange, G4VMscModel::facsafety, G4ParticleDefinition::GetPDGEncoding(), G4EmParameters::Instance(), G4VEmModel::IsLocked(), G4VMscModel::lambdalimit, G4VMscModel::latDisplasment, G4EmParameters::LateralDisplacement(), G4EmParameters::MscGeomFactor(), G4EmParameters::MscLambdaLimit(), G4EmParameters::MscMuHadRangeFactor(), G4EmParameters::MscMuHadStepLimitType(), G4EmParameters::MscRangeFactor(), G4EmParameters::MscSafetyFactor(), G4EmParameters::MscSkin(), G4EmParameters::MscStepLimitType(), G4EmParameters::MuHadLateralDisplacement(), G4VMscModel::skin, and G4VMscModel::steppingAlgorithm.

Referenced by G4GoudsmitSaundersonMscModel::Initialise(), G4UrbanMscModel::Initialise(), and G4WentzelVIModel::Initialise().

◆ IsActive()

G4bool G4VEmModel::IsActive ( G4double  kinEnergy) const
inlineinherited

◆ IsLocked()

G4bool G4VEmModel::IsLocked ( ) const
inlineinherited

◆ IsMaster()

G4bool G4VEmModel::IsMaster ( ) const
inlineinherited

Definition at line 746 of file G4VEmModel.hh.

747{
748 return isMaster;
749}
G4bool isMaster
Definition: G4VEmModel.hh:457

References G4VEmModel::isMaster.

Referenced by G4PenelopeBremsstrahlungModel::BuildXSTable(), G4PenelopeBremsstrahlungModel::ClearTables(), G4MuPairProductionModel::DataCorrupted(), G4PenelopePhotoElectricModel::GetNumberOfShellXS(), G4VMscModel::GetParticleChangeForMSC(), G4BoldyshevTripletModel::Initialise(), G4eSingleCoulombScatteringModel::Initialise(), G4PAIModel::Initialise(), G4PAIPhotModel::Initialise(), G4EmMultiModel::Initialise(), G4mplIonisationModel::Initialise(), G4mplIonisationWithDeltaModel::Initialise(), G4JAEAElasticScatteringModel::Initialise(), G4JAEAPolarizedElasticScatteringModel::Initialise(), G4LivermoreBremsstrahlungModel::Initialise(), G4LivermoreComptonModel::Initialise(), G4LivermoreGammaConversion5DModel::Initialise(), G4LivermoreGammaConversionModel::Initialise(), G4LivermoreNuclearGammaConversionModel::Initialise(), G4LivermorePhotoElectricModel::Initialise(), G4LivermorePolarizedComptonModel::Initialise(), G4LivermorePolarizedGammaConversionModel::Initialise(), G4LivermorePolarizedRayleighModel::Initialise(), G4LivermoreRayleighModel::Initialise(), G4LowEPComptonModel::Initialise(), G4LowEPPolarizedComptonModel::Initialise(), G4PenelopeAnnihilationModel::Initialise(), G4PenelopeBremsstrahlungModel::Initialise(), G4PenelopeComptonModel::Initialise(), G4PenelopeGammaConversionModel::Initialise(), G4PenelopeIonisationModel::Initialise(), G4PenelopePhotoElectricModel::Initialise(), G4PenelopeRayleighModel::Initialise(), G4PenelopeRayleighModelMI::Initialise(), G4MuBremsstrahlungModel::Initialise(), G4MuPairProductionModel::Initialise(), G4BetheBlochModel::Initialise(), G4BetheHeitlerModel::Initialise(), G4BraggIonModel::Initialise(), G4BraggModel::Initialise(), G4eBremParametrizedModel::Initialise(), G4eBremsstrahlungRelModel::Initialise(), G4eCoulombScatteringModel::Initialise(), G4eDPWACoulombScatteringModel::Initialise(), G4eeToTwoGammaModel::Initialise(), G4eplusTo2GammaOKVIModel::Initialise(), G4GoudsmitSaundersonMscModel::Initialise(), G4hCoulombScatteringModel::Initialise(), G4KleinNishinaCompton::Initialise(), G4KleinNishinaModel::Initialise(), G4LindhardSorensenIonModel::Initialise(), G4PairProductionRelModel::Initialise(), G4SeltzerBergerModel::Initialise(), G4WentzelVIModel::Initialise(), G4PenelopeBremsstrahlungModel::InitialiseLocal(), G4PenelopeGammaConversionModel::ReadDataFile(), G4PenelopePhotoElectricModel::ReadDataFile(), G4BetheHeitlerModel::~G4BetheHeitlerModel(), G4BoldyshevTripletModel::~G4BoldyshevTripletModel(), G4BraggIonModel::~G4BraggIonModel(), G4BraggModel::~G4BraggModel(), G4eBremsstrahlungRelModel::~G4eBremsstrahlungRelModel(), G4eDPWACoulombScatteringModel::~G4eDPWACoulombScatteringModel(), G4GoudsmitSaundersonMscModel::~G4GoudsmitSaundersonMscModel(), G4JAEAElasticScatteringModel::~G4JAEAElasticScatteringModel(), G4JAEAPolarizedElasticScatteringModel::~G4JAEAPolarizedElasticScatteringModel(), G4LivermoreBremsstrahlungModel::~G4LivermoreBremsstrahlungModel(), G4LivermoreComptonModel::~G4LivermoreComptonModel(), G4LivermoreGammaConversion5DModel::~G4LivermoreGammaConversion5DModel(), G4LivermoreGammaConversionModel::~G4LivermoreGammaConversionModel(), G4LivermoreNuclearGammaConversionModel::~G4LivermoreNuclearGammaConversionModel(), G4LivermorePhotoElectricModel::~G4LivermorePhotoElectricModel(), G4LivermorePolarizedComptonModel::~G4LivermorePolarizedComptonModel(), G4LivermorePolarizedGammaConversionModel::~G4LivermorePolarizedGammaConversionModel(), G4LivermorePolarizedRayleighModel::~G4LivermorePolarizedRayleighModel(), G4LivermoreRayleighModel::~G4LivermoreRayleighModel(), G4LowEPComptonModel::~G4LowEPComptonModel(), G4LowEPPolarizedComptonModel::~G4LowEPPolarizedComptonModel(), G4mplIonisationModel::~G4mplIonisationModel(), G4mplIonisationWithDeltaModel::~G4mplIonisationWithDeltaModel(), G4PAIModel::~G4PAIModel(), G4PAIPhotModel::~G4PAIPhotModel(), G4PairProductionRelModel::~G4PairProductionRelModel(), G4PenelopeBremsstrahlungModel::~G4PenelopeBremsstrahlungModel(), G4PenelopeGammaConversionModel::~G4PenelopeGammaConversionModel(), G4PenelopeIonisationModel::~G4PenelopeIonisationModel(), G4PenelopePhotoElectricModel::~G4PenelopePhotoElectricModel(), G4PenelopeRayleighModel::~G4PenelopeRayleighModel(), G4PenelopeRayleighModelMI::~G4PenelopeRayleighModelMI(), G4SeltzerBergerModel::~G4SeltzerBergerModel(), and G4WentzelVIModel::~G4WentzelVIModel().

◆ LowEnergyActivationLimit()

G4double G4VEmModel::LowEnergyActivationLimit ( ) const
inlineinherited

◆ LowEnergyLimit()

G4double G4VEmModel::LowEnergyLimit ( ) const
inlineinherited

Definition at line 662 of file G4VEmModel.hh.

663{
664 return lowLimit;
665}

References G4VEmModel::lowLimit.

Referenced by G4eBremsstrahlungRelModel::ComputeCrossSectionPerAtom(), G4KleinNishinaCompton::ComputeCrossSectionPerAtom(), G4KleinNishinaModel::ComputeCrossSectionPerAtom(), G4LivermoreComptonModel::ComputeCrossSectionPerAtom(), G4LivermorePolarizedComptonModel::ComputeCrossSectionPerAtom(), G4LowEPComptonModel::ComputeCrossSectionPerAtom(), G4LowEPPolarizedComptonModel::ComputeCrossSectionPerAtom(), G4mplIonisationWithDeltaModel::ComputeCrossSectionPerElectron(), G4EmCalculator::ComputeDEDX(), G4eBremsstrahlungRelModel::ComputeDEDXPerVolume(), G4mplIonisationWithDeltaModel::ComputeDEDXPerVolume(), G4IonParametrisedLossModel::ComputeDEDXPerVolume(), G4IonParametrisedLossModel::CorrectionsAlongStep(), G4PenelopeRayleighModelMI::CrossSectionPerVolume(), G4PenelopeComptonModel::CrossSectionPerVolume(), G4DNAChampionElasticModel::CrossSectionPerVolume(), G4DNACPA100ElasticModel::CrossSectionPerVolume(), G4DNACPA100ExcitationModel::CrossSectionPerVolume(), G4DNACPA100IonisationModel::CrossSectionPerVolume(), G4DNAEmfietzoglouExcitationModel::CrossSectionPerVolume(), G4DNAEmfietzoglouIonisationModel::CrossSectionPerVolume(), G4DNAMeltonAttachmentModel::CrossSectionPerVolume(), G4DNASancheExcitationModel::CrossSectionPerVolume(), G4DNAScreenedRutherfordElasticModel::CrossSectionPerVolume(), G4DNAELSEPAElasticModel::CrossSectionPerVolume(), G4EmCalculator::FindEmModel(), G4DNAChampionElasticModel::G4DNAChampionElasticModel(), G4DNACPA100ElasticModel::G4DNACPA100ElasticModel(), G4DNAMeltonAttachmentModel::G4DNAMeltonAttachmentModel(), G4DNASancheExcitationModel::G4DNASancheExcitationModel(), G4DNAUeharaScreenedRutherfordElasticModel::G4DNAUeharaScreenedRutherfordElasticModel(), G4eeToHadronsModel::G4eeToHadronsModel(), G4LivermorePolarizedRayleighModel::G4LivermorePolarizedRayleighModel(), G4PenelopeBremsstrahlungModel::GetCrossSectionTableForCouple(), G4VMscModel::GetParticleChangeForMSC(), G4DNAChampionElasticModel::Initialise(), G4DNACPA100ElasticModel::Initialise(), G4DNADingfelderChargeDecreaseModel::Initialise(), G4DNADingfelderChargeIncreaseModel::Initialise(), G4DNAMeltonAttachmentModel::Initialise(), G4DNAMillerGreenExcitationModel::Initialise(), G4DNARuddIonisationExtendedModel::Initialise(), G4DNARuddIonisationModel::Initialise(), G4DNASancheExcitationModel::Initialise(), G4DNAScreenedRutherfordElasticModel::Initialise(), G4DNAUeharaScreenedRutherfordElasticModel::Initialise(), G4BoldyshevTripletModel::Initialise(), G4PAIModel::Initialise(), G4PAIPhotModel::Initialise(), G4JAEAElasticScatteringModel::Initialise(), G4JAEAPolarizedElasticScatteringModel::Initialise(), G4LivermoreComptonModel::Initialise(), G4LivermoreGammaConversion5DModel::Initialise(), G4LivermoreGammaConversionModel::Initialise(), G4LivermoreIonisationModel::Initialise(), G4LivermoreNuclearGammaConversionModel::Initialise(), G4LivermorePolarizedComptonModel::Initialise(), G4LivermorePolarizedGammaConversionModel::Initialise(), G4LivermoreRayleighModel::Initialise(), G4LowEPComptonModel::Initialise(), G4LowEPPolarizedComptonModel::Initialise(), G4MicroElecElasticModel::Initialise(), G4MicroElecElasticModel_new::Initialise(), G4MicroElecInelasticModel::Initialise(), G4MicroElecInelasticModel_new::Initialise(), G4PenelopeAnnihilationModel::Initialise(), G4PenelopeBremsstrahlungModel::Initialise(), G4PenelopeComptonModel::Initialise(), G4PenelopeGammaConversionModel::Initialise(), G4PenelopeIonisationModel::Initialise(), G4PenelopePhotoElectricModel::Initialise(), G4PenelopeRayleighModel::Initialise(), G4PenelopeRayleighModelMI::Initialise(), G4MuPairProductionModel::Initialise(), G4eBremParametrizedModel::Initialise(), G4eBremsstrahlungRelModel::Initialise(), G4eDPWACoulombScatteringModel::Initialise(), G4GoudsmitSaundersonMscModel::Initialise(), G4PairProductionRelModel::Initialise(), G4SeltzerBergerModel::Initialise(), G4WentzelVIModel::Initialise(), G4DNABornExcitationModel1::Initialise(), G4DNABornExcitationModel2::Initialise(), G4DNABornIonisationModel1::Initialise(), G4DNABornIonisationModel2::Initialise(), G4DNACPA100ExcitationModel::Initialise(), G4DNACPA100IonisationModel::Initialise(), G4DNADiracRMatrixExcitationModel::Initialise(), G4DNAEmfietzoglouExcitationModel::Initialise(), G4DNAEmfietzoglouIonisationModel::Initialise(), G4DNAQuinnPlasmonExcitationModel::Initialise(), G4DNARelativisticIonisationModel::Initialise(), G4EmModelManager::Initialise(), G4DNAELSEPAElasticModel::Initialise(), G4DNADummyModel::Initialise(), G4DNAIonElasticModel::Initialise(), G4mplIonisation::InitialiseEnergyLossProcess(), G4eBremsstrahlungRelModel::InitialiseLocal(), G4PairProductionRelModel::InitialiseLocal(), G4CoulombScattering::InitialiseProcess(), G4VEmProcess::PostStepDoIt(), G4eBremsstrahlungRelModel::SampleSecondaries(), G4DNACPA100IonisationModel::SampleSecondaries(), G4DNAEmfietzoglouIonisationModel::SampleSecondaries(), G4LivermoreComptonModel::SampleSecondaries(), G4LivermorePolarizedComptonModel::SampleSecondaries(), G4LowEPComptonModel::SampleSecondaries(), G4LowEPPolarizedComptonModel::SampleSecondaries(), G4PenelopeComptonModel::SampleSecondaries(), G4PolarizedComptonModel::SampleSecondaries(), G4KleinNishinaCompton::SampleSecondaries(), G4KleinNishinaModel::SampleSecondaries(), G4EmConfigurator::SetExtraEmModel(), G4mplIonisationModel::SetParticle(), G4mplIonisationWithDeltaModel::SetParticle(), and G4EmConfigurator::UpdateModelEnergyRange().

◆ LPMFlag()

G4bool G4VEmModel::LPMFlag ( ) const
inlineinherited

◆ MaxSecondaryEnergy()

G4double G4VEmModel::MaxSecondaryEnergy ( const G4ParticleDefinition ,
G4double  kineticEnergy 
)
protectedvirtualinherited

◆ MaxSecondaryKinEnergy()

G4double G4VEmModel::MaxSecondaryKinEnergy ( const G4DynamicParticle dynParticle)
inlineinherited

◆ MinEnergyCut()

G4double G4VEmModel::MinEnergyCut ( const G4ParticleDefinition ,
const G4MaterialCutsCouple  
)
virtualinherited

◆ MinPrimaryEnergy()

G4double G4VEmModel::MinPrimaryEnergy ( const G4Material ,
const G4ParticleDefinition ,
G4double  cut = 0.0 
)
virtualinherited

◆ ModelDescription()

void G4VEmModel::ModelDescription ( std::ostream &  outFile) const
virtualinherited

Reimplemented in G4eeToHadronsMultiModel.

Definition at line 469 of file G4VEmModel.cc.

470{
471 outFile << "The description for this model has not been written yet.\n";
472}

◆ operator=()

G4UrbanAdjointMscModel & G4UrbanAdjointMscModel::operator= ( const G4UrbanAdjointMscModel right)
delete

◆ PolarAngleLimit()

G4double G4VEmModel::PolarAngleLimit ( ) const
inlineinherited

◆ Randomizetlimit()

G4double G4UrbanAdjointMscModel::Randomizetlimit ( )
inlineprivate

Definition at line 186 of file G4UrbanAdjointMscModel.hh.

187{
188 G4double temptlimit = tlimit;
189 if(tlimit > tlimitmin)
190 {
191 G4double delta = tlimit - tlimitmin;
192 do
193 {
194 temptlimit = G4RandGauss::shoot(rndmEngineMod, tlimit, 0.1 * delta);
195 // Loop checking, 10-Apr-2016, Laszlo Urban
196 } while((temptlimit < tlimit - delta) || (temptlimit > tlimit + delta));
197 }
198 else
199 {
200 temptlimit = tlimitmin;
201 }
202
203 return temptlimit;
204}
ThreeVector shoot(const G4int Ap, const G4int Af)

References rndmEngineMod, G4INCL::DeJongSpin::shoot(), tlimit, and tlimitmin.

Referenced by ComputeTruePathLengthLimit().

◆ SampleCosineTheta()

G4double G4UrbanAdjointMscModel::SampleCosineTheta ( G4double  trueStepLength,
G4double  KineticEnergy 
)
private

Definition at line 904 of file G4UrbanAdjointMscModel.cc.

906{
907 G4double cth = 1.;
908 G4double tau = trueStepLength / lambda0;
909 currentTau = tau;
911
912 G4double lambda1 = GetTransportMeanFreePath(particle, KineticEnergy);
913 if(std::fabs(lambda1 - lambda0) > lambda0 * 0.01 && lambda1 > 0.)
914 {
915 // mean tau value
916 tau = trueStepLength * G4Log(lambda0 / lambda1) / (lambda0 - lambda1);
917 }
918
919 currentTau = tau;
920 lambdaeff = trueStepLength / currentTau;
922
923 if(tau >= taubig)
924 {
925 cth = -1. + 2. * rndmEngineMod->flat();
926 }
927 else if(tau >= tausmall)
928 {
929 static const G4double numlim = 0.01;
930 G4double xmeanth, x2meanth;
931 if(tau < numlim)
932 {
933 xmeanth = 1.0 - tau * (1.0 - 0.5 * tau);
934 x2meanth = 1.0 - tau * (5.0 - 6.25 * tau) / 3.;
935 }
936 else
937 {
938 xmeanth = G4Exp(-tau);
939 x2meanth = (1. + 2. * G4Exp(-2.5 * tau)) / 3.;
940 }
941
942 // too large step of low-energy particle
943 G4double relloss = 1. - KineticEnergy / currentKinEnergy;
944 static const G4double rellossmax = 0.50;
945 if(relloss > rellossmax)
946 {
947 return SimpleScattering(xmeanth, x2meanth);
948 }
949 // is step extreme small ?
950 G4bool extremesmallstep = false;
952 G4double theta0 = 0.;
953 if(trueStepLength > tsmall)
954 {
955 theta0 = ComputeTheta0(trueStepLength, KineticEnergy);
956 }
957 else
958 {
959 theta0 =
960 sqrt(trueStepLength / tsmall) * ComputeTheta0(tsmall, KineticEnergy);
961 extremesmallstep = true;
962 }
963
964 static constexpr G4double theta0max = CLHEP::pi / 6.;
965
966 // protection for very small angles
967 G4double theta2 = theta0 * theta0;
968
969 if(theta2 < tausmall)
970 {
971 return cth;
972 }
973
974 if(theta0 > theta0max)
975 {
976 return SimpleScattering(xmeanth, x2meanth);
977 }
978
979 G4double x = theta2 * (1.0 - theta2 / 12.);
980 if(theta2 > numlim)
981 {
982 G4double sth = 2 * sin(0.5 * theta0);
983 x = sth * sth;
984 }
985
986 // parameter for tail
987 G4double ltau = G4Log(tau);
988 G4double u = G4Exp(ltau / 6.);
989 if(extremesmallstep)
990 u = G4Exp(G4Log(tsmall / lambda0) / 6.);
992 G4double xsi = coeffc1 + u * (coeffc2 + coeffc3 * u) + coeffc4 * xx;
993
994 // tail should not be too big
995 if(xsi < 1.9)
996 {
997 xsi = 1.9;
998 }
999
1000 G4double c = xsi;
1001
1002 if(std::abs(c - 3.) < 0.001)
1003 {
1004 c = 3.001;
1005 }
1006 else if(std::abs(c - 2.) < 0.001)
1007 {
1008 c = 2.001;
1009 }
1010
1011 G4double c1 = c - 1.;
1012
1013 G4double ea = G4Exp(-xsi);
1014 G4double eaa = 1. - ea;
1015 G4double xmean1 = 1. - (1. - (1. + xsi) * ea) * x / eaa;
1016 G4double x0 = 1. - xsi * x;
1017
1018 if(xmean1 <= 0.999 * xmeanth)
1019 {
1020 return SimpleScattering(xmeanth, x2meanth);
1021 }
1022 // from continuity of derivatives
1023 G4double b = 1. + (c - xsi) * x;
1024
1025 G4double b1 = b + 1.;
1026 G4double bx = c * x;
1027
1028 G4double eb1 = G4Exp(G4Log(b1) * c1);
1029 G4double ebx = G4Exp(G4Log(bx) * c1);
1030 G4double d = ebx / eb1;
1031
1032 G4double xmean2 = (x0 + d - (bx - b1 * d) / (c - 2.)) / (1. - d);
1033
1034 G4double f1x0 = ea / eaa;
1035 G4double f2x0 = c1 / (c * (1. - d));
1036 G4double prob = f2x0 / (f1x0 + f2x0);
1037
1038 G4double qprob = xmeanth / (prob * xmean1 + (1. - prob) * xmean2);
1039
1040 if(rndmEngineMod->flat() < qprob)
1041 {
1042 G4double var = 0;
1043 if(rndmEngineMod->flat() < prob)
1044 {
1045 cth = 1. + G4Log(ea + rndmEngineMod->flat() * eaa) * x;
1046 }
1047 else
1048 {
1049 var = (1.0 - d) * rndmEngineMod->flat();
1050 if(var < numlim * d)
1051 {
1052 var /= (d * c1);
1053 cth = -1.0 + var * (1.0 - 0.5 * var * c) * (2. + (c - xsi) * x);
1054 }
1055 else
1056 {
1057 cth = 1. + x * (c - xsi - c * G4Exp(-G4Log(var + d) / c1));
1058 }
1059 }
1060 }
1061 else
1062 {
1063 cth = -1. + 2. * rndmEngineMod->flat();
1064 }
1065 }
1066 return cth;
1067}
virtual double flat()=0
G4double GetRadlen() const
Definition: G4Material.hh:216
G4double ComputeTheta0(G4double truePathLength, G4double KineticEnergy)
G4double SimpleScattering(G4double xmeanth, G4double x2meanth)
static constexpr double pi
Definition: SystemOfUnits.h:55

References coeffc1, coeffc2, coeffc3, coeffc4, ComputeTheta0(), couple, currentKinEnergy, currentRadLength, currentTau, CLHEP::HepRandomEngine::flat(), G4Exp(), G4Log(), G4MaterialCutsCouple::GetMaterial(), G4Material::GetRadlen(), G4VMscModel::GetTransportMeanFreePath(), lambda0, lambdaeff, lambdalimit, G4INCL::Math::min(), particle, CLHEP::pi, rndmEngineMod, SimpleScattering(), taubig, tausmall, and tlimitmin.

Referenced by SampleScattering().

◆ SampleDisplacement()

void G4UrbanAdjointMscModel::SampleDisplacement ( G4double  sinTheta,
G4double  phi 
)
private

Definition at line 1123 of file G4UrbanAdjointMscModel.cc.

1124{
1125 G4double rmax =
1127
1128 static constexpr G4double third = 1. / 3.;
1129 G4double r = rmax * G4Exp(G4Log(rndmEngineMod->flat()) * third);
1130
1131 if(r > 0.)
1132 {
1133 static constexpr G4double kappa = 2.5;
1134 static constexpr G4double kappami1 = 1.5;
1135
1136 G4double latcorr = 0.;
1137 if((currentTau >= tausmall) && !insideskin)
1138 {
1139 if(currentTau < taulim)
1140 {
1141 latcorr = lambdaeff * kappa * currentTau * currentTau *
1142 (1. - (kappa + 1.) * currentTau * third) * third;
1143 }
1144 else
1145 {
1146 G4double etau = 0.;
1147 if(currentTau < taubig)
1148 {
1149 etau = G4Exp(-currentTau);
1150 }
1151 latcorr = -kappa * currentTau;
1152 latcorr = G4Exp(latcorr) / kappami1;
1153 latcorr += 1. - kappa * etau / kappami1;
1154 latcorr *= 2. * lambdaeff * third;
1155 }
1156 }
1157 latcorr = std::min(latcorr, r);
1158
1159 // sample direction of lateral displacement
1160 // compute it from the lateral correlation
1161 G4double Phi = 0.;
1162 if(std::abs(r * sth) < latcorr)
1163 {
1164 Phi = twopi * rndmEngineMod->flat();
1165 }
1166 else
1167 {
1168 G4double psi = std::acos(latcorr / (r * sth));
1169 if(rndmEngineMod->flat() < 0.5)
1170 {
1171 Phi = phi + psi;
1172 }
1173 else
1174 {
1175 Phi = phi - psi;
1176 }
1177 }
1178 fDisplacement.set(r * std::cos(Phi), r * std::sin(Phi), 0.0);
1179 }
1180}
static constexpr double twopi
Definition: G4SIunits.hh:56
void set(double x, double y, double z)
G4ThreeVector fDisplacement
Definition: G4VMscModel.hh:208

References currentTau, G4VMscModel::fDisplacement, CLHEP::HepRandomEngine::flat(), G4Exp(), G4Log(), insideskin, lambdaeff, G4INCL::Math::min(), rndmEngineMod, CLHEP::Hep3Vector::set(), taubig, taulim, tausmall, anonymous_namespace{G4ChipsKaonMinusElasticXS.cc}::third, tPathLength, twopi, and zPathLength.

Referenced by SampleScattering().

◆ SampleDisplacementNew()

void G4UrbanAdjointMscModel::SampleDisplacementNew ( G4double  sinTheta,
G4double  phi 
)
private

Definition at line 1183 of file G4UrbanAdjointMscModel.cc.

1184{
1185 // sample displacement r
1186
1187 G4double rmax =
1189 // u = (r/rmax)**2 , v=1-u
1190 // paramerization from ss simulation
1191 // f(u) = p0*exp(p1*log(v)-p2*v)+v*(p3+p4*v)
1192 G4double u, v, rej;
1193 G4int count = 0;
1194
1195 static constexpr G4double reps = 1.e-6;
1196 static constexpr G4double rp0 = 2.2747e+4;
1197 static constexpr G4double rp1 = 4.5980e+0;
1198 static constexpr G4double rp2 = 1.5580e+1;
1199 static constexpr G4double rp3 = 7.1287e-1;
1200 static constexpr G4double rp4 = -5.7069e-1;
1201
1202 do
1203 {
1204 u = reps + (1. - 2. * reps) * rndmEngineMod->flat();
1205 v = 1. - u;
1206 rej = rp0 * G4Exp(rp1 * G4Log(v) - rp2 * v) + v * (rp3 + rp4 * v);
1207 } while(rndmEngineMod->flat() > rej && ++count < 1000);
1208 G4double r = rmax * sqrt(u);
1209
1210 if(r > 0.)
1211 {
1212 // sample Phi using lateral correlation
1213 // v = Phi-phi = acos(latcorr/(r*sth))
1214 // v has a universal distribution which can be parametrized from ss
1215 // simulation as
1216 // f(v) = 1.49e-2*exp(-v**2/(2*0.320))+2.50e-2*exp(-31.0*log(1.+6.30e-2*v))+
1217 // 1.96e-5*exp(8.42e-1*log(1.+1.45e1*v))
1218 static constexpr G4double probv1 = 0.305533;
1219 static constexpr G4double probv2 = 0.955176;
1220 static constexpr G4double vhigh = 3.15;
1221 static const G4double w2v = 1. / G4Exp(30. * G4Log(1. + 6.30e-2 * vhigh));
1222 static const G4double w3v = 1. / G4Exp(-1.842 * G4Log(1. + 1.45e1 * vhigh));
1223
1224 G4double Phi;
1225 G4double random = rndmEngineMod->flat();
1226 if(random < probv1)
1227 {
1228 do
1229 {
1230 v = G4RandGauss::shoot(rndmEngineMod, 0., 0.320);
1231 } while(std::abs(v) >= vhigh);
1232 Phi = phi + v;
1233 }
1234 else
1235 {
1236 if(random < probv2)
1237 {
1238 v = (-1. +
1239 1. / G4Exp(G4Log(1. - rndmEngineMod->flat() * (1. - w2v)) / 30.)) /
1240 6.30e-2;
1241 }
1242 else
1243 {
1244 v = (-1. + 1. / G4Exp(G4Log(1. - rndmEngineMod->flat() * (1. - w3v)) /
1245 -1.842)) /
1246 1.45e1;
1247 }
1248
1249 random = rndmEngineMod->flat();
1250 if(random < 0.5)
1251 {
1252 Phi = phi + v;
1253 }
1254 else
1255 {
1256 Phi = phi - v;
1257 }
1258 }
1259 fDisplacement.set(r * std::cos(Phi), r * std::sin(Phi), 0.0);
1260 }
1261}

References G4VMscModel::fDisplacement, CLHEP::HepRandomEngine::flat(), G4Exp(), G4Log(), rndmEngineMod, CLHEP::Hep3Vector::set(), G4INCL::DeJongSpin::shoot(), tPathLength, and zPathLength.

Referenced by SampleScattering().

◆ SampleScattering()

G4ThreeVector & G4UrbanAdjointMscModel::SampleScattering ( const G4ThreeVector oldDirection,
G4double  safety 
)
overridevirtual

Implements G4VMscModel.

Definition at line 850 of file G4UrbanAdjointMscModel.cc.

852{
853 fDisplacement.set(0.0, 0.0, 0.0);
854 G4double kineticEnergy = currentKinEnergy;
856 {
857 kineticEnergy = GetEnergy(particle, currentRange - tPathLength, couple);
858 }
859 else
860 {
861 kineticEnergy -= tPathLength * GetDEDX(particle, currentKinEnergy, couple);
862 }
863
864 if((kineticEnergy <= eV) || (tPathLength <= tlimitminfix) ||
866 {
867 return fDisplacement;
868 }
869
870 G4double cth = SampleCosineTheta(tPathLength, kineticEnergy);
871
872 // protection against 'bad' cth values
873 if(std::fabs(cth) >= 1.0)
874 {
875 return fDisplacement;
876 }
877
878 G4double sth = sqrt((1.0 - cth) * (1.0 + cth));
879 G4double phi = twopi * rndmEngineMod->flat();
880 G4double dirx = sth * cos(phi);
881 G4double diry = sth * sin(phi);
882
883 G4ThreeVector newDirection(dirx, diry, cth);
884 newDirection.rotateUz(oldDirection);
885
887
889 {
891 {
892 SampleDisplacementNew(cth, phi);
893 }
894 else
895 {
896 SampleDisplacement(sth, phi);
897 }
898 fDisplacement.rotateUz(oldDirection);
899 }
900 return fDisplacement;
901}
static constexpr double eV
Definition: G4SIunits.hh:201
Hep3Vector & rotateUz(const Hep3Vector &)
Definition: ThreeVector.cc:33
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
void SampleDisplacement(G4double sinTheta, G4double phi)
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy)
void SampleDisplacementNew(G4double sinTheta, G4double phi)
G4double GetDEDX(const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
Definition: G4VMscModel.cc:159

References couple, currentKinEnergy, currentRange, currentTau, displacementFlag, G4VMscModel::dtrl, eV, G4VMscModel::fDisplacement, CLHEP::HepRandomEngine::flat(), fParticleChange, G4VMscModel::GetDEDX(), G4VMscModel::GetEnergy(), lambda0, G4VMscModel::latDisplasment, particle, G4ParticleChangeForMSC::ProposeMomentumDirection(), rndmEngineMod, CLHEP::Hep3Vector::rotateUz(), SampleCosineTheta(), SampleDisplacement(), SampleDisplacementNew(), CLHEP::Hep3Vector::set(), tausmall, tlimitminfix, tPathLength, and twopi.

◆ SampleSecondaries()

void G4VMscModel::SampleSecondaries ( std::vector< G4DynamicParticle * > *  ,
const G4MaterialCutsCouple ,
const G4DynamicParticle ,
G4double  tmin,
G4double  tmax 
)
overridevirtualinherited

Implements G4VEmModel.

Definition at line 151 of file G4VMscModel.cc.

155{}

◆ SecondaryThreshold()

G4double G4VEmModel::SecondaryThreshold ( ) const
inlineinherited

◆ SelectIsotopeNumber()

G4int G4VEmModel::SelectIsotopeNumber ( const G4Element elm)
inherited

Definition at line 319 of file G4VEmModel.cc.

320{
322 const size_t ni = elm->GetNumberOfIsotopes();
323 fCurrentIsotope = elm->GetIsotope(0);
324 size_t idx = 0;
325 if(ni > 1) {
326 const G4double* ab = elm->GetRelativeAbundanceVector();
328 for(; idx<ni; ++idx) {
329 x -= ab[idx];
330 if (x <= 0.0) {
331 fCurrentIsotope = elm->GetIsotope(idx);
332 break;
333 }
334 }
335 }
336 return fCurrentIsotope->GetN();
337}
static const G4double ab
#define G4UniformRand()
Definition: Randomize.hh:52
G4double * GetRelativeAbundanceVector() const
Definition: G4Element.hh:167
const G4Isotope * GetIsotope(G4int iso) const
Definition: G4Element.hh:170
size_t GetNumberOfIsotopes() const
Definition: G4Element.hh:159
G4int GetN() const
Definition: G4Isotope.hh:93

References ab, G4VEmModel::fCurrentIsotope, G4UniformRand, G4Element::GetIsotope(), G4Isotope::GetN(), G4Element::GetNumberOfIsotopes(), G4Element::GetRelativeAbundanceVector(), and G4VEmModel::SetCurrentElement().

Referenced by G4eSingleCoulombScatteringModel::SampleSecondaries(), G4IonCoulombScatteringModel::SampleSecondaries(), G4eCoulombScatteringModel::SampleSecondaries(), G4hCoulombScatteringModel::SampleSecondaries(), and G4BetheHeitler5DModel::SampleSecondaries().

◆ SelectRandomAtom() [1/2]

const G4Element * G4VEmModel::SelectRandomAtom ( const G4Material mat,
const G4ParticleDefinition pd,
G4double  kineticEnergy,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
)
inherited

Definition at line 275 of file G4VEmModel.cc.

280{
281 size_t n = mat->GetNumberOfElements();
282 fCurrentElement = mat->GetElement(0);
283 if (n > 1) {
284 const G4double x = G4UniformRand()*
285 G4VEmModel::CrossSectionPerVolume(mat,pd,kinEnergy,tcut,tmax);
286 for(size_t i=0; i<n; ++i) {
287 if (x <= xsec[i]) {
288 fCurrentElement = mat->GetElement(i);
289 break;
290 }
291 }
292 }
293 return fCurrentElement;
294}

References G4VEmModel::CrossSectionPerVolume(), G4VEmModel::fCurrentElement, G4UniformRand, G4Material::GetElement(), G4Material::GetNumberOfElements(), CLHEP::detail::n, and G4VEmModel::xsec.

◆ SelectRandomAtom() [2/2]

const G4Element * G4VEmModel::SelectRandomAtom ( const G4MaterialCutsCouple couple,
const G4ParticleDefinition part,
G4double  kineticEnergy,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
)
inlineinherited

Definition at line 580 of file G4VEmModel.hh.

585{
586 SetCurrentCouple(couple);
588 ((*elmSelectors)[couple->GetIndex()])->SelectRandomAtom(kinEnergy) :
589 SelectRandomAtom(pBaseMaterial,part,kinEnergy,cutEnergy,maxEnergy);
590 fCurrentIsotope = nullptr;
591 return fCurrentElement;
592}
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.hh:580

References G4VEmModel::elmSelectors, G4VEmModel::fCurrentElement, G4VEmModel::fCurrentIsotope, G4MaterialCutsCouple::GetIndex(), G4VEmModel::nSelectors, G4VEmModel::pBaseMaterial, G4VEmModel::SelectRandomAtom(), and G4VEmModel::SetCurrentCouple().

Referenced by G4AdjointBremsstrahlungModel::RapidSampleSecondaries(), G4LivermoreBremsstrahlungModel::SampleSecondaries(), G4JAEAElasticScatteringModel::SampleSecondaries(), G4JAEAPolarizedElasticScatteringModel::SampleSecondaries(), G4LivermoreComptonModel::SampleSecondaries(), G4LivermoreNuclearGammaConversionModel::SampleSecondaries(), G4LivermorePhotoElectricModel::SampleSecondaries(), G4LivermorePolarizedComptonModel::SampleSecondaries(), G4LivermorePolarizedGammaConversionModel::SampleSecondaries(), G4LivermorePolarizedRayleighModel::SampleSecondaries(), G4LivermoreRayleighModel::SampleSecondaries(), G4LowEPComptonModel::SampleSecondaries(), G4LowEPPolarizedComptonModel::SampleSecondaries(), G4PenelopePhotoElectricModel::SampleSecondaries(), G4MuBremsstrahlungModel::SampleSecondaries(), G4MuPairProductionModel::SampleSecondaries(), G4hCoulombScatteringModel::SampleSecondaries(), G4KleinNishinaModel::SampleSecondaries(), G4PEEffectFluoModel::SampleSecondaries(), G4VEmModel::SelectRandomAtom(), and G4VEmModel::SelectTargetAtom().

◆ SelectRandomAtomNumber()

G4int G4VEmModel::SelectRandomAtomNumber ( const G4Material mat)
inherited

◆ SelectTargetAtom()

const G4Element * G4VEmModel::SelectTargetAtom ( const G4MaterialCutsCouple couple,
const G4ParticleDefinition part,
G4double  kineticEnergy,
G4double  logKineticEnergy,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
)
inlineinherited

◆ SetActivationHighEnergyLimit()

void G4VEmModel::SetActivationHighEnergyLimit ( G4double  val)
inlineinherited

◆ SetActivationLowEnergyLimit()

void G4VEmModel::SetActivationLowEnergyLimit ( G4double  val)
inlineinherited

◆ SetAngularDistribution()

void G4VEmModel::SetAngularDistribution ( G4VEmAngularDistribution p)
inlineinherited

Definition at line 628 of file G4VEmModel.hh.

629{
630 if(p != anglModel) {
631 delete anglModel;
632 anglModel = p;
633 }
634}

References G4VEmModel::anglModel.

Referenced by G4EmLivermorePhysics::ConstructProcess(), G4EmLowEPPhysics::ConstructProcess(), G4EmStandardPhysics::ConstructProcess(), G4EmStandardPhysics_option3::ConstructProcess(), G4EmStandardPhysics_option4::ConstructProcess(), G4EmStandardPhysicsSS::ConstructProcess(), G4BetheHeitlerModel::G4BetheHeitlerModel(), G4DNABornIonisationModel1::G4DNABornIonisationModel1(), G4DNABornIonisationModel2::G4DNABornIonisationModel2(), G4DNAEmfietzoglouIonisationModel::G4DNAEmfietzoglouIonisationModel(), G4DNARuddIonisationExtendedModel::G4DNARuddIonisationExtendedModel(), G4DNARuddIonisationModel::G4DNARuddIonisationModel(), G4eBremParametrizedModel::G4eBremParametrizedModel(), G4eBremsstrahlungRelModel::G4eBremsstrahlungRelModel(), G4IonParametrisedLossModel::G4IonParametrisedLossModel(), G4LivermoreBremsstrahlungModel::G4LivermoreBremsstrahlungModel(), G4LivermoreIonisationModel::G4LivermoreIonisationModel(), G4LivermorePhotoElectricModel::G4LivermorePhotoElectricModel(), G4LivermoreRayleighModel::G4LivermoreRayleighModel(), G4MicroElecInelasticModel::G4MicroElecInelasticModel(), G4MicroElecInelasticModel_new::G4MicroElecInelasticModel_new(), G4MuBremsstrahlungModel::G4MuBremsstrahlungModel(), G4MuPairProductionModel::G4MuPairProductionModel(), G4PAIModel::G4PAIModel(), G4PAIPhotModel::G4PAIPhotModel(), G4PairProductionRelModel::G4PairProductionRelModel(), G4PEEffectFluoModel::G4PEEffectFluoModel(), G4SeltzerBergerModel::G4SeltzerBergerModel(), G4AtimaEnergyLossModel::Initialise(), G4BetheBlochModel::Initialise(), G4BraggIonModel::Initialise(), G4BraggModel::Initialise(), G4ICRU73QOModel::Initialise(), G4LindhardSorensenIonModel::Initialise(), and G4MollerBhabhaModel::Initialise().

◆ SetAngularGeneratorFlag()

void G4VEmModel::SetAngularGeneratorFlag ( G4bool  val)
inlineinherited

Definition at line 725 of file G4VEmModel.hh.

726{
728}
G4bool useAngularGenerator
Definition: G4VEmModel.hh:461

References G4VEmModel::useAngularGenerator.

Referenced by G4VEnergyLossProcess::PreparePhysicsTable().

◆ SetCrossSectionTable()

void G4VEmModel::SetCrossSectionTable ( G4PhysicsTable p,
G4bool  isLocal 
)
inherited

Definition at line 455 of file G4VEmModel.cc.

456{
457 if(p != xSectionTable) {
458 if(xSectionTable != nullptr && localTable) {
460 delete xSectionTable;
461 }
462 xSectionTable = p;
463 }
464 localTable = isLocal;
465}
void clearAndDestroy()
G4bool localTable
Definition: G4VEmModel.hh:459

References G4PhysicsTable::clearAndDestroy(), G4VEmModel::localTable, and G4VEmModel::xSectionTable.

Referenced by G4VMultipleScattering::BuildPhysicsTable().

◆ SetCurrentCouple()

void G4VEmModel::SetCurrentCouple ( const G4MaterialCutsCouple ptr)
inlineinherited

Definition at line 472 of file G4VEmModel.hh.

473{
474 if(fCurrentCouple != ptr) {
475 fCurrentCouple = ptr;
477 pBaseMaterial = ptr->GetMaterial();
478 pFactor = 1.0;
479 if(useBaseMaterials) {
480 basedCoupleIndex = (*theDensityIdx)[currentCoupleIndex];
481 if(nullptr != pBaseMaterial->GetBaseMaterial())
483 pFactor = (*theDensityFactor)[currentCoupleIndex];
484 }
485 }
486}
const G4Material * GetBaseMaterial() const
Definition: G4Material.hh:229
G4bool useBaseMaterials
Definition: G4VEmModel.hh:462
size_t currentCoupleIndex
Definition: G4VEmModel.hh:448

References G4VEmModel::basedCoupleIndex, G4VEmModel::currentCoupleIndex, G4VEmModel::fCurrentCouple, G4Material::GetBaseMaterial(), G4MaterialCutsCouple::GetIndex(), G4MaterialCutsCouple::GetMaterial(), G4VEmModel::pBaseMaterial, G4VEmModel::pFactor, and G4VEmModel::useBaseMaterials.

Referenced by G4VMultipleScattering::AlongStepGetPhysicalInteractionLength(), G4EmMultiModel::ComputeCrossSectionPerAtom(), G4VEmModel::ComputeDEDX(), G4TablesForExtrapolator::ComputeTrasportXS(), ComputeTruePathLengthLimit(), G4GoudsmitSaundersonMscModel::ComputeTruePathLengthLimit(), G4UrbanMscModel::ComputeTruePathLengthLimit(), G4VEmModel::CrossSection(), G4AdjointPhotoElectricModel::DefineCurrentMaterialAndElectronEnergy(), G4WentzelVIModel::DefineMaterial(), G4WentzelVIRelModel::DefineMaterial(), G4EmCalculator::GetCrossSectionPerVolume(), G4LivermoreGammaConversion5DModel::Initialise(), G4VEmModel::InitialiseElementSelectors(), G4PEEffectFluoModel::SampleSecondaries(), G4EmMultiModel::SampleSecondaries(), G4VEnergyLossProcess::SelectModel(), G4VEmProcess::SelectModel(), G4VEmModel::SelectRandomAtom(), G4VEmModel::SelectTargetAtom(), and G4VEmModel::Value().

◆ SetCurrentElement()

void G4VEmModel::SetCurrentElement ( const G4Element elm)
inlineprotectedinherited

◆ SetDeexcitationFlag()

void G4VEmModel::SetDeexcitationFlag ( G4bool  val)
inlineinherited

Definition at line 823 of file G4VEmModel.hh.

824{
825 flagDeexcitation = val;
826}

References G4VEmModel::flagDeexcitation.

Referenced by G4DNABornIonisationModel1::G4DNABornIonisationModel1(), G4DNABornIonisationModel2::G4DNABornIonisationModel2(), G4DNACPA100IonisationModel::G4DNACPA100IonisationModel(), G4DNAEmfietzoglouIonisationModel::G4DNAEmfietzoglouIonisationModel(), G4DNARelativisticIonisationModel::G4DNARelativisticIonisationModel(), G4DNARuddIonisationExtendedModel::G4DNARuddIonisationExtendedModel(), G4DNARuddIonisationModel::G4DNARuddIonisationModel(), G4KleinNishinaModel::G4KleinNishinaModel(), G4LEPTSIonisationModel::G4LEPTSIonisationModel(), G4LivermoreComptonModel::G4LivermoreComptonModel(), G4LivermorePhotoElectricModel::G4LivermorePhotoElectricModel(), G4LivermorePolarizedComptonModel::G4LivermorePolarizedComptonModel(), G4LowEPComptonModel::G4LowEPComptonModel(), G4LowEPPolarizedComptonModel::G4LowEPPolarizedComptonModel(), G4MicroElecInelasticModel::G4MicroElecInelasticModel(), G4MicroElecInelasticModel_new::G4MicroElecInelasticModel_new(), G4PEEffectFluoModel::G4PEEffectFluoModel(), G4PenelopeBremsstrahlungModel::G4PenelopeBremsstrahlungModel(), G4PenelopeComptonModel::G4PenelopeComptonModel(), G4PenelopeIonisationModel::G4PenelopeIonisationModel(), G4PenelopePhotoElectricModel::G4PenelopePhotoElectricModel(), G4AtimaEnergyLossModel::Initialise(), G4BetheBlochModel::Initialise(), G4BraggIonModel::Initialise(), G4BraggModel::Initialise(), G4ICRU73QOModel::Initialise(), and G4LindhardSorensenIonModel::Initialise().

◆ SetElementSelectors()

void G4VEmModel::SetElementSelectors ( std::vector< G4EmElementSelector * > *  p)
inlineinherited

Definition at line 852 of file G4VEmModel.hh.

853{
854 if(p != elmSelectors) {
855 elmSelectors = p;
856 nSelectors = (nullptr != elmSelectors) ? G4int(elmSelectors->size()) : 0;
857 localElmSelectors = false;
858 }
859}
G4bool localElmSelectors
Definition: G4VEmModel.hh:460

References G4VEmModel::elmSelectors, G4VEmModel::localElmSelectors, and G4VEmModel::nSelectors.

Referenced by G4eDPWACoulombScatteringModel::InitialiseLocal(), G4eSingleCoulombScatteringModel::InitialiseLocal(), G4PAIModel::InitialiseLocal(), G4PAIPhotModel::InitialiseLocal(), G4JAEAElasticScatteringModel::InitialiseLocal(), G4JAEAPolarizedElasticScatteringModel::InitialiseLocal(), G4LivermoreComptonModel::InitialiseLocal(), G4LivermoreNuclearGammaConversionModel::InitialiseLocal(), G4LivermorePolarizedComptonModel::InitialiseLocal(), G4LivermorePolarizedGammaConversionModel::InitialiseLocal(), G4LivermorePolarizedRayleighModel::InitialiseLocal(), G4LivermoreRayleighModel::InitialiseLocal(), G4LowEPComptonModel::InitialiseLocal(), G4LowEPPolarizedComptonModel::InitialiseLocal(), G4PenelopePhotoElectricModel::InitialiseLocal(), G4MuBremsstrahlungModel::InitialiseLocal(), G4MuPairProductionModel::InitialiseLocal(), G4BetheHeitlerModel::InitialiseLocal(), G4eBremParametrizedModel::InitialiseLocal(), G4eBremsstrahlungRelModel::InitialiseLocal(), G4eCoulombScatteringModel::InitialiseLocal(), G4hCoulombScatteringModel::InitialiseLocal(), G4KleinNishinaCompton::InitialiseLocal(), G4KleinNishinaModel::InitialiseLocal(), and G4PairProductionRelModel::InitialiseLocal().

◆ SetFluctuationFlag()

void G4VEmModel::SetFluctuationFlag ( G4bool  val)
inlineinherited

Definition at line 732 of file G4VEmModel.hh.

733{
734 lossFlucFlag = val;
735}
G4bool lossFlucFlag
Definition: G4VEmModel.hh:450

References G4VEmModel::lossFlucFlag.

Referenced by G4EmCalculator::ComputeNuclearDEDX().

◆ SetForceBuildTable()

void G4VEmModel::SetForceBuildTable ( G4bool  val)
inlineinherited

Definition at line 830 of file G4VEmModel.hh.

831{
833}

References G4VEmModel::flagForceBuildTable.

◆ SetGeomFactor()

void G4VMscModel::SetGeomFactor ( G4double  val)
inlineinherited

Definition at line 237 of file G4VMscModel.hh.

238{
239 if(!IsLocked()) { facgeom = val; }
240}

References G4VMscModel::facgeom, and G4VEmModel::IsLocked().

◆ SetHighEnergyLimit()

void G4VEmModel::SetHighEnergyLimit ( G4double  val)
inlineinherited

Definition at line 767 of file G4VEmModel.hh.

768{
769 highLimit = val;
770}

References G4VEmModel::highLimit.

Referenced by G4EmModelActivator::ActivateEmOptions(), G4EmModelActivator::ActivatePAI(), LBE::ConstructEM(), G4EmDNAPhysics_option2::ConstructProcess(), G4EmDNAPhysics_option5::ConstructProcess(), G4EmDNAPhysics_option7::ConstructProcess(), G4EmDNAPhysics_stationary::ConstructProcess(), G4EmLivermorePhysics::ConstructProcess(), G4EmLowEPPhysics::ConstructProcess(), G4EmPenelopePhysics::ConstructProcess(), G4EmStandardPhysics::ConstructProcess(), G4EmStandardPhysics_option1::ConstructProcess(), G4EmStandardPhysics_option2::ConstructProcess(), G4EmStandardPhysics_option4::ConstructProcess(), G4EmStandardPhysicsGS::ConstructProcess(), G4EmStandardPhysicsWVI::ConstructProcess(), G4BraggIonModel::G4BraggIonModel(), G4BraggModel::G4BraggModel(), G4DNAChampionElasticModel::G4DNAChampionElasticModel(), G4DNACPA100ElasticModel::G4DNACPA100ElasticModel(), G4DNACPA100ExcitationModel::G4DNACPA100ExcitationModel(), G4DNACPA100IonisationModel::G4DNACPA100IonisationModel(), G4DNAELSEPAElasticModel::G4DNAELSEPAElasticModel(), G4DNAEmfietzoglouExcitationModel::G4DNAEmfietzoglouExcitationModel(), G4DNAEmfietzoglouIonisationModel::G4DNAEmfietzoglouIonisationModel(), G4DNAIonElasticModel::G4DNAIonElasticModel(), G4DNAMeltonAttachmentModel::G4DNAMeltonAttachmentModel(), G4DNASancheExcitationModel::G4DNASancheExcitationModel(), G4DNAScreenedRutherfordElasticModel::G4DNAScreenedRutherfordElasticModel(), G4DNATransformElectronModel::G4DNATransformElectronModel(), G4DNAUeharaScreenedRutherfordElasticModel::G4DNAUeharaScreenedRutherfordElasticModel(), G4eDPWACoulombScatteringModel::G4eDPWACoulombScatteringModel(), G4ICRU73QOModel::G4ICRU73QOModel(), G4MicroElecElasticModel::G4MicroElecElasticModel(), G4MicroElecElasticModel_new::G4MicroElecElasticModel_new(), G4PenelopeAnnihilationModel::G4PenelopeAnnihilationModel(), G4PenelopeBremsstrahlungModel::G4PenelopeBremsstrahlungModel(), G4PenelopeComptonModel::G4PenelopeComptonModel(), G4PenelopeGammaConversionModel::G4PenelopeGammaConversionModel(), G4PenelopeIonisationModel::G4PenelopeIonisationModel(), G4PenelopePhotoElectricModel::G4PenelopePhotoElectricModel(), G4PenelopeRayleighModel::G4PenelopeRayleighModel(), G4PenelopeRayleighModelMI::G4PenelopeRayleighModelMI(), G4TDNAOneStepThermalizationModel< MODEL >::G4TDNAOneStepThermalizationModel(), G4XrayRayleighModel::G4XrayRayleighModel(), G4VLEPTSModel::Init(), G4DNAChampionElasticModel::Initialise(), G4DNACPA100ElasticModel::Initialise(), G4DNADingfelderChargeDecreaseModel::Initialise(), G4DNADingfelderChargeIncreaseModel::Initialise(), G4DNAMeltonAttachmentModel::Initialise(), G4DNAMillerGreenExcitationModel::Initialise(), G4DNARuddIonisationExtendedModel::Initialise(), G4DNARuddIonisationModel::Initialise(), G4DNASancheExcitationModel::Initialise(), G4MicroElecElasticModel::Initialise(), G4MicroElecInelasticModel::Initialise(), G4MicroElecInelasticModel_new::Initialise(), G4DNABornExcitationModel1::Initialise(), G4DNABornExcitationModel2::Initialise(), G4DNABornIonisationModel1::Initialise(), G4DNABornIonisationModel2::Initialise(), G4DNAELSEPAElasticModel::Initialise(), G4DNAModelInterface::Initialise(), G4DNAIonElasticModel::Initialise(), G4hhIonisation::InitialiseEnergyLossProcess(), G4mplIonisation::InitialiseEnergyLossProcess(), G4ePairProduction::InitialiseEnergyLossProcess(), G4MuBremsstrahlung::InitialiseEnergyLossProcess(), G4MuIonisation::InitialiseEnergyLossProcess(), G4MuPairProduction::InitialiseEnergyLossProcess(), G4PolarizedBremsstrahlung::InitialiseEnergyLossProcess(), G4PolarizedIonisation::InitialiseEnergyLossProcess(), G4eBremsstrahlung::InitialiseEnergyLossProcess(), G4eIonisation::InitialiseEnergyLossProcess(), G4hIonisation::InitialiseEnergyLossProcess(), G4ionIonisation::InitialiseEnergyLossProcess(), G4DNAAttachment::InitialiseProcess(), G4DNAChargeDecrease::InitialiseProcess(), G4DNAChargeIncrease::InitialiseProcess(), G4DNADissociation::InitialiseProcess(), G4DNAElastic::InitialiseProcess(), G4DNAExcitation::InitialiseProcess(), G4DNAIonisation::InitialiseProcess(), G4DNAPlasmonExcitation::InitialiseProcess(), G4DNAPositronium::InitialiseProcess(), G4DNARotExcitation::InitialiseProcess(), G4DNAVibExcitation::InitialiseProcess(), G4PolarizedCompton::InitialiseProcess(), G4PolarizedGammaConversion::InitialiseProcess(), G4PolarizedPhotoElectric::InitialiseProcess(), G4ComptonScattering::InitialiseProcess(), G4CoulombScattering::InitialiseProcess(), G4eplusAnnihilation::InitialiseProcess(), G4GammaConversion::InitialiseProcess(), G4PhotoElectricEffect::InitialiseProcess(), G4VEmProcess::PreparePhysicsTable(), G4VEnergyLossProcess::PreparePhysicsTable(), G4VMultipleScattering::PreparePhysicsTable(), G4DNAUeharaScreenedRutherfordElasticModel::SelectHighEnergyLimit(), G4VEmAdjointModel::SetHighEnergyLimit(), G4DNAELSEPAElasticModel::SetMaximumEnergy(), G4mplIonisationModel::SetParticle(), G4mplIonisationWithDeltaModel::SetParticle(), and G4EmConfigurator::UpdateModelEnergyRange().

◆ SetIonisation()

void G4VMscModel::SetIonisation ( G4VEnergyLossProcess p,
const G4ParticleDefinition part 
)
inlineinherited

Definition at line 309 of file G4VMscModel.hh.

311{
312 ionisation = p;
313 currentPart = part;
314}
const G4ParticleDefinition * currentPart
Definition: G4VMscModel.hh:188

References G4VMscModel::currentPart, and G4VMscModel::ionisation.

Referenced by G4VMultipleScattering::PreparePhysicsTable(), and G4VMultipleScattering::StartTracking().

◆ SetLambdaLimit()

void G4VMscModel::SetLambdaLimit ( G4double  val)
inlineinherited

Definition at line 244 of file G4VMscModel.hh.

245{
246 if(!IsLocked()) { lambdalimit = val; }
247}

References G4VEmModel::IsLocked(), and G4VMscModel::lambdalimit.

◆ SetLateralDisplasmentFlag()

void G4VMscModel::SetLateralDisplasmentFlag ( G4bool  val)
inlineinherited

Definition at line 216 of file G4VMscModel.hh.

217{
218 if(!IsLocked()) { latDisplasment = val; }
219}

References G4VEmModel::IsLocked(), and G4VMscModel::latDisplasment.

Referenced by G4EmModelActivator::SetMscParameters().

◆ SetLocked()

void G4VEmModel::SetLocked ( G4bool  val)
inlineinherited

◆ SetLowEnergyLimit()

void G4VEmModel::SetLowEnergyLimit ( G4double  val)
inlineinherited

Definition at line 774 of file G4VEmModel.hh.

775{
776 lowLimit = val;
777}

References G4VEmModel::lowLimit.

Referenced by G4EmModelActivator::ActivatePAI(), G4EmDNAPhysics_option2::ConstructProcess(), G4EmDNAPhysics_option5::ConstructProcess(), G4EmDNAPhysics_stationary::ConstructProcess(), G4EmLivermorePhysics::ConstructProcess(), G4EmLowEPPhysics::ConstructProcess(), G4EmPenelopePhysics::ConstructProcess(), G4EmStandardPhysics::ConstructProcess(), G4EmStandardPhysics_option1::ConstructProcess(), G4EmStandardPhysics_option2::ConstructProcess(), G4EmStandardPhysics_option3::ConstructProcess(), G4EmStandardPhysics_option4::ConstructProcess(), G4EmStandardPhysicsGS::ConstructProcess(), G4EmStandardPhysicsWVI::ConstructProcess(), G4DNASancheExcitationModel::ExtendLowEnergyLimit(), G4AtimaEnergyLossModel::G4AtimaEnergyLossModel(), G4BetheBlochModel::G4BetheBlochModel(), G4BetheHeitler5DModel::G4BetheHeitler5DModel(), G4DNAChampionElasticModel::G4DNAChampionElasticModel(), G4DNACPA100ElasticModel::G4DNACPA100ElasticModel(), G4DNACPA100ExcitationModel::G4DNACPA100ExcitationModel(), G4DNACPA100IonisationModel::G4DNACPA100IonisationModel(), G4DNAELSEPAElasticModel::G4DNAELSEPAElasticModel(), G4DNAEmfietzoglouExcitationModel::G4DNAEmfietzoglouExcitationModel(), G4DNAEmfietzoglouIonisationModel::G4DNAEmfietzoglouIonisationModel(), G4DNAIonElasticModel::G4DNAIonElasticModel(), G4DNAMeltonAttachmentModel::G4DNAMeltonAttachmentModel(), G4DNASancheExcitationModel::G4DNASancheExcitationModel(), G4DNAScreenedRutherfordElasticModel::G4DNAScreenedRutherfordElasticModel(), G4DNATransformElectronModel::G4DNATransformElectronModel(), G4DNAUeharaScreenedRutherfordElasticModel::G4DNAUeharaScreenedRutherfordElasticModel(), G4DummyModel::G4DummyModel(), G4eBremParametrizedModel::G4eBremParametrizedModel(), G4eBremsstrahlungRelModel::G4eBremsstrahlungRelModel(), G4eDPWACoulombScatteringModel::G4eDPWACoulombScatteringModel(), G4LivermoreBremsstrahlungModel::G4LivermoreBremsstrahlungModel(), G4MicroElecElasticModel::G4MicroElecElasticModel(), G4MicroElecElasticModel_new::G4MicroElecElasticModel_new(), G4SeltzerBergerModel::G4SeltzerBergerModel(), G4TDNAOneStepThermalizationModel< MODEL >::G4TDNAOneStepThermalizationModel(), G4VLEPTSModel::Init(), G4DNAChampionElasticModel::Initialise(), G4DNACPA100ElasticModel::Initialise(), G4DNADingfelderChargeDecreaseModel::Initialise(), G4DNADingfelderChargeIncreaseModel::Initialise(), G4DNAMeltonAttachmentModel::Initialise(), G4DNAMillerGreenExcitationModel::Initialise(), G4DNARuddIonisationExtendedModel::Initialise(), G4DNARuddIonisationModel::Initialise(), G4MicroElecElasticModel::Initialise(), G4MicroElecInelasticModel::Initialise(), G4MicroElecInelasticModel_new::Initialise(), G4BetheHeitler5DModel::Initialise(), G4DNABornExcitationModel1::Initialise(), G4DNABornExcitationModel2::Initialise(), G4DNABornIonisationModel1::Initialise(), G4DNABornIonisationModel2::Initialise(), G4DNAELSEPAElasticModel::Initialise(), G4DNAModelInterface::Initialise(), G4DNAIonElasticModel::Initialise(), G4hhIonisation::InitialiseEnergyLossProcess(), G4mplIonisation::InitialiseEnergyLossProcess(), G4ePairProduction::InitialiseEnergyLossProcess(), G4MuBremsstrahlung::InitialiseEnergyLossProcess(), G4MuIonisation::InitialiseEnergyLossProcess(), G4MuPairProduction::InitialiseEnergyLossProcess(), G4PolarizedBremsstrahlung::InitialiseEnergyLossProcess(), G4PolarizedIonisation::InitialiseEnergyLossProcess(), G4eBremsstrahlung::InitialiseEnergyLossProcess(), G4eIonisation::InitialiseEnergyLossProcess(), G4hIonisation::InitialiseEnergyLossProcess(), G4ionIonisation::InitialiseEnergyLossProcess(), G4DNAAttachment::InitialiseProcess(), G4DNAChargeDecrease::InitialiseProcess(), G4DNAChargeIncrease::InitialiseProcess(), G4DNADissociation::InitialiseProcess(), G4DNAElastic::InitialiseProcess(), G4DNAExcitation::InitialiseProcess(), G4DNAIonisation::InitialiseProcess(), G4DNAPlasmonExcitation::InitialiseProcess(), G4DNAPositronium::InitialiseProcess(), G4DNARotExcitation::InitialiseProcess(), G4DNAVibExcitation::InitialiseProcess(), G4PolarizedCompton::InitialiseProcess(), G4PolarizedGammaConversion::InitialiseProcess(), G4PolarizedPhotoElectric::InitialiseProcess(), G4ComptonScattering::InitialiseProcess(), G4CoulombScattering::InitialiseProcess(), G4eplusAnnihilation::InitialiseProcess(), G4GammaConversion::InitialiseProcess(), G4PhotoElectricEffect::InitialiseProcess(), G4VEmAdjointModel::SetLowEnergyLimit(), G4mplIonisationModel::SetParticle(), G4mplIonisationWithDeltaModel::SetParticle(), and G4EmConfigurator::UpdateModelEnergyRange().

◆ SetLPMFlag()

void G4VEmModel::SetLPMFlag ( G4bool  val)
inlineinherited

◆ SetMasterThread()

void G4VEmModel::SetMasterThread ( G4bool  val)
inlineinherited

◆ SetNewDisplacementFlag()

void G4UrbanAdjointMscModel::SetNewDisplacementFlag ( G4bool  val)
inline

Definition at line 164 of file G4UrbanAdjointMscModel.hh.

165{
166 displacementFlag = val;
167}

References displacementFlag.

◆ SetParticle()

void G4UrbanAdjointMscModel::SetParticle ( const G4ParticleDefinition p)
inlineprivate

Definition at line 169 of file G4UrbanAdjointMscModel.hh.

170{
171 const G4ParticleDefinition* p1 = p;
172
173 if(p->GetParticleName() == "adj_e-")
175
176 if(p1 != particle)
177 {
178 particle = p1;
179 mass = p1->GetPDGMass();
182 }
183}
static constexpr double eplus

References charge, ChargeSquare, G4Electron::Electron(), CLHEP::eplus, G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), mass, and particle.

Referenced by ComputeCrossSectionPerAtom(), Initialise(), and StartTracking().

◆ SetParticleChange()

void G4VEmModel::SetParticleChange ( G4VParticleChange p,
G4VEmFluctuationModel f = nullptr 
)
inherited

◆ SetPolarAngleLimit()

void G4VEmModel::SetPolarAngleLimit ( G4double  val)
inlineinherited

◆ SetRangeFactor()

void G4VMscModel::SetRangeFactor ( G4double  val)
inlineinherited

Definition at line 230 of file G4VMscModel.hh.

231{
232 if(!IsLocked()) { facrange = val; }
233}

References G4VMscModel::facrange, and G4VEmModel::IsLocked().

Referenced by G4EmModelActivator::SetMscParameters().

◆ SetSafetyFactor()

void G4VMscModel::SetSafetyFactor ( G4double  val)
inlineinherited

Definition at line 251 of file G4VMscModel.hh.

252{
253 if(!IsLocked()) { facsafety = val; }
254}

References G4VMscModel::facsafety, and G4VEmModel::IsLocked().

◆ SetSampleZ()

void G4VMscModel::SetSampleZ ( G4bool  val)
inlineinherited

Definition at line 265 of file G4VMscModel.hh.

266{
267 if(!IsLocked()) { samplez = val; }
268}
G4bool samplez
Definition: G4VMscModel.hh:205

References G4VEmModel::IsLocked(), and G4VMscModel::samplez.

◆ SetSecondaryThreshold()

void G4VEmModel::SetSecondaryThreshold ( G4double  val)
inlineinherited

◆ SetSkin()

void G4VMscModel::SetSkin ( G4double  val)
inlineinherited

Definition at line 223 of file G4VMscModel.hh.

224{
225 if(!IsLocked()) { skin = val; }
226}

References G4VEmModel::IsLocked(), and G4VMscModel::skin.

Referenced by G4EmModelActivator::SetMscParameters().

◆ SetStepLimitType()

void G4VMscModel::SetStepLimitType ( G4MscStepLimitType  val)
inlineinherited

Definition at line 258 of file G4VMscModel.hh.

259{
260 if(!IsLocked()) { steppingAlgorithm = val; }
261}

References G4VEmModel::IsLocked(), and G4VMscModel::steppingAlgorithm.

Referenced by G4EmModelActivator::SetMscParameters().

◆ SetTripletModel()

void G4VEmModel::SetTripletModel ( G4VEmModel p)
inlineinherited

Definition at line 645 of file G4VEmModel.hh.

646{
647 if(p != fTripletModel) {
648 delete fTripletModel;
649 fTripletModel = p;
650 }
651}

References G4VEmModel::fTripletModel.

Referenced by G4eplusTo2GammaOKVIModel::G4eplusTo2GammaOKVIModel().

◆ SetupForMaterial()

void G4VEmModel::SetupForMaterial ( const G4ParticleDefinition ,
const G4Material ,
G4double  kineticEnergy 
)
virtualinherited

◆ SetUseBaseMaterials()

void G4VEmModel::SetUseBaseMaterials ( G4bool  val)
inlineinherited

◆ SimpleScattering()

G4double G4UrbanAdjointMscModel::SimpleScattering ( G4double  xmeanth,
G4double  x2meanth 
)
inlineprivate

Definition at line 230 of file G4UrbanAdjointMscModel.hh.

232{
233 // 'large angle scattering'
234 // 2 model functions with correct xmean and x2mean
235 G4double a =
236 (2. * xmeanth + 9. * x2meanth - 3.) / (2. * xmeanth - 3. * x2meanth + 1.);
237 G4double prob = (a + 2.) * xmeanth / a;
238
239 // sampling
240 G4double cth = 1.;
241 if(rndmEngineMod->flat() < prob)
242 {
243 cth = -1. + 2. * G4Exp(G4Log(rndmEngineMod->flat()) / (a + 1.));
244 }
245 else
246 {
247 cth = -1. + 2. * rndmEngineMod->flat();
248 }
249 return cth;
250}

References CLHEP::HepRandomEngine::flat(), G4Exp(), G4Log(), and rndmEngineMod.

Referenced by SampleCosineTheta().

◆ StartTracking()

void G4UrbanAdjointMscModel::StartTracking ( G4Track track)
overridevirtual

Reimplemented from G4VEmModel.

Definition at line 410 of file G4UrbanAdjointMscModel.cc.

411{
413 firstStep = true;
414 insideskin = false;
415 fr = facrange;
417 smallstep = 1.e10;
419 tlimitmin = 10. * tlimitminfix;
420 rndmEngineMod = G4Random::getTheEngine();
421}
G4ParticleDefinition * GetDefinition() const

References G4VMscModel::facrange, firstStep, fr, geombig, G4DynamicParticle::GetDefinition(), G4Track::GetDynamicParticle(), insideskin, rangecut, rangeinit, rndmEngineMod, SetParticle(), smallstep, stepmin, tgeom, tlimit, tlimitmin, and tlimitminfix.

◆ UpdateCache()

void G4UrbanAdjointMscModel::UpdateCache ( )
inlineprivate

Definition at line 207 of file G4UrbanAdjointMscModel.hh.

208{
209 lnZ = G4Log(Zeff);
210 // correction in theta0 formula
211 G4double w = G4Exp(lnZ / 6.);
212 G4double facz = 0.990395 + w * (-0.168386 + w * 0.093286);
213 coeffth1 = facz * (1. - 8.7780e-2 / Zeff);
214 coeffth2 = facz * (4.0780e-2 + 1.7315e-4 * Zeff);
215
216 // tail parameters
217 G4double Z13 = w * w;
218 coeffc1 = 2.3785 - Z13 * (4.1981e-1 - Z13 * 6.3100e-2);
219 coeffc2 = 4.7526e-1 + Z13 * (1.7694 - Z13 * 3.3885e-1);
220 coeffc3 = 2.3683e-1 - Z13 * (1.8111 - Z13 * 3.2774e-1);
221 coeffc4 = 1.7888e-2 + Z13 * (1.9659e-2 - Z13 * 2.6664e-3);
222
223 Z2 = Zeff * Zeff;
224 Z23 = Z13 * Z13;
225
226 Zold = Zeff;
227}

References coeffc1, coeffc2, coeffc3, coeffc4, coeffth1, coeffth2, G4Exp(), G4Log(), lnZ, Z2, Z23, Zeff, and Zold.

Referenced by ComputeTruePathLengthLimit().

◆ UseAngularGeneratorFlag()

G4bool G4VEmModel::UseAngularGeneratorFlag ( ) const
inlineinherited

◆ UseBaseMaterials()

G4bool G4VEmModel::UseBaseMaterials ( ) const
inlineinherited

Definition at line 760 of file G4VEmModel.hh.

761{
762 return useBaseMaterials;
763}

References G4VEmModel::useBaseMaterials.

◆ Value()

G4double G4VEmModel::Value ( const G4MaterialCutsCouple couple,
const G4ParticleDefinition p,
G4double  kineticEnergy 
)
virtualinherited

Field Documentation

◆ anglModel

G4VEmAngularDistribution* G4VEmModel::anglModel = nullptr
privateinherited

◆ basedCoupleIndex

size_t G4VEmModel::basedCoupleIndex = 0
protectedinherited

◆ charge

G4double G4UrbanAdjointMscModel::charge
private

◆ ChargeSquare

G4double G4UrbanAdjointMscModel::ChargeSquare
private

◆ coeffc1

G4double G4UrbanAdjointMscModel::coeffc1
private

◆ coeffc2

G4double G4UrbanAdjointMscModel::coeffc2
private

◆ coeffc3

G4double G4UrbanAdjointMscModel::coeffc3
private

◆ coeffc4

G4double G4UrbanAdjointMscModel::coeffc4
private

◆ coeffth1

G4double G4UrbanAdjointMscModel::coeffth1
private

Definition at line 148 of file G4UrbanAdjointMscModel.hh.

Referenced by ComputeTheta0(), G4UrbanAdjointMscModel(), and UpdateCache().

◆ coeffth2

G4double G4UrbanAdjointMscModel::coeffth2
private

Definition at line 148 of file G4UrbanAdjointMscModel.hh.

Referenced by ComputeTheta0(), G4UrbanAdjointMscModel(), and UpdateCache().

◆ couple

const G4MaterialCutsCouple* G4UrbanAdjointMscModel::couple
private

◆ currentCoupleIndex

size_t G4VEmModel::currentCoupleIndex = 0
protectedinherited

Definition at line 448 of file G4VEmModel.hh.

Referenced by G4VEmModel::SetCurrentCouple().

◆ currentKinEnergy

G4double G4UrbanAdjointMscModel::currentKinEnergy
private

◆ currentMaterialIndex

G4int G4UrbanAdjointMscModel::currentMaterialIndex
private

◆ currentPart

const G4ParticleDefinition* G4VMscModel::currentPart = nullptr
privateinherited

Definition at line 188 of file G4VMscModel.hh.

Referenced by G4VMscModel::SetIonisation().

◆ currentRadLength

G4double G4UrbanAdjointMscModel::currentRadLength
private

◆ currentRange

G4double G4UrbanAdjointMscModel::currentRange
private

◆ currentTau

G4double G4UrbanAdjointMscModel::currentTau
private

◆ dedx

G4double G4VMscModel::dedx = 0.0
privateinherited

◆ displacementFlag

G4bool G4UrbanAdjointMscModel::displacementFlag
private

◆ drr

G4double G4UrbanAdjointMscModel::drr
private

◆ dtrl

G4double G4VMscModel::dtrl = 0.05
protectedinherited

◆ elmSelectors

std::vector<G4EmElementSelector*>* G4VEmModel::elmSelectors = nullptr
privateinherited

◆ eMaxActive

G4double G4VEmModel::eMaxActive = DBL_MAX
privateinherited

◆ eMinActive

G4double G4VEmModel::eMinActive = 0.0
privateinherited

◆ facgeom

G4double G4VMscModel::facgeom = 2.5
protectedinherited

◆ facrange

G4double G4VMscModel::facrange = 0.04
protectedinherited

◆ facsafety

G4double G4VMscModel::facsafety = 0.6
protectedinherited

◆ fCurrentCouple

const G4MaterialCutsCouple* G4VEmModel::fCurrentCouple = nullptr
privateinherited

Definition at line 416 of file G4VEmModel.hh.

Referenced by G4VEmModel::CurrentCouple(), and G4VEmModel::SetCurrentCouple().

◆ fCurrentElement

const G4Element* G4VEmModel::fCurrentElement = nullptr
privateinherited

◆ fCurrentIsotope

const G4Isotope* G4VEmModel::fCurrentIsotope = nullptr
privateinherited

◆ fDisplacement

G4ThreeVector G4VMscModel::fDisplacement
protectedinherited

◆ fElementData

G4ElementData* G4VEmModel::fElementData = nullptr
protectedinherited

◆ fEmManager

G4LossTableManager* G4VEmModel::fEmManager
privateinherited

Definition at line 420 of file G4VEmModel.hh.

Referenced by G4VEmModel::G4VEmModel(), and G4VEmModel::~G4VEmModel().

◆ finalr

G4double G4UrbanAdjointMscModel::finalr
private

◆ firstStep

G4bool G4UrbanAdjointMscModel::firstStep
private

◆ flagDeexcitation

G4bool G4VEmModel::flagDeexcitation = false
privateinherited

Definition at line 455 of file G4VEmModel.hh.

Referenced by G4VEmModel::DeexcitationFlag(), and G4VEmModel::SetDeexcitationFlag().

◆ flagForceBuildTable

G4bool G4VEmModel::flagForceBuildTable = false
privateinherited

◆ flucModel

G4VEmFluctuationModel* G4VEmModel::flucModel = nullptr
privateinherited

◆ fParticleChange

G4ParticleChangeForMSC* G4UrbanAdjointMscModel::fParticleChange
private

Definition at line 107 of file G4UrbanAdjointMscModel.hh.

Referenced by G4UrbanAdjointMscModel(), Initialise(), and SampleScattering().

◆ fr

G4double G4UrbanAdjointMscModel::fr
private

◆ fTripletModel

G4VEmModel* G4VEmModel::fTripletModel = nullptr
privateinherited

◆ geombig

G4double G4UrbanAdjointMscModel::geombig
private

◆ geomlimit

G4double G4UrbanAdjointMscModel::geomlimit
private

◆ geomMax

G4double G4VMscModel::geomMax
protectedinherited

Definition at line 203 of file G4VMscModel.hh.

◆ geommin

G4double G4UrbanAdjointMscModel::geommin
private

◆ geomMin

G4double G4VMscModel::geomMin
protectedinherited

Definition at line 202 of file G4VMscModel.hh.

◆ highLimit

G4double G4VEmModel::highLimit
privateinherited

◆ insideskin

G4bool G4UrbanAdjointMscModel::insideskin
private

◆ inveplus

G4double G4VEmModel::inveplus
protectedinherited

◆ ionisation

G4VEnergyLossProcess* G4VMscModel::ionisation = nullptr
privateinherited

◆ isLocked

G4bool G4VEmModel::isLocked = false
privateinherited

◆ isMaster

G4bool G4VEmModel::isMaster = true
privateinherited

◆ lambda0

G4double G4UrbanAdjointMscModel::lambda0
private

◆ lambdaeff

G4double G4UrbanAdjointMscModel::lambdaeff
private

◆ lambdalimit

G4double G4UrbanAdjointMscModel::lambdalimit
private

◆ latDisplasment

G4bool G4VMscModel::latDisplasment = true
protectedinherited

◆ latDisplasmentbackup

G4bool G4UrbanAdjointMscModel::latDisplasmentbackup
private

◆ lnZ

G4double G4UrbanAdjointMscModel::lnZ
private

Definition at line 147 of file G4UrbanAdjointMscModel.hh.

Referenced by G4UrbanAdjointMscModel(), and UpdateCache().

◆ localElmSelectors

G4bool G4VEmModel::localElmSelectors = true
privateinherited

Definition at line 460 of file G4VEmModel.hh.

Referenced by G4VEmModel::SetElementSelectors(), and G4VEmModel::~G4VEmModel().

◆ localrange

G4double G4VMscModel::localrange = DBL_MAX
privateinherited

Definition at line 192 of file G4VMscModel.hh.

Referenced by G4VMscModel::GetEnergy(), and G4VMscModel::GetRange().

◆ localTable

G4bool G4VEmModel::localTable = true
privateinherited

Definition at line 459 of file G4VEmModel.hh.

Referenced by G4VEmModel::SetCrossSectionTable(), and G4VEmModel::~G4VEmModel().

◆ localtkin

G4double G4VMscModel::localtkin = 0.0
privateinherited

Definition at line 191 of file G4VMscModel.hh.

Referenced by G4VMscModel::GetEnergy(), and G4VMscModel::GetRange().

◆ lossFlucFlag

G4bool G4VEmModel::lossFlucFlag = true
protectedinherited

◆ lowLimit

G4double G4VEmModel::lowLimit
privateinherited

◆ mass

G4double G4UrbanAdjointMscModel::mass
private

◆ masslimite

G4double G4UrbanAdjointMscModel::masslimite
private

◆ name

const G4String G4VEmModel::name
privateinherited

◆ nsec

G4int G4VEmModel::nsec = 5
privateinherited

Definition at line 444 of file G4VEmModel.hh.

Referenced by G4VEmModel::CrossSectionPerVolume(), and G4VEmModel::G4VEmModel().

◆ nSelectors

G4int G4VEmModel::nSelectors = 0
privateinherited

◆ par1

G4double G4UrbanAdjointMscModel::par1
private

◆ par2

G4double G4UrbanAdjointMscModel::par2
private

Definition at line 137 of file G4UrbanAdjointMscModel.hh.

Referenced by ComputeGeomPathLength(), and G4UrbanAdjointMscModel().

◆ par3

G4double G4UrbanAdjointMscModel::par3
private

◆ particle

const G4ParticleDefinition* G4UrbanAdjointMscModel::particle
private

◆ pBaseMaterial

const G4Material* G4VEmModel::pBaseMaterial = nullptr
protectedinherited

◆ pFactor

G4double G4VEmModel::pFactor = 1.0
protectedinherited

◆ polarAngleLimit

G4double G4VEmModel::polarAngleLimit
privateinherited

Definition at line 441 of file G4VEmModel.hh.

Referenced by G4VEmModel::PolarAngleLimit(), and G4VEmModel::SetPolarAngleLimit().

◆ positron

const G4ParticleDefinition* G4UrbanAdjointMscModel::positron
private

Definition at line 106 of file G4UrbanAdjointMscModel.hh.

Referenced by ComputeTheta0(), and G4UrbanAdjointMscModel().

◆ pParticleChange

G4VParticleChange* G4VEmModel::pParticleChange = nullptr
protectedinherited

◆ presafety

G4double G4UrbanAdjointMscModel::presafety
private

◆ rangecut

G4double G4UrbanAdjointMscModel::rangecut
private

◆ rangeinit

G4double G4UrbanAdjointMscModel::rangeinit
private

◆ rndmEngineMod

CLHEP::HepRandomEngine* G4UrbanAdjointMscModel::rndmEngineMod
private

◆ safetyHelper

G4SafetyHelper* G4VMscModel::safetyHelper = nullptr
privateinherited

◆ samplez

G4bool G4VMscModel::samplez = false
protectedinherited

Definition at line 205 of file G4VMscModel.hh.

Referenced by G4VMscModel::SetSampleZ().

◆ secondaryThreshold

G4double G4VEmModel::secondaryThreshold = DBL_MAX
privateinherited

◆ skin

G4double G4VMscModel::skin = 1.0
protectedinherited

◆ skindepth

G4double G4UrbanAdjointMscModel::skindepth
private

◆ smallstep

G4double G4UrbanAdjointMscModel::smallstep
private

◆ stepmin

G4double G4UrbanAdjointMscModel::stepmin
private

◆ steppingAlgorithm

G4MscStepLimitType G4VMscModel::steppingAlgorithm
protectedinherited

◆ taubig

G4double G4UrbanAdjointMscModel::taubig
private

◆ taulim

G4double G4UrbanAdjointMscModel::taulim
private

◆ tausmall

G4double G4UrbanAdjointMscModel::tausmall
private

◆ tgeom

G4double G4UrbanAdjointMscModel::tgeom
private

◆ theDensityFactor

const std::vector<G4double>* G4VEmModel::theDensityFactor = nullptr
protectedinherited

Definition at line 428 of file G4VEmModel.hh.

Referenced by G4VEmModel::G4VEmModel().

◆ theDensityIdx

const std::vector<G4int>* G4VEmModel::theDensityIdx = nullptr
protectedinherited

Definition at line 429 of file G4VEmModel.hh.

Referenced by G4VEmModel::G4VEmModel().

◆ theLPMflag

G4bool G4VEmModel::theLPMflag = false
privateinherited

Definition at line 454 of file G4VEmModel.hh.

Referenced by G4VEmModel::LPMFlag(), and G4VEmModel::SetLPMFlag().

◆ theManager

G4LossTableManager* G4UrbanAdjointMscModel::theManager
private

Definition at line 110 of file G4UrbanAdjointMscModel.hh.

Referenced by G4UrbanAdjointMscModel().

◆ tlimit

G4double G4UrbanAdjointMscModel::tlimit
private

◆ tlimitmin

G4double G4UrbanAdjointMscModel::tlimitmin
private

◆ tlimitminfix

G4double G4UrbanAdjointMscModel::tlimitminfix
private

◆ tlimitminfix2

G4double G4UrbanAdjointMscModel::tlimitminfix2
private

◆ tPathLength

G4double G4UrbanAdjointMscModel::tPathLength
private

◆ useAngularGenerator

G4bool G4VEmModel::useAngularGenerator = false
privateinherited

◆ useBaseMaterials

G4bool G4VEmModel::useBaseMaterials = false
privateinherited

◆ xsec

std::vector<G4double> G4VEmModel::xsec
privateinherited

◆ xSectionTable

G4PhysicsTable* G4VEmModel::xSectionTable = nullptr
protectedinherited

◆ Z2

G4double G4UrbanAdjointMscModel::Z2
private

Definition at line 147 of file G4UrbanAdjointMscModel.hh.

Referenced by G4UrbanAdjointMscModel(), and UpdateCache().

◆ Z23

G4double G4UrbanAdjointMscModel::Z23
private

◆ Zeff

G4double G4UrbanAdjointMscModel::Zeff
private

◆ Zold

G4double G4UrbanAdjointMscModel::Zold
private

◆ zPathLength

G4double G4UrbanAdjointMscModel::zPathLength
private

The documentation for this class was generated from the following files: