93 1.98550718e-02, 1.01666761e-01, 2.37233795e-01, 4.08282679e-01,
94 5.91717321e-01, 7.62766205e-01, 8.98333239e-01, 9.80144928e-01
97 5.06142681e-02, 1.11190517e-01, 1.56853323e-01, 1.81341892e-01,
98 1.81341892e-01, 1.56853323e-01, 1.11190517e-01, 5.06142681e-02
104 0.0, 5.3104, 4.7935, 4.7402, 4.7112, 4.6694, 4.6134, 4.5520
107 0.0, 5.9173, 5.6125, 5.5377, 5.4728, 5.4174, 5.3688, 5.3236
250 const G4double* theAtomNumDensVector =
material->GetAtomicNumDensityVector();
251 const size_t numberOfElements = theElemVector->size();
254 for (
size_t ie = 0; ie < numberOfElements; ++ie) {
257 const G4double zet = (*theElemVector)[ie]->GetZ();
292 for (
G4int l = 0; l < nSub; ++l) {
293 for (
G4int igl = 0; igl < 8; ++igl) {
343 if (tmax < kineticEnergy) {
374 const G4int nSub = (
G4int)(0.45*(alphaMax-alphaMin))+4;
378 for (
G4int l = 0; l < nSub; ++l) {
379 for (
G4int igl = 0; igl < 8; ++igl) {
425 if (gammaEnergy < 0.) {
435 const G4double term1 = funcXiS*(dum0*funcGS+(onemy+2.0*dum0)*funcPhiS);
472 if (gammaEnergy < 0.) {
477 const G4double dum0 = onemy+0.75*y*y;
497 G4double phi1, phi1m2, psi1, psi1m2;
499 dxsec = dum0*((0.25*phi1-Fz) + (0.25*psi1-2.*logZ/3.)*invZ);
500 dxsec += 0.125*onemy*(phi1m2 + psi1m2*invZ);
503 fNucTerm = dum0*(0.25*phi1-Fz) + 0.125*onemy*phi1m2;
523 phi1 = 16.863-2.0*
G4Log(1.0+0.311877*gam2)+2.4*
G4Exp(-0.9*
gam)
525 phi1m2 = 2.0/(3.0+19.5*
gam+18.0*gam2);
527 psi1 = 24.34-2.0*
G4Log(1.0+13.111641*eps2)+2.8*
G4Exp(-8.0*
eps)
529 psi1m2 = 2.0/(3.0+120.0*
eps+1200.0*eps2);
581 }
while (funcVal < funcMax*rndm[1]);
597 vdp->push_back(gamma);
600 const G4double totMomentum = std::sqrt(kineticEnergy*(
604 const G4double finalE = kineticEnergy-gammaEnergy;
628 size_t numElems = (*elemTable).size();
629 for (
size_t ielem=0; ielem<numElems; ++ielem) {
639 elemData->
fFz = elemData->
fLogZ/3.+fc;
647 const G4double z23 = std::pow(zet,2./3.);
648 const G4double z13 = std::pow(zet,1./3.);
649 elemData->
fZFactor1 = (Fel-fc)+Finel/zet;
652 elemData->
fVarS1 = z23/(184.15*184.15);
667 static const G4double sqrt2 = std::sqrt(2.);
675 if (varSprime > 1.0) {
680 funcXiSprime = 1.0 + funcHSprime - 0.08*(1.0-funcHSprime)*funcHSprime
681 *(2.0-funcHSprime)*ilVarS1Cond;
683 const G4double varS = varSprime/std::sqrt(funcXiSprime);
689 }
else if (varShat > varS1) {
696 if (funcXiS*funcPhiS > 1. || varShat > 0.57) {
705 if (varShat < 0.01) {
706 funcPhiS = 6.0*varShat*(1.0-
CLHEP::pi*varShat);
707 funcGS = 12.0*varShat-2.0*funcPhiS;
709 const G4double varShat2 = varShat*varShat;
710 const G4double varShat3 = varShat*varShat2;
711 const G4double varShat4 = varShat2*varShat2;
713 if (varShat < 0.415827) {
715 + varShat3/(0.623+0.796*varShat+0.658*varShat2));
718 - 8.0*varShat2/(1.0+3.936*varShat+4.97*varShat2
719 - 0.05*varShat3 + 7.5*varShat4));
721 funcGS = 3.0*funcPsiS - 2.0*funcPhiS;
722 }
else if (varShat<1.55) {
724 + varShat3/(0.623+0.796*varShat+0.658*varShat2));
725 const G4double dum0 = -0.160723 + 3.755030*varShat
726 -1.798138*varShat2 + 0.672827*varShat3
728 funcGS = std::tanh(dum0);
730 funcPhiS = 1.0-0.011905/varShat4;
731 if (varShat<1.9156) {
732 const G4double dum0 = -0.160723 + 3.755030*varShat
733 -1.798138*varShat2 + 0.672827*varShat3
735 funcGS = std::tanh(dum0);
737 funcGS = 1.0-0.023065/varShat4;
750 for (
G4int i = 0; i < num; ++i) {
773 lpmPhis = 1.0-0.01190476/ss;
774 lpmGs = 1.0-0.0230655/ss;
G4double epsilon(G4double density, G4double temperature)
static const G4double eps
std::vector< G4Element * > G4ElementTable
std::vector< const G4Element * > G4ElementVector
G4double condition(const G4ErrorSymMatrix &m)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
static constexpr double MeV
virtual void flatArray(const int size, double *vect)=0
const G4ThreeVector & GetMomentumDirection() const
G4double GetLogKineticEnergy() const
G4double GetKineticEnergy() const
static G4Electron * Electron()
static G4ElementTable * GetElementTable()
const G4Material * GetMaterial() const
G4double GetElectronDensity() const
G4double GetRadlen() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void SetProposedMomentumDirection(const G4ThreeVector &dir)
G4double GetPDGMass() const
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
G4VEmAngularDistribution * GetAngularDistribution()
G4double LowEnergyLimit() const
std::vector< G4EmElementSelector * > * GetElementSelectors()
G4VEmModel * GetTripletModel()
void SetLPMFlag(G4bool val)
G4double HighEnergyLimit() const
void SetCurrentElement(const G4Element *)
void SetLowEnergyLimit(G4double)
void SetAngularDistribution(G4VEmAngularDistribution *)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double tmax=DBL_MAX)=0
const G4Element * SelectTargetAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double logKineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)=0
G4double SecondaryThreshold() const
G4ParticleChangeForLoss * GetParticleChangeForLoss()
void ProposeTrackStatus(G4TrackStatus status)
void ComputeScreeningFunctions(G4double &phi1, G4double &phi1m2, G4double &psi1, G4double &psi1m2, const G4double gam, const G4double eps)
static std::vector< ElementData * > gElementData
static const G4double gFinelLowZet[8]
G4double fPrimaryParticleMass
void SetParticle(const G4ParticleDefinition *p)
G4double fPrimaryKinEnergy
static const G4double gLPMconstant
G4double ComputeBremLoss(G4double cutEnergy)
static const G4int gMaxZet
G4double ComputeXSectionPerAtom(G4double cutEnergy)
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double ekin, G4double zet, G4double, G4double cutEnergy, G4double maxEnergy=DBL_MAX) override
static const G4double gFelLowZet[8]
virtual G4double ComputeDXSectionPerAtom(G4double gammaEnergy)
const G4ParticleDefinition * fPrimaryParticle
static const G4double gBremFactor
static LPMFuncs gLPMFuncs
void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
void ComputeLPMGsPhis(G4double &funcGS, G4double &funcPhiS, const G4double varShat)
G4bool fIsScatOffElectron
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double cutEnergy, G4double maxEnergy) override
G4double fPrimaryTotalEnergy
G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double ekin, G4double cutEnergy) override
void GetLPMFunctions(G4double &lpmGs, G4double &lpmPhis, const G4double ss)
G4eBremsstrahlungRelModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="eBremLPM")
G4bool fIsUseCompleteScreening
G4double fLPMEnergyThreshold
~G4eBremsstrahlungRelModel() override
G4double fLowestKinEnergy
void ComputeLPMfunctions(G4double &funcXiS, G4double &funcGS, G4double &funcPhiS, const G4double egamma)
static const G4double gWGL[8]
G4double ComputeRelDXSectionPerAtom(G4double gammaEnergy)
G4ParticleDefinition * fGammaParticle
void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double) override
G4ParticleChangeForLoss * fParticleChange
G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double cutEnergy) override
static const G4double gXGL[8]
void InitialiseElementData()
static const G4double gMigdalConstant
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
static constexpr double electron_mass_c2
static constexpr double electron_Compton_length
static constexpr double fine_structure_const
static constexpr double classic_electr_radius
static constexpr double hbarc
static constexpr double pi
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
std::vector< G4double > fLPMFuncG
std::vector< G4double > fLPMFuncPhi