Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4QProbability.hh
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 #ifndef G4QProbability_h
27 #define G4QProbability_h 1
28 //
29 // $Id$
30 //
31 // ------------------------------------------------------------
32 // GEANT 4 class implementation file
33 //
34 // ---------------- G4QProbability ----------------
35 // by Mikhail Kossov Oct, 2006
36 // class for Pomeron & Reggeon amplitudes used by CHIPS
37 // For comparison similar member functions are in the G4 class:
38 // G4PomeronCrossSection
39 // ------------------------------------------------------------
40 // Short description: Pomeron is one of the possible vacuum pole (the
41 // second is Oderon, but they are identical in the present model), by
42 // which particle exchang in the ellastic scattering process. Others
43 // are Reggeons and, possibly Instantons (for spin-flip reactions).
44 // Strings are cuts of Pomerons and Reggeons (optic theorem connects
45 // the amplitude of scattering at zero angle with the total inelastic
46 // cross-section). They describe inelastic processes at high energies.
47 // ------------------------------------------------------------------
48 
50 #include "globals.hh"
51 
53 {
54  public:
55  G4QProbability(G4int PDGCode = 2212);
57  void SetS0(G4double aS0) {S0 = aS0;}
58  void SetPom_Gamma(G4double aPom_Gamma) {pom_Gamma = aPom_Gamma;}
59  void SetGamma(const G4double aGam) {pom_Gamma=aGam/CLHEP::GeV/CLHEP::GeV;}// @@ Temporary?
60  void SetPom_C(G4double aPom_C) {pom_C = aPom_C;}
61  void SetPom_R2(G4double aPom_R2) {pom_R2 = aPom_R2;}
62  void SetPom_Alpha(G4double aPom_Alpha) {pom_Alpha = aPom_Alpha;}
63  void SetPom_Alphaprime(G4double aPom_Alphaprime){pom_Alphaprime = aPom_Alphaprime;}
64  // Genegal (with low energies)
65  G4double GetQexTotProbability(const G4double s, const G4double imp2);
66  G4double GetQexCohProbability(const G4double s, const G4double imp2);
69  G4double GetQexSinDiffProbability(const G4double s, const G4double imp2);//For each T & B
70  G4double GetQexAbsProbability(const G4double s, const G4double imp2);
71  G4double GetQexElProbability(const G4double s, const G4double imp2);
73  // Only Pomeron (high energies)
74  G4double GetPomTotProbability(const G4double s_value, const G4double imp2)
75  {return 2*(1.-std::exp(-PomEikonal(s_value,imp2)))/pom_C;}
76  G4double GetPomCohProbability(const G4double s_value, const G4double imp2)
77  {return sqr(1.-std::exp(-PomEikonal(s_value,imp2)))/pom_C;}
78  G4double GetPomDiffProbability(const G4double s_value, const G4double imp2)
79  {return ((pom_C-1.)/pom_C)*GetPomCohProbability(s_value,imp2);}
81  {return (sqr(pom_sqC-1.)/pom_C)*GetPomCohProbability(s_value,imp2);}
82  G4double GetPomSinDiffProbability(const G4double s_value, const G4double imp2) //For each T & B
83  {return ((pom_sqC-1.)/pom_C)*GetPomCohProbability(s_value,imp2);}
84  G4double GetPomAbsProbability(const G4double s_value, const G4double imp2)
85  {return (1.-std::exp(-2*PomEikonal(s_value,imp2)))/pom_C;}
86  G4double GetPomElProbability(const G4double s_value, const G4double imp2)
87  {return GetPomCohProbability(s_value,imp2)/pom_C;}
88  G4double GetPomInelProbability(const G4double s_value, const G4double imp2)
89  {return GetPomDiffProbability(s_value,imp2) + GetPomAbsProbability(s_value,imp2);}
90 
91  G4double GetCutPomProbability(const G4double s, const G4double ip2, const G4int nPom);
92  G4double GetCutQexProbability(const G4double s, const G4double ip2, const G4int nQex);
93  private:
94  void InitForNucleon();
95  void InitForHyperon();
96  void InitForAntiBaryon();
97  void InitForPion();
98  void InitForKaon();
99  void InitForGamma();
100 
101  G4double Expand(G4double z);
102  G4double PowerQex(const G4double s_value) {return qex_Gamma/(s_value/S0);} // qex_Alpha=0 (anti-p?)
103  G4double PowerPom(const G4double s_value) {return pom_Gamma*std::pow(s_value/S0, pom_Alpha-1.);}
104  G4double SigQex(const G4double s_value) {return 8*CLHEP::pi*CLHEP::hbarc_squared*PowerQex(s_value);}
105  G4double SigPom(const G4double s_value) {return 8*CLHEP::pi*CLHEP::hbarc_squared*PowerPom(s_value);}
106  G4double LambdaQex(const G4double s_value) {return qex_R2+qex_Alphaprime*std::log(s_value/S0);}
107  G4double LambdaPom(const G4double s_value) {return pom_R2+pom_Alphaprime*std::log(s_value/S0);}
108  G4double ZQex(const G4double s_value) {return 2*PowerQex(s_value)/LambdaQex(s_value);} // qex_C=1.
109  G4double ZPom(const G4double s_value) {return 2*pom_C*PowerPom(s_value)/LambdaPom(s_value);}
110  G4double QexEikonal(const G4double s_value, const G4double imp2)
111  {return ZQex(s_value)*std::exp(-imp2/LambdaQex(s_value)/CLHEP::hbarc_squared/4)/2;}
112  G4double PomEikonal(G4double s_value, G4double imp2)
113  {return ZPom(s_value)*std::exp(-imp2/LambdaPom(s_value)/CLHEP::hbarc_squared/4)/2;}
114  // Body
115  G4double S0;
116  G4double pom_Gamma;
117  G4double pom_C;
118  G4double pom_sqC;
119  G4double pom_R2;
120  G4double pom_Alpha;
121  G4double pom_Alphaprime;
122  G4double qex_Gamma;
123  G4double qex_R2;
124  G4double qex_Alphaprime;
125 };
126 #endif