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