Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4QProbability.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$
28//
29// ------------------------------------------------------------
30// GEANT 4 class implementation file
31//
32// ---------------- G4QProbability ----------------
33// by Mikhail Kossov Oct, 2006
34// class for Pomeron & Reggeon amplitudes used by CHIPS
35// For comparison mirror member functions are taken from G4 class:
36// G4PomeronCrossSection
37// ------------------------------------------------------------------
38// Short description: Pomeron is one of the possible vacuum pole (the
39// second is Oderon, but they are identical in the present model), by
40// which particle exchang in the ellastic scattering process. Others
41// are Reggeons and, possibly Instantons (for spin-flip reactions).
42// Strings are cuts of Pomerons and Reggeons (optic theorem connects
43// the amplitude of scattering at zero angle with the total inelastic
44// cross-section). They describe inelastic processes at high energies.
45// ------------------------------------------------------------------
46
47#include "G4QProbability.hh"
48#include "G4SystemOfUnits.hh"
49
51{
52 S0 = 1.*GeV*GeV; // Must be a constant (just GeV^2 unit !)
53 pom_Alpha = 1.0808; // Must be the same for all hadrons
54 pom_Alphaprime = 0.25/GeV/GeV;
55 qex_Gamma = 9./GeV/GeV;
56 qex_R2 = 27./GeV/GeV;
57 qex_Alphaprime = 1.5/GeV/GeV;
58
59 G4int aP = std::abs(PDG);
60 if (PDG==2212 || PDG==2112) InitForNucleon();
61 else if(PDG==111 || aP==211) InitForPion();
62 else if(PDG==130 || PDG==310 || aP==311 || aP==321) InitForKaon();
63 else if(PDG==22) InitForGamma();
64 else if(PDG > 3000) InitForHyperon();
65 else if(PDG <-2000) InitForAntiBaryon();
66 else
67 {
68 G4cout<<"-Warning-G4QProbability is initialized for PDGCode="<<PDG<<" as Pion"<<G4endl;
69 InitForPion();
70 }
71 pom_sqC=std::sqrt(pom_C);
72}
73
75 const G4int nPom)
76{
77 static const G4int nft=11;
78 static const G4int nf1=nft-1;
79 static const G4double ft[nft]={1.,1.,2.,6.,24.,120.,720.,5040.,40320.,362880.,3628800.};
80 if(nPom<0) return 0.;
81 G4double f=ft[nf1];
82 if(nPom<nft) f=ft[nPom];
83 else for(G4int i=nft; i<= nPom; i++) f*=i; // Calculate factorial for high nPom
84 G4double e=PomEikonal(s_value,imp2); e+=e; // Doubled Eikonal
85 return std::exp(-e)*std::pow(e,nPom)/pom_C/f;
86}
87
89 const G4int nQex)
90{
91 static const G4int nft=11;
92 static const G4int nf1=nft-1;
93 static const G4double ft[nft]={1.,1.,2.,6.,24.,120.,720.,5040.,40320.,362880.,3628800.};
94 if(nQex<0) return 0.;
95 G4double f=ft[nf1];
96 if(nQex<nft) f=ft[nQex];
97 else for(G4int i=nft; i<= nQex; i++) f*=i; // Calculate factorial for high nPom
98 G4double e=QexEikonal(s_value,imp2); e+=e; // Doubled Eikonal
99 return std::exp(-e)*std::pow(e,nQex)/f;
100}
101
102void G4QProbability::InitForNucleon()
103{
104 pom_Gamma = 2.16/GeV/GeV; // ? M.K.@@ Must be taken from total cross-sections
105 pom_C = 1.4;
106 pom_R2 = 3.30/GeV/GeV;
107}
108
109void G4QProbability::InitForHyperon()
110{
111 pom_Gamma = 2.16/GeV/GeV; // ? M.K.@@ Must be taken from total cross-sections
112 pom_C = 1.4;
113 pom_R2 = 3.30/GeV/GeV; // ? M.K.@@ Just a guess
114}
115void G4QProbability::InitForAntiBaryon()
116{
117 pom_Gamma = 2.16/GeV/GeV; // ? M.K.@@ Must be taken from total cross-sections
118 pom_C = 1.4;
119 pom_R2 = 3.30/GeV/GeV;
120}
121
122void G4QProbability::InitForPion()
123{
124 pom_Gamma = 2.16/GeV/GeV; // ? M.K.@@ Must be taken from total cross-sections
125 pom_C = 1.6; // Only: for mesons it is bigger than for baryons
126 pom_R2 = 2.36/GeV/GeV;
127}
128
129void G4QProbability::InitForKaon()
130{
131 pom_Gamma = 1.92/GeV/GeV; // ? M.K.@@ Must be taken from total cross-sections
132 pom_C = 1.8; // 1.7 (?)
133 pom_R2 = 1.96/GeV/GeV; // ? M.K.@@ Just a guess
134}
135
136void G4QProbability::InitForGamma()
137{
138 pom_Gamma = 2.16/GeV/GeV; // ? M.K.@@ Must be taken from total cross-sections
139 pom_C = 1.7;
140 pom_R2 = 2.16/GeV/GeV; // ? M.K.@@ Just a guess
141}
142
143G4double G4QProbability::Expand(G4double z)
144{
145 G4double sum=1.;
146 G4double current=1.;
147 for(G4int j=2; j<21; j++)
148 {
149 current *= -z*(j-1)/j/j;
150 sum+=current;
151 }
152 return sum;
153}
154
156{
157 G4double ExpPom=std::exp(-PomEikonal(s_value,imp2));
158 G4double ExpQex=std::exp(-QexEikonal(s_value,imp2));
159 G4double Amp=(ExpQex*(1.-ExpPom) + sqr(pom_sqC-1.)*ExpPom*(1.-ExpQex))/pom_C;
160 return Amp+Amp;
161}
162
164{
165 G4double ExpPom=std::exp(-PomEikonal(s_value,imp2));
166 G4double ExpQex=std::exp(-QexEikonal(s_value,imp2));
167 G4double Amp=(ExpQex*(1.-ExpPom) + sqr(pom_sqC-1.)*ExpPom*(1.-ExpQex))/pom_C;
168 return Amp*Amp;
169}
170
172{
173 G4double ExpPom=std::exp(-PomEikonal(s_value,imp2));
174 G4double ExpQex=std::exp(-QexEikonal(s_value,imp2));
175 G4double Amp=sqr(pom_sqC-1.)*(ExpQex*(1.-ExpPom) + ExpPom*(1.-ExpQex))/pom_C;
176 return Amp*Amp;
177}
178
180{
181 G4double ExpPom=std::exp(-PomEikonal(s_value,imp2));
182 G4double ExpQex=std::exp(-QexEikonal(s_value,imp2));
183 G4double Amp=(pom_sqC-1.)*(ExpQex*(1.-ExpPom) - (pom_sqC-1.)*ExpPom*(1.-ExpQex))/pom_C;
184 return Amp*Amp;
185}
186
188{
189 return GetQexDubDiffProbability(s_value,imp2)+2*GetQexSinDiffProbability(s_value,imp2);
190}
191
193{
194 G4double ExpPom=std::exp(-PomEikonal(s_value,imp2));
195 G4double ExpQex=std::exp(-QexEikonal(s_value,imp2));
196 G4double Amp=sqr(pom_sqC-1.)*(ExpQex*(1.-ExpPom) + ExpPom*(1.-ExpQex))/pom_C;
197 return Amp+Amp-Amp*Amp;
198}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
G4double GetQexDubDiffProbability(const G4double s, const G4double imp2)
G4QProbability(G4int PDGCode=2212)
G4double GetQexElProbability(const G4double s, const G4double imp2)
G4double GetQexTotProbability(const G4double s, const G4double imp2)
G4double GetCutQexProbability(const G4double s, const G4double ip2, const G4int nQex)
G4double GetQexDiffProbability(const G4double s, const G4double imp2)
G4double GetCutPomProbability(const G4double s, const G4double ip2, const G4int nPom)
G4double GetQexInelProbability(const G4double s, const G4double imp2)
G4double GetQexSinDiffProbability(const G4double s, const G4double imp2)
T sqr(const T &x)
Definition: templates.hh:145