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 G4GGNuclNuclCrossSection_h
00038 #define G4GGNuclNuclCrossSection_h
00039
00040 #include "globals.hh"
00041 #include "G4Proton.hh"
00042 #include "G4Nucleus.hh"
00043 #include "G4NistManager.hh"
00044
00045 #include "G4VCrossSectionDataSet.hh"
00046
00047 class G4ParticleDefinition;
00048 class G4HadronNucleonXsc;
00049
00050 class G4GGNuclNuclCrossSection : public G4VCrossSectionDataSet
00051 {
00052 public:
00053
00054 G4GGNuclNuclCrossSection ();
00055 virtual ~G4GGNuclNuclCrossSection ();
00056
00057 static const char* Default_Name() {return "Glauber-Gribov nucleus nucleus";}
00058
00059
00060 virtual
00061 G4bool IsElementApplicable(const G4DynamicParticle*,
00062 G4int Z, const G4Material*);
00063
00064 virtual
00065 G4double GetElementCrossSection(const G4DynamicParticle*,
00066 G4int Z, const G4Material*);
00067
00068 G4double GetZandACrossSection(const G4DynamicParticle*,
00069 G4int Z, G4int A);
00070
00071 G4double GetCoulombBarier(const G4DynamicParticle*,
00072 G4double Z, G4double A, G4double pR, G4double tR);
00073
00074 virtual
00075 void BuildPhysicsTable(const G4ParticleDefinition&)
00076 {}
00077
00078 virtual
00079 void DumpPhysicsTable(const G4ParticleDefinition&)
00080 {G4cout << "G4NuclNuclCrossSection: uses Glauber-Gribov formula"<<G4endl;}
00081
00082 virtual void CrossSectionDescription(std::ostream&) const;
00083
00084 G4double GetRatioSD(const G4DynamicParticle*, G4double At, G4double Zt);
00085 G4double GetRatioQE(const G4DynamicParticle*, G4double At, G4double Zt);
00086
00087 G4double GetHadronNucleonXsc(const G4DynamicParticle*, const G4Element*);
00088 G4double GetHadronNucleonXsc(const G4DynamicParticle*, G4int At, G4int Zt);
00089
00090
00091 G4double GetHadronNucleonXscPDG(G4ParticleDefinition*,G4double sMand, G4ParticleDefinition*);
00092 G4double GetHadronNucleonXscNS(G4ParticleDefinition*,G4double pTkin, G4ParticleDefinition*);
00093
00094 G4double GetHNinelasticXscVU(const G4DynamicParticle*, G4int At, G4int Zt);
00095 G4double CalculateEcmValue(const G4double, const G4double, const G4double);
00096 G4double CalcMandelstamS( const G4double , const G4double , const G4double );
00097
00098 G4double GetElasticGlauberGribov(const G4DynamicParticle*,G4int Z, G4int A);
00099 G4double GetInelasticGlauberGribov(const G4DynamicParticle*,G4int Z, G4int A);
00100
00101 G4double GetTotalGlauberGribovXsc() { return fTotalXsc; };
00102 G4double GetElasticGlauberGribovXsc() { return fElasticXsc; };
00103 G4double GetInelasticGlauberGribovXsc(){ return fInelasticXsc; };
00104 G4double GetProductionGlauberGribovXsc(){ return fProductionXsc; };
00105 G4double GetDiffractionGlauberGribovXsc(){ return fDiffractionXsc; };
00106 G4double GetRadiusConst() { return fRadiusConst; };
00107
00108 G4double GetNucleusRadius(const G4DynamicParticle*, const G4Element*);
00109
00110 G4double GetNucleusRadius(G4double Zt, G4double At);
00111 G4double GetNucleusRadiusGG(G4double At);
00112 G4double GetNucleusRadiusDE(G4double Z, G4double A);
00113 G4double GetNucleusRadiusRMS(G4double Z, G4double A);
00114
00115 inline void SetEnergyLowerLimit(G4double E ){fLowerLimit=E;};
00116
00117 private:
00118
00119 const G4double fUpperLimit;
00120 G4double fLowerLimit;
00121 const G4double fRadiusConst;
00122
00123 G4double fTotalXsc, fElasticXsc, fInelasticXsc, fProductionXsc, fDiffractionXsc;
00124 G4double fHadronNucleonXsc;
00125
00126 G4ParticleDefinition* theProton;
00127 G4ParticleDefinition* theNeutron;
00128 G4HadronNucleonXsc* hnXsc;
00129 };
00130
00132
00133
00134
00135 inline G4double
00136 G4GGNuclNuclCrossSection::GetElasticGlauberGribov(const G4DynamicParticle* dp,
00137 G4int Z, G4int A)
00138 {
00139 GetZandACrossSection(dp, Z, A);
00140 return fElasticXsc;
00141 }
00142
00144
00145 inline G4double
00146 G4GGNuclNuclCrossSection::GetInelasticGlauberGribov(const G4DynamicParticle* dp,
00147 G4int Z, G4int A)
00148 {
00149 GetZandACrossSection(dp, Z, A);
00150 return fInelasticXsc;
00151 }
00152
00153 #endif