source: trunk/source/processes/hadronic/models/chiral_inv_phase_space/body/src/G4QProbability.cc @ 1340

Last change on this file since 1340 was 1340, checked in by garnier, 14 years ago

update ti head

File size: 7.8 KB
Line 
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: G4QProbability.cc,v 1.3 2009/09/04 16:13:19 mkossov Exp $
28// GEANT4 tag $Name: hadr-chips-V09-03-08 $
29//
30// ------------------------------------------------------------
31//      GEANT 4 class implementation file
32//
33//      ---------------- G4QProbability ----------------
34//      by Mikhail Kossov Oct, 2006
35//   class for Pomeron & Reggeon amplitudes used by CHIPS
36//   For comparison mirror member functions are taken from G4 class:
37//   G4PomeronCrossSection
38// ------------------------------------------------------------------
39// Short description: Pomeron is one of the possible vacuum pole (the
40// second is Oderon, but they are identical in the present model), by
41// which particle exchang in the ellastic scattering process. Others
42// are Reggeons and, possibly Instantons (for spin-flip reactions).
43// Strings are cuts of Pomerons and Reggeons (optic theorem connects
44// the amplitude of scattering at zero angle with the total inelastic
45// cross-section). They describe inelastic processes at high energies.
46// ------------------------------------------------------------------
47
48#include "G4QProbability.hh"
49
50G4QProbability::G4QProbability(G4int PDG)
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
74G4double G4QProbability::GetCutPomProbability(const G4double s, const G4double imp2,
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,imp2); e+=e;               // Doubled Eikonal
85  return std::exp(-e)*std::pow(e,nPom)/pom_C/f;
86}
87
88G4double G4QProbability::GetCutQexProbability(const G4double s, const G4double imp2,
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,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
155G4double G4QProbability::GetQexTotProbability(const G4double s, const G4double imp2)
156{
157  G4double ExpPom=std::exp(-PomEikonal(s,imp2));
158  G4double ExpQex=std::exp(-QexEikonal(s,imp2));
159  G4double Amp=(ExpQex*(1.-ExpPom) + sqr(pom_sqC-1.)*ExpPom*(1.-ExpQex))/pom_C;
160  return Amp+Amp;
161}
162
163G4double G4QProbability::GetQexElProbability(const G4double s, const G4double imp2)
164{
165  G4double ExpPom=std::exp(-PomEikonal(s,imp2));
166  G4double ExpQex=std::exp(-QexEikonal(s,imp2));
167  G4double Amp=(ExpQex*(1.-ExpPom) + sqr(pom_sqC-1.)*ExpPom*(1.-ExpQex))/pom_C;
168  return Amp*Amp;
169}
170
171G4double G4QProbability::GetQexDubDiffProbability(const G4double s, const G4double imp2)
172{
173  G4double ExpPom=std::exp(-PomEikonal(s,imp2));
174  G4double ExpQex=std::exp(-QexEikonal(s,imp2));
175  G4double Amp=sqr(pom_sqC-1.)*(ExpQex*(1.-ExpPom) + ExpPom*(1.-ExpQex))/pom_C;
176  return Amp*Amp;
177}
178
179G4double G4QProbability::GetQexSinDiffProbability(const G4double s, const G4double imp2)
180{
181  G4double ExpPom=std::exp(-PomEikonal(s,imp2));
182  G4double ExpQex=std::exp(-QexEikonal(s,imp2));
183  G4double Amp=(pom_sqC-1.)*(ExpQex*(1.-ExpPom) - (pom_sqC-1.)*ExpPom*(1.-ExpQex))/pom_C;
184  return Amp*Amp;
185}
186
187G4double G4QProbability::GetQexDiffProbability(const G4double s, const G4double imp2)
188{
189  return GetQexDubDiffProbability(s,imp2)+2*GetQexSinDiffProbability(s,imp2);
190}
191
192G4double G4QProbability::GetQexInelProbability(const G4double s, const G4double imp2)
193{
194  G4double ExpPom=std::exp(-PomEikonal(s,imp2));
195  G4double ExpQex=std::exp(-QexEikonal(s,imp2));
196  G4double Amp=sqr(pom_sqC-1.)*(ExpQex*(1.-ExpPom) + ExpPom*(1.-ExpQex))/pom_C;
197  return Amp+Amp-Amp*Amp;
198}
Note: See TracBrowser for help on using the repository browser.