Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4KokoulinMuonNuclearXS Class Reference

#include <G4KokoulinMuonNuclearXS.hh>

Inheritance diagram for G4KokoulinMuonNuclearXS:
Collaboration 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 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 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 DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual G4int GetVerboseLevel () const
 
virtual void SetVerboseLevel (G4int value)
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
const G4StringGetName () const
 

Static Public Member Functions

static const char * Default_Name ()
 

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 53 of file G4KokoulinMuonNuclearXS.hh.

Constructor & Destructor Documentation

G4KokoulinMuonNuclearXS::G4KokoulinMuonNuclearXS ( )

Definition at line 59 of file G4KokoulinMuonNuclearXS.cc.

61  LowestKineticEnergy(1*GeV), HighestKineticEnergy(1*PeV),
62  TotBin(60), CutFixed(0.2*GeV), isInitialized(false), isMaster(false)
63 {}
G4VCrossSectionDataSet(const G4String &nam="")
static const char * Default_Name()
static constexpr double PeV
Definition: G4SIunits.hh:219
static constexpr double GeV
Definition: G4SIunits.hh:217
G4KokoulinMuonNuclearXS::~G4KokoulinMuonNuclearXS ( )
virtual

Definition at line 65 of file G4KokoulinMuonNuclearXS.cc.

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

Member Function Documentation

void G4KokoulinMuonNuclearXS::BuildCrossSectionTable ( )

Definition at line 108 of file G4KokoulinMuonNuclearXS.cc.

109 {
110  G4double energy, A, Value;
111  G4int Z;
112 
114  const G4ElementTable* theElementTable = G4Element::GetElementTable();
115  G4NistManager* nistManager = G4NistManager::Instance();
116 
117  for (G4int j = 0; j < nEl; j++) {
118  Z = G4lrint((*theElementTable)[j]->GetZ());
119  A = nistManager->GetAtomicMassAmu(Z);
120  if(Z < MAXZMUN && !theCrossSection[Z]) {
121  theCrossSection[Z] = new G4PhysicsLogVector(LowestKineticEnergy,
122  HighestKineticEnergy,
123  TotBin);
124  for (G4int i = 0; i <= TotBin; ++i) {
125  energy = theCrossSection[Z]->Energy(i);
126  Value = ComputeMicroscopicCrossSection(energy, A);
127  theCrossSection[Z]->PutValue(i,Value);
128  }
129  }
130  }
131 }
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
double A(double temperature)
static size_t GetNumberOfElements()
Definition: G4Element.cc:405
void PutValue(size_t index, G4double theValue)
const G4int MAXZMUN
G4double Energy(size_t index) const
int G4lrint(double ad)
Definition: templates.hh:163
G4double energy(const ThreeVector &p, const G4double m)
G4double GetAtomicMassAmu(const G4String &symb) const
std::vector< G4Element * > G4ElementTable
double G4double
Definition: G4Types.hh:76
static G4ElementTable * GetElementTable()
Definition: G4Element.cc:398

Here is the call graph for this function:

Here is the caller graph for this function:

void G4KokoulinMuonNuclearXS::BuildPhysicsTable ( const G4ParticleDefinition )
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 96 of file G4KokoulinMuonNuclearXS.cc.

97 {
98  if(!isInitialized) {
99  isInitialized = true;
100  for(G4int i=0; i<MAXZMUN; ++i) {
101  if(theCrossSection[i]) { return; }
102  }
103  isMaster = true;
104  }
105  if(isMaster) { BuildCrossSectionTable(); }
106 }
int G4int
Definition: G4Types.hh:78
const G4int MAXZMUN

Here is the call graph for this function:

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

Definition at line 179 of file G4KokoulinMuonNuclearXS.cc.

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

Here is the call graph for this function:

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 77 of file G4KokoulinMuonNuclearXS.cc.

78 {
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" ;
85 }
static const char* G4KokoulinMuonNuclearXS::Default_Name ( )
inlinestatic

Definition at line 60 of file G4KokoulinMuonNuclearXS.hh.

60 {return "KokoulinMuonNuclearXS";}

Here is the caller graph for this function:

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 218 of file G4KokoulinMuonNuclearXS.cc.

220 {
221  return theCrossSection[Z]->Value(aPart->GetKineticEnergy());
222 }
G4double Value(G4double theEnergy, size_t &lastidx) const

Here is the call graph for this function:

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 89 of file G4KokoulinMuonNuclearXS.cc.

91 {
92  return true;
93 }

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