Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // author: Vladimir.Grichine@cern.ch 27 // author: Vladimir.Grichine@cern.ch 28 // 28 // 29 // Implements data from: Barashenkov V.S., Nuc 29 // Implements data from: Barashenkov V.S., Nucleon-Nucleus Cross Section, 30 // Preprint JINR P2-89-770, p. 12, Dubna 1989 30 // Preprint JINR P2-89-770, p. 12, Dubna 1989 (scanned version from KEK) 31 // Based on G4NucleonNuclearCrossSection class 31 // Based on G4NucleonNuclearCrossSection class 32 // 32 // 33 // Modifications: 16.08.2018 V.Ivanchenko majo 33 // Modifications: 16.08.2018 V.Ivanchenko major revision 34 // 34 // 35 35 36 #ifndef G4ComponentBarNucleonNucleusXsc_h 36 #ifndef G4ComponentBarNucleonNucleusXsc_h 37 #define G4ComponentBarNucleonNucleusXsc_h 37 #define G4ComponentBarNucleonNucleusXsc_h 38 38 39 39 40 #include "G4VComponentCrossSection.hh" 40 #include "G4VComponentCrossSection.hh" 41 #include "G4ParticleDefinition.hh" 41 #include "G4ParticleDefinition.hh" 42 #include "G4DynamicParticle.hh" 42 #include "G4DynamicParticle.hh" 43 43 44 #include "globals.hh" 44 #include "globals.hh" 45 #include "G4PiData.hh" 45 #include "G4PiData.hh" 46 #include <vector> << 47 46 48 class G4ComponentBarNucleonNucleusXsc : public 47 class G4ComponentBarNucleonNucleusXsc : public G4VComponentCrossSection 49 { 48 { 50 49 51 public: 50 public: 52 51 53 G4ComponentBarNucleonNucleusXsc(); 52 G4ComponentBarNucleonNucleusXsc(); 54 ~G4ComponentBarNucleonNucleusXsc() override << 53 virtual ~G4ComponentBarNucleonNucleusXsc(); 55 54 >> 55 virtual 56 G4double GetTotalIsotopeCrossSection(const G 56 G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition* aParticle, 57 G4double kinEnergy, 57 G4double kinEnergy, 58 G4int Z, G4int ) final; << 58 G4int Z, G4int ); 59 59 >> 60 virtual 60 G4double GetTotalElementCrossSection(const G 61 G4double GetTotalElementCrossSection(const G4ParticleDefinition* aParticle, 61 G4double kinEnergy, 62 G4double kinEnergy, 62 G4int Z, G4double ) final; << 63 G4int Z, G4double ); 63 64 >> 65 virtual 64 G4double GetInelasticIsotopeCrossSection(con 66 G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 65 G4double kinEnergy, 67 G4double kinEnergy, 66 G4int Z, G4int ) final; << 68 G4int Z, G4int ); 67 69 >> 70 virtual 68 G4double GetInelasticElementCrossSection(con 71 G4double GetInelasticElementCrossSection(const G4ParticleDefinition* aParticle, 69 G4double kinEnergy, 72 G4double kinEnergy, 70 G4int Z, G4double ) final; << 73 G4int Z, G4double ); 71 74 >> 75 virtual 72 G4double GetElasticElementCrossSection(const 76 G4double GetElasticElementCrossSection(const G4ParticleDefinition* aParticle, 73 G4double kinEnergy, 77 G4double kinEnergy, 74 G4int Z, G4double ) final; << 78 G4int Z, G4double ); 75 79 >> 80 virtual 76 G4double GetElasticIsotopeCrossSection(const 81 G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 77 G4double kinEnergy, 82 G4double kinEnergy, 78 G4int Z, G4int ) final; << 83 G4int Z, G4int ); 79 84 80 void ComputeCrossSections(const G4ParticleDe 85 void ComputeCrossSections(const G4ParticleDefinition* aParticle, 81 G4double kinEnergy, G4int Z); 86 G4double kinEnergy, G4int Z); 82 87 83 void Description(std::ostream&) const final; << 88 G4bool IsElementApplicable(const G4DynamicParticle* aParticle, G4int Z); >> 89 >> 90 virtual void CrossSectionDescription(std::ostream&) const; 84 91 85 inline G4double GetElementCrossSection(const 92 inline G4double GetElementCrossSection(const G4DynamicParticle* aParticle, G4int Z); 86 inline G4double GetElasticCrossSection(const 93 inline G4double GetElasticCrossSection(const G4DynamicParticle* aParticle, G4int Z); 87 94 88 inline G4double GetTotalXsc() { return f 95 inline G4double GetTotalXsc() { return fTotalXsc; }; 89 inline G4double GetElasticXsc() { return f 96 inline G4double GetElasticXsc() { return fElasticXsc; }; 90 inline G4double GetInelasticXsc() { return f 97 inline G4double GetInelasticXsc() { return fInelasticXsc; }; 91 << 98 92 G4ComponentBarNucleonNucleusXsc& operator= << 93 (const G4ComponentBarNucleonNucleusXsc &righ << 94 G4ComponentBarNucleonNucleusXsc(const G4Comp << 95 << 96 private: 99 private: 97 100 98 G4double Interpolate(G4int Z1, G4int Z2, G4i << 101 G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2); 99 102 100 void LoadData(); << 103 std::vector< G4int > theZ; >> 104 std::vector< G4PiData* > thePipData; >> 105 std::vector< G4PiData* > thePimData; 101 106 102 // cross sections 107 // cross sections 103 G4double fTotalXsc{0.0}; << 108 G4double fTotalXsc; 104 G4double fInelasticXsc{0.0}; << 109 G4double fInelasticXsc; 105 G4double fElasticXsc{0.0}; << 110 G4double fElasticXsc; 106 111 107 // particles 112 // particles 108 const G4ParticleDefinition* theProton; 113 const G4ParticleDefinition* theProton; 109 const G4ParticleDefinition* theNeutron; 114 const G4ParticleDefinition* theNeutron; 110 115 >> 116 static G4double theA[93]; 111 static G4double A75[93]; 117 static G4double A75[93]; 112 static const G4int NZ = 17; << 118 113 static G4int theZ[NZ]; << 114 static std::vector<G4PiData*>* thePData; << 115 static std::vector<G4PiData*>* theNData; << 116 }; 119 }; 117 120 118 inline 121 inline 119 G4double G4ComponentBarNucleonNucleusXsc::GetE 122 G4double G4ComponentBarNucleonNucleusXsc::GetElementCrossSection( 120 const G4DynamicParticle* dp, G4int Z) 123 const G4DynamicParticle* dp, G4int Z) 121 { 124 { 122 ComputeCrossSections(dp->GetDefinition(), dp << 125 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(),Z); 123 return fInelasticXsc; 126 return fInelasticXsc; 124 } 127 } 125 128 126 inline 129 inline 127 G4double G4ComponentBarNucleonNucleusXsc::GetE 130 G4double G4ComponentBarNucleonNucleusXsc::GetElasticCrossSection( 128 const G4DynamicParticle* dp, G4int Z) 131 const G4DynamicParticle* dp, G4int Z) 129 { 132 { 130 ComputeCrossSections(dp->GetDefinition(), dp << 133 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(),Z); 131 return fElasticXsc; 134 return fElasticXsc; 132 } 135 } 133 136 134 #endif 137 #endif 135 138