File indexing completed on 2025-11-03 09:47:34
0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 
0010 
0011 
0012 
0013 
0014 
0015 
0016 
0017 
0018 
0019 
0020 
0021 
0022 
0023 
0024 
0025 
0026 
0027 
0028 
0029 
0030 
0031 
0032 
0033 
0034 
0035 
0036 
0037 
0038 
0039 
0040 
0041 
0042 
0043 
0044 
0045 
0046 
0047 
0048 #ifndef G4BGGNucleonElasticXS_h
0049 #define G4BGGNucleonElasticXS_h 1
0050 
0051 #include "globals.hh"
0052 #include "G4VCrossSectionDataSet.hh"
0053 #include "G4ParticleDefinition.hh"
0054 
0055 class G4ComponentGGHadronNucleusXsc;
0056 class G4NucleonNuclearCrossSection;
0057 class G4HadronNucleonXsc;
0058 class G4Material;
0059 class G4Element;
0060 class G4Isotope;
0061 
0062 class G4BGGNucleonElasticXS final : public G4VCrossSectionDataSet
0063 {
0064 public:
0065 
0066   explicit G4BGGNucleonElasticXS(const G4ParticleDefinition*);
0067 
0068   ~G4BGGNucleonElasticXS() final;
0069    
0070   G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z, 
0071                  const G4Material* mat) final;
0072 
0073   G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,  
0074              const G4Element* elm,
0075              const G4Material* mat) final;
0076 
0077   G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z,
0078                   const G4Material* mat) final;
0079 
0080   G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,  
0081                   const G4Isotope* iso=nullptr,
0082                   const G4Element* elm=nullptr,
0083                   const G4Material* mat=nullptr) final;
0084 
0085   void BuildPhysicsTable(const G4ParticleDefinition&) final;
0086 
0087   void CrossSectionDescription(std::ostream&) const final;
0088 
0089   G4BGGNucleonElasticXS & operator=
0090   (const G4BGGNucleonElasticXS &right) = delete;
0091   G4BGGNucleonElasticXS(const G4BGGNucleonElasticXS&) = delete;
0092 
0093 private:
0094 
0095   void Initialise();
0096   
0097   G4double CoulombFactor(G4double kinEnergy, G4int Z);
0098 
0099   G4double fGlauberEnergy;  
0100   G4double fLowEnergy;  
0101 
0102   static G4double theGlauberFacP[93];
0103   static G4double theCoulombFacP[93];
0104   static G4double theGlauberFacN[93];
0105   static G4double theCoulombFacN[93];
0106   static G4int    theA[93];
0107 
0108   const G4ParticleDefinition* theProton;
0109   G4ComponentGGHadronNucleusXsc* fGlauber;
0110   G4NucleonNuclearCrossSection* fNucleon;
0111   G4HadronNucleonXsc* fHadron;
0112   G4bool isProton;
0113 };
0114 
0115 #endif