Geant4  10.02.p03
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)
float hbarc_squared
Definition: hepunit.py:266
G4double Zsoft(const G4double s)
G4double GetCutPomeronProbability(const G4double s, const G4double impactsquare, const G4int nPomerons)
G4double SoftEikonal(G4double s, G4double impactsquare)
G4double GetTotalCrossSection(const G4double s)
double S(double temp)
G4double PowerHard(const G4double s)
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:128
G4double GetInelasticProbability(const G4double s, const G4double impactsquare)
G4double factorial(G4int Z) const
Definition: G4Pow.hh:264
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 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
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
G4double HardEikonal(G4double s, G4double impactsquare)