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 << 34 // << 35 33 36 #ifndef G4ComponentBarNucleonNucleusXsc_h 34 #ifndef G4ComponentBarNucleonNucleusXsc_h 37 #define G4ComponentBarNucleonNucleusXsc_h 35 #define G4ComponentBarNucleonNucleusXsc_h 38 36 39 37 40 #include "G4VComponentCrossSection.hh" 38 #include "G4VComponentCrossSection.hh" 41 #include "G4ParticleDefinition.hh" 39 #include "G4ParticleDefinition.hh" 42 #include "G4DynamicParticle.hh" 40 #include "G4DynamicParticle.hh" 43 41 44 #include "globals.hh" 42 #include "globals.hh" 45 #include "G4PiData.hh" 43 #include "G4PiData.hh" 46 #include <vector> << 44 #include "G4HadTmpUtil.hh" >> 45 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(); >> 54 >> 55 55 56 >> 57 // virtual interface methods >> 58 >> 59 virtual 56 G4double GetTotalIsotopeCrossSection(const G 60 G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition* aParticle, 57 G4double kinEnergy, 61 G4double kinEnergy, 58 G4int Z, G4int ) final; << 62 G4int Z, G4int ); 59 63 >> 64 virtual 60 G4double GetTotalElementCrossSection(const G 65 G4double GetTotalElementCrossSection(const G4ParticleDefinition* aParticle, 61 G4double kinEnergy, 66 G4double kinEnergy, 62 G4int Z, G4double ) final; << 67 G4int Z, G4double ); 63 68 >> 69 virtual 64 G4double GetInelasticIsotopeCrossSection(con 70 G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 65 G4double kinEnergy, 71 G4double kinEnergy, 66 G4int Z, G4int ) final; << 72 G4int Z, G4int ); 67 73 >> 74 virtual 68 G4double GetInelasticElementCrossSection(con 75 G4double GetInelasticElementCrossSection(const G4ParticleDefinition* aParticle, 69 G4double kinEnergy, 76 G4double kinEnergy, 70 G4int Z, G4double ) final; << 77 G4int Z, G4double ); 71 78 >> 79 virtual 72 G4double GetElasticElementCrossSection(const 80 G4double GetElasticElementCrossSection(const G4ParticleDefinition* aParticle, 73 G4double kinEnergy, 81 G4double kinEnergy, 74 G4int Z, G4double ) final; << 82 G4int Z, G4double ); 75 83 >> 84 virtual 76 G4double GetElasticIsotopeCrossSection(const 85 G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 77 G4double kinEnergy, 86 G4double kinEnergy, 78 G4int Z, G4int ) final; << 87 G4int Z, G4int ); 79 << 80 void ComputeCrossSections(const G4ParticleDe << 81 G4double kinEnergy, G4int Z); << 82 88 83 void Description(std::ostream&) const final; << 84 89 85 inline G4double GetElementCrossSection(const << 86 inline G4double GetElasticCrossSection(const << 87 90 88 inline G4double GetTotalXsc() { return f << 91 // virtual 89 inline G4double GetElasticXsc() { return f << 92 G4bool IsElementApplicable(const G4DynamicParticle* aParticle, 90 inline G4double GetInelasticXsc() { return f << 93 G4int Z); // , const G4Material* mat = 0); 91 << 94 92 G4ComponentBarNucleonNucleusXsc& operator= << 95 // virtual 93 (const G4ComponentBarNucleonNucleusXsc &righ << 96 G4double GetElementCrossSection(const G4DynamicParticle* aParticle, 94 G4ComponentBarNucleonNucleusXsc(const G4Comp << 97 G4int Z); // , const G4Material* mat = 0); >> 98 >> 99 // virtual >> 100 void CrossSectionDescription(std::ostream&) const; 95 101 >> 102 inline G4double GetElasticCrossSection(const G4DynamicParticle* aParticle, >> 103 G4int Z); >> 104 >> 105 inline G4double GetTotalXsc() { return fTotalXsc; }; >> 106 inline G4double GetElasticXsc(){ return fElasticXsc; }; >> 107 96 private: 108 private: 97 109 98 G4double Interpolate(G4int Z1, G4int Z2, G4i << 110 G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2); >> 111 >> 112 // add Hydrogen from PDG group. >> 113 >> 114 static const G4double e1[44]; >> 115 >> 116 static const G4double he_m_t[44]; >> 117 static const G4double he_m_in[44]; >> 118 static const G4double he_p_in[44]; >> 119 >> 120 static const G4double be_m_t[44]; >> 121 static const G4double be_m_in[44]; >> 122 static const G4double be_p_in[44]; >> 123 >> 124 static const G4double c_m_t[44]; >> 125 static const G4double c_m_in[44]; >> 126 static const G4double c_p_in[44]; >> 127 >> 128 >> 129 static const G4double e2[44]; >> 130 >> 131 static const G4double n_m_t[44]; >> 132 static const G4double n_m_in[44]; >> 133 static const G4double n_p_in[44]; >> 134 >> 135 static const G4double o_m_t[44]; >> 136 static const G4double o_m_in[44]; >> 137 static const G4double o_p_in[44]; >> 138 >> 139 static const G4double na_m_t[44]; >> 140 static const G4double na_m_in[44]; >> 141 static const G4double na_p_in[44]; >> 142 >> 143 >> 144 static const G4double e3[45]; >> 145 >> 146 // static const G4double e3_1[31]; >> 147 >> 148 static const G4double al_m_t[45]; >> 149 static const G4double al_m_in[45]; >> 150 static const G4double al_p_in[45]; 99 151 100 void LoadData(); << 152 static const G4double si_m_t[45]; >> 153 static const G4double si_m_in[45]; >> 154 static const G4double si_p_in[45]; >> 155 >> 156 static const G4double ca_m_t[45]; >> 157 static const G4double ca_m_in[45]; >> 158 static const G4double ca_p_in[45]; >> 159 >> 160 >> 161 static const G4double e4[47]; >> 162 >> 163 static const G4double fe_m_t[47]; >> 164 static const G4double fe_m_in[47]; >> 165 static const G4double fe_p_in[47]; >> 166 >> 167 static const G4double cu_m_t[47]; >> 168 static const G4double cu_m_in[47]; >> 169 static const G4double cu_p_in[47]; >> 170 >> 171 static const G4double mo_m_t[47]; >> 172 static const G4double mo_m_in[47]; >> 173 static const G4double mo_p_in[47]; >> 174 >> 175 >> 176 static const G4double e5[48]; >> 177 >> 178 static const G4double cd_m_t[48]; >> 179 static const G4double cd_m_in[48]; >> 180 static const G4double cd_p_in[48]; >> 181 >> 182 static const G4double sn_m_t[48]; >> 183 static const G4double sn_m_in[48]; >> 184 static const G4double sn_p_in[48]; >> 185 >> 186 static const G4double w_m_t[48]; >> 187 static const G4double w_m_in[48]; >> 188 static const G4double w_p_in[48]; >> 189 >> 190 static const G4double e6[46]; >> 191 >> 192 // static const G4double e7[46]; >> 193 >> 194 static const G4double pb_m_t[46]; >> 195 static const G4double pb_m_in[46]; >> 196 static const G4double pb_p_in[46]; >> 197 >> 198 static const G4double u_m_t[46]; >> 199 static const G4double u_m_in[46]; >> 200 static const G4double u_p_in[46]; >> 201 >> 202 // vectors for treatment >> 203 >> 204 std::vector< G4int > theZ; >> 205 std::vector< G4PiData* > thePipData; >> 206 std::vector< G4PiData* > thePimData; 101 207 102 // cross sections 208 // cross sections 103 G4double fTotalXsc{0.0}; << 209 104 G4double fInelasticXsc{0.0}; << 210 G4double fTotalXsc; 105 G4double fElasticXsc{0.0}; << 211 G4double fInelasticXsc; >> 212 G4double fElasticXsc; 106 213 107 // particles 214 // particles 108 const G4ParticleDefinition* theProton; 215 const G4ParticleDefinition* theProton; 109 const G4ParticleDefinition* theNeutron; 216 const G4ParticleDefinition* theNeutron; 110 217 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 }; 218 }; 117 219 118 inline 220 inline 119 G4double G4ComponentBarNucleonNucleusXsc::GetE << 120 const G4DynamicParticle* dp, G4int Z) << 121 { << 122 ComputeCrossSections(dp->GetDefinition(), dp << 123 return fInelasticXsc; << 124 } << 125 << 126 inline << 127 G4double G4ComponentBarNucleonNucleusXsc::GetE 221 G4double G4ComponentBarNucleonNucleusXsc::GetElasticCrossSection( 128 const G4DynamicParticle* dp, G4int Z) 222 const G4DynamicParticle* dp, G4int Z) 129 { 223 { 130 ComputeCrossSections(dp->GetDefinition(), dp << 224 fInelasticXsc = GetElementCrossSection(dp, Z); 131 return fElasticXsc; 225 return fElasticXsc; 132 } 226 } 133 227 134 #endif 228 #endif 135 229