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 G4Isotope * SelectIsotope (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 G4String & GetName () 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: