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 #ifndef G4PomeronCrossSection_h
00027 #define G4PomeronCrossSection_h 1
00028
00029
00030
00031 #include "G4Proton.hh"
00032 #include "G4Neutron.hh"
00033
00034 #include "G4PionPlus.hh"
00035 #include "G4PionMinus.hh"
00036 #include "G4PionZero.hh"
00037
00038 #include "G4KaonPlus.hh"
00039 #include "G4KaonMinus.hh"
00040 #include "G4KaonZero.hh"
00041 #include "G4KaonZeroShort.hh"
00042 #include "G4KaonZeroLong.hh"
00043 #include "G4Gamma.hh"
00044
00045 class G4PomeronCrossSection
00046 {
00047
00048 public:
00049 G4PomeronCrossSection(const G4ParticleDefinition * );
00050 G4PomeronCrossSection(const G4Proton * );
00051 G4PomeronCrossSection(const G4Neutron * );
00052
00053 G4PomeronCrossSection(const G4PionPlus * );
00054 G4PomeronCrossSection(const G4PionMinus * );
00055 G4PomeronCrossSection(const G4PionZero * );
00056
00057 G4PomeronCrossSection(const G4KaonPlus * );
00058 G4PomeronCrossSection(const G4KaonMinus * );
00059 G4PomeronCrossSection(const G4KaonZero * );
00060 G4PomeronCrossSection(const G4KaonZeroLong * );
00061 G4PomeronCrossSection(const G4KaonZeroShort * );
00062
00063 G4PomeronCrossSection(const G4Gamma * );
00064
00065 ~G4PomeronCrossSection();
00066
00067 G4double GetTotalCrossSection(const G4double s);
00068 G4double GetDiffractiveCrossSection(const G4double s);
00069 G4double GetElasticCrossSection(const G4double s);
00070 G4double GetInelasticCrossSection(const G4double s);
00071
00072 G4double GetTotalProbability(const G4double s,
00073 const G4double impactsquare);
00074 G4double GetDiffractiveProbability(const G4double s,
00075 const G4double impactsquare);
00076 G4double GetNondiffractiveProbability(const G4double s,
00077 const G4double impactsquare);
00078 G4double GetElasticProbability(const G4double s,
00079 const G4double impactsquare);
00080
00081 G4double GetInelasticProbability(const G4double s,
00082 const G4double impactsquare);
00083
00084 G4double GetCutPomeronProbability(const G4double s,
00085 const G4double impactsquare, const G4int nPomerons);
00086
00087 void Setgamma(const G4double agam);
00088 G4double SoftEikonal(G4double s, G4double impactsquare);
00089 G4double HardEikonal(G4double s, G4double impactsquare);
00090
00091 void Pomeron_S(G4double apomeron_S){ pomeron_S = apomeron_S;}
00092 void Pomeron_Gamma(G4double apomeron_Gamma){ pomeron_Gamma = apomeron_Gamma;}
00093 void Pomeron_C(G4double apomeron_C){ pomeron_C = apomeron_C;}
00094 void Pomeron_Rsquare(G4double apomeron_Rsquare){ pomeron_Rsquare = apomeron_Rsquare;}
00095 void Pomeron_Alpha(G4double apomeron_Alpha){ pomeron_Alpha = apomeron_Alpha;}
00096 void Pomeron_Alphaprime(G4double apomeron_Alphaprime){ pomeron_Alphaprime = apomeron_Alphaprime;}
00097 void Pomeron_Gamma_Hard(G4double apomeron_Gamma_Hard){ pomeron_Gamma_Hard = apomeron_Gamma_Hard;}
00098 void Pomeron_Alpha_Hard(G4double apomeron_Alpha_Hard){ pomeron_Alpha_Hard = apomeron_Alpha_Hard;}
00099
00100 private:
00101 G4double PowerSoft(const G4double s);
00102 G4double PowerHard(const G4double s);
00103 G4double LambdaSoft(const G4double s);
00104 G4double LambdaHard(const G4double s);
00105 G4double Zsoft(const G4double s);
00106 G4double Zhard(const G4double s);
00107
00108 G4PomeronCrossSection();
00109 void InitForNucleon();
00110 void InitForPion();
00111 void InitForKaon();
00112 void InitForGamma();
00113
00114 G4double Expand(G4double z);
00115 inline G4double Z(const G4double Scms);
00116 inline G4double SigP(const G4double Scms);
00117 inline G4double Power(const G4double Scms);
00118 inline G4double Lambda(const G4double s);
00119 inline G4double Eikonal(const G4double s,const G4double impactsquare);
00120
00121 G4double pomeron_Alpha;
00122 G4double pomeron_Alpha_Hard;
00123 G4double pomeron_Alphaprime;
00124 G4double pomeron_C;
00125 G4double pomeron_Gamma;
00126 G4double pomeron_Gamma_Hard;
00127 G4double pomeron_Rsquare;
00128 G4double pomeron_S;
00129
00130
00131 };
00132 #endif