Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ProtonInelasticCrossSection Class Reference

#include <G4ProtonInelasticCrossSection.hh>

+ Inheritance diagram for G4ProtonInelasticCrossSection:

Public Member Functions

 G4ProtonInelasticCrossSection ()
 
 ~G4ProtonInelasticCrossSection ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *aPart, G4int Z, const G4Material *)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *)
 
G4double GetProtonCrossSection (G4double kineticEnergy, G4int Z)
 
- 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 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 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 G4int GetVerboseLevel () 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
 

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 52 of file G4ProtonInelasticCrossSection.hh.

Constructor & Destructor Documentation

◆ G4ProtonInelasticCrossSection()

G4ProtonInelasticCrossSection::G4ProtonInelasticCrossSection ( )

Definition at line 41 of file G4ProtonInelasticCrossSection.cc.

42 : G4VCrossSectionDataSet("Axen-Wellisch"),thEnergy(19.8*CLHEP::GeV)
43{
45 theProton = G4Proton::Proton();
46}
static G4NistManager * Instance()
static G4Proton * Proton()
Definition: G4Proton.cc:92

◆ ~G4ProtonInelasticCrossSection()

G4ProtonInelasticCrossSection::~G4ProtonInelasticCrossSection ( )

Definition at line 48 of file G4ProtonInelasticCrossSection.cc.

49{}

Member Function Documentation

◆ GetElementCrossSection()

G4double G4ProtonInelasticCrossSection::GetElementCrossSection ( const G4DynamicParticle aPart,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 59 of file G4ProtonInelasticCrossSection.cc.

62{
63 return GetProtonCrossSection(aPart->GetKineticEnergy(), Z);
64}
G4double GetKineticEnergy() const
G4double GetProtonCrossSection(G4double kineticEnergy, G4int Z)

◆ GetProtonCrossSection()

G4double G4ProtonInelasticCrossSection::GetProtonCrossSection ( G4double  kineticEnergy,
G4int  Z 
)

Definition at line 66 of file G4ProtonInelasticCrossSection.cc.

68{
69 if(kineticEnergy <= 0.0) { return 0.0; }
70
71 // constant cross section above ~20GeV
72 if (kineticEnergy > thEnergy) { kineticEnergy = thEnergy; }
73
74 G4double a = nist->GetAtomicMassAmu(Z);
75 G4double a13 = G4Pow::GetInstance()->powA(a,-0.3333333333);
76 G4int nOfNeutrons = G4lrint(a) - Z;
77 kineticEnergy /=GeV;
78 G4double alog10E = std::log10(kineticEnergy);
79
80 static const G4double nuleonRadius=1.36e-15;
81 static const G4double fac=CLHEP::pi*nuleonRadius*nuleonRadius;
82
83 G4double b0 = 2.247-0.915*(1 - a13);
84 G4double fac1 = b0*(1 - a13);
85 G4double fac2 = 1.;
86 if(nOfNeutrons > 1) { fac2=G4Log((G4double(nOfNeutrons))); }
87 G4double crossSection = 1.0E31*fac*fac2*(1. + 1./a13 - fac1);
88
89 // high energy correction
90 crossSection *= (1 - 0.15*G4Exp(-kineticEnergy))/(1.0 - 0.0007*a);
91
92 // first try on low energies: rise
93 G4double ff1= 0.70-0.002*a; // slope of the drop at medium energies.
94 G4double ff2= 1.00+1/a; // start of the slope.
95 G4double ff3= 0.8+18/a-0.002*a; // stephight
96
97 G4double ff4= 1.0 - (1.0/(1+G4Exp(-8*ff1*(alog10E + 1.37*ff2))));
98
99 crossSection *= (1 + ff3*ff4);
100
101 // low energy return to zero
102
103 ff1=1. - 1./a - 0.001*a; // slope of the rise
104 ff2=1.17 - 2.7/a - 0.0014*a; // start of the rise
105
106 ff4=-8.*ff1*(alog10E + 2.0*ff2);
107
108 crossSection *= millibarn/(1. + G4Exp(ff4));
109 return crossSection;
110}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
G4double G4Log(G4double x)
Definition: G4Log.hh:226
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4double GetAtomicMassAmu(const G4String &symb) const
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:230
int G4lrint(double ad)
Definition: templates.hh:134

Referenced by GetElementCrossSection().

◆ IsElementApplicable()

G4bool G4ProtonInelasticCrossSection::IsElementApplicable ( const G4DynamicParticle aPart,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 52 of file G4ProtonInelasticCrossSection.cc.

55{
56 return ((1 < Z) && (aPart->GetDefinition() == theProton));
57}
G4ParticleDefinition * GetDefinition() const

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