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 // Calculation of the total, elastic and inelastic cross-sections 27 // based on parametrisations of (proton, pion, kaon, photon) nucleon 28 // cross-sections and the hadron-nucleous cross-section model in 29 // the framework of Glauber-Gribov approach 30 // 31 // 14.03.07 V. Grichine - first implementation 32 // 04.11.11 V. Grichine - update for kaon-(p,n) xsc, vector spline 33 // 21.02.12 V. Grichine - update for pion-(p,n) xsc, NS fit++, vector spline 34 // 30.07.18 V. Ivanchenko - general clean-up 35 // 30.09.18 V. Grichine hyperon-nucleon xsc first implementation 36 // 09.04.19 V. Grichine hyperon-nucleon xsc for c- and b- hyperons (and s-) 37 // 12.04.19 V. Grichine meson-nucleon xsc for c- and b- hyperons (and s-) 38 // 09.05.20 V. Ivanchenko general code clean-up 39 40 41 #ifndef G4HadronNucleonXsc_h 42 #define G4HadronNucleonXsc_h 43 44 #include "globals.hh" 45 #include "G4ParticleDefinition.hh" 46 #include "G4DynamicParticle.hh" 47 48 class G4Pow; 49 class G4Element; 50 51 class G4HadronNucleonXsc 52 { 53 public: 54 55 G4HadronNucleonXsc(); 56 ~G4HadronNucleonXsc() = default; 57 58 // Xsc parametrisations return total x-section 59 G4double HadronNucleonXsc(const G4ParticleDefinition* theParticle, 60 const G4ParticleDefinition* nucleon, G4double ekin); 61 62 G4double HadronNucleonXscPDG(const G4ParticleDefinition* theParticle, 63 const G4ParticleDefinition* nucleon, G4double ekin); 64 65 G4double HadronNucleonXscNS(const G4ParticleDefinition* theParticle, 66 const G4ParticleDefinition* nucleon, G4double ekin); 67 68 G4double KaonNucleonXscNS(const G4ParticleDefinition* theParticle, 69 const G4ParticleDefinition* nucleon, G4double ekin); 70 71 G4double KaonNucleonXscGG(const G4ParticleDefinition* theParticle, 72 const G4ParticleDefinition* nucleon, G4double ekin); 73 74 G4double KaonNucleonXscVG(const G4ParticleDefinition* theParticle, 75 const G4ParticleDefinition* nucleon, G4double ekin); 76 77 G4double HyperonNucleonXscNS(const G4ParticleDefinition* theParticle, 78 const G4ParticleDefinition* nucleon, G4double ekin); 79 80 G4double SCBMesonNucleonXscNS(const G4ParticleDefinition* theParticle, 81 const G4ParticleDefinition* nucleon, G4double ekin ); 82 83 G4double HadronNucleonXscVU(const G4ParticleDefinition* theParticle, 84 const G4ParticleDefinition* nucleon, G4double ekin); 85 86 G4double HadronNucleonXscEL(const G4ParticleDefinition* theParticle, 87 const G4ParticleDefinition* nucleon, G4double ekin); 88 89 G4double CoulombBarrier(const G4ParticleDefinition* theParticle, 90 const G4ParticleDefinition* nucleon, G4double ekin); 91 92 // Xsc for G4DynamicParticle projectile 93 inline G4double GetHadronNucleonXscEL(const G4DynamicParticle* dp, 94 const G4ParticleDefinition* p) 95 { return HadronNucleonXscEL(dp->GetDefinition(), p, dp->GetKineticEnergy()); } 96 97 inline G4double GetHadronNucleonXscPDG(const G4DynamicParticle* dp, 98 const G4ParticleDefinition* p) 99 { return HadronNucleonXscPDG(dp->GetDefinition(), p, dp->GetKineticEnergy()); } 100 101 inline G4double GetHadronNucleonXscNS(const G4DynamicParticle* dp, 102 const G4ParticleDefinition* p) 103 { return HadronNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); } 104 105 inline G4double GetKaonNucleonXscGG(const G4DynamicParticle* dp, 106 const G4ParticleDefinition* p) 107 { return KaonNucleonXscGG(dp->GetDefinition(), p, dp->GetKineticEnergy()); } 108 109 inline G4double GetHyperonNucleonXscNS(const G4DynamicParticle* dp, 110 const G4ParticleDefinition* p) 111 { return HyperonNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); } 112 113 inline G4double GetHadronNucleonXscVU(const G4DynamicParticle* dp, 114 const G4ParticleDefinition* p) 115 { return HadronNucleonXscVU(dp->GetDefinition(), p, dp->GetKineticEnergy()); } 116 117 inline G4double GetCoulombBarrier(const G4DynamicParticle* dp, 118 const G4ParticleDefinition* p) 119 { return CoulombBarrier(dp->GetDefinition(), p, dp->GetKineticEnergy()); } 120 121 // Xsc access 122 inline G4double GetTotalHadronNucleonXsc() const { return fTotalXsc; }; 123 inline G4double GetElasticHadronNucleonXsc() const { return fElasticXsc; }; 124 inline G4double GetInelasticHadronNucleonXsc() const { return fInelasticXsc; }; 125 126 void CrossSectionDescription(std::ostream&) const; 127 128 private: 129 130 inline G4double CalcMandelstamS(G4double ekin1, G4double mass1, G4double mass2) 131 { return mass1*mass1 + mass2*mass2 + 2*mass2*(ekin1 + mass1); } 132 133 inline G4double CalculateEcmValue(G4double ekin1, G4double mass1, G4double mass2) 134 { return std::sqrt(CalcMandelstamS(ekin1, mass1, mass2)); }; 135 136 G4double fTotalXsc{0.0}; 137 G4double fElasticXsc{0.0}; 138 G4double fInelasticXsc{0.0}; 139 G4Pow* g4calc; 140 141 const G4ParticleDefinition* theProton; 142 const G4ParticleDefinition* theNeutron; 143 const G4ParticleDefinition* thePiPlus; 144 // strange 145 const G4ParticleDefinition* theKPlus; 146 const G4ParticleDefinition* theKMinus; 147 const G4ParticleDefinition* theK0S; 148 const G4ParticleDefinition* theK0L; 149 }; 150 151 #endif 152