File indexing completed on 2025-08-02 08:29:07
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 #ifndef G4ParticleHPIsoProbabilityTable_h
0049 #define G4ParticleHPIsoProbabilityTable_h 1
0050
0051 #include "globals.hh"
0052
0053 #include <vector>
0054 #include <thread>
0055 #include <map>
0056
0057 class G4ParticleHPVector;
0058 class G4DynamicParticle;
0059 class G4Element;
0060
0061 class G4ParticleHPIsoProbabilityTable
0062 {
0063 public:
0064
0065 G4ParticleHPIsoProbabilityTable() = default;
0066 virtual ~G4ParticleHPIsoProbabilityTable();
0067 virtual void Init( G4int, G4int, G4int, G4double, const G4String& );
0068 virtual G4double GetCorrelatedIsoCrossSectionPT( const G4DynamicParticle*, G4int, const G4Element*,
0069 G4double&, G4double&, std::thread::id& );
0070 virtual G4double GetIsoCrossSectionPT( const G4DynamicParticle*, G4int, const G4Element*, G4double&,
0071 std::map< std::thread::id, G4double >&, std::thread::id& );
0072
0073 protected:
0074
0075 G4double GetDopplerBroadenedElasticXS( const G4DynamicParticle*, G4int, G4int );
0076 G4double GetDopplerBroadenedCaptureXS( const G4DynamicParticle*, G4int, G4int );
0077 G4double GetDopplerBroadenedFissionXS( const G4DynamicParticle*, G4int, G4int );
0078 G4double GetDopplerBroadenedInelasticXS( const G4DynamicParticle*, G4int, G4int );
0079
0080 G4int Z = 0;
0081 G4int A = 0;
0082 G4int m = -1;
0083 G4double T = -1.;
0084
0085 G4double Emin = DBL_MAX;
0086 G4double Emax = 0.;
0087 G4int nEnergies = 0;
0088
0089 std::map< std::thread::id, G4double > energy_cache;
0090 std::map< std::thread::id, G4double > xsela_cache;
0091 std::map< std::thread::id, G4double > xscap_cache;
0092 std::map< std::thread::id, G4double > xsfiss_cache;
0093
0094 G4ParticleHPVector* theEnergies = nullptr;
0095 std::vector< std::vector< G4double >* >* theProbabilities = nullptr;
0096 std::vector< std::vector< G4double >* >* theElasticData = nullptr;
0097 std::vector< std::vector< G4double >* >* theCaptureData = nullptr;
0098 std::vector< std::vector< G4double >* >* theFissionData = nullptr;
0099 std::vector< std::vector< G4double >* >* theInelasticData = nullptr;
0100
0101 G4String filename;
0102 };
0103
0104 #endif