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