Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/parton_string/qgsm/src/G4Reggeons.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/hadronic/models/parton_string/qgsm/src/G4Reggeons.cc (Version 11.3.0) and /processes/hadronic/models/parton_string/qgsm/src/G4Reggeons.cc (Version 10.7.p3)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 //                                                 27 //
 28                                                    28 
 29 #include "G4Reggeons.hh"                           29 #include "G4Reggeons.hh"
 30 #include "G4PhysicalConstants.hh"                  30 #include "G4PhysicalConstants.hh"
 31 #include "G4SystemOfUnits.hh"                      31 #include "G4SystemOfUnits.hh"
 32 #include "G4Pow.hh"                                32 #include "G4Pow.hh"
 33 #include "G4Exp.hh"                                33 #include "G4Exp.hh"
 34 #include "G4Log.hh"                                34 #include "G4Log.hh"
 35                                                    35 
 36                                                    36 
 37 G4Reggeons::G4Reggeons(const G4ParticleDefinit     37 G4Reggeons::G4Reggeons(const G4ParticleDefinition * particle) 
 38 {                                                  38 {
 39   //              Kaidalov&Piskunova    Orig       39   //              Kaidalov&Piskunova    Orig
 40   Alpha_pomeron      = 1.12;         //0.9808;     40   Alpha_pomeron      = 1.12;         //0.9808;
 41   Alphaprime_pomeron = 0.22/GeV/GeV; //0.25/Ge     41   Alphaprime_pomeron = 0.22/GeV/GeV; //0.25/GeV/GeV; 
 42   S0_pomeron         = 1.0*GeV*GeV;  //2.7*GeV     42   S0_pomeron         = 1.0*GeV*GeV;  //2.7*GeV*GeV; 
 43                                                    43 
 44   Alpha_pomeronHard  = 1.47;                       44   Alpha_pomeronHard  = 1.47;
 45   Gamma_pomeronHard  = 0.0/GeV/GeV;                45   Gamma_pomeronHard  = 0.0/GeV/GeV;
 46                                                    46 
 47   G4int PDGcode = particle->GetPDGEncoding();      47   G4int PDGcode = particle->GetPDGEncoding();
 48   G4int absPDGcode = std::abs(PDGcode);            48   G4int absPDGcode = std::abs(PDGcode);
 49                                                    49 
 50   //------------------------------------------     50   //-------------------------------------------------------
 51   //              Kaidalov&Piskunova    Orig       51   //              Kaidalov&Piskunova    Orig
 52   G4double C_pomeron_NN     = 1.5;                 52   G4double C_pomeron_NN     = 1.5; 
 53   G4double C_pomeron_N      = std::sqrt(C_pome     53   G4double C_pomeron_N      = std::sqrt(C_pomeron_NN);
 54                                                    54 
 55   G4double Gamma_pomeron_NN = 2.14/GeV/GeV;        55   G4double Gamma_pomeron_NN = 2.14/GeV/GeV;                 //(2.6+3.96)
 56   G4double Gamma_pomeron_N  = std::sqrt(Gamma_     56   G4double Gamma_pomeron_N  = std::sqrt(Gamma_pomeron_NN);
 57   G4double Gamma_pomeron_Pr(0.), Gamma_pomeron     57   G4double Gamma_pomeron_Pr(0.), Gamma_pomeron_Tr(0.);
 58                                                    58 
 59   G4double Rsquare_pomeron_NN =  3.30/GeV/GeV;     59   G4double Rsquare_pomeron_NN =  3.30/GeV/GeV;              //3.56
 60   G4double Rsquare_pomeron_N  = Rsquare_pomero     60   G4double Rsquare_pomeron_N  = Rsquare_pomeron_NN/2.;
 61   G4double Rsquare_pomeron_Pr(0.), Rsquare_pom     61   G4double Rsquare_pomeron_Pr(0.), Rsquare_pomeron_Tr(0.); 
 62   //------------------------------------------     62   //-------------------------------------------------------
 63                                                    63 
 64   // Copied from G4HadronNucleonXsc::HyperonNu     64   // Copied from G4HadronNucleonXsc::HyperonNucleonXscNS(...)
 65   G4double coeff = 1.0;                            65   G4double coeff = 1.0;
 66   static const G4double  lBarCof1S  = 0.88;        66   static const G4double  lBarCof1S  = 0.88;
 67   static const G4double  lBarCof2S  = 0.76;        67   static const G4double  lBarCof2S  = 0.76;
 68   static const G4double  lBarCof3S  = 0.64;        68   static const G4double  lBarCof3S  = 0.64;
 69   static const G4double  lBarCof1C  = 0.784378     69   static const G4double  lBarCof1C  = 0.784378;
 70   static const G4double  lBarCofSC  = 0.664378     70   static const G4double  lBarCofSC  = 0.664378;
 71   static const G4double  lBarCof2SC = 0.544378     71   static const G4double  lBarCof2SC = 0.544378;
 72   static const G4double  lBarCof1B  = 0.740659     72   static const G4double  lBarCof1B  = 0.740659;
 73   static const G4double  lBarCofSB  = 0.620659     73   static const G4double  lBarCofSB  = 0.620659;
 74   static const G4double  lBarCof2SB = 0.500659     74   static const G4double  lBarCof2SB = 0.500659;
 75   // End of Copied from G4HadronNucleonXsc::Hy     75   // End of Copied from G4HadronNucleonXsc::HyperonNucleonXscNS(...)
 76                                                    76 
 77   // Copied from G4HadronNucleonXsc::SCBMesonN     77   // Copied from G4HadronNucleonXsc::SCBMesonNucleonXscNS(...)
 78   static const G4double llMesCof1C   = 0.67656     78   static const G4double llMesCof1C   = 0.676568;
 79   static const G4double llMesCof1B   = 0.61098     79   static const G4double llMesCof1B   = 0.610989;
 80   static const G4double llMesCof2C   = 0.35313     80   static const G4double llMesCof2C   = 0.353135;
 81   static const G4double llMesCof2B   = 0.22197     81   static const G4double llMesCof2B   = 0.221978;
 82   static const G4double llMesCofSC   = 0.49656     82   static const G4double llMesCofSC   = 0.496568;
 83   static const G4double llMesCofSB   = 0.43098     83   static const G4double llMesCofSB   = 0.430989;
 84   static const G4double llMesCofCB   = 0.28755     84   static const G4double llMesCofCB   = 0.287557;
 85   static const G4double llMesCofEtaP = 0.88;       85   static const G4double llMesCofEtaP = 0.88;
 86   static const G4double llMesCofEta  = 0.76;       86   static const G4double llMesCofEta  = 0.76;
 87   // End of Copied from G4HadronNucleonXsc::SC     87   // End of Copied from G4HadronNucleonXsc::SCBMesonNucleonXscNS(...)
 88                                                    88 
 89   if ( absPDGcode > 1000 ) {  //  Projectile i     89   if ( absPDGcode > 1000 ) {  //  Projectile is baryon or anti_baryon --------
 90                                                    90 
 91     Cpr_pomeron = C_pomeron_N;                     91     Cpr_pomeron = C_pomeron_N;                              // Shower enhancement coefficient for projectile 
 92     Ctr_pomeron = C_pomeron_N;                     92     Ctr_pomeron = C_pomeron_N;                              // Shower enhancement coefficient for target
 93     C_pomeron   = Cpr_pomeron*Ctr_pomeron;         93     C_pomeron   = Cpr_pomeron*Ctr_pomeron;
 94                                                    94 
 95     Gamma_pomeron_Pr = Gamma_pomeron_N;            95     Gamma_pomeron_Pr = Gamma_pomeron_N;                     // vertex constant for projectile
 96     Gamma_pomeron_Tr = Gamma_pomeron_N;            96     Gamma_pomeron_Tr = Gamma_pomeron_N;                     // vertex constant for target
 97     Gamma_pomeron    = Gamma_pomeron_Pr * Gamm     97     Gamma_pomeron    = Gamma_pomeron_Pr * Gamma_pomeron_Tr;
 98                                                    98 
 99     Rsquare_pomeron_Pr = Rsquare_pomeron_N;        99     Rsquare_pomeron_Pr = Rsquare_pomeron_N;                 // R^2 of pomeron-projectile interaction
100     Rsquare_pomeron_Tr = Rsquare_pomeron_N;       100     Rsquare_pomeron_Tr = Rsquare_pomeron_N;                 // R^2 of pomeron-target interaction
101     Rsquare_pomeron    = Rsquare_pomeron_Pr +     101     Rsquare_pomeron    = Rsquare_pomeron_Pr + Rsquare_pomeron_Tr;
102                                                   102 
103     Freggeon_Alpha      =   0.7;                  103     Freggeon_Alpha      =   0.7;                            // Intersept of f-trajectory
104     Freggeon_Alphaprime =   0.8/GeV/GeV;          104     Freggeon_Alphaprime =   0.8/GeV/GeV;                    // Slope of f-trajectory
105     Freggeon_Gamma      =   sqr(2.871)/GeV/GeV    105     Freggeon_Gamma      =   sqr(2.871)/GeV/GeV;             // Vertex constant of f-meson - nucleon interactions
106     Freggeon_Rsquare    =   2*0.916/GeV/GeV;      106     Freggeon_Rsquare    =   2*0.916/GeV/GeV;                // R^2 of f-meson - nucleon interactions
107     Freggeon_C          =   1.0;                  107     Freggeon_C          =   1.0;                            // Shower enhancement coefficient
108     FParity             =  +1;                    108     FParity             =  +1;                              // Parity of the trajectory
109                                                   109 
110     Wreggeon_Alpha      =  0.4;                   110     Wreggeon_Alpha      =  0.4;                             // Intersept of omega-trajectory (w)
111     Wreggeon_Alphaprime =  0.9/GeV/GeV;           111     Wreggeon_Alphaprime =  0.9/GeV/GeV;                     // Slope of w-trajectory
112     Wreggeon_Gamma      =  sqr(2.241)/GeV/GeV;    112     Wreggeon_Gamma      =  sqr(2.241)/GeV/GeV;              // Vertex constant of w-meson - nucleon interactions
113     Wreggeon_Rsquare    =  2*0.945/GeV/GeV *0.    113     Wreggeon_Rsquare    =  2*0.945/GeV/GeV *0.5;            // R^2 of w-meson - nucleon interactions
114     Wreggeon_C          =   1.0;                  114     Wreggeon_C          =   1.0;                            // Shower enhancement coefficient
115     if (PDGcode > 0) WParity = -1;                115     if (PDGcode > 0) WParity = -1;                          // Parity +1 for Pbar P, and -1 for PP interactions
116     if (PDGcode < 0) WParity = +1;                116     if (PDGcode < 0) WParity = +1;
117                                                   117 
118     // Copied from G4HadronNucleonXsc::Hyperon    118     // Copied from G4HadronNucleonXsc::HyperonNucleonXscNS(...)
119     if ( PDGcode == 3122 || PDGcode == 3222 ||    119     if ( PDGcode == 3122 || PDGcode == 3222 ||     // Lambda      or  Sigma+          or
120          PDGcode == 3112 || PDGcode == 3212 ||    120          PDGcode == 3112 || PDGcode == 3212 ||     // Sigma-      or  Sigma0          or 
121          PDGcode ==-3122 || PDGcode ==-3222 ||    121          PDGcode ==-3122 || PDGcode ==-3222 ||     // anti_Lambda or  anti_Sigma+     or
122          PDGcode ==-3112 || PDGcode ==-3212       122          PDGcode ==-3112 || PDGcode ==-3212   ) {  // anti_Sigma- or  anti_Sigma0
123       coeff = lBarCof1S;                          123       coeff = lBarCof1S;
124     }                                             124     }
125     if ( PDGcode == 3312 || PDGcode == 3322 ||    125     if ( PDGcode == 3312 || PDGcode == 3322 ||     // Xi-         or  Xi0             or
126          PDGcode ==-3312 || PDGcode ==-3322       126          PDGcode ==-3312 || PDGcode ==-3322   ) {  // anti_Xi-    or  anti_Xi0
127       coeff = lBarCof2S;                          127       coeff = lBarCof2S;
128     }                                             128     }
129     if ( PDGcode == 3334 || PDGcode ==-3334 )     129     if ( PDGcode == 3334 || PDGcode ==-3334 ) {    // Omega-      or  anti_Omega-
130       coeff = lBarCof3S;                          130       coeff = lBarCof3S;
131     }                                             131     }
132     if ( PDGcode == 4122 || PDGcode ==-4122 ||    132     if ( PDGcode == 4122 || PDGcode ==-4122 ||     // Lambda_c+   or  anti_Lambda_c+  or 
133    PDGcode == 4222 || PDGcode ==-4222 ||     /    133    PDGcode == 4222 || PDGcode ==-4222 ||     // Sigma_c++   or  anti_Sigma_c++  or
134    PDGcode == 4212 || PDGcode ==-4212 ||     /    134    PDGcode == 4212 || PDGcode ==-4212 ||     // Sigma_c+    or  anti_Sigma_c+   or
135    PDGcode == 4112 || PDGcode ==-4112   ) {  /    135    PDGcode == 4112 || PDGcode ==-4112   ) {  // Sigma_c0    or  anti_Sigma_c0
136       coeff = lBarCof1C;                          136       coeff = lBarCof1C;
137     }                                             137     }
138     if ( PDGcode == 4332 || PDGcode ==-4332 )     138     if ( PDGcode == 4332 || PDGcode ==-4332 ) {    // Omega_c0    or  anti_Omega_c0 
139       coeff = lBarCof2SC;                         139       coeff = lBarCof2SC;
140     }                                             140     }
141     if ( PDGcode == 4232 || PDGcode == 4132 ||    141     if ( PDGcode == 4232 || PDGcode == 4132 ||     // Xi_c+       or  Xi_c0           or
142          PDGcode ==-4232 || PDGcode ==-4132       142          PDGcode ==-4232 || PDGcode ==-4132   ) {  // anti_Xi_c+  or  anti_Xi_c0
143       coeff = lBarCofSC;                          143       coeff = lBarCofSC;
144     }                                             144     }
145     if ( PDGcode == 5122 || PDGcode ==-5122 ||    145     if ( PDGcode == 5122 || PDGcode ==-5122 ||     // Lambda_b0   or  anti_Lambda_b0  or
146    PDGcode == 5222 || PDGcode ==-5222 ||     /    146    PDGcode == 5222 || PDGcode ==-5222 ||     // Sigma_b+    or  anti_Sigma_b+   or
147    PDGcode == 5112 || PDGcode ==-5112 ||     /    147    PDGcode == 5112 || PDGcode ==-5112 ||     // Sigma_b-    or  anti_Sigma_b-   or
148    PDGcode == 5212 || PDGcode ==-5212   ) {  /    148    PDGcode == 5212 || PDGcode ==-5212   ) {  // Sigma_b0    or  anti_Sigma_b0
149       coeff = lBarCof1B;                          149       coeff = lBarCof1B;
150     }                                             150     }
151     if ( PDGcode == 5332 || PDGcode ==-5332 )     151     if ( PDGcode == 5332 || PDGcode ==-5332 ) {    // Omega_b-    or  anti_Omega_b-
152       coeff = lBarCof2SB;                         152       coeff = lBarCof2SB;
153     }                                             153     }
154     if ( PDGcode == 5132 || PDGcode == 5232 ||    154     if ( PDGcode == 5132 || PDGcode == 5232 ||     // Xi_b-       or  Xi_b0           or
155          PDGcode ==-5132 || PDGcode ==-5232       155          PDGcode ==-5132 || PDGcode ==-5232   ) {  // anti_Xi_b-  or  anti_Xi_b0
156       coeff = lBarCofSB;                          156       coeff = lBarCofSB;
157     }                                             157     } 
158     // End of Copied from G4HadronNucleonXsc::    158     // End of Copied from G4HadronNucleonXsc::HyperonNucleonXscNS(...)
159                                                   159 
160     Gamma_pomeron_Pr *= coeff;                    160     Gamma_pomeron_Pr *= coeff;
161                                                   161 
162   } else if ( absPDGcode == 211 || PDGcode ==     162   } else if ( absPDGcode == 211 || PDGcode == 111 || absPDGcode >= 400 ) {  // Projectile is a nonstrange meson
163                                                   163 
164     Cpr_pomeron = 1.352;                          164     Cpr_pomeron = 1.352;
165     Ctr_pomeron = C_pomeron_N;                    165     Ctr_pomeron = C_pomeron_N; 
166     C_pomeron   = Cpr_pomeron*Ctr_pomeron;        166     C_pomeron   = Cpr_pomeron*Ctr_pomeron;
167     //                         KP                 167     //                         KP
168     Gamma_pomeron_Pr = 0.89/GeV;   // 0.85 ->     168     Gamma_pomeron_Pr = 0.89/GeV;   // 0.85 -> 0.89    // Uzhi
169     Gamma_pomeron_Tr = Gamma_pomeron_N;           169     Gamma_pomeron_Tr = Gamma_pomeron_N;
170     Gamma_pomeron    = Gamma_pomeron_Pr * Gamm    170     Gamma_pomeron    = Gamma_pomeron_Pr * Gamma_pomeron_Tr;
171                                                   171 
172     Rsquare_pomeron_Pr = 0.5/GeV/GeV;             172     Rsquare_pomeron_Pr = 0.5/GeV/GeV;
173     Rsquare_pomeron_Tr = Rsquare_pomeron_N;       173     Rsquare_pomeron_Tr = Rsquare_pomeron_N;
174     Rsquare_pomeron    = Rsquare_pomeron_Pr +     174     Rsquare_pomeron    = Rsquare_pomeron_Pr + Rsquare_pomeron_Tr;
175                                                   175 
176     Freggeon_Alpha      =   0.7;                  176     Freggeon_Alpha      =   0.7;
177     Freggeon_Alphaprime =   0.8/GeV/GeV;          177     Freggeon_Alphaprime =   0.8/GeV/GeV;
178     Freggeon_Gamma      =   3.524/GeV/GeV;        178     Freggeon_Gamma      =   3.524/GeV/GeV;
179     Freggeon_Rsquare    =   1.0/GeV/GeV;          179     Freggeon_Rsquare    =   1.0/GeV/GeV;
180     Freggeon_C          =   1.0;                  180     Freggeon_C          =   1.0;
181     FParity             =  +1;                    181     FParity             =  +1;
182                                                   182 
183     Wreggeon_Alpha      =   0.5;                  183     Wreggeon_Alpha      =   0.5;
184     Wreggeon_Gamma      =   0.56/GeV/GeV;   //    184     Wreggeon_Gamma      =   0.56/GeV/GeV;   // 1.12 -> 0.56 Uzhi
185     Wreggeon_Rsquare    =   9.19/GeV/GeV;         185     Wreggeon_Rsquare    =   9.19/GeV/GeV;
186     Wreggeon_Alphaprime =   0.9/GeV/GeV;          186     Wreggeon_Alphaprime =   0.9/GeV/GeV;
187     Wreggeon_C          =   1.0;                  187     Wreggeon_C          =   1.0;
188     if (PDGcode > 0) WParity = -1;                188     if (PDGcode > 0) WParity = -1;
189     if (PDGcode < 0) WParity = +1;                189     if (PDGcode < 0) WParity = +1;
190                                                   190 
191     // Copied from G4HadronNucleonXsc::SCBMeso    191     // Copied from G4HadronNucleonXsc::SCBMesonNucleonXscNS(...)
192     if ( PDGcode == 511 || PDGcode ==-511 ||      192     if ( PDGcode == 511 || PDGcode ==-511 ||     // B0     or  anti_B0  or
193          PDGcode == 521 || PDGcode ==-521   )     193          PDGcode == 521 || PDGcode ==-521   ) {  // B+     or  B-
194       coeff = llMesCof1B;                         194       coeff = llMesCof1B;
195     }                                             195     }
196     if ( PDGcode == 421 || PDGcode ==-421 ||      196     if ( PDGcode == 421 || PDGcode ==-421 ||     // D0     or  anti_D0  or
197          PDGcode == 411 || PDGcode ==-411   )     197          PDGcode == 411 || PDGcode ==-411   ) {  // D+     or  D-
198       coeff = llMesCof1C;                         198       coeff = llMesCof1C;
199     }                                             199     }
200     if ( PDGcode == 531 || PDGcode ==-531 ) {     200     if ( PDGcode == 531 || PDGcode ==-531 ) {    // Bs0    or  anti_Bs0  or
201       coeff = llMesCofSB;                         201       coeff = llMesCofSB;
202     }                                             202     }
203     if ( PDGcode == 541 || PDGcode ==-541 ) {     203     if ( PDGcode == 541 || PDGcode ==-541 ) {    // Bc+    or  Bc-
204       coeff = llMesCofCB;                         204       coeff = llMesCofCB;
205     }                                             205     }
206     if ( PDGcode == 431 || PDGcode ==-431 ) {     206     if ( PDGcode == 431 || PDGcode ==-431 ) {    // D_s+   or  D_s-
207       coeff = llMesCofSC;                         207       coeff = llMesCofSC;
208     }                                             208     }
209     if ( PDGcode == 441 || PDGcode == 443 ) {     209     if ( PDGcode == 441 || PDGcode == 443 ) {    // Eta_c  or  J/psi
210       coeff = llMesCof2C;                         210       coeff = llMesCof2C;
211     }                                             211     }
212     if ( PDGcode == 553 ) {                       212     if ( PDGcode == 553 ) {                      // Upsilon
213       coeff = llMesCof2B;                         213       coeff = llMesCof2B;
214     }                                             214     }
215     if ( PDGcode == 221 ) {                       215     if ( PDGcode == 221 ) {                      // Eta
216       coeff = llMesCofEta;                        216       coeff = llMesCofEta;
217     }                                             217     }
218     if ( PDGcode == 331 ) {                       218     if ( PDGcode == 331 ) {                      // Eta'
219       coeff = llMesCofEtaP;                       219       coeff = llMesCofEtaP;
220     }                                             220     }
221     // End of Copied from G4HadronNucleonXsc::    221     // End of Copied from G4HadronNucleonXsc::SCBMesonNucleonXscNS(...)
222                                                   222 
223     Gamma_pomeron_Pr *= coeff;                    223     Gamma_pomeron_Pr *= coeff;
224                                                   224 
225   } else if ( absPDGcode == 321 || absPDGcode     225   } else if ( absPDGcode == 321 || absPDGcode == 311 || 
226                  PDGcode == 130 ||    PDGcode     226                  PDGcode == 130 ||    PDGcode == 310   ) {  // Projectile is a Kaon
227                                                   227 
228     Cpr_pomeron = 1.522;                          228     Cpr_pomeron = 1.522; 
229     Ctr_pomeron = C_pomeron_N;                    229     Ctr_pomeron = C_pomeron_N; 
230     C_pomeron   = Cpr_pomeron*Ctr_pomeron;        230     C_pomeron   = Cpr_pomeron*Ctr_pomeron;
231                                                   231 
232     Gamma_pomeron_Pr = 0.90/GeV;                  232     Gamma_pomeron_Pr = 0.90/GeV;
233     Gamma_pomeron_Tr = Gamma_pomeron_N;           233     Gamma_pomeron_Tr = Gamma_pomeron_N;
234     Gamma_pomeron    = Gamma_pomeron_Pr * Gamm    234     Gamma_pomeron    = Gamma_pomeron_Pr * Gamma_pomeron_Tr;
235                                                   235 
236     Rsquare_pomeron_Pr = 0.31/GeV/GeV;            236     Rsquare_pomeron_Pr = 0.31/GeV/GeV;
237     Rsquare_pomeron_Tr = Rsquare_pomeron_N;       237     Rsquare_pomeron_Tr = Rsquare_pomeron_N;
238     Rsquare_pomeron    = Rsquare_pomeron_Pr +     238     Rsquare_pomeron    = Rsquare_pomeron_Pr + Rsquare_pomeron_Tr;
239                                                   239 
240     Freggeon_Alpha      =   0.7;                  240     Freggeon_Alpha      =   0.7;
241     Freggeon_Alphaprime =   0.8/GeV/GeV;          241     Freggeon_Alphaprime =   0.8/GeV/GeV;
242     Freggeon_Gamma      =   1.32/GeV/GeV;         242     Freggeon_Gamma      =   1.32/GeV/GeV;
243     Freggeon_Rsquare    =   0.5/GeV/GeV;          243     Freggeon_Rsquare    =   0.5/GeV/GeV;
244                                                   244 
245     Freggeon_C          =   1.0;                  245     Freggeon_C          =   1.0;
246     FParity             =  +1;                    246     FParity             =  +1;
247                                                   247 
248     Wreggeon_Alpha      =   0.4;                  248     Wreggeon_Alpha      =   0.4;
249     Wreggeon_Alphaprime =   0.9 /GeV/GeV;         249     Wreggeon_Alphaprime =   0.9 /GeV/GeV;
250     Wreggeon_Gamma      =   1.68/GeV/GeV;         250     Wreggeon_Gamma      =   1.68/GeV/GeV;
251     Wreggeon_Rsquare    =   9.19/GeV/GeV;         251     Wreggeon_Rsquare    =   9.19/GeV/GeV;
252     Wreggeon_C          =   1.0;                  252     Wreggeon_C          =   1.0;
253                                                   253 
254     if (PDGcode > 0) WParity = -1;                254     if (PDGcode > 0) WParity = -1;
255     if (PDGcode < 0) WParity = +1;                255     if (PDGcode < 0) WParity = +1;
256                                                   256 
257   } else if ( absPDGcode == 22 ) {  // Project    257   } else if ( absPDGcode == 22 ) {  // Projectile is Gamma
258                                                   258 
259     Cpr_pomeron = 1.437;                          259     Cpr_pomeron = 1.437; 
260     Ctr_pomeron = C_pomeron_N;                    260     Ctr_pomeron = C_pomeron_N; 
261     C_pomeron   = Cpr_pomeron*Ctr_pomeron;        261     C_pomeron   = Cpr_pomeron*Ctr_pomeron;
262                                                   262 
263     Gamma_pomeron_Pr = 0.0035/GeV;         //     263     Gamma_pomeron_Pr = 0.0035/GeV;         // 1.415 
264     Gamma_pomeron_Tr = Gamma_pomeron_N;           264     Gamma_pomeron_Tr = Gamma_pomeron_N;
265     Gamma_pomeron    = Gamma_pomeron_Pr * Gamm    265     Gamma_pomeron    = Gamma_pomeron_Pr * Gamma_pomeron_Tr;
266                                                   266 
267     Rsquare_pomeron_Pr = 0.51/GeV/GeV;            267     Rsquare_pomeron_Pr = 0.51/GeV/GeV;
268     Rsquare_pomeron_Tr = Rsquare_pomeron_N;       268     Rsquare_pomeron_Tr = Rsquare_pomeron_N;
269     Rsquare_pomeron    = Rsquare_pomeron_Pr +     269     Rsquare_pomeron    = Rsquare_pomeron_Pr + Rsquare_pomeron_Tr;
270                                                   270 
271     Freggeon_Alpha      =   0.7;                  271     Freggeon_Alpha      =   0.7;
272     Freggeon_Alphaprime =   0.8/GeV/GeV;          272     Freggeon_Alphaprime =   0.8/GeV/GeV;
273     Freggeon_Gamma      =   0.011/GeV/GeV;        273     Freggeon_Gamma      =   0.011/GeV/GeV;
274     Freggeon_Rsquare    =   0.5/GeV/GeV;          274     Freggeon_Rsquare    =   0.5/GeV/GeV;
275     Freggeon_C          =   1.0;                  275     Freggeon_C          =   1.0;
276     FParity             =  +1;                    276     FParity             =  +1;
277                                                   277 
278     Wreggeon_Alpha      =   0.;                   278     Wreggeon_Alpha      =   0.;
279     Wreggeon_Alphaprime =   0.9/GeV/GeV;          279     Wreggeon_Alphaprime =   0.9/GeV/GeV;
280     Wreggeon_Gamma      =   0.01/GeV/GeV;         280     Wreggeon_Gamma      =   0.01/GeV/GeV;
281     Wreggeon_Rsquare    =   1.0/GeV/GeV;          281     Wreggeon_Rsquare    =   1.0/GeV/GeV;
282     Wreggeon_C          =   1.0;                  282     Wreggeon_C          =   1.0;
283     WParity             =  +1;                    283     WParity             =  +1;
284                                                   284 
285   } else {  // Projectile is undefined, Nucleo    285   } else {  // Projectile is undefined, Nucleon assumed
286                                                   286 
287     Cpr_pomeron = C_pomeron_N;                    287     Cpr_pomeron = C_pomeron_N; 
288     Ctr_pomeron = C_pomeron_N;                    288     Ctr_pomeron = C_pomeron_N; 
289     C_pomeron   = Cpr_pomeron*Ctr_pomeron;        289     C_pomeron   = Cpr_pomeron*Ctr_pomeron;
290                                                   290 
291     Gamma_pomeron_Pr = Gamma_pomeron_N;           291     Gamma_pomeron_Pr = Gamma_pomeron_N;
292     Gamma_pomeron_Tr = Gamma_pomeron_N;           292     Gamma_pomeron_Tr = Gamma_pomeron_N;
293     Gamma_pomeron    = Gamma_pomeron_Pr * Gamm    293     Gamma_pomeron    = Gamma_pomeron_Pr * Gamma_pomeron_Tr;
294                                                   294 
295     Rsquare_pomeron_Pr = Rsquare_pomeron_N;       295     Rsquare_pomeron_Pr = Rsquare_pomeron_N;
296     Rsquare_pomeron_Tr = Rsquare_pomeron_N;       296     Rsquare_pomeron_Tr = Rsquare_pomeron_N;
297     Rsquare_pomeron    = Rsquare_pomeron_Pr +     297     Rsquare_pomeron    = Rsquare_pomeron_Pr + Rsquare_pomeron_Tr;
298                                                   298 
299     Freggeon_Alpha      =   0.723;                299     Freggeon_Alpha      =   0.723;
300     Freggeon_Gamma      =   8.801/GeV/GeV;        300     Freggeon_Gamma      =   8.801/GeV/GeV;
301     Freggeon_Rsquare    =   0.396/GeV/GeV;        301     Freggeon_Rsquare    =   0.396/GeV/GeV;
302     Freggeon_Alphaprime =   1.324/GeV/GeV;        302     Freggeon_Alphaprime =   1.324/GeV/GeV;
303     Freggeon_C          =   1.0;                  303     Freggeon_C          =   1.0;
304     FParity             =  +1;                    304     FParity             =  +1;
305                                                   305 
306     Wreggeon_Alpha      =   0.353;                306     Wreggeon_Alpha      =   0.353;
307     Wreggeon_Gamma      =   8.516/GeV/GeV;        307     Wreggeon_Gamma      =   8.516/GeV/GeV;
308     Wreggeon_Rsquare    =  24.40/GeV/GeV;         308     Wreggeon_Rsquare    =  24.40/GeV/GeV;
309     Wreggeon_Alphaprime =   1.5/GeV/GeV;          309     Wreggeon_Alphaprime =   1.5/GeV/GeV;
310     Wreggeon_C          =   1.0;                  310     Wreggeon_C          =   1.0;
311     WParity             =  -1;                    311     WParity             =  -1;
312                                                   312 
313   }                                               313   }
314                                                   314 
315   chiPin=0.;                                      315   chiPin=0.;
316   Xtotal  =0.; XtotalP=0.; XtotalR=0.;            316   Xtotal  =0.; XtotalP=0.; XtotalR=0.;
317   Xelastic=0.; Xpr_Diff=0.; Xtr_Diff=0.; XDDif    317   Xelastic=0.; Xpr_Diff=0.; Xtr_Diff=0.; XDDiff=0.;
318   Xinel   =0.; Xnd=0.; XndP=0.; XndR=0.;          318   Xinel   =0.; Xnd=0.; XndP=0.; XndR=0.;
319   /*                                              319   /*
320   G4cout<<G4endl<<"Reggeon's parameters for Pa    320   G4cout<<G4endl<<"Reggeon's parameters for Particle "<<particle->GetParticleName()<<" "<<PDGcode<<G4endl<<G4endl;
321   G4cout<<"Alpha_pomeron "<<Alpha_pomeron;        321   G4cout<<"Alpha_pomeron "<<Alpha_pomeron;
322   G4cout<<" Alphaprime_pomeron "<<Alphaprime_p    322   G4cout<<" Alphaprime_pomeron "<<Alphaprime_pomeron*GeV*GeV;
323   G4cout<<" S0_pomeron "<<S0_pomeron/GeV/GeV<<    323   G4cout<<" S0_pomeron "<<S0_pomeron/GeV/GeV<<G4endl;
324   G4cout<<"Gamma_pomeron "<<Gamma_pomeron*GeV*    324   G4cout<<"Gamma_pomeron "<<Gamma_pomeron*GeV*GeV;
325   G4cout<<" Rsquare_pomeron "<<Rsquare_pomeron    325   G4cout<<" Rsquare_pomeron "<<Rsquare_pomeron*GeV*GeV;
326   G4cout<<" C_pomeron     "<<C_pomeron<<G4endl    326   G4cout<<" C_pomeron     "<<C_pomeron<<G4endl<<G4endl;
327   G4int Uzhi; G4cin>>Uzhi;                        327   G4int Uzhi; G4cin>>Uzhi;
328   */                                              328   */ 
329 }                                                 329 }
330                                                   330 
331                                                   331 
332 G4double G4Reggeons::Get_Cprojectile() {return    332 G4double G4Reggeons::Get_Cprojectile() {return Cpr_pomeron;}
333                                                   333 
334                                                   334 
335 G4double G4Reggeons::Get_Ctarget()     {return    335 G4double G4Reggeons::Get_Ctarget()     {return Ctr_pomeron;}
336                                                   336 
337                                                   337 
338 G4Reggeons::~G4Reggeons() {}                      338 G4Reggeons::~G4Reggeons() {}
339                                                   339 
340                                                   340 
341 void G4Reggeons::SetS(G4double S) {Sint = S;}     341 void G4Reggeons::SetS(G4double S) {Sint = S;}
342                                                   342 
343                                                   343 
344 void G4Reggeons::CalculateXs()                    344 void G4Reggeons::CalculateXs()
345 {                                                 345 {
346   Xtotal  =0.; XtotalP=0.; XtotalR=0.;            346   Xtotal  =0.; XtotalP=0.; XtotalR=0.;
347   Xelastic=0.; Xpr_Diff=0.; Xtr_Diff=0.; XDDif    347   Xelastic=0.; Xpr_Diff=0.; Xtr_Diff=0.; XDDiff=0.; G4double XDiff=0.; 
348   Xinel   =0.; Xnd=0.; XndP=0.; XndR=0.;          348   Xinel   =0.; Xnd=0.; XndP=0.; XndR=0.;
349                                                   349 
350   G4double AmplitudeP(0.), AmplitudeR(0.);        350   G4double AmplitudeP(0.), AmplitudeR(0.);
351                                                   351 
352   G4double B_max = 10.*fermi;                     352   G4double B_max = 10.*fermi;
353   G4double dB    = B_max/10000.;                  353   G4double dB    = B_max/10000.;
354                                                   354 
355   G4double B =-dB/2.;                             355   G4double B =-dB/2.;
356                                                   356 
357   G4double chiP(0.), chiR(0.), chiRin(0.);   /    357   G4double chiP(0.), chiR(0.), chiRin(0.);   // chiPin Pomeron inelastic phase is a data member
358   chiPin=0.;                                      358   chiPin=0.;
359   for(G4int i=0; i<10000;i++)                     359   for(G4int i=0; i<10000;i++)
360   {                                               360   {
361     B += dB;                                      361     B += dB;
362                                                   362 
363     chiP   = Chi_pomeron(1.,B); chiR   = Chi_r    363     chiP   = Chi_pomeron(1.,B); chiR   = Chi_reggeon(1.,B);
364     chiPin = Chi_pomeron(2.,B); chiRin = Chi_r    364     chiPin = Chi_pomeron(2.,B); chiRin = Chi_reggeon(2.,B);
365                                                   365 
366     AmplitudeP = (1.0/C_pomeron)*(1.0 - G4Exp(    366     AmplitudeP = (1.0/C_pomeron)*(1.0 - G4Exp(-chiP))*G4Exp(-chiR);
367     AmplitudeR =                 (1.0 - G4Exp(    367     AmplitudeR =                 (1.0 - G4Exp(-chiR));
368                                                   368 
369     Xtotal   += 2 * (AmplitudeP + AmplitudeR)     369     Xtotal   += 2 * (AmplitudeP + AmplitudeR) * B * dB;
370     XtotalP  += 2 * (AmplitudeP + 0.        )     370     XtotalP  += 2 * (AmplitudeP + 0.        ) * B * dB;
371     XtotalR  += 2 * (0.         + AmplitudeR)     371     XtotalR  += 2 * (0.         + AmplitudeR) * B * dB;
372                                                   372 
373     Xelastic +=                       sqr(Ampl    373     Xelastic +=                       sqr(AmplitudeP + AmplitudeR) * B * dB;
374     Xpr_Diff +=  (Cpr_pomeron - 1.0) * sqr(Amp    374     Xpr_Diff +=  (Cpr_pomeron - 1.0) * sqr(AmplitudeP)   * B * dB;
375     Xtr_Diff +=  (Ctr_pomeron - 1.0) * sqr(Amp    375     Xtr_Diff +=  (Ctr_pomeron - 1.0) * sqr(AmplitudeP)   * B * dB;
376     XDiff    +=  (Cpr_pomeron - 1.0) * (Ctr_po    376     XDiff    +=  (Cpr_pomeron - 1.0) * (Ctr_pomeron - 1.0) * sqr(AmplitudeP)   * B * dB;
377                                                   377 
378     // ----------------------------------         378     // ----------------------------------
379     AmplitudeP = (1.0/C_pomeron)*(1.0 - G4Exp(    379     AmplitudeP = (1.0/C_pomeron)*(1.0 - G4Exp(-chiPin))*G4Exp(-chiRin);
380     AmplitudeR =                 (1.0 - G4Exp(    380     AmplitudeR =                 (1.0 - G4Exp(-chiRin));
381                                                   381 
382     Xnd      += (AmplitudeP + AmplitudeR) * B     382     Xnd      += (AmplitudeP + AmplitudeR) * B * dB;
383     XndP     += (AmplitudeP + 0.        ) * B     383     XndP     += (AmplitudeP + 0.        ) * B * dB;
384     XndR     += (0.         + AmplitudeR) * B     384     XndR     += (0.         + AmplitudeR) * B * dB;
385   }                                               385   }
386                                                   386 
387   Xtotal *=twopi; XtotalP *=twopi; XtotalR *=t    387   Xtotal *=twopi; XtotalP *=twopi; XtotalR *=twopi;
388   Xelastic *=twopi; Xpr_Diff *=twopi; Xtr_Diff    388   Xelastic *=twopi; Xpr_Diff *=twopi; Xtr_Diff *=twopi; XDiff *=twopi;
389   Xinel = Xtotal - Xelastic;                      389   Xinel = Xtotal - Xelastic; 
390   (void)Xinel;  // To avoid compiler warning "    390   (void)Xinel;  // To avoid compiler warning "variable not used"
391                                                   391 
392   Xnd  *=twopi; XndP *=twopi; XndR *=twopi;       392   Xnd  *=twopi; XndP *=twopi; XndR *=twopi;
393   XDDiff = XDiff-Xpr_Diff-Xtr_Diff;               393   XDDiff = XDiff-Xpr_Diff-Xtr_Diff;
394                                                   394 
395   /*                                              395   /*
396   G4cout<<"Total totalP totalR  "<<Xtotal/mill    396   G4cout<<"Total totalP totalR  "<<Xtotal/millibarn  <<" "<<XtotalP/millibarn <<" "<<XtotalR/millibarn<<" mb"<<G4endl;
397   G4cout<<"Elastic              "<<Xelastic/mi    397   G4cout<<"Elastic              "<<Xelastic/millibarn                                                        <<G4endl;
398   G4cout<<"PrDiff TrDiff W_Diff "<<Xpr_Diff/mi    398   G4cout<<"PrDiff TrDiff W_Diff "<<Xpr_Diff/millibarn<<" "<<Xtr_Diff/millibarn<<" "<<XDiff/millibarn<<G4endl;
399   G4cout<<"Inelastic            "<<Xinel/milli    399   G4cout<<"Inelastic            "<<Xinel/millibarn                                                           <<G4endl;
400   G4cout<<"NonDiff Pom & Reg    "<<Xnd/milliba    400   G4cout<<"NonDiff Pom & Reg    "<<Xnd/millibarn     <<" "<<XndP/millibarn    <<" "<<XndR/millibarn          <<G4endl;
401   */                                              401   */
402 }                                                 402 }
403                                                   403 
404                                                   404 
405 G4double G4Reggeons::Chi_pomeron(G4double Mult    405 G4double G4Reggeons::Chi_pomeron(G4double Mult, G4double B)
406 {                                                 406 {
407   G4double R2 = Rsquare_pomeron + Alphaprime_p    407   G4double R2 = Rsquare_pomeron + Alphaprime_pomeron * G4Log(Sint/S0_pomeron); 
408   G4double Eikonal = Mult * C_pomeron * Gamma_    408   G4double Eikonal = Mult * C_pomeron * Gamma_pomeron/R2 * 
409          G4Pow::GetInstance()->powA(Sint/S0_po    409          G4Pow::GetInstance()->powA(Sint/S0_pomeron, Alpha_pomeron -1.) *
410                      G4Exp(-sqr(B)/4.0/R2/hbar    410                      G4Exp(-sqr(B)/4.0/R2/hbarc_squared);
411   return Eikonal;                                 411   return Eikonal;
412 }                                                 412 }
413                                                   413 
414                                                   414 
415 G4double G4Reggeons::Chi_reggeon(G4double Mult    415 G4double G4Reggeons::Chi_reggeon(G4double Mult, G4double B)
416 {                                                 416 {
417   G4double R2F = Freggeon_Rsquare + Freggeon_A    417   G4double R2F = Freggeon_Rsquare + Freggeon_Alphaprime * G4Log(Sint/S0_pomeron); 
418   G4double R2W = Wreggeon_Rsquare + Wreggeon_A    418   G4double R2W = Wreggeon_Rsquare + Wreggeon_Alphaprime * G4Log(Sint/S0_pomeron); 
419                                                   419 
420   G4double Eikonal = Mult * FParity * Freggeon    420   G4double Eikonal = Mult * FParity * Freggeon_C * Freggeon_Gamma/R2F * 
421          G4Pow::GetInstance()->powA(Sint/S0_po    421          G4Pow::GetInstance()->powA(Sint/S0_pomeron, Freggeon_Alpha -1.) *
422                      G4Exp(-sqr(B)/4.0/R2F/hba    422                      G4Exp(-sqr(B)/4.0/R2F/hbarc_squared);
423                                                   423 
424   Eikonal+= Mult * WParity * Wreggeon_C * Wreg    424   Eikonal+= Mult * WParity * Wreggeon_C * Wreggeon_Gamma/R2W * 
425       G4Pow::GetInstance()->powA(Sint/S0_pomer    425       G4Pow::GetInstance()->powA(Sint/S0_pomeron, Wreggeon_Alpha -1.) *
426             G4Exp(-sqr(B)/4.0/R2W/hbarc_square    426             G4Exp(-sqr(B)/4.0/R2W/hbarc_squared);
427   return Eikonal;                                 427   return Eikonal;
428 }                                                 428 }
429                                                   429 
430                                                   430 
431 G4double G4Reggeons::GetTotalX()  { return Xto    431 G4double G4Reggeons::GetTotalX()  { return Xtotal;             }
432 G4double G4Reggeons::GetTotalXp() { return Xto    432 G4double G4Reggeons::GetTotalXp() { return XtotalP;            }
433 G4double G4Reggeons::GetTotalXr() { return Xto    433 G4double G4Reggeons::GetTotalXr() { return XtotalR;            }
434                                                   434 
435 G4double G4Reggeons::GetElasticX(){ return Xel    435 G4double G4Reggeons::GetElasticX(){ return Xelastic;           }
436 G4double G4Reggeons::GetPrDiffX() { return Xpr    436 G4double G4Reggeons::GetPrDiffX() { return Xpr_Diff;           }
437 G4double G4Reggeons::GetTrDiffX() { return Xtr    437 G4double G4Reggeons::GetTrDiffX() { return Xtr_Diff;           }
438 G4double G4Reggeons::GetDDiffX()  { return XDD    438 G4double G4Reggeons::GetDDiffX()  { return XDDiff;             }
439                                                   439 
440 G4double G4Reggeons::GetInelX()   { return Xin    440 G4double G4Reggeons::GetInelX()   { return Xinel;              }
441                                                   441 
442 G4double G4Reggeons::GetND_X()    { return Xnd    442 G4double G4Reggeons::GetND_X()    { return Xnd;                }
443 G4double G4Reggeons::GetNDp_X()   { return Xnd    443 G4double G4Reggeons::GetNDp_X()   { return XndP;               }
444 G4double G4Reggeons::GetNDr_X()   { return Xnd    444 G4double G4Reggeons::GetNDr_X()   { return XndR;               }
445                                                   445 
446                                                   446 
447 //--------------------------------------------    447 //----------------------------------------------------------------------------------------------
448 void G4Reggeons::GetProbabilities(G4double B,     448 void G4Reggeons::GetProbabilities(G4double B, G4int Mode,
449           G4double & Pint,                        449           G4double & Pint, 
450                                   G4double & P    450                                   G4double & Pprd, G4double & Ptrd, G4double & Pdd, 
451                                   G4double & P    451                                   G4double & Pnd,  G4double & Pnvr)
452 {                                                 452 {
453   // Puprose of the method is a calculation of    453   // Puprose of the method is a calculation of inelastic interaction probability     (Pint),
454   //                                              454   //                                           probability of projectile diffraction (Pprd),
455   //                                              455   //                                           probability of target diffraction     (Ptrd),
456   //                                              456   //                                           probability of double diffraction     (Pdd ),
457   //                                              457   //                                           probability of non-diffractive inter. (Pnd ),
458   //                                              458   //                                           probability of quark-exc. inter.      (Pnvr),
459   //                                              459   //                                           number of cutted pomerons             (NcutPomerons).
460   // The input parameters are B - impact param    460   // The input parameters are B - impact parameter, and Mode = All/WITHOUT_R/NON_DIFF
461   //                                              461   //
462   if ( B > 2.* fermi ) { Pint=0.; Pprd=0.; Ptr    462   if ( B > 2.* fermi ) { Pint=0.; Pprd=0.; Ptrd=0.; Pdd=0.; Pnd=0.; Pnvr=0.; return;}
463   // At large B for hN collisions it is better    463   // At large B for hN collisions it is better to return zero inter. probability
464                                                   464   
465   G4double chiP   = Chi_pomeron(1.,B); G4doubl    465   G4double chiP   = Chi_pomeron(1.,B); G4double chiR   = Chi_reggeon(1.,B);
466            chiPin = Chi_pomeron(2.,B); G4doubl    466            chiPin = Chi_pomeron(2.,B); G4double chiRin = Chi_reggeon(2.,B);
467      //chiPin is data member of the class         467      //chiPin is data member of the class
468                                                   468 
469   G4double Exp_ChiR   = G4Exp(-chiR);             469   G4double Exp_ChiR   = G4Exp(-chiR);
470                                                   470 
471   G4double AmplitudeP = (1.0/C_pomeron)*(1.0 -    471   G4double AmplitudeP = (1.0/C_pomeron)*(1.0 - G4Exp(-chiP))*Exp_ChiR;
472   G4double AmplitudeR =                 (1.0 -    472   G4double AmplitudeR =                 (1.0 - Exp_ChiR);
473                                                   473 
474   G4double AmplitudeP2, Apr_Diff, Atr_Diff, AD    474   G4double AmplitudeP2, Apr_Diff, Atr_Diff, ADiff;
475                                                   475 
476   // Aelastic = sqr(AmplitudeP + AmplitudeR);     476   // Aelastic = sqr(AmplitudeP + AmplitudeR);  
477   AmplitudeP2 = sqr(AmplitudeP);                  477   AmplitudeP2 = sqr(AmplitudeP);
478   Apr_Diff = (Cpr_pomeron - 1.0) * AmplitudeP2    478   Apr_Diff = (Cpr_pomeron - 1.0) * AmplitudeP2;
479   Atr_Diff = (Ctr_pomeron - 1.0) * AmplitudeP2    479   Atr_Diff = (Ctr_pomeron - 1.0) * AmplitudeP2;
480   ADiff    = (Cpr_pomeron - 1.0) * (Ctr_pomero    480   ADiff    = (Cpr_pomeron - 1.0) * (Ctr_pomeron - 1.0) * AmplitudeP2;
481                                                   481 
482   // ----------------------------------           482   // ----------------------------------
483   Exp_ChiR   = G4Exp(-chiRin);                    483   Exp_ChiR   = G4Exp(-chiRin);
484   AmplitudeP = (1.0/C_pomeron)*(1.0 - G4Exp(-c    484   AmplitudeP = (1.0/C_pomeron)*(1.0 - G4Exp(-chiPin))*Exp_ChiR;
485   AmplitudeR =                 (1.0 - Exp_ChiR    485   AmplitudeR =                 (1.0 - Exp_ChiR);
486                                                   486 
487   G4double And, AndP, AndR;                       487   G4double And, AndP, AndR;
488                                                   488 
489   And      = (AmplitudeP + AmplitudeR);           489   And      = (AmplitudeP + AmplitudeR);
490   AndP     = (AmplitudeP + 0.        );           490   AndP     = (AmplitudeP + 0.        );
491   AndR     = (0.         + AmplitudeR);           491   AndR     = (0.         + AmplitudeR);
492                                                   492 
493   // ----------------------------------           493   // ----------------------------------
494   if ( Mode == ALL)                               494   if ( Mode == ALL)
495   {                                               495   {
496     Pint = Apr_Diff + Atr_Diff + ADiff + And;     496     Pint = Apr_Diff + Atr_Diff + ADiff + And;
497     Pprd = Apr_Diff/Pint;                         497     Pprd = Apr_Diff/Pint;                     // Probability of projectile diffraction
498     Ptrd = Atr_Diff/Pint;                         498     Ptrd = Atr_Diff/Pint;                     // Probability of target diffraction 
499     Pdd  = ADiff   /Pint;                         499     Pdd  = ADiff   /Pint;                     // Probability of double diffraction
500     Pnd  = AndP    /Pint;                         500     Pnd  = AndP    /Pint;                     // Probability of non-diffractive inelastic interaction
501     Pnvr = AndR    /Pint;                         501     Pnvr = AndR    /Pint;                     // Probability of non-vacuum reggeon (nvr) inelastic interaction
502   }                                               502   }
503   else if ( Mode == WITHOUT_R)                    503   else if ( Mode == WITHOUT_R)
504   {                                               504   {
505     Pint = Apr_Diff + Atr_Diff + ADiff + AndP;    505     Pint = Apr_Diff + Atr_Diff + ADiff + AndP;
506     Pprd = Apr_Diff/Pint;                         506     Pprd = Apr_Diff/Pint; 
507     Ptrd = Atr_Diff/Pint;                         507     Ptrd = Atr_Diff/Pint; 
508     Pdd  = ADiff   /Pint;                         508     Pdd  = ADiff   /Pint;
509     Pnd  = AndP    /Pint;                         509     Pnd  = AndP    /Pint;
510     Pnvr = 0.;                                    510     Pnvr = 0.;
511   }                                               511   }
512   else                                            512   else
513   { // Mode == NON_DIFF (of projectile)           513   { // Mode == NON_DIFF (of projectile)
514     Pint = Atr_Diff         + AndP;               514     Pint = Atr_Diff         + AndP;
515     Pprd = 0.;                                    515     Pprd = 0.;
516     Ptrd = Atr_Diff/Pint;                         516     Ptrd = Atr_Diff/Pint; 
517     Pdd  = 0.;                                    517     Pdd  = 0.;
518     Pnd  = AndP    /Pint;                         518     Pnd  = AndP    /Pint;
519     Pnvr = 0.;                                    519     Pnvr = 0.;
520   }                                               520   }
521   return;                                         521   return;
522 }                                                 522 }
523                                                   523 
524                                                   524 
525 G4int G4Reggeons::ncPomerons()         // Non-    525 G4int G4Reggeons::ncPomerons()         // Non-complete Poisson distribution
526 {                                                 526 {
527   if ( chiPin < 0.001 ) return 0;  // At small    527   if ( chiPin < 0.001 ) return 0;  // At small average multiplicity of cutted pomerons
528            // it is better to return 0 to avoi    528            // it is better to return 0 to avoid problems with
529            // calculation exactness.              529            // calculation exactness.
530   G4double ksi  = G4UniformRand() * (1.0-G4Exp    530   G4double ksi  = G4UniformRand() * (1.0-G4Exp(-chiPin)) * G4Exp(chiPin);
531   G4double Term = chiPin;                         531   G4double Term = chiPin;
532   G4double Sum  = Term;                           532   G4double Sum  = Term;
533   G4int nCuts   = 1;                              533   G4int nCuts   = 1;
534                                                   534 
535   while ( Sum < ksi) {                            535   while ( Sum < ksi) {
536     nCuts++;                                      536     nCuts++;
537     Term *= chiPin/(G4double) nCuts;              537     Term *= chiPin/(G4double) nCuts;
538     Sum += Term;                                  538     Sum += Term;
539   }                                               539   }
540                                                   540 
541   return nCuts;                                   541   return nCuts;
542 }                                                 542 }
543                                                   543 
544                                                   544