00001 // 00002 // ******************************************************************** 00003 // * License and Disclaimer * 00004 // * * 00005 // * The Geant4 software is copyright of the Copyright Holders of * 00006 // * the Geant4 Collaboration. It is provided under the terms and * 00007 // * conditions of the Geant4 Software License, included in the file * 00008 // * LICENSE and available at http://cern.ch/geant4/license . These * 00009 // * include a list of copyright holders. * 00010 // * * 00011 // * Neither the authors of this software system, nor their employing * 00012 // * institutes,nor the agencies providing financial support for this * 00013 // * work make any representation or warranty, express or implied, * 00014 // * regarding this software system or assume any liability for its * 00015 // * use. Please see the license in the file LICENSE and URL above * 00016 // * for the full disclaimer and the limitation of liability. * 00017 // * * 00018 // * This code implementation is the result of the scientific and * 00019 // * technical work of the GEANT4 collaboration. * 00020 // * By using, copying, modifying or distributing the software (or * 00021 // * any work based on the software) you agree to acknowledge its * 00022 // * use in resulting scientific publications, and indicate your * 00023 // * acceptance of all terms of the Geant4 Software license. * 00024 // ******************************************************************** 00025 // 00026 #ifndef G4PiNuclearCrossSection_h 00027 #define G4PiNuclearCrossSection_h 00028 00029 #include "G4VCrossSectionDataSet.hh" 00030 00031 #include "globals.hh" 00032 #include "G4PionMinus.hh" 00033 #include "G4PionPlus.hh" 00034 #include "G4PiData.hh" 00035 #include "G4HadTmpUtil.hh" 00036 00037 class G4PiNuclearCrossSection : public G4VCrossSectionDataSet 00038 { 00039 public: 00040 00041 G4PiNuclearCrossSection(); 00042 virtual ~G4PiNuclearCrossSection(); 00043 00044 virtual 00045 G4bool IsElementApplicable(const G4DynamicParticle* aParticle, 00046 G4int Z, const G4Material*); 00047 00048 virtual 00049 G4double GetElementCrossSection(const G4DynamicParticle* particle, 00050 G4int Z, const G4Material*); 00051 00052 virtual 00053 void BuildPhysicsTable(const G4ParticleDefinition&); 00054 00055 virtual void CrossSectionDescription(std::ostream&) const; 00056 00057 inline G4double GetTotalXsc() {return fTotalXsc;}; 00058 inline G4double GetElasticXsc() {return fElasticXsc;}; 00059 00060 private: 00061 G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2); 00062 00063 // add Hydrogen from PDG group. 00064 00065 static const G4double e1[38]; 00066 static const G4double he_t[38]; 00067 static const G4double he_in[38]; 00068 static const G4double be_m_t[38]; 00069 static const G4double be_m_in[38]; 00070 static const G4double be_p_t[24]; 00071 static const G4double be_p_in[24]; 00072 static const G4double e2[39]; 00073 static const G4double c_m_t[39]; 00074 static const G4double c_m_in[39]; 00075 static const G4double c_p_t[24]; 00076 static const G4double c_p_in[24]; 00077 static const G4double n_m_t[39]; 00078 static const G4double n_m_in[39]; 00079 static const G4double n_p_t[27]; 00080 static const G4double n_p_in[27]; 00081 static const G4double e3[31]; 00082 static const G4double o_m_t[31]; 00083 static const G4double o_m_in[31]; 00084 static const G4double o_p_t[20]; 00085 static const G4double o_p_in[20]; 00086 static const G4double na_m_t[31]; 00087 static const G4double na_m_in[31]; 00088 static const G4double na_p_t[22]; 00089 static const G4double na_p_in[22]; 00090 static const G4double e3_1[31]; 00091 static const G4double al_m_t[31]; 00092 static const G4double al_m_in[31]; 00093 static const G4double al_p_t[21]; 00094 static const G4double al_p_in[21]; 00095 static const G4double ca_m_t[31]; 00096 static const G4double ca_m_in[31]; 00097 static const G4double ca_p_t[23]; 00098 static const G4double ca_p_in[23]; 00099 00100 static const G4double e4[32]; 00101 static const G4double fe_m_t[32]; 00102 static const G4double fe_m_in[32]; 00103 static const G4double fe_p_t[25]; 00104 static const G4double fe_p_in[25]; 00105 static const G4double cu_m_t[32]; 00106 static const G4double cu_m_in[32]; 00107 static const G4double cu_p_t[25]; 00108 static const G4double cu_p_in[25]; 00109 static const G4double e5[34]; 00110 static const G4double mo_m_t[34]; 00111 static const G4double mo_m_in[34]; 00112 static const G4double mo_p_t[27]; 00113 static const G4double mo_p_in[27]; 00114 static const G4double cd_m_t[34]; 00115 static const G4double cd_m_in[34]; 00116 static const G4double cd_p_t[28]; 00117 static const G4double cd_p_in[28]; 00118 static const G4double e6[35]; 00119 static const G4double sn_m_t[35]; 00120 static const G4double sn_m_in[35]; 00121 static const G4double sn_p_t[29]; 00122 static const G4double sn_p_in[29]; 00123 static const G4double w_m_t[35]; 00124 static const G4double w_m_in[35]; 00125 static const G4double w_p_t[30]; 00126 static const G4double w_p_in[30]; 00127 static const G4double e7[35]; 00128 static const G4double pb_m_t[35]; 00129 static const G4double pb_m_in[35]; 00130 static const G4double pb_p_t[30]; 00131 static const G4double pb_p_in[30]; 00132 static const G4double u_m_t[35]; 00133 static const G4double u_m_in[35]; 00134 static const G4double u_p_t[30]; 00135 static const G4double u_p_in[30]; 00136 00137 std::vector<G4int> theZ; 00138 std::vector<G4PiData *> thePipData; 00139 std::vector<G4PiData *> thePimData; 00140 00141 // cross sections 00142 00143 G4double fTotalXsc; 00144 G4double fElasticXsc; 00145 00146 }; 00147 00148 #endif