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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef G4NucleonNuclearCrossSection_h
00038 #define G4NucleonNuclearCrossSection_h
00039
00040 #include "G4VCrossSectionDataSet.hh"
00041 #include "G4ParticleDefinition.hh"
00042
00043 #include "globals.hh"
00044 #include "G4PiData.hh"
00045 #include "G4HadTmpUtil.hh"
00046
00047 class G4NucleonNuclearCrossSection : public G4VCrossSectionDataSet
00048 {
00049 public:
00050
00051 G4NucleonNuclearCrossSection();
00052 virtual ~G4NucleonNuclearCrossSection();
00053
00054 static const char* Default_Name() {return "G4NucleonNuclearCrossSection";}
00055
00056 virtual G4bool IsElementApplicable(const G4DynamicParticle* aParticle,
00057 G4int Z,
00058 const G4Material* mat = 0);
00059
00060 virtual G4double GetElementCrossSection(const G4DynamicParticle* aParticle,
00061 G4int Z,
00062 const G4Material* mat = 0);
00063
00064 virtual void CrossSectionDescription(std::ostream&) const;
00065
00066 inline G4double GetElasticCrossSection(const G4DynamicParticle* aParticle,
00067 G4int Z);
00068
00069 inline G4double GetTotalXsc() { return fTotalXsc; };
00070 inline G4double GetElasticXsc(){ return fElasticXsc; };
00071
00072 private:
00073
00074 G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2);
00075
00076
00077
00078 static const G4double e1[44];
00079
00080 static const G4double he_m_t[44];
00081 static const G4double he_m_in[44];
00082 static const G4double he_p_in[44];
00083
00084 static const G4double be_m_t[44];
00085 static const G4double be_m_in[44];
00086 static const G4double be_p_in[44];
00087
00088 static const G4double c_m_t[44];
00089 static const G4double c_m_in[44];
00090 static const G4double c_p_in[44];
00091
00092
00093 static const G4double e2[44];
00094
00095 static const G4double n_m_t[44];
00096 static const G4double n_m_in[44];
00097 static const G4double n_p_in[44];
00098
00099 static const G4double o_m_t[44];
00100 static const G4double o_m_in[44];
00101 static const G4double o_p_in[44];
00102
00103 static const G4double na_m_t[44];
00104 static const G4double na_m_in[44];
00105 static const G4double na_p_in[44];
00106
00107
00108 static const G4double e3[45];
00109
00110
00111
00112 static const G4double al_m_t[45];
00113 static const G4double al_m_in[45];
00114 static const G4double al_p_in[45];
00115
00116 static const G4double si_m_t[45];
00117 static const G4double si_m_in[45];
00118 static const G4double si_p_in[45];
00119
00120 static const G4double ca_m_t[45];
00121 static const G4double ca_m_in[45];
00122 static const G4double ca_p_in[45];
00123
00124
00125 static const G4double e4[47];
00126
00127 static const G4double fe_m_t[47];
00128 static const G4double fe_m_in[47];
00129 static const G4double fe_p_in[47];
00130
00131 static const G4double cu_m_t[47];
00132 static const G4double cu_m_in[47];
00133 static const G4double cu_p_in[47];
00134
00135 static const G4double mo_m_t[47];
00136 static const G4double mo_m_in[47];
00137 static const G4double mo_p_in[47];
00138
00139
00140 static const G4double e5[48];
00141
00142 static const G4double cd_m_t[48];
00143 static const G4double cd_m_in[48];
00144 static const G4double cd_p_in[48];
00145
00146 static const G4double sn_m_t[48];
00147 static const G4double sn_m_in[48];
00148 static const G4double sn_p_in[48];
00149
00150 static const G4double w_m_t[48];
00151 static const G4double w_m_in[48];
00152 static const G4double w_p_in[48];
00153
00154 static const G4double e6[46];
00155
00156
00157
00158 static const G4double pb_m_t[46];
00159 static const G4double pb_m_in[46];
00160 static const G4double pb_p_in[46];
00161
00162 static const G4double u_m_t[46];
00163 static const G4double u_m_in[46];
00164 static const G4double u_p_in[46];
00165
00166
00167
00168 std::vector< G4int > theZ;
00169 std::vector< G4PiData* > thePipData;
00170 std::vector< G4PiData* > thePimData;
00171
00172
00173
00174 G4double fTotalXsc;
00175 G4double fElasticXsc;
00176
00177
00178 const G4ParticleDefinition* theProton;
00179 const G4ParticleDefinition* theNeutron;
00180
00181 };
00182
00183 inline
00184 G4double G4NucleonNuclearCrossSection::GetElasticCrossSection(
00185 const G4DynamicParticle* dp, G4int Z)
00186 {
00187 GetElementCrossSection(dp, Z);
00188 return fElasticXsc;
00189 }
00190
00191 #endif