Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4GlauberGribovCrossSection.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// Calculation of the total, elastic and inelastic cross-sections
27// based on parametrisations of (proton, pion, kaon, photon) nucleon
28// cross-sections and the hadron-nucleous cross-section model in
29// the framework of Glauber-Gribov approach
30//
31//
32//
33//
34//
35// 17.07.06 V. Grichine - first implementation
36// 22.01.07 V.Ivanchenko - add interface with Z and A
37// 05.03.07 V.Ivanchenko - add IfZAApplicable
38// 06.03.07 V.Ivanchenko - add GetElasticGlauberGribov and GetElasticGlauberGribov
39// for combined dataset
40//
41//
42
43#ifndef G4GlauberGribovCrossSection_h
44#define G4GlauberGribovCrossSection_h 1
45
46#include "globals.hh"
47#include "G4Proton.hh"
48#include "G4Nucleus.hh"
49
51
54
56{
57public:
58
61
62 static const char* Default_Name() {return "Glauber-Gribov";}
63
64 virtual
66 const G4Element* elm = 0,
67 const G4Material* mat = 0);
68
69 virtual
71 const G4Isotope* iso = 0,
72 const G4Element* elm = 0,
73 const G4Material* mat = 0);
74
77
80
86
90
91 G4double CalculateEcmValue ( const G4double , const G4double , const G4double );
92
93 G4double CalcMandelstamS( const G4double , const G4double , const G4double );
94
97
98 virtual void CrossSectionDescription(std::ostream&) const;
99
102
103 inline G4double GetTotalGlauberGribovXsc() { return fTotalXsc; };
104 inline G4double GetElasticGlauberGribovXsc() { return fElasticXsc; };
105 inline G4double GetInelasticGlauberGribovXsc(){ return fInelasticXsc; };
106 inline G4double GetProductionGlauberGribovXsc(){ return fProductionXsc; };
107 inline G4double GetDiffractionGlauberGribovXsc(){ return fDiffractionXsc; };
108 inline G4double GetRadiusConst() { return fRadiusConst; };
109
110 inline G4double GetParticleBarCorTot(const G4ParticleDefinition* theParticle, G4int Z);
111 inline G4double GetParticleBarCorIn(const G4ParticleDefinition* theParticle, G4int Z);
112
113 inline void SetEnergyLowerLimit(G4double E ){fLowerLimit=E;};
114
115private:
116
117 const G4double fUpperLimit;
118 G4double fLowerLimit;
119 const G4double fRadiusConst;
120
121 static const G4double fNeutronBarCorrectionTot[93];
122 static const G4double fNeutronBarCorrectionIn[93];
123
124 static const G4double fProtonBarCorrectionTot[93];
125 static const G4double fProtonBarCorrectionIn[93];
126
127 static const G4double fPionPlusBarCorrectionTot[93];
128 static const G4double fPionPlusBarCorrectionIn[93];
129
130 static const G4double fPionMinusBarCorrectionTot[93];
131 static const G4double fPionMinusBarCorrectionIn[93];
132
133 G4double fTotalXsc, fElasticXsc, fInelasticXsc, fProductionXsc, fDiffractionXsc;
134 G4double fHadronNucleonXsc;
135
136 G4ParticleDefinition* theGamma;
137 G4ParticleDefinition* theProton;
138 G4ParticleDefinition* theNeutron;
139 G4ParticleDefinition* theAProton;
140 G4ParticleDefinition* theANeutron;
141 G4ParticleDefinition* thePiPlus;
142 G4ParticleDefinition* thePiMinus;
143 G4ParticleDefinition* thePiZero;
144 G4ParticleDefinition* theKPlus;
145 G4ParticleDefinition* theKMinus;
146 G4ParticleDefinition* theK0S;
147 G4ParticleDefinition* theK0L;
149 G4ParticleDefinition* theAntiL;
150 G4ParticleDefinition* theSPlus;
151 G4ParticleDefinition* theASPlus;
152 G4ParticleDefinition* theSMinus;
153 G4ParticleDefinition* theASMinus;
155 G4ParticleDefinition* theAS0;
156 G4ParticleDefinition* theXiMinus;
157 G4ParticleDefinition* theXi0;
158 G4ParticleDefinition* theAXiMinus;
159 G4ParticleDefinition* theAXi0;
160 G4ParticleDefinition* theOmega;
161 G4ParticleDefinition* theAOmega;
165 G4ParticleDefinition* theHe3;
166
167 G4HadronNucleonXsc* hnXsc;
168
169};
170
171////////////////////////////////////////////////////////////////
172//
173// Inlines
174
175inline
178 G4int Z, G4int A)
179{
180 GetIsoCrossSection(dp, Z, A);
181 return fElasticXsc;
182}
183
184/////////////////////////////////////////////////////////////////
185
186inline
189 G4int Z, G4int A)
190{
191 GetIsoCrossSection(dp, Z, A);
192 return fInelasticXsc;
193}
194
195/////////////////////////////////////////////////////////////////////
196//
197// return correction at Tkin = 90*GeV GG -> Barashenkov tot xsc, when it
198// is available, else return 1.0
199
200
202 const G4ParticleDefinition* theParticle, G4int Z)
203{
204 if(Z >= 2 && Z <= 92)
205 {
206 if( theParticle == theProton ) return fProtonBarCorrectionTot[Z];
207 else if( theParticle == theNeutron) return fNeutronBarCorrectionTot[Z];
208 else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionTot[Z];
209 else if( theParticle == thePiMinus) return fPionMinusBarCorrectionTot[Z];
210 else return 1.0;
211 }
212 else return 1.0;
213}
214
215/////////////////////////////////////////////////////////////////////
216//
217// return correction at Tkin = 90*GeV GG -> Barashenkov in xsc, when it
218// is available, else return 1.0
219
220
222 const G4ParticleDefinition* theParticle, G4int Z)
223{
224 if(Z >= 2 && Z <= 92)
225 {
226 if( theParticle == theProton ) return fProtonBarCorrectionIn[Z];
227 else if( theParticle == theNeutron) return fNeutronBarCorrectionIn[Z];
228 else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionIn[Z];
229 else if( theParticle == thePiMinus) return fPionMinusBarCorrectionIn[Z];
230 else return 1.0;
231 }
232 else return 1.0;
233}
234
235#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
virtual void CrossSectionDescription(std::ostream &) const
G4double GetRatioQE(const G4DynamicParticle *, G4int At, G4int Zt)
G4double GetParticleBarCorIn(const G4ParticleDefinition *theParticle, G4int Z)
G4double CalculateEcmValue(const G4double, const G4double, const G4double)
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4Element *)
G4double GetHNinelasticXsc(const G4DynamicParticle *, const G4Element *)
G4double GetHadronNucleonXsc(const G4DynamicParticle *, const G4Element *)
G4double GetHadronNucleonXscNS(const G4DynamicParticle *, const G4Element *)
G4double GetRatioSD(const G4DynamicParticle *, G4int At, G4int Zt)
virtual G4bool IsIsoApplicable(const G4DynamicParticle *aDP, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
G4double GetElasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
G4double GetNucleusRadius(const G4DynamicParticle *, const G4Element *)
G4double CalcMandelstamS(const G4double, const G4double, const G4double)
G4double GetInelasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
G4double GetParticleBarCorTot(const G4ParticleDefinition *theParticle, G4int Z)
G4double GetHNinelasticXscVU(const G4DynamicParticle *, G4int At, G4int Zt)
G4double GetKaonNucleonXscVector(const G4DynamicParticle *, G4int At, G4int Zt)