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

#include <G4ProtonInelasticCrossSection.hh>

Inheritance diagram for G4ProtonInelasticCrossSection:
G4VCrossSectionDataSet

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

Constructor & Destructor Documentation

G4ProtonInelasticCrossSection::G4ProtonInelasticCrossSection ( )

Definition at line 41 of file G4ProtonInelasticCrossSection.cc.

References G4NistManager::Instance(), and G4Proton::Proton().

42  : G4VCrossSectionDataSet("Axen-Wellisch"),thEnergy(19.8*CLHEP::GeV)
43 {
44  nist = G4NistManager::Instance();
45  theProton = G4Proton::Proton();
46 }
G4VCrossSectionDataSet(const G4String &nam="")
static G4NistManager * Instance()
static G4Proton * Proton()
Definition: G4Proton.cc:93
G4ProtonInelasticCrossSection::~G4ProtonInelasticCrossSection ( )

Definition at line 48 of file G4ProtonInelasticCrossSection.cc.

49 {}

Member Function Documentation

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 59 of file G4ProtonInelasticCrossSection.cc.

References G4DynamicParticle::GetKineticEnergy(), and GetProtonCrossSection().

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

Definition at line 66 of file G4ProtonInelasticCrossSection.cc.

References test::a, G4lrint(), G4NistManager::GetAtomicMassAmu(), python.hepunit::GeV, and python.hepunit::millibarn.

Referenced by GetElementCrossSection(), and G4IonProtonCrossSection::GetElementCrossSection().

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 = std::pow(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=std::log((G4double(nOfNeutrons))); }
87  G4double crossSection = 1.0E31*fac*fac2*(1. + 1./a13 - fac1);
88 
89  // high energy correction
90  crossSection *= (1 - 0.15*std::exp(-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+std::exp(-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. + std::exp(ff4));
109  return crossSection;
110 }
int G4int
Definition: G4Types.hh:78
int millibarn
Definition: hepunit.py:40
int G4lrint(double ad)
Definition: templates.hh:163
G4double GetAtomicMassAmu(const G4String &symb) const
double G4double
Definition: G4Types.hh:76
G4bool G4ProtonInelasticCrossSection::IsElementApplicable ( const G4DynamicParticle aPart,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 52 of file G4ProtonInelasticCrossSection.cc.

References G4DynamicParticle::GetDefinition().

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

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