ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ComponentGGHadronNucleusXsc.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4ComponentGGHadronNucleusXsc.hh
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 // 25.04.12 V. Grichine - first implementation based on
32 // G4GlauberGribovCrossSection old interface
33 //
34 // 04.09.18 V. Ivantchenko Major revision of interfaces and implementation
35 // 01.10.18 V. Grichine strange hyperon xsc
36 // 27.05.19 V. Ivantchenko Removed obsolete methods and members
37 
38 #ifndef G4ComponentGGHadronNucleusXsc_h
39 #define G4ComponentGGHadronNucleusXsc_h 1
40 
41 #include "globals.hh"
42 #include "G4Proton.hh"
43 #include "G4Nucleus.hh"
44 
46 
48 class G4HadronNucleonXsc;
49 class G4Pow;
50 
52 {
53 public:
54 
57 
58  static const char* Default_Name() { return "Glauber-Gribov"; }
59 
60  // virtual interface methods
62  G4double kinEnergy,
63  G4int Z, G4double A) final;
64 
66  G4double kinEnergy,
67  G4int Z, G4int A) final;
68 
70  G4double kinEnergy,
71  G4int Z, G4double A) final;
72 
74  G4double kinEnergy,
75  G4int Z, G4int A) final;
76 
78  G4double kinEnergy,
79  G4int Z, G4double A) final;
80 
82  G4double kinEnergy,
83  G4int Z, G4int A) final;
84 
86  G4double kinEnergy,
87  G4int Z, G4int A) final;
88 
89  // Glauber-Gribov cross section
90  void ComputeCrossSections(const G4ParticleDefinition* aParticle,
91  G4double kinEnergy, G4int Z, G4int A);
92 
93  // additional public methods
95  G4double kinEnergy,
96  G4int Z, G4double A);
97 
99  G4double kinEnergy,
100  G4int Z, G4int A);
101 
104 
107 
112 
116 
117  void Description(std::ostream&) const final;
118 
120  const G4Isotope* iso = nullptr,
121  const G4Element* elm = nullptr,
122  const G4Material* mat = nullptr);
123 
124  inline G4double GetElasticGlauberGribov(const G4DynamicParticle*, G4int Z, G4int A);
125  inline G4double GetInelasticGlauberGribov(const G4DynamicParticle*, G4int Z, G4int A);
126 
127  inline G4double GetAxsc2piR2() const { return fAxsc2piR2; };
128  inline G4double GetModelInLog() const { return fModelInLog; };
129  inline G4double GetTotalGlauberGribovXsc() const { return fTotalXsc; };
130  inline G4double GetElasticGlauberGribovXsc() const { return fElasticXsc; };
134 
135  inline G4double GetParticleBarCorTot(const G4ParticleDefinition* theParticle, G4int Z);
136  inline G4double GetParticleBarCorIn(const G4ParticleDefinition* theParticle, G4int Z);
137 
138 private:
139 
142 
145 
148 
151 
154  G4double fEnergy; //Cache
155 
167 
169 
170  // Cache
173 
174 };
175 
177 //
178 // Inlines
179 
180 inline G4double
182  G4int Z, G4int A,
183  const G4Isotope*,
184  const G4Element*,
185  const G4Material*)
186 {
188  return fTotalXsc;
189 }
190 
191 inline G4double
193  const G4DynamicParticle* dp, G4int Z, G4int A)
194 {
196  return fElasticXsc;
197 }
198 
200 
201 inline G4double
203  const G4DynamicParticle* dp, G4int Z, G4int A)
204 {
206  return fInelasticXsc;
207 }
208 
210 //
211 // return correction at Tkin = 90*GeV GG -> Barashenkov tot xsc, when it
212 // is available, else return 1.0
213 
215  const G4ParticleDefinition* theParticle, G4int ZZ)
216 {
217  G4double cor = 1.0;
218  G4int z = std::min(92, std::max(ZZ, 1));
219  if( theParticle == theProton ) cor = fProtonBarCorrectionTot[z];
220  else if( theParticle == theNeutron) cor = fNeutronBarCorrectionTot[z];
221  else if( theParticle == thePiPlus ) cor = fPionPlusBarCorrectionTot[z];
222  else if( theParticle == thePiMinus) cor = fPionMinusBarCorrectionTot[z];
223  return cor;
224 }
225 
227 //
228 // return correction at Tkin = 90*GeV GG -> Barashenkov in xsc, when it
229 // is available, else return 1.0
230 
231 
233  const G4ParticleDefinition* theParticle, G4int ZZ)
234 {
235  G4double cor = 1.0;
236  G4int z = std::min(92, std::max(ZZ, 1));
237  if( theParticle == theProton ) cor = fProtonBarCorrectionIn[z];
238  else if( theParticle == theNeutron) cor = fNeutronBarCorrectionIn[z];
239  else if( theParticle == thePiPlus ) cor = fPionPlusBarCorrectionIn[z];
240  else if( theParticle == thePiMinus) cor = fPionMinusBarCorrectionIn[z];
241  return cor;
242 }
243 
244 #endif