G4GlauberGribovCrossSection.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 // Calculation of the total, elastic and inelastic cross-sections
00027 // based on parametrisations of (proton, pion, kaon, photon) nucleon
00028 // cross-sections and the hadron-nucleous cross-section model in 
00029 // the framework of Glauber-Gribov approach
00030 //
00031 //
00032 //
00033 //
00034 //
00035 // 17.07.06 V. Grichine - first implementation
00036 // 22.01.07 V.Ivanchenko - add interface with Z and A
00037 // 05.03.07 V.Ivanchenko - add IfZAApplicable
00038 // 06.03.07 V.Ivanchenko - add GetElasticGlauberGribov and GetElasticGlauberGribov
00039 //                         for combined dataset
00040 //
00041 //
00042 
00043 #ifndef G4GlauberGribovCrossSection_h
00044 #define G4GlauberGribovCrossSection_h 1
00045 
00046 #include "globals.hh"
00047 #include "G4Proton.hh"
00048 #include "G4Nucleus.hh"
00049 
00050 #include "G4VCrossSectionDataSet.hh"
00051 
00052 class G4ParticleDefinition;
00053 class G4HadronNucleonXsc;
00054 
00055 class G4GlauberGribovCrossSection : public G4VCrossSectionDataSet
00056 {
00057 public:
00058 
00059   G4GlauberGribovCrossSection ();
00060   virtual ~G4GlauberGribovCrossSection ();
00061 
00062     static const char* Default_Name() {return "Glauber-Gribov";}
00063    
00064   virtual
00065   G4bool IsIsoApplicable(const G4DynamicParticle* aDP, G4int Z, G4int A, 
00066                          const G4Element* elm = 0,
00067                          const G4Material* mat = 0);
00068 
00069   virtual
00070   G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,  
00071                               const G4Isotope* iso = 0,
00072                               const G4Element* elm = 0,
00073                               const G4Material* mat = 0);
00074 
00075   G4double GetRatioSD(const G4DynamicParticle*, G4int At, G4int Zt);
00076   G4double GetRatioQE(const G4DynamicParticle*, G4int At, G4int Zt);
00077 
00078   G4double GetHadronNucleonXsc(const G4DynamicParticle*, const G4Element*);
00079   G4double GetHadronNucleonXsc(const G4DynamicParticle*, G4int At, G4int Zt);
00080 
00081   G4double GetHadronNucleonXscPDG(const G4DynamicParticle*, const G4Element*);
00082   G4double GetHadronNucleonXscPDG(const G4DynamicParticle*, G4int At, G4int Zt);
00083   G4double GetHadronNucleonXscNS(const G4DynamicParticle*, const G4Element*);
00084   G4double GetHadronNucleonXscNS(const G4DynamicParticle*, G4int At, G4int Zt);
00085   G4double GetKaonNucleonXscVector(const G4DynamicParticle*, G4int At, G4int Zt);
00086 
00087   G4double GetHNinelasticXsc(const G4DynamicParticle*, const G4Element*);
00088   G4double GetHNinelasticXsc(const G4DynamicParticle*, G4int At, G4int Zt);
00089   G4double GetHNinelasticXscVU(const G4DynamicParticle*, G4int At, G4int Zt);
00090 
00091   G4double CalculateEcmValue ( const G4double , const G4double , const G4double ); 
00092 
00093   G4double CalcMandelstamS( const G4double , const G4double , const G4double );
00094 
00095   G4double GetNucleusRadius(const G4DynamicParticle*, const G4Element*);
00096   G4double GetNucleusRadius(G4int At);
00097 
00098   virtual void CrossSectionDescription(std::ostream&) const;
00099 
00100   inline G4double GetElasticGlauberGribov(const G4DynamicParticle*, G4int Z, G4int A);
00101   inline G4double GetInelasticGlauberGribov(const G4DynamicParticle*, G4int Z, G4int A);
00102 
00103   inline G4double GetTotalGlauberGribovXsc()    { return fTotalXsc;     }; 
00104   inline G4double GetElasticGlauberGribovXsc()  { return fElasticXsc;   }; 
00105   inline G4double GetInelasticGlauberGribovXsc(){ return fInelasticXsc; }; 
00106   inline G4double GetProductionGlauberGribovXsc(){ return fProductionXsc; }; 
00107   inline G4double GetDiffractionGlauberGribovXsc(){ return fDiffractionXsc; }; 
00108   inline G4double GetRadiusConst()              { return fRadiusConst;  }; 
00109 
00110   inline G4double GetParticleBarCorTot(const G4ParticleDefinition* theParticle, G4int Z);
00111   inline G4double GetParticleBarCorIn(const G4ParticleDefinition* theParticle, G4int Z);
00112 
00113   inline void SetEnergyLowerLimit(G4double E ){fLowerLimit=E;};
00114 
00115 private:
00116 
00117   const G4double fUpperLimit;
00118   G4double fLowerLimit; 
00119   const G4double fRadiusConst;
00120 
00121   static const G4double fNeutronBarCorrectionTot[93];
00122   static const G4double fNeutronBarCorrectionIn[93];
00123 
00124   static const G4double fProtonBarCorrectionTot[93];
00125   static const G4double fProtonBarCorrectionIn[93];
00126 
00127   static const G4double fPionPlusBarCorrectionTot[93];
00128   static const G4double fPionPlusBarCorrectionIn[93];
00129 
00130   static const G4double fPionMinusBarCorrectionTot[93];
00131   static const G4double fPionMinusBarCorrectionIn[93];
00132 
00133   G4double fTotalXsc, fElasticXsc, fInelasticXsc, fProductionXsc, fDiffractionXsc;
00134   G4double fHadronNucleonXsc;
00135  
00136   G4ParticleDefinition* theGamma;
00137   G4ParticleDefinition* theProton;
00138   G4ParticleDefinition* theNeutron;
00139   G4ParticleDefinition* theAProton;
00140   G4ParticleDefinition* theANeutron;
00141   G4ParticleDefinition* thePiPlus;
00142   G4ParticleDefinition* thePiMinus;
00143   G4ParticleDefinition* thePiZero;
00144   G4ParticleDefinition* theKPlus;
00145   G4ParticleDefinition* theKMinus;
00146   G4ParticleDefinition* theK0S;
00147   G4ParticleDefinition* theK0L;
00148   G4ParticleDefinition* theL;
00149   G4ParticleDefinition* theAntiL;
00150   G4ParticleDefinition* theSPlus;
00151   G4ParticleDefinition* theASPlus;
00152   G4ParticleDefinition* theSMinus;
00153   G4ParticleDefinition* theASMinus;
00154   G4ParticleDefinition* theS0;
00155   G4ParticleDefinition* theAS0;
00156   G4ParticleDefinition* theXiMinus;
00157   G4ParticleDefinition* theXi0;
00158   G4ParticleDefinition* theAXiMinus;
00159   G4ParticleDefinition* theAXi0;
00160   G4ParticleDefinition* theOmega;
00161   G4ParticleDefinition* theAOmega;
00162   G4ParticleDefinition* theD;
00163   G4ParticleDefinition* theT;
00164   G4ParticleDefinition* theA;
00165   G4ParticleDefinition* theHe3;
00166 
00167   G4HadronNucleonXsc* hnXsc;
00168 
00169 };
00170 
00172 //
00173 // Inlines
00174 
00175 inline
00176 G4double
00177 G4GlauberGribovCrossSection::GetElasticGlauberGribov(const G4DynamicParticle* dp,
00178                                                      G4int Z, G4int A)
00179 {
00180   GetIsoCrossSection(dp, Z, A);
00181   return fElasticXsc;
00182 }
00183 
00185 
00186 inline
00187 G4double
00188 G4GlauberGribovCrossSection::GetInelasticGlauberGribov(const G4DynamicParticle* dp,
00189                                                        G4int Z, G4int A)
00190 {
00191   GetIsoCrossSection(dp, Z, A);
00192   return fInelasticXsc;
00193 }
00194 
00196 //
00197 // return correction at Tkin = 90*GeV GG -> Barashenkov tot xsc, when it 
00198 // is available, else return 1.0
00199 
00200 
00201 inline G4double G4GlauberGribovCrossSection::GetParticleBarCorTot( 
00202                           const G4ParticleDefinition* theParticle, G4int Z)
00203 {
00204   if(Z >= 2 && Z <= 92)
00205   {
00206     if(      theParticle == theProton ) return fProtonBarCorrectionTot[Z]; 
00207     else if( theParticle == theNeutron) return fNeutronBarCorrectionTot[Z]; 
00208     else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionTot[Z];
00209     else if( theParticle == thePiMinus) return fPionMinusBarCorrectionTot[Z];
00210     else return 1.0;
00211   }
00212   else return 1.0;
00213 }
00214 
00216 //
00217 // return correction at Tkin = 90*GeV GG -> Barashenkov in xsc, when it 
00218 // is available, else return 1.0
00219 
00220 
00221 inline G4double G4GlauberGribovCrossSection::GetParticleBarCorIn( 
00222                           const G4ParticleDefinition* theParticle, G4int Z)
00223 {
00224   if(Z >= 2 && Z <= 92)
00225   {
00226     if(      theParticle == theProton ) return fProtonBarCorrectionIn[Z]; 
00227     else if( theParticle == theNeutron) return fNeutronBarCorrectionIn[Z]; 
00228     else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionIn[Z];
00229     else if( theParticle == thePiMinus) return fPionMinusBarCorrectionIn[Z];
00230     else return 1.0;
00231   }
00232   else return 1.0;
00233 }
00234 
00235 #endif

Generated on Mon May 27 17:48:23 2013 for Geant4 by  doxygen 1.4.7