61 LowestKineticEnergy(1*
GeV), HighestKineticEnergy(1*
PeV),
79 outFile <<
"G4KokoulinMuonNuclearXS provides the total inelastic\n"
80 <<
"cross section for mu- and mu+ interactions with nuclei.\n"
81 <<
"R. Kokoulin's approximation of the Borog and Petrukhin double\n"
82 <<
"differential cross section at high energy and low Q**2 is integrated\n"
83 <<
"over the muon energy loss to get the total cross section as a\n"
84 <<
"function of muon kinetic energy\n" ;
117 for (
G4int j = 0; j < nEl; j++) {
118 Z =
G4lrint((*theElementTable)[j]->GetZ());
121 const G4bool isHeavyElementAllowed =
true;
if ( isHeavyElementAllowed && Z>92 ) Z=92;
144 {0.0199,0.1017,0.2372,0.4083,0.5917,0.7628,0.8983,0.9801};
146 {0.0506,0.1112,0.1569,0.1813,0.1813,0.1569,0.1112,0.0506};
153 if (KineticEnergy <=
CutFixed)
return CrossSection;
157 if (epmax <= epmin)
return CrossSection;
167 for (
G4int l = 0; l < kkk; ++l) {
169 for (
G4int ll = 0; ll < 8; ++ll) {
177 CrossSection *=
hhh ;
178 if (CrossSection < 0.) { CrossSection = 0.; }
195 G4double TotalEnergy = KineticEnergy + ParticleMass;
200 (epsilon <=
CutFixed) ) {
return DCrossSection; }
209 G4double mass2 = ParticleMass*ParticleMass;
211 G4double up = TotalEnergy*TotalEnergy*v1/mass2*(1.+mass2*v2/(alam2*v1));
214 DCrossSection = coeffn*aeff*sigph/epsilon*
215 (-v1+(v1+0.5*v2*(1.+2.*mass2/alam2))*
G4Log(up/down));
217 if (DCrossSection < 0.) { DCrossSection = 0.; }
218 return DCrossSection;
226 const G4bool isHeavyElementAllowed =
true;
if ( isHeavyElementAllowed && Z>92 ) Z=92;
G4double Energy(size_t index) const
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4KokoulinMuonNuclearXS()
static G4MuonMinus * MuonMinus()
static constexpr double PeV
G4double Value(G4double theEnergy, size_t &lastidx) const
static const G4double ak1
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetPDGMass() const
G4double G4Log(G4double x)
void BuildPhysicsTable(const G4ParticleDefinition &)
static constexpr double proton_mass_c2
void BuildCrossSectionTable()
std::vector< G4Element * > G4ElementTable
G4bool IsElementApplicable(const G4DynamicParticle *particle, G4int Z, const G4Material *)
double A(double temperature)
static G4PhysicsVector * theCrossSection[MAXZMUN]
G4double LowestKineticEnergy
virtual void CrossSectionDescription(std::ostream &) const
#define G4_DECLARE_XS_FACTORY(cross_section)
virtual ~G4KokoulinMuonNuclearXS()
static constexpr double microbarn
double epsilon(double density, double temperature)
G4double ComputeMicroscopicCrossSection(G4double incidentKE, G4double A)
G4double HighestKineticEnergy
G4double GetKineticEnergy() const
G4double GetElementCrossSection(const G4DynamicParticle *particle, G4int Z, const G4Material *)
static const G4double ak2
static size_t GetNumberOfElements()
static constexpr double pi
static constexpr double fine_structure_const
static constexpr double GeV
void PutValue(size_t index, G4double theValue)
static G4NistManager * Instance()
static G4ElementTable * GetElementTable()
G4double ComputeDDMicroscopicCrossSection(G4double incidentKE, G4double Z, G4double A, G4double epsilon)