G4ComponentBarNucleonNucleusXsc.hh

Go to the documentation of this file.
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 //
00027 // author: Vladimir.Grichine@cern.ch
00028 //
00029 // Implements data from: Barashenkov V.S., Nucleon-Nucleus Cross Section,
00030 // Preprint JINR P2-89-770, p. 12, Dubna 1989 (scanned version from KEK)
00031 // Based on G4NucleonNuclearCrossSection class
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   // virtual interface methods
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   // virtual 
00092   G4bool IsElementApplicable(const G4DynamicParticle* aParticle,
00093                              G4int Z); // , const G4Material* mat = 0);
00094 
00095   // virtual 
00096   G4double GetElementCrossSection(const G4DynamicParticle* aParticle, 
00097                                   G4int Z); // , const G4Material* mat = 0);
00098 
00099   // virtual 
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 // add Hydrogen from PDG group.
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 // static const G4double e3_1[31];
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 // static const G4double e7[46];
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 // vectors for treatment
00203 
00204 std::vector< G4int >     theZ;
00205 std::vector< G4PiData* > thePipData;
00206 std::vector< G4PiData* > thePimData;
00207 
00208   // cross sections
00209 
00210   G4double fTotalXsc;
00211   G4double fInelasticXsc;
00212   G4double fElasticXsc;
00213 
00214   // particles
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

Generated on Mon May 27 17:47:56 2013 for Geant4 by  doxygen 1.4.7