Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4KokoulinMuonNuclearXS Class Reference

#include <G4KokoulinMuonNuclearXS.hh>

Inheritance diagram for G4KokoulinMuonNuclearXS:
G4VCrossSectionDataSet

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 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 BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
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
 

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 ( )

Definition at line 47 of file G4KokoulinMuonNuclearXS.cc.

References BuildCrossSectionTable().

48  :G4VCrossSectionDataSet("KokoulinMuonNuclearXS"), theCrossSectionTable(0),
49  LowestKineticEnergy(1*GeV), HighestKineticEnergy(1*PeV),
50  TotBin(60), CutFixed(0.2*GeV)
51 {
53 }
G4VCrossSectionDataSet(const G4String &nam="")
G4KokoulinMuonNuclearXS::~G4KokoulinMuonNuclearXS ( )
virtual

Definition at line 55 of file G4KokoulinMuonNuclearXS.cc.

References G4PhysicsTable::clearAndDestroy().

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

Member Function Documentation

void G4KokoulinMuonNuclearXS::BuildCrossSectionTable ( )

Definition at line 71 of file G4KokoulinMuonNuclearXS.cc.

References G4PhysicsVector::Energy(), G4Element::GetElementTable(), G4Element::GetNumberOfElements(), G4PhysicsTable::insertAt(), and G4PhysicsVector::PutValue().

Referenced by G4KokoulinMuonNuclearXS().

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 }
int G4int
Definition: G4Types.hh:78
static size_t GetNumberOfElements()
Definition: G4Element.cc:402
void PutValue(size_t index, G4double theValue)
G4double Energy(size_t index) const
void insertAt(size_t, G4PhysicsVector *)
std::vector< G4Element * > G4ElementTable
double G4double
Definition: G4Types.hh:76
static G4ElementTable * GetElementTable()
Definition: G4Element.cc:395
G4double G4KokoulinMuonNuclearXS::ComputeDDMicroscopicCrossSection ( G4double  incidentKE,
G4double  ,
G4double  AtomicWeight,
G4double  epsilon 
)

Definition at line 154 of file G4KokoulinMuonNuclearXS.cc.

References test::a, python.hepunit::fine_structure_const, g(), G4ParticleDefinition::GetPDGMass(), python.hepunit::GeV, python.hepunit::microbarn, python.hepunit::mole, G4MuonMinus::MuonMinus(), python.hepunit::pi, python.hepunit::proton_mass_c2, and test::v.

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  static const G4double alam2 = 0.400*GeV*GeV;
163  static const G4double alam = 0.632456*GeV;
164  static 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 }
int microbarn
Definition: hepunit.py:41
function g(Y1, Y2, PT2)
Definition: hijing1.383.f:5205
float proton_mass_c2
Definition: hepunit.py:275
G4double GetPDGMass() const
static G4MuonMinus * MuonMinus()
Definition: G4MuonMinus.cc:100
double G4double
Definition: G4Types.hh:76
G4double G4KokoulinMuonNuclearXS::GetElementCrossSection ( const G4DynamicParticle particle,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 195 of file G4KokoulinMuonNuclearXS.cc.

References G4DynamicParticle::GetKineticEnergy().

197 {
198  G4int j = zelMap[ZZ];
199  return (*theCrossSectionTable)[j]->Value(aPart->GetKineticEnergy());
200 }
int G4int
Definition: G4Types.hh:78
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: