49 LowestKineticEnergy(1*GeV), HighestKineticEnergy(1*PeV),
50 TotBin(60), CutFixed(0.2*GeV)
57 if (theCrossSectionTable) {
59 delete theCrossSectionTable;
85 for (
G4int j = 0; j < nEl; j++) {
87 HighestKineticEnergy, TotBin);
88 AtomicNumber = (*theElementTable)[j]->GetZ();
89 AtomicWeight = (*theElementTable)[j]->GetA();
91 for (
G4int i = 0; i <= TotBin; ++i) {
92 lowEdgeEnergy = ptrVector->
Energy(i);
93 Value = ComputeMicroscopicCrossSection(lowEdgeEnergy,
94 AtomicNumber, AtomicWeight);
98 theCrossSectionTable->
insertAt(j, ptrVector);
102 for (
G4int j = 0; j < nEl; j++) {
103 G4int ZZ =
G4int((*theElementTable)[j]->GetZ());
109ComputeMicroscopicCrossSection(
G4double KineticEnergy,
115 const G4double xgi[] = {0.0199,0.1017,0.2372,0.4083,0.5917,0.7628,0.8983,0.9801};
116 const G4double wgi[] = {0.0506,0.1112,0.1569,0.1813,0.1813,0.1569,0.1112,0.0506};
123 if (AtomicNumber < 1.)
return CrossSection;
124 if (KineticEnergy <= CutFixed)
return CrossSection;
127 G4double epmax = KineticEnergy + Mass - 0.5*proton_mass_c2;
128 if (epmax <= epmin)
return CrossSection;
138 for (
G4int l = 0; l < kkk; l++) {
140 for (
G4int ll = 0; ll < 8; ll++) {
144 AtomicNumber, AtomicWeight, ep);
148 CrossSection *= hhh ;
149 if (CrossSection < 0.) CrossSection = 0.;
162 const G4double alam2 = 0.400*GeV*GeV;
164 const G4double coeffn = fine_structure_const/pi;
167 G4double TotalEnergy = KineticEnergy + ParticleMass;
171 if ((epsilon >= TotalEnergy - 0.5*proton_mass_c2) ||
172 (epsilon <= CutFixed) )
return DCrossSection;
176 G4double aeff = 0.22*a+0.78*std::exp(0.89*std::log(a));
177 G4double sigph = (49.2+11.1*std::log(ep)+151.8/std::sqrt(ep))*microbarn;
182 G4double mass2 = ParticleMass*ParticleMass;
184 G4double up = TotalEnergy*TotalEnergy*v1/mass2*(1.+mass2*v2/(alam2*v1));
185 G4double down = 1.+epsilon/alam*(1.+alam/(2.*proton_mass_c2)+epsilon/alam);
187 DCrossSection = coeffn*aeff*sigph/epsilon*
188 (-v1+(v1+0.5*v2*(1.+2.*mass2/alam2))*std::log(up/down));
190 if (DCrossSection < 0.) DCrossSection = 0.;
191 return DCrossSection;
198 G4int j = zelMap[ZZ];
std::vector< G4Element * > G4ElementTable
G4double GetKineticEnergy() const
static size_t GetNumberOfElements()
static const G4ElementTable * GetElementTable()
G4KokoulinMuonNuclearXS()
G4double ComputeDDMicroscopicCrossSection(G4double incidentKE, G4double, G4double AtomicWeight, G4double epsilon)
G4double GetElementCrossSection(const G4DynamicParticle *particle, G4int Z, const G4Material *)
virtual ~G4KokoulinMuonNuclearXS()
G4bool IsElementApplicable(const G4DynamicParticle *particle, G4int Z, const G4Material *)
void BuildCrossSectionTable()
static G4MuonMinus * MuonMinus()
G4double GetPDGMass() const
void insertAt(size_t, G4PhysicsVector *)
G4double Energy(size_t index) const
void PutValue(size_t index, G4double theValue)