72 std::pow(CLHEP::fine_structure_const*CLHEP::classic_electr_radius/
mueRatio, 2);
89 G4double residEnergy = totalEnergy - pairEnergy;
91 if (residEnergy <=
muonMass) {
return 0.0; }
93 G4double a0 = 1.0 / (totalEnergy * residEnergy);
97 if(tmnexp >= 1.0) {
return 0.0; }
115 rho2[i] = rho[i] * rho[i];
116 xi[i] = xi0*(1.0-rho2[i]);
117 xi1[i] = 1.0 + xi[i];
118 xii[i] = 1.0 / xi[i];
121 G4double ximax = xi0*(1. - rhomax*rhomax);
128 U[i] =
U_func(Z, rho2[i], xi[i],
Y, pairEnergy);
138 G4double phi = ((2 + rho2[i])*(1 + beta) + xi[i]*(3 + rho2[i]))*
139 G4Log(1 + xii[i]) - 1 - 3*rho2[i] + beta*(1 - 2*rho2[i])
140 + ((1 + rho2[i])*(1 + 1.5*beta) - xii[i]*(1 + 2*beta)
141 *(1 - rho2[i]))*
G4Log(xi1[i]);
142 sum +=
wgi[i]*(1.0 + rho[i])*phi*lnX;
145 return -tmn*sum*
factorForCross*z2*residEnergy/(totalEnergy*pairEnergy);
160 /(CLHEP::electron_mass_c2*pairEnergy*(1 - rho2)));
167 std::vector<G4DynamicParticle*>* vdp,
187 G4double maxEnergy = std::min(tmax, maxPairEnergy);
190 if(minEnergy >= maxEnergy) {
return; }
209 G4int iz1(0), iz2(0);
216 if(iz > 0) { iz1 = iz-1; }
221 if(0 == iz1) { iz1 = iz2 =
NZDATPAIR-1; }
238 x += (x2 - x)*(
lnZ - lz1)/(lz2 - lz1);
241 pairEnergy = kinEnergy*
G4Exp(x*coeff);
244 }
while((pairEnergy < minEnergy || pairEnergy > maxEnergy) && 10 > count);
254 G4double muMinusEnergy = (1.-r)*pairEnergy*0.5;
255 G4double muPlusEnergy = pairEnergy - muMinusEnergy;
261 muMinusEnergy, muPlusEnergy,
262 muMinusDirection, muPlusDirection);
264 muMinusEnergy = std::max(muMinusEnergy -
muonMass, 0.0);
265 muPlusEnergy = std::max(muPlusEnergy -
muonMass, 0.0);
271 vdp->push_back(aParticle1);
272 vdp->push_back(aParticle2);
275 kinEnergy -= pairEnergy;
276 partDirection *= totalMomentum;
278 partDirection = partDirection.
unit();
287 vdp->push_back(newdp);
300 ed <<
"G4ElementData is not properly initialized Z= " << Z
301 <<
" Ekin(MeV)= " <<
G4Exp(logTkin)
302 <<
" IsMasterThread= " <<
IsMaster()
G4double B(G4double temperature)
G4double Y(G4double density)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
G4ThreeVector GetMomentum() const
static const G4int NINTPAIR
static const G4int NZDATPAIR
G4double FindScaledEnergy(G4int Z, G4double rand, G4double logTkin, G4double yymin, G4double yymax)
const G4ParticleDefinition * particle
G4ParticleChangeForLoss * fParticleChange
static const G4int ZDATPAIR[NZDATPAIR]
G4double MaxSecondaryEnergyForElement(G4double kineticEnergy, G4double Z)
static const G4double xgi[NINTPAIR]
static const G4double wgi[NINTPAIR]
static G4MuonMinus * MuonMinus()
static G4MuonPlus * MuonPlus()
G4double ComputeDMicroscopicCrossSection(G4double tkin, G4double Z, G4double pairEnergy) override
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
G4MuonToMuonPairProductionModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="muToMuonPairProd")
G4ParticleDefinition * theMuonMinus
G4double U_func(G4double Z, G4double rho2, G4double xi, G4double Y, G4double pairEnergy, const G4double B=183)
G4ParticleDefinition * theMuonPlus
void DataCorrupted(G4int Z, G4double logTkin) const override
G4double GetA27(G4int Z) const
G4double GetZ13(G4double Z) const
G4double GetLOGZ(G4int Z) const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void SetProposedMomentumDirection(const G4ThreeVector &dir)
G4double GetPDGMass() const
virtual void SamplePairDirections(const G4DynamicParticle *dp, G4double elecKinEnergy, G4double posiKinEnergy, G4ThreeVector &dirElectron, G4ThreeVector &dirPositron, G4int Z=0, const G4Material *mat=nullptr)
G4VEmAngularDistribution * GetAngularDistribution()
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
const G4String & GetName() const
G4double SecondaryThreshold() const
void ProposeTrackStatus(G4TrackStatus status)