Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ComponentBarNucleonNucleusXsc.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// author: Vladimir.Grichine@cern.ch
28//
29// Implements data from: Barashenkov V.S., Nucleon-Nucleus Cross Section,
30// Preprint JINR P2-89-770, p. 12, Dubna 1989 (scanned version from KEK)
31// Based on G4NucleonNuclearCrossSection class
32//
33// Modifications: 16.08.2018 V.Ivanchenko major revision
34//
35
36#ifndef G4ComponentBarNucleonNucleusXsc_h
37#define G4ComponentBarNucleonNucleusXsc_h
38
39
42#include "G4DynamicParticle.hh"
43
44#include "globals.hh"
45#include "G4PiData.hh"
46#include "G4Threading.hh"
47#include <vector>
48
50{
51
52public:
53
56
58 G4double kinEnergy,
59 G4int Z, G4int ) final;
60
62 G4double kinEnergy,
63 G4int Z, G4double ) final;
64
66 G4double kinEnergy,
67 G4int Z, G4int ) final;
68
70 G4double kinEnergy,
71 G4int Z, G4double ) final;
72
74 G4double kinEnergy,
75 G4int Z, G4double ) final;
76
78 G4double kinEnergy,
79 G4int Z, G4int ) final;
80
81 void ComputeCrossSections(const G4ParticleDefinition* aParticle,
82 G4double kinEnergy, G4int Z);
83
84 void BuildPhysicsTable(const G4ParticleDefinition&) final;
85
86 void Description(std::ostream&) const final;
87
88 inline G4double GetElementCrossSection(const G4DynamicParticle* aParticle, G4int Z);
90
91 inline G4double GetTotalXsc() { return fTotalXsc; };
92 inline G4double GetElasticXsc() { return fElasticXsc; };
93 inline G4double GetInelasticXsc() { return fInelasticXsc; };
94
95private:
96
97 G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2) const;
98
99 void LoadData();
100
101 // cross sections
102 G4double fTotalXsc;
103 G4double fInelasticXsc;
104 G4double fElasticXsc;
105
106 // particles
107 const G4ParticleDefinition* theProton;
108 const G4ParticleDefinition* theNeutron;
109
110 G4bool isMaster;
111
112 static G4double theA[93];
113 static G4double A75[93];
114
115 static const G4int NZ = 17;
116 static G4int theZ[NZ];
117 static std::vector<G4PiData*>* thePData;
118 static std::vector<G4PiData*>* theNData;
119
120#ifdef G4MULTITHREADED
121 static G4Mutex barNNXSMutex;
122#endif
123
124};
125
126inline
128 const G4DynamicParticle* dp, G4int Z)
129{
131 return fInelasticXsc;
132}
133
134inline
136 const G4DynamicParticle* dp, G4int Z)
137{
139 return fElasticXsc;
140}
141
142#endif
std::mutex G4Mutex
Definition: G4Threading.hh:81
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int) final
void BuildPhysicsTable(const G4ParticleDefinition &) final
G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int) final
G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double) final
G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double) final
G4double GetElasticCrossSection(const G4DynamicParticle *aParticle, G4int Z)
G4double GetElementCrossSection(const G4DynamicParticle *aParticle, G4int Z)
G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int) final
G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double) final
void Description(std::ostream &) const final
void ComputeCrossSections(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z)
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const