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 nucleus-nucleus total, inelastic, production, 27 // elastic and quasi-elastic cross-sections 28 // based on parametrisations of nucleon-nucleon 29 // cross-sections in 30 // the framework of simplified Glauber-Gribov approach 31 // 32 // 33 // 24.11.08 V. Grichine - first implementation based on 34 // G4GlauberGribovCrossSection 35 // 36 // 04.09.18 V. Ivantchenko Major revision of interfaces and implementation 37 // 27.05.19 V. Ivantchenko Removed obsolete methods and members 38 // 39 40 #ifndef G4ComponentGGNuclNuclXsc_h 41 #define G4ComponentGGNuclNuclXsc_h 42 43 #include "globals.hh" 44 #include "G4VComponentCrossSection.hh" 45 #include "G4DynamicParticle.hh" 46 47 class G4ParticleDefinition; 48 class G4HadronNucleonXsc; 49 class G4ComponentGGHadronNucleusXsc; 50 class G4Material; 51 52 class G4ComponentGGNuclNuclXsc : public G4VComponentCrossSection 53 { 54 public: 55 56 G4ComponentGGNuclNuclXsc(); 57 ~G4ComponentGGNuclNuclXsc() override; 58 59 // virtual interface methods 60 G4double GetTotalElementCrossSection(const G4ParticleDefinition* aParticle, 61 G4double kinEnergy, 62 G4int Z, G4double A) final; 63 64 G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition* aParticle, 65 G4double kinEnergy, 66 G4int Z, G4int A) final; 67 68 G4double GetInelasticElementCrossSection(const G4ParticleDefinition* aParticle, 69 G4double kinEnergy, 70 G4int Z, G4double A) final; 71 72 G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 73 G4double kinEnergy, 74 G4int Z, G4int A) final; 75 76 G4double GetElasticElementCrossSection(const G4ParticleDefinition* aParticle, 77 G4double kinEnergy, 78 G4int Z, G4double A) final; 79 80 G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 81 G4double kinEnergy, 82 G4int Z, G4int A) final; 83 84 G4double ComputeQuasiElasticRatio(const G4ParticleDefinition* aParticle, 85 G4double kinEnergy, 86 G4int Z, G4int A) final; 87 88 void BuildPhysicsTable(const G4ParticleDefinition&) final; 89 90 void DumpPhysicsTable(const G4ParticleDefinition&) final; 91 92 void Description(std::ostream&) const final; 93 94 inline G4double GetZandACrossSection(const G4DynamicParticle*, 95 G4int Z, G4int A); 96 97 inline G4double GetCoulombBarier(const G4DynamicParticle*, 98 G4double Z, G4double A, 99 G4double pR, G4double tR); 100 101 G4double ComputeCoulombBarier(const G4ParticleDefinition* aParticle, 102 G4double kinEnergy, G4int Z, G4int A, 103 G4double pR, G4double tR); 104 105 G4double GetRatioSD(const G4DynamicParticle*, G4double At, G4double Zt); 106 G4double GetRatioQE(const G4DynamicParticle*, G4double At, G4double Zt); 107 108 // main access methods 109 inline G4double GetElasticGlauberGribov(const G4DynamicParticle*,G4int Z, G4int A); 110 inline G4double GetInelasticGlauberGribov(const G4DynamicParticle*,G4int Z, G4int A); 111 112 inline G4double GetTotalGlauberGribovXsc() const { return fTotalXsc; }; 113 inline G4double GetElasticGlauberGribovXsc() const { return fElasticXsc; }; 114 inline G4double GetInelasticGlauberGribovXsc() const { return fInelasticXsc; }; 115 inline G4double GetProductionGlauberGribovXsc() const { return fProductionXsc; }; 116 inline G4double GetDiffractionGlauberGribovXsc() const { return fDiffractionXsc; }; 117 118 G4ComponentGGNuclNuclXsc& operator= 119 (const G4ComponentGGNuclNuclXsc &right) = delete; 120 G4ComponentGGNuclNuclXsc(const G4ComponentGGNuclNuclXsc&) = delete; 121 122 private: 123 124 // Glauber-Gribov cross section 125 void ComputeCrossSections(const G4ParticleDefinition* aParticle, 126 G4double kinEnergy, G4int Z, G4int A); 127 128 G4double fTotalXsc{0.0}; 129 G4double fElasticXsc{0.0}; 130 G4double fInelasticXsc{0.0}; 131 G4double fProductionXsc{0.0}; 132 G4double fDiffractionXsc{0.0}; 133 // Cache 134 G4double fEnergy{0.0}; 135 136 const G4ParticleDefinition* theProton; 137 const G4ParticleDefinition* theNeutron; 138 const G4ParticleDefinition* theLambda; 139 140 G4ComponentGGHadronNucleusXsc* fHadrNucl; 141 G4HadronNucleonXsc* fHNXsc; 142 143 // Cache 144 const G4ParticleDefinition* fParticle{nullptr}; 145 G4int fZ{0}; 146 G4int fA{0}; 147 }; 148 149 inline G4double 150 G4ComponentGGNuclNuclXsc::GetElasticGlauberGribov(const G4DynamicParticle* dp, 151 G4int Z, G4int A) 152 { 153 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(), Z, A); 154 return fElasticXsc; 155 } 156 157 inline G4double 158 G4ComponentGGNuclNuclXsc::GetInelasticGlauberGribov(const G4DynamicParticle* dp, 159 G4int Z, G4int A) 160 { 161 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(), Z, A); 162 return fInelasticXsc; 163 } 164 165 inline G4double 166 G4ComponentGGNuclNuclXsc::GetZandACrossSection(const G4DynamicParticle* dp, 167 G4int Z, G4int A) 168 { 169 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(), Z, A); 170 return fInelasticXsc; 171 } 172 173 inline G4double 174 G4ComponentGGNuclNuclXsc::GetCoulombBarier(const G4DynamicParticle* dp, 175 G4double Z, G4double A, 176 G4double pR, G4double tR) 177 { 178 return ComputeCoulombBarier(dp->GetDefinition(), dp->GetKineticEnergy(), 179 G4lrint(Z), G4lrint(A), pR, tR); 180 } 181 182 #endif 183