Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4KokoulinMuonNuclearXS Class Reference

#include <G4KokoulinMuonNuclearXS.hh>

+ Inheritance diagram for G4KokoulinMuonNuclearXS:

Public Member Functions

 G4KokoulinMuonNuclearXS ()
 
virtual ~G4KokoulinMuonNuclearXS ()
 
G4bool IsElementApplicable (const G4DynamicParticle *particle, G4int Z, const G4Material *)
 
G4double GetElementCrossSection (const G4DynamicParticle *particle, G4int Z, const G4Material *)
 
void BuildCrossSectionTable ()
 
G4double ComputeDDMicroscopicCrossSection (G4double incidentKE, G4double, G4double AtomicWeight, G4double epsilon)
 
- Public Member Functions inherited from G4VCrossSectionDataSet
 G4VCrossSectionDataSet (const G4String &nam="")
 
virtual ~G4VCrossSectionDataSet ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
 
virtual G4IsotopeSelectIsotope (const G4Element *, G4double kinEnergy)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
void SetVerboseLevel (G4int value)
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
const G4StringGetName () const
 

Additional Inherited Members

- Protected Member Functions inherited from G4VCrossSectionDataSet
void SetName (const G4String &)
 
- Protected Attributes inherited from G4VCrossSectionDataSet
G4int verboseLevel
 

Detailed Description

Definition at line 55 of file G4KokoulinMuonNuclearXS.hh.

Constructor & Destructor Documentation

◆ G4KokoulinMuonNuclearXS()

G4KokoulinMuonNuclearXS::G4KokoulinMuonNuclearXS ( )

Definition at line 47 of file G4KokoulinMuonNuclearXS.cc.

48 :G4VCrossSectionDataSet("KokoulinMuonNuclearXS"), theCrossSectionTable(0),
49 LowestKineticEnergy(1*GeV), HighestKineticEnergy(1*PeV),
50 TotBin(60), CutFixed(0.2*GeV)
51{
53}

◆ ~G4KokoulinMuonNuclearXS()

G4KokoulinMuonNuclearXS::~G4KokoulinMuonNuclearXS ( )
virtual

Definition at line 55 of file G4KokoulinMuonNuclearXS.cc.

56{
57 if (theCrossSectionTable) {
58 theCrossSectionTable->clearAndDestroy();
59 delete theCrossSectionTable;
60 }
61}
void clearAndDestroy()

Member Function Documentation

◆ BuildCrossSectionTable()

void G4KokoulinMuonNuclearXS::BuildCrossSectionTable ( )

Definition at line 71 of file G4KokoulinMuonNuclearXS.cc.

72{
73 G4double lowEdgeEnergy;
74 G4PhysicsLogVector* ptrVector;
75
77 const G4ElementTable* theElementTable = G4Element::GetElementTable();
78
79 theCrossSectionTable = new G4PhysicsTable(nEl);
80
81 G4double AtomicNumber;
82 G4double AtomicWeight;
83 G4double Value;
84
85 for (G4int j = 0; j < nEl; j++) {
86 ptrVector = new G4PhysicsLogVector(LowestKineticEnergy,
87 HighestKineticEnergy, TotBin);
88 AtomicNumber = (*theElementTable)[j]->GetZ();
89 AtomicWeight = (*theElementTable)[j]->GetA();
90
91 for (G4int i = 0; i <= TotBin; ++i) {
92 lowEdgeEnergy = ptrVector->Energy(i);
93 Value = ComputeMicroscopicCrossSection(lowEdgeEnergy,
94 AtomicNumber, AtomicWeight);
95 ptrVector->PutValue(i,Value);
96 }
97
98 theCrossSectionTable->insertAt(j, ptrVector);
99 }
100
101 // Build (Z,element) look-up table (for use in GetZandACrossSection)
102 for (G4int j = 0; j < nEl; j++) {
103 G4int ZZ = G4int((*theElementTable)[j]->GetZ());
104 zelMap[ZZ] = j;
105 }
106}
std::vector< G4Element * > G4ElementTable
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
static size_t GetNumberOfElements()
Definition: G4Element.cc:406
static const G4ElementTable * GetElementTable()
Definition: G4Element.cc:399
void insertAt(size_t, G4PhysicsVector *)
G4double Energy(size_t index) const
void PutValue(size_t index, G4double theValue)

Referenced by G4KokoulinMuonNuclearXS().

◆ ComputeDDMicroscopicCrossSection()

G4double G4KokoulinMuonNuclearXS::ComputeDDMicroscopicCrossSection ( G4double  incidentKE,
G4double  ,
G4double  AtomicWeight,
G4double  epsilon 
)

Definition at line 153 of file G4KokoulinMuonNuclearXS.cc.

157{
158 // Calculate the double-differential microscopic cross section (in muon
159 // incident kinetic energy and energy loss) using the cross section formula
160 // of R.P. Kokoulin (18/01/98)
161
162 const G4double alam2 = 0.400*GeV*GeV;
163 const G4double alam = 0.632456*GeV;
164 const G4double coeffn = fine_structure_const/pi;
165
166 G4double ParticleMass = G4MuonMinus::MuonMinus()->GetPDGMass();
167 G4double TotalEnergy = KineticEnergy + ParticleMass;
168
169 G4double DCrossSection = 0.;
170
171 if ((epsilon >= TotalEnergy - 0.5*proton_mass_c2) ||
172 (epsilon <= CutFixed) ) return DCrossSection;
173
174 G4double ep = epsilon/GeV;
175 G4double a = AtomicWeight/(g/mole);
176 G4double aeff = 0.22*a+0.78*std::exp(0.89*std::log(a)); //shadowing
177 G4double sigph = (49.2+11.1*std::log(ep)+151.8/std::sqrt(ep))*microbarn;
178
179 G4double v = epsilon/TotalEnergy;
180 G4double v1 = 1.-v;
181 G4double v2 = v*v;
182 G4double mass2 = ParticleMass*ParticleMass;
183
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);
186
187 DCrossSection = coeffn*aeff*sigph/epsilon*
188 (-v1+(v1+0.5*v2*(1.+2.*mass2/alam2))*std::log(up/down));
189
190 if (DCrossSection < 0.) DCrossSection = 0.;
191 return DCrossSection;
192}
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:100
const G4double pi

◆ GetElementCrossSection()

G4double G4KokoulinMuonNuclearXS::GetElementCrossSection ( const G4DynamicParticle particle,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 194 of file G4KokoulinMuonNuclearXS.cc.

197{
198 G4int j = zelMap[ZZ];
199 return (*theCrossSectionTable)[j]->Value(aPart->GetKineticEnergy());
200}

◆ IsElementApplicable()

G4bool G4KokoulinMuonNuclearXS::IsElementApplicable ( const G4DynamicParticle particle,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 64 of file G4KokoulinMuonNuclearXS.cc.

66{
67 return true;
68}

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