Geant4 Cross Reference |
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 40 #include "G4VComponentCrossSection.hh" 41 #include "G4ParticleDefinition.hh" 42 #include "G4DynamicParticle.hh" 43 44 #include "globals.hh" 45 #include "G4PiData.hh" 46 #include <vector> 47 48 class G4ComponentBarNucleonNucleusXsc : public G4VComponentCrossSection 49 { 50 51 public: 52 53 G4ComponentBarNucleonNucleusXsc(); 54 ~G4ComponentBarNucleonNucleusXsc() override = default; 55 56 G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition* aParticle, 57 G4double kinEnergy, 58 G4int Z, G4int ) final; 59 60 G4double GetTotalElementCrossSection(const G4ParticleDefinition* aParticle, 61 G4double kinEnergy, 62 G4int Z, G4double ) final; 63 64 G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 65 G4double kinEnergy, 66 G4int Z, G4int ) final; 67 68 G4double GetInelasticElementCrossSection(const G4ParticleDefinition* aParticle, 69 G4double kinEnergy, 70 G4int Z, G4double ) final; 71 72 G4double GetElasticElementCrossSection(const G4ParticleDefinition* aParticle, 73 G4double kinEnergy, 74 G4int Z, G4double ) final; 75 76 G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 77 G4double kinEnergy, 78 G4int Z, G4int ) final; 79 80 void ComputeCrossSections(const G4ParticleDefinition* aParticle, 81 G4double kinEnergy, G4int Z); 82 83 void Description(std::ostream&) const final; 84 85 inline G4double GetElementCrossSection(const G4DynamicParticle* aParticle, G4int Z); 86 inline G4double GetElasticCrossSection(const G4DynamicParticle* aParticle, G4int Z); 87 88 inline G4double GetTotalXsc() { return fTotalXsc; }; 89 inline G4double GetElasticXsc() { return fElasticXsc; }; 90 inline G4double GetInelasticXsc() { return fInelasticXsc; }; 91 92 G4ComponentBarNucleonNucleusXsc& operator= 93 (const G4ComponentBarNucleonNucleusXsc &right) = delete; 94 G4ComponentBarNucleonNucleusXsc(const G4ComponentBarNucleonNucleusXsc&) = delete; 95 96 private: 97 98 G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2) const; 99 100 void LoadData(); 101 102 // cross sections 103 G4double fTotalXsc{0.0}; 104 G4double fInelasticXsc{0.0}; 105 G4double fElasticXsc{0.0}; 106 107 // particles 108 const G4ParticleDefinition* theProton; 109 const G4ParticleDefinition* theNeutron; 110 111 static G4double A75[93]; 112 static const G4int NZ = 17; 113 static G4int theZ[NZ]; 114 static std::vector<G4PiData*>* thePData; 115 static std::vector<G4PiData*>* theNData; 116 }; 117 118 inline 119 G4double G4ComponentBarNucleonNucleusXsc::GetElementCrossSection( 120 const G4DynamicParticle* dp, G4int Z) 121 { 122 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(), Z); 123 return fInelasticXsc; 124 } 125 126 inline 127 G4double G4ComponentBarNucleonNucleusXsc::GetElasticCrossSection( 128 const G4DynamicParticle* dp, G4int Z) 129 { 130 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(), Z); 131 return fElasticXsc; 132 } 133 134 #endif 135