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 "G4Threading.hh" 46 #include <vector> 47 #include <vector> 47 48 48 class G4ComponentBarNucleonNucleusXsc : public 49 class G4ComponentBarNucleonNucleusXsc : public G4VComponentCrossSection 49 { 50 { 50 51 51 public: 52 public: 52 53 53 G4ComponentBarNucleonNucleusXsc(); << 54 explicit G4ComponentBarNucleonNucleusXsc(); 54 ~G4ComponentBarNucleonNucleusXsc() override << 55 ~G4ComponentBarNucleonNucleusXsc() override; 55 56 56 G4double GetTotalIsotopeCrossSection(const G 57 G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition* aParticle, 57 G4double kinEnergy, 58 G4double kinEnergy, 58 G4int Z, G4int ) final; 59 G4int Z, G4int ) final; 59 60 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 ) final; 63 64 64 G4double GetInelasticIsotopeCrossSection(con 65 G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 65 G4double kinEnergy, 66 G4double kinEnergy, 66 G4int Z, G4int ) final; 67 G4int Z, G4int ) final; 67 68 68 G4double GetInelasticElementCrossSection(con 69 G4double GetInelasticElementCrossSection(const G4ParticleDefinition* aParticle, 69 G4double kinEnergy, 70 G4double kinEnergy, 70 G4int Z, G4double ) final; 71 G4int Z, G4double ) final; 71 72 72 G4double GetElasticElementCrossSection(const 73 G4double GetElasticElementCrossSection(const G4ParticleDefinition* aParticle, 73 G4double kinEnergy, 74 G4double kinEnergy, 74 G4int Z, G4double ) final; 75 G4int Z, G4double ) final; 75 76 76 G4double GetElasticIsotopeCrossSection(const 77 G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition* aParticle, 77 G4double kinEnergy, 78 G4double kinEnergy, 78 G4int Z, G4int ) final; 79 G4int Z, G4int ) final; 79 80 80 void ComputeCrossSections(const G4ParticleDe 81 void ComputeCrossSections(const G4ParticleDefinition* aParticle, 81 G4double kinEnergy, G4int Z); 82 G4double kinEnergy, G4int Z); 82 83 >> 84 void BuildPhysicsTable(const G4ParticleDefinition&) final; >> 85 83 void Description(std::ostream&) const final; 86 void Description(std::ostream&) const final; 84 87 85 inline G4double GetElementCrossSection(const 88 inline G4double GetElementCrossSection(const G4DynamicParticle* aParticle, G4int Z); 86 inline G4double GetElasticCrossSection(const 89 inline G4double GetElasticCrossSection(const G4DynamicParticle* aParticle, G4int Z); 87 90 88 inline G4double GetTotalXsc() { return f 91 inline G4double GetTotalXsc() { return fTotalXsc; }; 89 inline G4double GetElasticXsc() { return f 92 inline G4double GetElasticXsc() { return fElasticXsc; }; 90 inline G4double GetInelasticXsc() { return f 93 inline G4double GetInelasticXsc() { return fInelasticXsc; }; 91 << 94 92 G4ComponentBarNucleonNucleusXsc& operator= << 93 (const G4ComponentBarNucleonNucleusXsc &righ << 94 G4ComponentBarNucleonNucleusXsc(const G4Comp << 95 << 96 private: 95 private: 97 96 98 G4double Interpolate(G4int Z1, G4int Z2, G4i 97 G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2) const; 99 98 100 void LoadData(); 99 void LoadData(); 101 100 102 // cross sections 101 // cross sections 103 G4double fTotalXsc{0.0}; << 102 G4double fTotalXsc; 104 G4double fInelasticXsc{0.0}; << 103 G4double fInelasticXsc; 105 G4double fElasticXsc{0.0}; << 104 G4double fElasticXsc; 106 105 107 // particles 106 // particles 108 const G4ParticleDefinition* theProton; 107 const G4ParticleDefinition* theProton; 109 const G4ParticleDefinition* theNeutron; 108 const G4ParticleDefinition* theNeutron; 110 109 >> 110 G4bool isMaster; >> 111 >> 112 static G4double theA[93]; 111 static G4double A75[93]; 113 static G4double A75[93]; >> 114 112 static const G4int NZ = 17; 115 static const G4int NZ = 17; 113 static G4int theZ[NZ]; 116 static G4int theZ[NZ]; 114 static std::vector<G4PiData*>* thePData; 117 static std::vector<G4PiData*>* thePData; 115 static std::vector<G4PiData*>* theNData; 118 static std::vector<G4PiData*>* theNData; >> 119 >> 120 #ifdef G4MULTITHREADED >> 121 static G4Mutex barNNXSMutex; >> 122 #endif >> 123 116 }; 124 }; 117 125 118 inline 126 inline 119 G4double G4ComponentBarNucleonNucleusXsc::GetE 127 G4double G4ComponentBarNucleonNucleusXsc::GetElementCrossSection( 120 const G4DynamicParticle* dp, G4int Z) 128 const G4DynamicParticle* dp, G4int Z) 121 { 129 { 122 ComputeCrossSections(dp->GetDefinition(), dp << 130 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(),Z); 123 return fInelasticXsc; 131 return fInelasticXsc; 124 } 132 } 125 133 126 inline 134 inline 127 G4double G4ComponentBarNucleonNucleusXsc::GetE 135 G4double G4ComponentBarNucleonNucleusXsc::GetElasticCrossSection( 128 const G4DynamicParticle* dp, G4int Z) 136 const G4DynamicParticle* dp, G4int Z) 129 { 137 { 130 ComputeCrossSections(dp->GetDefinition(), dp << 138 ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(),Z); 131 return fElasticXsc; 139 return fElasticXsc; 132 } 140 } 133 141 134 #endif 142 #endif 135 143