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
00038
00039 #ifndef G4HadronElastic_h
00040 #define G4HadronElastic_h 1
00041
00042 #include "globals.hh"
00043 #include "G4HadronicInteraction.hh"
00044 #include "G4HadProjectile.hh"
00045 #include "G4Nucleus.hh"
00046 #include "G4NucleiProperties.hh"
00047
00048 class G4ParticleDefinition;
00049
00050 class G4HadronElastic : public G4HadronicInteraction
00051 {
00052 public:
00053
00054 G4HadronElastic(const G4String& name = "hElasticLHEP");
00055
00056 virtual ~G4HadronElastic();
00057
00058
00059 virtual G4HadFinalState * ApplyYourself(const G4HadProjectile & aTrack,
00060 G4Nucleus & targetNucleus);
00061
00062
00063 virtual G4double SampleInvariantT(const G4ParticleDefinition* p,
00064 G4double plab,
00065 G4int Z, G4int A);
00066
00067 inline void SetLowestEnergyLimit(G4double value);
00068
00069 inline G4double LowestEnergyLimit() const;
00070
00071 inline G4double ComputeMomentumCMS(const G4ParticleDefinition* p,
00072 G4double plab, G4int Z, G4int A);
00073
00074 virtual void Description() const;
00075
00076 private:
00077
00078 G4ParticleDefinition* theProton;
00079 G4ParticleDefinition* theNeutron;
00080 G4ParticleDefinition* theDeuteron;
00081 G4ParticleDefinition* theAlpha;
00082
00083 G4double lowestEnergyLimit;
00084
00085 };
00086
00087 inline void G4HadronElastic::SetLowestEnergyLimit(G4double value)
00088 {
00089 lowestEnergyLimit = value;
00090 }
00091
00092 inline G4double G4HadronElastic::LowestEnergyLimit() const
00093 {
00094 return lowestEnergyLimit;
00095 }
00096
00097 inline G4double
00098 G4HadronElastic::ComputeMomentumCMS(const G4ParticleDefinition* p,
00099 G4double plab, G4int Z, G4int A)
00100 {
00101 G4double m1 = p->GetPDGMass();
00102 G4double m12= m1*m1;
00103 G4double mass2 = G4NucleiProperties::GetNuclearMass(A, Z);
00104 return plab*mass2/std::sqrt(m12 + mass2*mass2 + 2.*mass2*std::sqrt(m12 + plab*plab));
00105 }
00106
00107 #endif