Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // Calculation of the total, elastic and inela 27 // based on parametrisations of (proton, pion, 28 // cross-sections and the hadron-nucleous cros 29 // the framework of Glauber-Gribov approach 30 // 31 // 25.04.12 V. Grichine - first implementation 32 // G4GlauberGribovCross 33 // 34 // 04.09.18 V. Ivantchenko Major revision of i 35 // 01.10.18 V. Grichine strange hyperon xsc 36 // 27.05.19 V. Ivantchenko Removed obsolete me 37 38 #ifndef G4ComponentGGHadronNucleusXsc_h 39 #define G4ComponentGGHadronNucleusXsc_h 1 40 41 #include "globals.hh" 42 #include "G4Proton.hh" 43 #include "G4Nucleus.hh" 44 45 #include "G4VComponentCrossSection.hh" 46 47 class G4ParticleDefinition; 48 class G4HadronNucleonXsc; 49 class G4Pow; 50 51 class G4ComponentGGHadronNucleusXsc final : pu 52 { 53 public: 54 55 explicit G4ComponentGGHadronNucleusXsc(); 56 ~G4ComponentGGHadronNucleusXsc() final; 57 58 static const char* Default_Name() { return " 59 60 // virtual interface methods 61 G4double GetTotalElementCrossSection(const G 62 G4double kinEnergy, 63 G4int Z, G4double A) final; 64 65 G4double GetTotalIsotopeCrossSection(const G 66 G4double kinEnergy, 67 G4int Z, G4int A) final; 68 69 G4double GetInelasticElementCrossSection(con 70 G4double kinEnergy, 71 G4int Z, G4double A) final; 72 73 G4double GetInelasticIsotopeCrossSection(con 74 G4double kinEnergy, 75 G4int Z, G4int A) final; 76 77 G4double GetElasticElementCrossSection(const 78 G4double kinEnergy, 79 G4int Z, G4double A) final; 80 81 G4double GetElasticIsotopeCrossSection(const 82 G4double kinEnergy, 83 G4int Z, G4int A) final; 84 85 G4double ComputeQuasiElasticRatio(const G4Pa 86 G4double kinEnergy, 87 G4int Z, G4int A) final; 88 89 // Glauber-Gribov cross section 90 void ComputeCrossSections(const G4ParticleDe 91 G4double kinEnergy, G4int Z, G4int A 92 93 // additional public methods 94 G4double GetProductionElementCrossSection(co 95 G4double kinEnergy, 96 G4int Z, G4double A); 97 98 G4double GetProductionIsotopeCrossSection(co 99 G4double kinEnergy, 100 G4int Z, G4int A); 101 102 G4double GetRatioSD(const G4DynamicParticle* 103 G4double GetRatioQE(const G4DynamicParticle* 104 105 G4double GetHadronNucleonXsc(const G4Dynamic 106 G4double GetHadronNucleonXsc(const G4Dynamic 107 108 G4double GetHadronNucleonXscPDG(const G4Dyna 109 G4double GetHadronNucleonXscPDG(const G4Dyna 110 G4double GetHadronNucleonXscNS(const G4Dynam 111 G4double GetHadronNucleonXscNS(const G4Dynam 112 113 G4double GetHNinelasticXsc(const G4DynamicPa 114 G4double GetHNinelasticXsc(const G4DynamicPa 115 G4double GetHNinelasticXscVU(const G4Dynamic 116 117 void Description(std::ostream&) const final; 118 119 inline G4double GetIsoCrossSection(const G4D 120 const G4Isotope* iso = null 121 const G4Element* elm = null 122 const G4Material* mat = nul 123 124 inline G4double GetElasticGlauberGribov(cons 125 inline G4double GetInelasticGlauberGribov(co 126 127 inline G4double GetAxsc2piR2() const 128 inline G4double GetModelInLog() const 129 inline G4double GetTotalGlauberGribovXsc() c 130 inline G4double GetElasticGlauberGribovXsc() 131 inline G4double GetInelasticGlauberGribovXsc 132 inline G4double GetProductionGlauberGribovXs 133 inline G4double GetDiffractionGlauberGribovX 134 135 inline G4double GetParticleBarCorTot(const G 136 inline G4double GetParticleBarCorIn(const G4 137 138 private: 139 140 static const G4double fNeutronBarCorrectionT 141 static const G4double fNeutronBarCorrectionI 142 143 static const G4double fProtonBarCorrectionTo 144 static const G4double fProtonBarCorrectionIn 145 146 static const G4double fPionPlusBarCorrection 147 static const G4double fPionPlusBarCorrection 148 149 static const G4double fPionMinusBarCorrectio 150 static const G4double fPionMinusBarCorrectio 151 152 G4double fTotalXsc, fElasticXsc, fInelasticX 153 G4double fAxsc2piR2, fModelInLog; 154 G4double fEnergy; //Cache 155 156 const G4ParticleDefinition* theGamma; 157 const G4ParticleDefinition* theProton; 158 const G4ParticleDefinition* theNeutron; 159 const G4ParticleDefinition* theAProton; 160 const G4ParticleDefinition* theANeutron; 161 const G4ParticleDefinition* thePiPlus; 162 const G4ParticleDefinition* thePiMinus; 163 const G4ParticleDefinition* theKPlus; 164 const G4ParticleDefinition* theKMinus; 165 const G4ParticleDefinition* theK0S; 166 const G4ParticleDefinition* theK0L; 167 const G4ParticleDefinition* theLambda; 168 169 G4HadronNucleonXsc* hnXsc; 170 171 // Cache 172 const G4ParticleDefinition* fParticle; 173 G4int fZ, fA, fL; 174 175 }; 176 177 ////////////////////////////////////////////// 178 // 179 // Inlines 180 181 inline G4double 182 G4ComponentGGHadronNucleusXsc::GetIsoCrossSect 183 G4int Z, G4int A, 184 const G4Isotope*, 185 const G4Element*, 186 const G4Material*) 187 { 188 ComputeCrossSections(dp->GetDefinition(), dp 189 return fTotalXsc; 190 } 191 192 inline G4double 193 G4ComponentGGHadronNucleusXsc::GetElasticGlaub 194 const G4DynamicParticle* dp, G4int 195 { 196 ComputeCrossSections(dp->GetDefinition(), dp 197 return fElasticXsc; 198 } 199 200 ////////////////////////////////////////////// 201 202 inline G4double 203 G4ComponentGGHadronNucleusXsc::GetInelasticGla 204 const G4DynamicParticle* dp, G4int 205 { 206 ComputeCrossSections(dp->GetDefinition(), dp 207 return fInelasticXsc; 208 } 209 210 ////////////////////////////////////////////// 211 // 212 // return correction at Tkin = 90*GeV GG -> Ba 213 // is available, else return 1.0 214 215 inline G4double G4ComponentGGHadronNucleusXsc: 216 const G4ParticleDef 217 { 218 G4double cor = 1.0; 219 G4int z = std::min(92, std::max(ZZ, 1)); 220 if( theParticle == theProton ) cor = fP 221 else if( theParticle == theNeutron) cor = fN 222 else if( theParticle == thePiPlus ) cor = fP 223 else if( theParticle == thePiMinus) cor = fP 224 return cor; 225 } 226 227 ////////////////////////////////////////////// 228 // 229 // return correction at Tkin = 90*GeV GG -> Ba 230 // is available, else return 1.0 231 232 233 inline G4double G4ComponentGGHadronNucleusXsc: 234 const G4ParticleDef 235 { 236 G4double cor = 1.0; 237 G4int z = std::min(92, std::max(ZZ, 1)); 238 if( theParticle == theProton ) cor = fP 239 else if( theParticle == theNeutron) cor = fN 240 else if( theParticle == thePiPlus ) cor = fP 241 else if( theParticle == thePiMinus) cor = fP 242 return cor; 243 } 244 245 #endif 246