Geant4  10.03.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups 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 G4Isotope * SelectIsotope (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 G4String & GetName () 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 }
double A(double temperature)
float proton_mass_c2
Definition: hepunit.py:275
tuple v
Definition: test.py:18
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
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: