Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ComponentGGNuclNuclXsc.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 nucleus-nucleus total, inelastic, production,
27 // elastic and quasi-elastic cross-sections
28 // based on parametrisations of nucleon-nucleon
29 // cross-sections in
30 // the framework of simplified Glauber-Gribov approach
31 //
32 //
33 // 24.11.08 V. Grichine - first implementation based on G4GlauberGribovCrossSection
34 //
35 //
36 
37 #ifndef G4ComponentGGNuclNuclXsc_h
38 #define G4ComponentGGNuclNuclXsc_h
39 
40 #include "globals.hh"
41 #include "G4Proton.hh"
42 #include "G4Nucleus.hh"
43 #include "G4NistManager.hh"
44 
46 
48 class G4HadronNucleonXsc;
49 
51 {
52 public:
53 
55  virtual ~G4ComponentGGNuclNuclXsc ();
56 
57 
58  // virtual interface methods
59 
60  virtual
62  G4double kinEnergy,
63  G4int Z, G4int A);
64 
65  virtual
67  G4double kinEnergy,
68  G4int Z, G4double A);
69 
70  virtual
72  G4double kinEnergy,
73  G4int Z, G4int A);
74 
75  virtual
77  G4double kinEnergy,
78  G4int Z, G4double A);
79 
80  virtual
82  G4double kinEnergy,
83  G4int Z, G4double A);
84 
85  virtual
87  G4double kinEnergy,
88  G4int Z, G4int A);
89 
90  virtual
92  G4double kinEnergy,
93  G4int Z, G4int A);
94 
95 
96  // virtual
98  G4int Z, const G4Material*);
99 
100  // virtual
102  G4int Z, const G4Material*);
103 
105  G4int Z, G4int A);
106 
108  G4double Z, G4double A, G4double pR, G4double tR);
109 
110  virtual
112  {}
113 
114  virtual
116  {G4cout << "G4NuclNuclCrossSection: uses Glauber-Gribov formula"<<G4endl;}
117 
118  virtual void CrossSectionDescription(std::ostream&) const;
119 
122 
125 
126 
129 
131  G4double CalculateEcmValue(const G4double, const G4double, const G4double);
132  G4double CalcMandelstamS( const G4double , const G4double , const G4double );
133 
136 
137  G4double GetTotalGlauberGribovXsc() { return fTotalXsc; };
138  G4double GetElasticGlauberGribovXsc() { return fElasticXsc; };
139  G4double GetInelasticGlauberGribovXsc(){ return fInelasticXsc; };
140  G4double GetProductionGlauberGribovXsc(){ return fProductionXsc; };
141  G4double GetDiffractionGlauberGribovXsc(){ return fDiffractionXsc; };
142  G4double GetRadiusConst() { return fRadiusConst; };
143 
145 
150 
151  inline void SetEnergyLowerLimit(G4double E ){fLowerLimit=E;};
152 
153 private:
154 
155 // const G4double fUpperLimit;
156  G4double fLowerLimit;
157  const G4double fRadiusConst;
158 
159  G4double fTotalXsc, fElasticXsc, fInelasticXsc, fProductionXsc, fDiffractionXsc;
160 // G4double fHadronNucleonXsc;
161 
162  G4ParticleDefinition* theProton;
163  G4ParticleDefinition* theNeutron;
164  G4HadronNucleonXsc* hnXsc;
165 
166  //Used internally as cache to reduce memory churn
167  G4DynamicParticle cacheDP;
168  G4DynamicParticle dProton;
169  G4DynamicParticle dNeutron;
170 };
171 
172 ////////////////////////////////////////////////////////////////
173 //
174 // Inlines
175 
176 inline G4double
178  G4int Z, G4int A)
179 {
180  GetZandACrossSection(dp, Z, A);
181  return fElasticXsc;
182 }
183 
184 /////////////////////////////////////////////////////////////////
185 
186 inline G4double
188  G4int Z, G4int A)
189 {
190  GetZandACrossSection(dp, Z, A);
191  return fInelasticXsc;
192 }
193 
194 #endif
G4double GetNucleusRadiusGG(G4double At)
virtual void DumpPhysicsTable(const G4ParticleDefinition &)
G4double GetNucleusRadius(const G4DynamicParticle *, const G4Element *)
virtual G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
int G4int
Definition: G4Types.hh:78
G4double GetElasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
G4GLOB_DLL std::ostream G4cout
G4double GetHadronNucleonXscPDG(G4ParticleDefinition *, G4double sMand, G4ParticleDefinition *)
virtual void CrossSectionDescription(std::ostream &) const
G4double CalcMandelstamS(const G4double, const G4double, const G4double)
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
bool G4bool
Definition: G4Types.hh:79
G4double GetHadronNucleonXsc(const G4DynamicParticle *, const G4Element *)
G4double GetNucleusRadiusRMS(G4double Zt, G4double At)
G4double GetRatioQE(const G4DynamicParticle *, G4double At, G4double Zt)
G4double CalculateEcmValue(const G4double, const G4double, const G4double)
G4double GetInelasticGlauberGribov(const G4DynamicParticle *, G4int Z, G4int A)
G4double GetRatioSD(const G4DynamicParticle *, G4double At, G4double Zt)
virtual G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
G4double GetHadronNucleonXscNS(G4ParticleDefinition *, G4double pTkin, G4ParticleDefinition *)
#define G4endl
Definition: G4ios.hh:61
G4double GetHNinelasticXscVU(const G4DynamicParticle *, G4int At, G4int Zt)
G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *)
double G4double
Definition: G4Types.hh:76
virtual G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *)
G4double GetNucleusRadiusDE(G4double Zt, G4double At)
G4double GetCoulombBarier(const G4DynamicParticle *, G4double Z, G4double A, G4double pR, G4double tR)
virtual G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
virtual G4double ComputeQuasiElasticRatio(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
G4double GetZandACrossSection(const G4DynamicParticle *, G4int Z, G4int A)