Geant4  10.02
G4PomeronCrossSection.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 // $Id: G4PomeronCrossSection.cc 91774 2015-08-05 14:00:19Z gcosmo $
28 //
29 
30 #include "G4PomeronCrossSection.hh"
31 #include "G4PhysicalConstants.hh"
32 #include "G4SystemOfUnits.hh"
33 #include "G4Pow.hh"
34 #include "G4Exp.hh"
35 #include "G4Log.hh"
36 
37 
39  pomeron_Alpha(0), pomeron_Alpha_Hard(0), pomeron_Alphaprime(0),
40  pomeron_C(0), pomeron_Gamma(0), pomeron_Gamma_Hard(0),
41  pomeron_Rsquare(0), pomeron_S(0)
42 {}
43 
44 
46 {;}
47 //**********************************************************************************************
48 
50  {
51  G4int Encoding = std::abs(particle->GetPDGEncoding());
52 
53  if (std::abs(particle->GetBaryonNumber())!=0)
55  else if (Encoding/100== 3 || Encoding/10 == 3)
56  InitForKaon();
57  else
58  InitForPion();
59  }
60 
61 //**********************************************************************************************
62 
64 {
66 }
68 {
70 }
71 
73 {
74  InitForPion();
75 }
77 {
78  InitForPion();
79 }
81 {
82  InitForPion();
83 }
84 
86 {
87  InitForKaon();
88 }
90 {
91  InitForKaon();
92 }
94 {
95  InitForKaon();
96 }
98 {
99  InitForKaon();
100 }
102 {
103  InitForKaon();
104 }
106 {
107  InitForGamma();
108 }
109 
111 {
112  G4double FZ2= Expand(Z(S)/2);
113  return SigP(S) * FZ2;
114 }
115 
116 
118 {
119  return SigP(S)/pomeron_C *(Expand(Z(S)/2) - Expand(Z(S)));
120 }
121 
123 {
124  return ( pomeron_C -1) * GetElasticCrossSection(S);
125 }
126 
128 {
130 }
131 
132 //-------------------------Probabilities ----------------------------
133 
135  const G4double impactsquare)
136 {
137  return 2/pomeron_C*(1-G4Exp(-1*Eikonal(S,impactsquare)));
138 }
139 
141  const G4double impactsquare)
142 {
143  return (pomeron_C-1)/pomeron_C *
144  (GetTotalProbability(S,impactsquare) -
145  GetNondiffractiveProbability(S,impactsquare));
146 }
147 
149  const G4double impactsquare)
150 {
151  return (1-G4Exp(-2*Eikonal(S,impactsquare)))/pomeron_C;
152 }
153 
155  const G4double impactsquare)
156 {
157  return (GetTotalProbability(S,impactsquare) -
158  GetInelasticProbability(S,impactsquare));
159 }
160 
162  const G4double impactsquare)
163 {
164  return GetNondiffractiveProbability(S,impactsquare) +
165  GetDiffractiveProbability(S,impactsquare);
166 }
167 
169  const G4double impactsquare, const G4int nPomerons)
170 {
171  G4double factorial=G4Pow::GetInstance()->factorial(nPomerons);
172 
173  return G4Exp(-2*Eikonal(S,impactsquare))/pomeron_C*
174  G4Pow::GetInstance()->powN(2*Eikonal(S,impactsquare),nPomerons)/factorial;
175 }
176 
177 // ---------------Temporary --- GF
179 {
180  pomeron_Gamma=agam/GeV/GeV;
181 }
182 
183 
184 //----------------- private/Implementation methods
185 
187 {
188 // pomeron_S= 3.0*GeV*GeV;
189  pomeron_S= 2.7*GeV*GeV;
190 // pomeron_Gamma= 2.16/GeV/GeV;
191 // pomeron_Gamma= 3.96/GeV/GeV;
192  pomeron_Gamma= (2.6+3.96)/GeV/GeV;
193  pomeron_C= 1.4;
194  pomeron_Rsquare= 3.56/GeV/GeV;
195 // pomeron_Alpha= 1.0808;
196  pomeron_Alpha= 0.9808;
197  pomeron_Alphaprime= 0.25/GeV/GeV;
198  pomeron_Gamma_Hard = 0.0002/GeV/GeV; // Note! if pomeron_Gamma_Hard != 0 to fit total pp-crosscection
199  // pomeron_Gamma_Soft shold be 2.35/GeV/GeV
200  pomeron_Alpha_Hard = 1.47;
201 }
202 
204 {
205  pomeron_S= 1.5*GeV*GeV;
206 // pomeron_Gamma= 1.46/GeV/GeV;
207  pomeron_Gamma= 2.17/GeV/GeV;
208  pomeron_C= 1.6;
209  pomeron_Rsquare= 2.36/GeV/GeV;
210  pomeron_Alpha= 1.0808;
211  pomeron_Alphaprime= 0.25/GeV/GeV;
212  pomeron_Gamma_Hard = 0.0002/GeV/GeV;
213  pomeron_Alpha_Hard = 1.47;
214 }
215 
217 {
218  pomeron_S= 2.3*GeV*GeV;
219 // pomeron_Gamma= 1.31/GeV/GeV;
220  pomeron_Gamma= 1.92/GeV/GeV;
221  pomeron_C= 1.8;
222  pomeron_Rsquare= 1.96/GeV/GeV;
223  pomeron_Alpha= 1.0808;
224  pomeron_Alphaprime= 0.25/GeV/GeV;
225  pomeron_Gamma_Hard = 0.0002/GeV/GeV;
226  pomeron_Alpha_Hard = 1.47;
227 }
228 
230 {
231  pomeron_S= 1.7*GeV*GeV;
232 // pomeron_Gamma= 1.42/GeV/GeV;
233  pomeron_Gamma= 2.07/GeV/GeV;
234  pomeron_C= 1.7;
235  pomeron_Rsquare= 2.16/GeV/GeV;
236  pomeron_Alpha= 1.0808;
237  pomeron_Alphaprime= 0.25/GeV/GeV;
238  pomeron_Gamma_Hard = 0.0002/GeV/GeV;
239  pomeron_Alpha_Hard = 1.47;
240 }
241 
243 {
244 
245  G4double sum=1.;
246  G4double current=1.;
247  for (G4int j=2; j<21; j++ )
248  {
249  current *= -z *(j-1)/sqr(j);
250  sum+=current;
251  }
252  return sum;
253 }
254 
256 {
258 }
259 
261 {
262  return 2*pomeron_C * Power(S) / Lambda(S);
263 }
264 
266 {
268 }
269 
271 {
272  return 8 * pi * hbarc_squared * Power(S);
273 }
274 
276  const G4double impactsquare)
277 {
278  return Z(S)/2 * G4Exp(-impactsquare/(4*Lambda(S)*hbarc_squared));
279 }
280 //*************************************************************************************************
282  {
284  }
285 
287  {
289  }
290 
292  {
294  }
295 
297  {
298  return pomeron_Rsquare; //+pomeron_Alphaprime*G4Log(s/pomeron_S);
299  }
300 
302  {
303  return 2*pomeron_C*PowerHard(S) / LambdaSoft(S);
304  }
305 
307  {
308  return 2*pomeron_C*PowerHard(S)/LambdaHard(S);
309  }
310 
312  {
313  return Zsoft(S)/2*G4Exp(-impactsquare/LambdaSoft(S)/hbarc_squared/4);
314  }
315 
317  {
318  return Zhard(S)/2*G4Exp(-impactsquare/LambdaHard(S)/hbarc_squared/4);
319  }
320 
321 //*************************************************************************************************
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
G4double SigP(const G4double Scms)
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
G4double Zsoft(const G4double s)
G4double GetCutPomeronProbability(const G4double s, const G4double impactsquare, const G4int nPomerons)
G4double SoftEikonal(G4double s, G4double impactsquare)
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
G4double GetTotalCrossSection(const G4double s)
double S(double temp)
G4double PowerHard(const G4double s)
G4double GetInelasticProbability(const G4double s, const G4double impactsquare)
G4double z
Definition: TRTMaterials.hh:39
G4double Expand(G4double z)
G4double LambdaSoft(const G4double s)
G4double Z(const G4double Scms)
int G4int
Definition: G4Types.hh:78
G4double GetTotalProbability(const G4double s, const G4double impactsquare)
G4double PowerSoft(const G4double s)
G4double Lambda(const G4double s)
G4double factorial(G4int Z) const
Definition: G4Pow.hh:264
G4double GetDiffractiveCrossSection(const G4double s)
G4double GetElasticProbability(const G4double s, const G4double impactsquare)
G4double GetElasticCrossSection(const G4double s)
static const double GeV
Definition: G4SIunits.hh:214
G4double GetNondiffractiveProbability(const G4double s, const G4double impactsquare)
G4double GetDiffractiveProbability(const G4double s, const G4double impactsquare)
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
static const double pi
Definition: G4SIunits.hh:74
G4double LambdaHard(const G4double s)
G4double Power(const G4double Scms)
G4double Zhard(const G4double s)
G4double GetInelasticCrossSection(const G4double s)
G4double Eikonal(const G4double s, const G4double impactsquare)
void Setgamma(const G4double agam)
T sqr(const T &x)
Definition: templates.hh:145
double G4double
Definition: G4Types.hh:76
G4double HardEikonal(G4double s, G4double impactsquare)