00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef G4NeutronHPThermalScatteringData_h
00027 #define G4NeutronHPThermalScatteringData_h 1
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #include "G4NeutronHPThermalScatteringNames.hh"
00047 #include "G4NeutronHPVector.hh"
00048 #include "G4VCrossSectionDataSet.hh"
00049 #include "G4DynamicParticle.hh"
00050 #include "G4Element.hh"
00051 #include "G4Material.hh"
00052 #include "G4ParticleDefinition.hh"
00053
00054
00055 #include <map>
00056 #include <vector>
00057
00058 class G4NeutronHPThermalScatteringData : public G4VCrossSectionDataSet
00059 {
00060
00061 public:
00062
00063 G4NeutronHPThermalScatteringData();
00064
00065 ~G4NeutronHPThermalScatteringData();
00066
00067 G4bool IsIsoApplicable( const G4DynamicParticle* ,
00068 G4int , G4int ,
00069 const G4Element* ,
00070 const G4Material* );
00071
00072 G4double GetIsoCrossSection( const G4DynamicParticle* ,
00073 G4int , G4int ,
00074 const G4Isotope* ,
00075 const G4Element* ,
00076 const G4Material* );
00077
00078 G4bool IsApplicable(const G4DynamicParticle*, const G4Element*);
00079
00080
00081
00082
00083 G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material* );
00084 G4double GetInelasticCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*);
00085 G4double GetCoherentCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*);
00086 G4double GetIncoherentCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*);
00087
00088 void BuildPhysicsTable(const G4ParticleDefinition&);
00089
00090 void DumpPhysicsTable(const G4ParticleDefinition&);
00091
00092 private:
00093
00094 G4double GetX ( const G4DynamicParticle* , G4double aT , std::map< G4double , G4NeutronHPVector* >* );
00095
00096 G4double emax;
00097
00098 void clearCurrentXSData();
00099
00100
00101 std::map< G4int , std::map< G4double , G4NeutronHPVector* >* > coherent;
00102 std::map< G4int , std::map< G4double , G4NeutronHPVector* >* > incoherent;
00103 std::map< G4int , std::map< G4double , G4NeutronHPVector* >* > inelastic;
00104
00105 std::map< G4double , G4NeutronHPVector* >* readData ( G4String );
00106
00107 std::vector < G4int > indexOfThermalElement;
00108 G4NeutronHPThermalScatteringNames* names;
00109
00110
00111
00112 G4double ke_cache;
00113 G4double xs_cache;
00114 const G4Element* element_cache;
00115 const G4Material* material_cache;
00116
00117 std::map < std::pair < const G4Material* , const G4Element* > , G4int > dic;
00118 G4int getTS_ID( const G4Material* , const G4Element* );
00119
00120 };
00121
00122 #endif