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 #ifndef G4AntiNuclElastic_h
00039 #define G4AntiNuclElastic_h 1
00040
00041 #include "G4HadronElastic.hh"
00042 #include "globals.hh"
00043 #include "G4Nucleus.hh"
00044 #include "G4ComponentAntiNuclNuclearXS.hh"
00045
00046 using namespace std;
00047
00048 class G4ParticleDefinition;
00049
00050 class G4AntiNuclElastic : public G4HadronElastic
00051 {
00052 public:
00053
00054 G4AntiNuclElastic();
00055
00056 virtual ~G4AntiNuclElastic();
00057
00058 virtual G4double SampleInvariantT(const G4ParticleDefinition* p,
00059 G4double plab,
00060 G4int Z, G4int A);
00061
00062 G4double SampleThetaCMS(const G4ParticleDefinition* p, G4double plab,
00063 G4int Z, G4int A);
00064
00065 G4double SampleThetaLab(const G4ParticleDefinition* p,
00066 G4double plab, G4int Z, G4int A);
00067
00068
00069 G4double CalculateParticleBeta( const G4ParticleDefinition* particle,
00070 G4double momentum );
00071
00072 G4double CalculateZommerfeld( G4double beta, G4double Z1, G4double Z2 );
00073
00074 G4double CalculateAm( G4double momentum, G4double n, G4double Z);
00075
00076 G4double DampFactor(G4double z);
00077
00078 G4double BesselJzero(G4double z);
00079
00080 G4double BesselJone(G4double z);
00081
00082 G4double BesselOneByArg(G4double z);
00083
00084 G4double GetcosTeta1( G4double plab, G4int A);
00085
00086 inline G4ComponentAntiNuclNuclearXS* GetComponentCrossSection();
00087
00088 private:
00089
00090
00091 G4AntiNuclElastic & operator=(const G4AntiNuclElastic &right);
00092 G4AntiNuclElastic(const G4AntiNuclElastic&);
00093
00094 G4ComponentAntiNuclNuclearXS* cs;
00095
00096 G4double fTetaCMS;
00097 G4double fThetaLab;
00098 const G4ParticleDefinition* fParticle;
00099 G4double fWaveVector;
00100 G4double fBeta;
00101 G4double fZommerfeld;
00102 G4double fAm;
00103 G4double fRa;
00104 G4double fRef;
00105 G4double fceff;
00106
00107 G4ThreeVector fbst;
00108 G4double fptot;
00109 G4double fTmax;
00110
00111 G4ParticleDefinition* theAProton;
00112 G4ParticleDefinition* theANeutron;
00113 G4ParticleDefinition* theADeuteron;
00114 G4ParticleDefinition* theATriton;
00115 G4ParticleDefinition* theAAlpha;
00116 G4ParticleDefinition* theAHe3;
00117
00118 G4ParticleDefinition* theProton;
00119 G4ParticleDefinition* theNeutron;
00120 G4ParticleDefinition* theDeuteron;
00121 G4ParticleDefinition* theAlpha;
00122
00123 };
00124
00125 inline G4ComponentAntiNuclNuclearXS*
00126 G4AntiNuclElastic::GetComponentCrossSection()
00127 {
00128 return cs;
00129 }
00130
00131 #endif
00132
00133