Geant4 11.1.1
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 ()
 
virtual void CrossSectionDescription (std::ostream &) const
 
G4bool IsElementApplicable (const G4DynamicParticle *particle, G4int Z, const G4Material *)
 
G4double GetElementCrossSection (const G4DynamicParticle *particle, G4int Z, const G4Material *)
 
void BuildPhysicsTable (const G4ParticleDefinition &)
 
void BuildCrossSectionTable ()
 
G4double ComputeDDMicroscopicCrossSection (G4double incidentKE, G4double Z, G4double A, G4double epsilon)
 
- Public Member Functions inherited from G4VCrossSectionDataSet
 G4VCrossSectionDataSet (const G4String &nam="")
 
virtual ~G4VCrossSectionDataSet ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
virtual G4double ComputeCrossSectionPerElement (G4double kinEnergy, G4double loge, const G4ParticleDefinition *, const G4Element *, const G4Material *mat=nullptr)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
virtual G4double ComputeIsoCrossSection (G4double kinEnergy, G4double loge, const G4ParticleDefinition *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
virtual const G4IsotopeSelectIsotope (const G4Element *, G4double kinEnergy, G4double logE)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
virtual void SetVerboseLevel (G4int value)
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
bool ForAllAtomsAndEnergies () const
 
void SetForAllAtomsAndEnergies (G4bool val)
 
const G4StringGetName () const
 
void SetName (const G4String &nam)
 
G4VCrossSectionDataSetoperator= (const G4VCrossSectionDataSet &right)=delete
 
 G4VCrossSectionDataSet (const G4VCrossSectionDataSet &)=delete
 

Static Public Member Functions

static const char * Default_Name ()
 

Additional Inherited Members

- Protected Attributes inherited from G4VCrossSectionDataSet
G4int verboseLevel
 
G4String name
 

Detailed Description

Definition at line 52 of file G4KokoulinMuonNuclearXS.hh.

Constructor & Destructor Documentation

◆ G4KokoulinMuonNuclearXS()

G4KokoulinMuonNuclearXS::G4KokoulinMuonNuclearXS ( )

Definition at line 58 of file G4KokoulinMuonNuclearXS.cc.

60 LowestKineticEnergy(1*GeV), HighestKineticEnergy(1*PeV),
61 TotBin(60), CutFixed(0.2*GeV), isInitialized(false), isMaster(false)
62{}
static const char * Default_Name()

◆ ~G4KokoulinMuonNuclearXS()

G4KokoulinMuonNuclearXS::~G4KokoulinMuonNuclearXS ( )
virtual

Definition at line 64 of file G4KokoulinMuonNuclearXS.cc.

65{
66 if (isMaster) {
67 for(G4int i=0; i<MAXZMUN; ++i) {
68 delete theCrossSection[i];
69 theCrossSection[i] = 0;
70 }
71 }
72}
const G4int MAXZMUN
int G4int
Definition: G4Types.hh:85

Member Function Documentation

◆ BuildCrossSectionTable()

void G4KokoulinMuonNuclearXS::BuildCrossSectionTable ( )

Definition at line 107 of file G4KokoulinMuonNuclearXS.cc.

108{
109 G4double energy, A, Value;
110 G4int Z;
111
112 std::size_t nEl = G4Element::GetNumberOfElements();
113 const G4ElementTable* theElementTable = G4Element::GetElementTable();
114 G4NistManager* nistManager = G4NistManager::Instance();
115
116 for (std::size_t j = 0; j < nEl; ++j) {
117 Z = G4lrint((*theElementTable)[j]->GetZ());
118
119 //AR-24Apr2018 Switch to treat transuranic elements as uranium
120 const G4bool isHeavyElementAllowed = true; if ( isHeavyElementAllowed && Z>92 ) Z=92;
121
122 A = nistManager->GetAtomicMassAmu(Z);
123 if(Z < MAXZMUN && !theCrossSection[Z]) {
124 theCrossSection[Z] = new G4PhysicsLogVector(LowestKineticEnergy,
125 HighestKineticEnergy,
126 TotBin);
127 for (G4int i = 0; i <= TotBin; ++i) {
128 energy = theCrossSection[Z]->Energy(i);
129 Value = ComputeMicroscopicCrossSection(energy, A);
130 theCrossSection[Z]->PutValue(i,Value);
131 }
132 }
133 }
134}
std::vector< G4Element * > G4ElementTable
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
const G4int Z[17]
const G4double A[17]
static G4ElementTable * GetElementTable()
Definition: G4Element.cc:403
static size_t GetNumberOfElements()
Definition: G4Element.cc:410
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
void PutValue(const std::size_t index, const G4double value)
G4double Energy(const std::size_t index) const
G4double energy(const ThreeVector &p, const G4double m)
int G4lrint(double ad)
Definition: templates.hh:134

Referenced by BuildPhysicsTable().

◆ BuildPhysicsTable()

void G4KokoulinMuonNuclearXS::BuildPhysicsTable ( const G4ParticleDefinition )
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 95 of file G4KokoulinMuonNuclearXS.cc.

96{
97 if(!isInitialized) {
98 isInitialized = true;
99 for(G4int i=0; i<MAXZMUN; ++i) {
100 if(theCrossSection[i]) { return; }
101 }
102 isMaster = true;
103 }
104 if(isMaster) { BuildCrossSectionTable(); }
105}

◆ ComputeDDMicroscopicCrossSection()

G4double G4KokoulinMuonNuclearXS::ComputeDDMicroscopicCrossSection ( G4double  incidentKE,
G4double  Z,
G4double  A,
G4double  epsilon 
)

Definition at line 181 of file G4KokoulinMuonNuclearXS.cc.

184{
185 // Calculate the double-differential microscopic cross section (in muon
186 // incident kinetic energy and energy loss) using the cross section formula
187 // of R.P. Kokoulin (18/01/98)
188
189 static const G4double alam2 = 0.400*GeV*GeV;
190 static const G4double alam = 0.632456*GeV;
191 static const G4double coeffn = fine_structure_const/pi;
192
193 G4double ParticleMass = G4MuonMinus::MuonMinus()->GetPDGMass();
194 G4double TotalEnergy = KineticEnergy + ParticleMass;
195
196 G4double DCrossSection = 0.;
197
198 if ((epsilon >= TotalEnergy - 0.5*proton_mass_c2) ||
199 (epsilon <= CutFixed) ) { return DCrossSection; }
200
201 G4double ep = epsilon/GeV;
202 G4double aeff = 0.22*A+0.78*G4Exp(0.89*G4Log(A)); //shadowing
203 G4double sigph = (49.2+11.1*G4Log(ep)+151.8/std::sqrt(ep))*microbarn;
204
205 G4double v = epsilon/TotalEnergy;
206 G4double v1 = 1.-v;
207 G4double v2 = v*v;
208 G4double mass2 = ParticleMass*ParticleMass;
209
210 G4double up = TotalEnergy*TotalEnergy*v1/mass2*(1.+mass2*v2/(alam2*v1));
211 G4double down = 1.+epsilon/alam*(1.+alam/(2.*proton_mass_c2)+epsilon/alam);
212
213 DCrossSection = coeffn*aeff*sigph/epsilon*
214 (-v1+(v1+0.5*v2*(1.+2.*mass2/alam2))*G4Log(up/down));
215
216 if (DCrossSection < 0.) { DCrossSection = 0.; }
217 return DCrossSection;
218}
G4double epsilon(G4double density, G4double temperature)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
G4double G4Log(G4double x)
Definition: G4Log.hh:227
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:99
const G4double pi

◆ CrossSectionDescription()

void G4KokoulinMuonNuclearXS::CrossSectionDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 76 of file G4KokoulinMuonNuclearXS.cc.

77{
78 outFile << "G4KokoulinMuonNuclearXS provides the total inelastic\n"
79 << "cross section for mu- and mu+ interactions with nuclei.\n"
80 << "R. Kokoulin's approximation of the Borog and Petrukhin double\n"
81 << "differential cross section at high energy and low Q**2 is integrated\n"
82 << "over the muon energy loss to get the total cross section as a\n"
83 << "function of muon kinetic energy\n" ;
84}

◆ Default_Name()

static const char * G4KokoulinMuonNuclearXS::Default_Name ( )
inlinestatic

Definition at line 59 of file G4KokoulinMuonNuclearXS.hh.

59{return "KokoulinMuonNuclearXS";}

Referenced by G4MuonVDNuclearModel::G4MuonVDNuclearModel().

◆ GetElementCrossSection()

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 220 of file G4KokoulinMuonNuclearXS.cc.

223{
224 //AR-24Apr2018 Switch to treat transuranic elements as uranium
225 const G4bool isHeavyElementAllowed = true; if ( isHeavyElementAllowed && Z>92 ) Z=92;
226
227 return theCrossSection[Z]->Value(aPart->GetKineticEnergy());
228}
G4double Value(const G4double energy, std::size_t &lastidx) const

◆ IsElementApplicable()

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 88 of file G4KokoulinMuonNuclearXS.cc.

90{
91 return true;
92}

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