Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/utils/src/G4INCLParticleTable.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/inclxx/utils/src/G4INCLParticleTable.cc (Version 11.3.0) and /processes/hadronic/models/inclxx/utils/src/G4INCLParticleTable.cc (Version 10.2)


  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 // INCL++ intra-nuclear cascade model              26 // INCL++ intra-nuclear cascade model
 27 // Alain Boudard, CEA-Saclay, France               27 // Alain Boudard, CEA-Saclay, France
 28 // Joseph Cugnon, University of Liege, Belgium     28 // Joseph Cugnon, University of Liege, Belgium
 29 // Jean-Christophe David, CEA-Saclay, France       29 // Jean-Christophe David, CEA-Saclay, France
 30 // Pekka Kaitaniemi, CEA-Saclay, France, and H     30 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
 31 // Sylvie Leray, CEA-Saclay, France                31 // Sylvie Leray, CEA-Saclay, France
 32 // Davide Mancusi, CEA-Saclay, France              32 // Davide Mancusi, CEA-Saclay, France
 33 //                                                 33 //
 34 #define INCLXX_IN_GEANT4_MODE 1                    34 #define INCLXX_IN_GEANT4_MODE 1
 35                                                    35 
 36 #include "globals.hh"                              36 #include "globals.hh"
 37                                                    37 
 38 #include "G4INCLParticleTable.hh"                  38 #include "G4INCLParticleTable.hh"
 39 #include "G4INCLNuclearMassTable.hh"               39 #include "G4INCLNuclearMassTable.hh"
 40 #include <algorithm>                               40 #include <algorithm>
 41 // #include <cassert>                              41 // #include <cassert>
 42 #include <cmath>                                   42 #include <cmath>
 43 #include <cctype>                                  43 #include <cctype>
 44 #include <sstream>                                 44 #include <sstream>
 45 #ifdef INCLXX_IN_GEANT4_MODE                       45 #ifdef INCLXX_IN_GEANT4_MODE
 46 #include "G4SystemOfUnits.hh"                      46 #include "G4SystemOfUnits.hh"
 47 #endif                                             47 #endif
 48                                                    48 
 49 #ifdef INCLXX_IN_GEANT4_MODE                       49 #ifdef INCLXX_IN_GEANT4_MODE
 50 #include "G4PhysicalConstants.hh"                  50 #include "G4PhysicalConstants.hh"
 51 #include "G4SystemOfUnits.hh"                      51 #include "G4SystemOfUnits.hh"
 52 #endif                                             52 #endif
 53                                                    53 
 54 namespace G4INCL {                                 54 namespace G4INCL {
 55                                                    55 
 56   namespace ParticleTable {                        56   namespace ParticleTable {
 57                                                    57 
 58     namespace {                                    58     namespace {
 59                                                    59 
 60       /// \brief Static instance of the Natura     60       /// \brief Static instance of the NaturalIsotopicAbundances class
 61       const NaturalIsotopicDistributions *theN     61       const NaturalIsotopicDistributions *theNaturalIsotopicDistributions = NULL;
 62                                                    62 
 63       const G4double theINCLNucleonMass = 938.     63       const G4double theINCLNucleonMass = 938.2796;
 64       const G4double theINCLPionMass = 138.0;      64       const G4double theINCLPionMass = 138.0;
 65       const G4double theINCLLambdaMass = 1115. << 
 66       //const G4double theINCLSigmaMass = 1197 << 
 67       //const G4double theINCLKaonMass = 497.6 << 
 68       const G4double theINCLEtaMass = 547.862; << 
 69       const G4double theINCLOmegaMass = 782.65 << 
 70       const G4double theINCLEtaPrimeMass = 957 << 
 71       const G4double theINCLPhotonMass = 0.0;  << 
 72       G4ThreadLocal G4double protonMass = 0.0;     65       G4ThreadLocal G4double protonMass = 0.0;
 73       G4ThreadLocal G4double neutronMass = 0.0     66       G4ThreadLocal G4double neutronMass = 0.0;
 74       G4ThreadLocal G4double piPlusMass = 0.0;     67       G4ThreadLocal G4double piPlusMass = 0.0;
 75       G4ThreadLocal G4double piMinusMass = 0.0     68       G4ThreadLocal G4double piMinusMass = 0.0;
 76       G4ThreadLocal G4double piZeroMass = 0.0;     69       G4ThreadLocal G4double piZeroMass = 0.0;
 77       G4ThreadLocal G4double SigmaPlusMass = 0 << 
 78       G4ThreadLocal G4double SigmaZeroMass = 0 << 
 79       G4ThreadLocal G4double SigmaMinusMass =  << 
 80       G4ThreadLocal G4double LambdaMass = 0.0; << 
 81       G4ThreadLocal G4double XiMinusMass = 0.0 << 
 82       G4ThreadLocal G4double XiZeroMass = 0.0; << 
 83       G4ThreadLocal G4double antiProtonMass =  << 
 84       G4ThreadLocal G4double antiNeutronMass = << 
 85       G4ThreadLocal G4double antiSigmaPlusMass << 
 86       G4ThreadLocal G4double antiSigmaZeroMass << 
 87       G4ThreadLocal G4double antiSigmaMinusMas << 
 88       G4ThreadLocal G4double antiLambdaMass =  << 
 89       G4ThreadLocal G4double antiXiMinusMass = << 
 90       G4ThreadLocal G4double antiXiZeroMass =  << 
 91       G4ThreadLocal G4double KPlusMass = 0.0;  << 
 92       G4ThreadLocal G4double KZeroMass = 0.0;  << 
 93       G4ThreadLocal G4double KZeroBarMass = 0. << 
 94       G4ThreadLocal G4double KShortMass = 0.0; << 
 95       G4ThreadLocal G4double KLongMass = 0.0;  << 
 96       G4ThreadLocal G4double KMinusMass = 0.0; << 
 97       G4ThreadLocal G4double etaMass = 0.0;    << 
 98       G4ThreadLocal G4double omegaMass = 0.0;  << 
 99       G4ThreadLocal G4double etaPrimeMass = 0. << 
100       G4ThreadLocal G4double photonMass = 0.0; << 
101                                                    70 
102       // Hard-coded values of the real particl     71       // Hard-coded values of the real particle masses (MeV/c^2)
103       G4ThreadLocal G4double theRealProtonMass     72       G4ThreadLocal G4double theRealProtonMass = 938.27203;
104       G4ThreadLocal G4double theRealNeutronMas     73       G4ThreadLocal G4double theRealNeutronMass = 939.56536;
105       G4ThreadLocal G4double theRealChargedPiM     74       G4ThreadLocal G4double theRealChargedPiMass = 139.57018;
106       G4ThreadLocal G4double theRealPiZeroMass     75       G4ThreadLocal G4double theRealPiZeroMass = 134.9766;
107       G4ThreadLocal G4double theRealLambdaMass << 
108       G4ThreadLocal G4double theRealSigmaPlusM << 
109       G4ThreadLocal G4double theRealSigmaZeroM << 
110       G4ThreadLocal G4double theRealSigmaMinus << 
111       G4ThreadLocal G4double theRealAntiProton << 
112       G4ThreadLocal G4double theRealXiMinusMas << 
113       G4ThreadLocal G4double theRealXiZeroMass << 
114       G4ThreadLocal G4double theRealAntiNeutro << 
115       G4ThreadLocal G4double theRealAntiLambda << 
116       G4ThreadLocal G4double theRealAntiSigmaP << 
117       G4ThreadLocal G4double theRealAntiSigmaZ << 
118       G4ThreadLocal G4double theRealAntiSigmaM << 
119       G4ThreadLocal G4double theRealAntiXiMinu << 
120       G4ThreadLocal G4double theRealAntiXiZero << 
121       G4ThreadLocal G4double theRealChargedKao << 
122       G4ThreadLocal G4double theRealNeutralKao << 
123       G4ThreadLocal G4double theRealEtaMass =  << 
124       G4ThreadLocal G4double theRealOmegaMass  << 
125       G4ThreadLocal G4double theRealEtaPrimeMa << 
126       G4ThreadLocal G4double theRealPhotonMass << 
127                                                << 
128       // Width (second)                        << 
129       const G4double theChargedPiWidth = 2.603 << 
130       const G4double thePiZeroWidth = 8.52e-17 << 
131       const G4double theEtaWidth = 5.025e-19;  << 
132       const G4double theOmegaWidth = 7.7528e-2 << 
133       const G4double theEtaPrimeWidth = 3.3243 << 
134       const G4double theChargedKaonWidth = 1.2 << 
135       const G4double theKShortWidth = 8.954e-1 << 
136       const G4double theKLongWidth = 5.116e-08 << 
137       const G4double theLambdaWidth = 2.632e-1 << 
138       const G4double theSigmaPlusWidth = 8.018 << 
139       const G4double theSigmaZeroWidth = 7.4e- << 
140       const G4double theSigmaMinusWidth = 1.47 << 
141       //const G4double theXiMinusWidth = 1.639 << 
142       //const G4double theXiZeroWidth = 2.90e- << 
143       //const G4double theAntiLambdaWidth = 2. << 
144       //const G4double theAntiSigmaPlusWidth = << 
145       //const G4double theAntiSigmaZeroWidth = << 
146       //const G4double theAntiSigmaMinusWidth  << 
147       //const G4double theAntiXiMinusWidth = 1 << 
148       //const G4double theAntiXiZeroWidth = 2. << 
149       G4ThreadLocal G4double piPlusWidth = 0.0 << 
150       G4ThreadLocal G4double piMinusWidth = 0. << 
151       G4ThreadLocal G4double piZeroWidth = 0.0 << 
152       G4ThreadLocal G4double etaWidth = 0.0;   << 
153       G4ThreadLocal G4double omegaWidth = 0.0; << 
154       G4ThreadLocal G4double etaPrimeWidth = 0 << 
155       G4ThreadLocal G4double LambdaWidth = 0.0 << 
156       G4ThreadLocal G4double SigmaPlusWidth =  << 
157       G4ThreadLocal G4double SigmaZeroWidth =  << 
158       G4ThreadLocal G4double SigmaMinusWidth = << 
159       G4ThreadLocal G4double KPlusWidth = 0.0; << 
160       G4ThreadLocal G4double KMinusWidth = 0.0 << 
161       G4ThreadLocal G4double KShortWidth = 0.0 << 
162       G4ThreadLocal G4double KLongWidth = 0.0; << 
163       G4ThreadLocal G4double XiMinusWidth = 0. << 
164       G4ThreadLocal G4double XiZeroWidth = 0.0 << 
165       G4ThreadLocal G4double antiLambdaWidth = << 
166       G4ThreadLocal G4double antiSigmaZeroWidt << 
167       G4ThreadLocal G4double antiSigmaMinusWid << 
168       G4ThreadLocal G4double antiSigmaPlusWidt << 
169       G4ThreadLocal G4double antiXiZeroWidth = << 
170       G4ThreadLocal G4double antiXiMinusWidth  << 
171                                                    76 
172       const G4int mediumNucleiTableSize = 30;      77       const G4int mediumNucleiTableSize = 30;
173                                                    78 
174       const G4double mediumDiffuseness[mediumN     79       const G4double mediumDiffuseness[mediumNucleiTableSize] =
175       {0.0,0.0,0.0,0.0,0.0,1.78,1.77,1.77,1.69 <<  80       {0.0,0.0,0.0,0.0,0.0,1.78,1.77,1.77,1.77,1.71,
176         1.69,1.72,1.635,1.730,1.81,1.833,1.798 <<  81         1.69,1.69,1.635,1.730,1.81,1.833,1.798,
177         1.93,0.567,0.571, 0.560,0.549,0.550,0. <<  82         1.841,0.567,0.571, 0.560,0.549,0.550,0.551,
178         0.580,0.575,0.569,0.537,0.0,0.0};          83         0.580,0.575,0.569,0.537,0.0,0.0};
179       const G4double mediumRadius[mediumNuclei     84       const G4double mediumRadius[mediumNucleiTableSize] =
180       {0.0,0.0,0.0,0.0,0.0,0.334,0.327,0.479,0     85       {0.0,0.0,0.0,0.0,0.0,0.334,0.327,0.479,0.631,0.838,
181         0.811,0.84,1.403,1.335,1.25,1.544,1.49 <<  86         0.811,1.07,1.403,1.335,1.25,1.544,1.498,1.513,
182         2.58,2.77, 2.775,2.78,2.88,2.98,3.22,3     87         2.58,2.77, 2.775,2.78,2.88,2.98,3.22,3.03,2.84,
183         3.14,0.0,0.0};                             88         3.14,0.0,0.0};
184                                                    89 
185       const G4double positionRMS[clusterTableZ     90       const G4double positionRMS[clusterTableZSize][clusterTableASize] = {
186         /*     A=   0     1     2     3     4      91         /*     A=   0     1     2     3     4     5     6     7     8     9    10    11    12 */
187         /* Z=0 */ {-1.0, -1.0, -1.0, -1.0, -1.     92         /* Z=0 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0},
188         /* Z=1 */ {-1.0, -1.0, 2.10, 1.80, 1.7     93         /* Z=1 */ {-1.0, -1.0, 2.10, 1.80, 1.70, 1.83, 2.60, 2.50, -1.0, -1.0, -1.0, -1.0, -1.0},
189         /* Z=2 */ {-1.0, -1.0, -1.0, 1.80, 1.6     94         /* Z=2 */ {-1.0, -1.0, -1.0, 1.80, 1.68, 1.70, 2.60, 2.50, 2.50, 2.50, 2.50, -1.0, -1.0},
190         /* Z=3 */ {-1.0, -1.0, -1.0, -1.0, 1.7     95         /* Z=3 */ {-1.0, -1.0, -1.0, -1.0, 1.70, 1.83, 2.56, 2.40, 2.50, 2.50, 2.50, 2.50, 2.50},
191         /* Z=4 */ {-1.0, -1.0, -1.0, -1.0, -1.     96         /* Z=4 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.60, 2.50, 2.50, 2.51, 2.50, 2.50, 2.50},
192         /* Z=5 */ {-1.0, -1.0, -1.0, -1.0, -1.     97         /* Z=5 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.50, 2.50, 2.50, 2.50, 2.45, 2.40, 2.50},
193         /* Z=6 */ {-1.0, -1.0, -1.0, -1.0, -1.     98         /* Z=6 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.50, 2.50, 2.50, 2.50, 2.47},
194         /* Z=7 */ {-1.0, -1.0, -1.0, -1.0, -1.     99         /* Z=7 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.50, 2.50, 2.50},
195         /* Z=8 */ {-1.0, -1.0, -1.0, -1.0, -1.    100         /* Z=8 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.50}
196       };                                          101       };
197                                                   102 
198       const G4double momentumRMS[clusterTableZ    103       const G4double momentumRMS[clusterTableZSize][clusterTableASize] = {
199         /*     A=   0     1     2     3     4     104         /*     A=   0     1     2     3     4     5     6     7     8     9    10    11    12 */
200         /* Z=0 */ {-1.0, -1.0, -1.0, -1.0, -1.    105         /* Z=0 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0},
201         /* Z=1 */ {-1.0, -1.0, 77.0, 110., 153    106         /* Z=1 */ {-1.0, -1.0, 77.0, 110., 153., 100., 100., 100., -1.0, -1.0, -1.0, -1.0, -1.0},
202         /* Z=2 */ {-1.0, -1.0, -1.0, 110., 153    107         /* Z=2 */ {-1.0, -1.0, -1.0, 110., 153., 100., 100., 100., 100., 100., 100., -1.0, -1.0},
203         /* Z=3 */ {-1.0, -1.0, -1.0, -1.0, 153    108         /* Z=3 */ {-1.0, -1.0, -1.0, -1.0, 153., 100., 100., 100., 100., 100., 100., 100., 100.},
204         /* Z=4 */ {-1.0, -1.0, -1.0, -1.0, -1.    109         /* Z=4 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100., 100., 100., 100., 100., 100., 100.},
205         /* Z=5 */ {-1.0, -1.0, -1.0, -1.0, -1.    110         /* Z=5 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100., 100., 100., 100., 100., 100., 100.},
206         /* Z=6 */ {-1.0, -1.0, -1.0, -1.0, -1.    111         /* Z=6 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100., 100., 100., 100., 100.},
207         /* Z=7 */ {-1.0, -1.0, -1.0, -1.0, -1.    112         /* Z=7 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100., 100., 100.},
208         /* Z=8 */ {-1.0, -1.0, -1.0, -1.0, -1.    113         /* Z=8 */ {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100.}
209       };                                          114       };
210                                                   115 
211       const G4int elementTableSize = 113; // u    116       const G4int elementTableSize = 113; // up to Cn
212                                                   117 
213       /// \brief Table of chemical element nam    118       /// \brief Table of chemical element names
214       const std::string elementTable[elementTa    119       const std::string elementTable[elementTableSize] = {
215         "",                                       120         "",
216         "H",                                      121         "H",
217         "He",                                     122         "He",
218         "Li",                                     123         "Li",
219         "Be",                                     124         "Be",
220         "B",                                      125         "B",
221         "C",                                      126         "C",
222         "N",                                      127         "N",
223         "O",                                      128         "O",
224         "F",                                      129         "F",
225         "Ne",                                     130         "Ne",
226         "Na",                                     131         "Na",
227         "Mg",                                     132         "Mg",
228         "Al",                                     133         "Al",
229         "Si",                                     134         "Si",
230         "P",                                      135         "P",
231         "S",                                      136         "S",
232         "Cl",                                     137         "Cl",
233         "Ar",                                     138         "Ar",
234         "K",                                      139         "K",
235         "Ca",                                     140         "Ca",
236         "Sc",                                     141         "Sc",
237         "Ti",                                     142         "Ti",
238         "V",                                      143         "V",
239         "Cr",                                     144         "Cr",
240         "Mn",                                     145         "Mn",
241         "Fe",                                     146         "Fe",
242         "Co",                                     147         "Co",
243         "Ni",                                     148         "Ni",
244         "Cu",                                     149         "Cu",
245         "Zn",                                     150         "Zn",
246         "Ga",                                     151         "Ga",
247         "Ge",                                     152         "Ge",
248         "As",                                     153         "As",
249         "Se",                                     154         "Se",
250         "Br",                                     155         "Br",
251         "Kr",                                     156         "Kr",
252         "Rb",                                     157         "Rb",
253         "Sr",                                     158         "Sr",
254         "Y",                                      159         "Y",
255         "Zr",                                     160         "Zr",
256         "Nb",                                     161         "Nb",
257         "Mo",                                     162         "Mo",
258         "Tc",                                     163         "Tc",
259         "Ru",                                     164         "Ru",
260         "Rh",                                     165         "Rh",
261         "Pd",                                     166         "Pd",
262         "Ag",                                     167         "Ag",
263         "Cd",                                     168         "Cd",
264         "In",                                     169         "In",
265         "Sn",                                     170         "Sn",
266         "Sb",                                     171         "Sb",
267         "Te",                                     172         "Te",
268         "I",                                      173         "I",
269         "Xe",                                     174         "Xe",
270         "Cs",                                     175         "Cs",
271         "Ba",                                     176         "Ba",
272         "La",                                     177         "La",
273         "Ce",                                     178         "Ce",
274         "Pr",                                     179         "Pr",
275         "Nd",                                     180         "Nd",
276         "Pm",                                     181         "Pm",
277         "Sm",                                     182         "Sm",
278         "Eu",                                     183         "Eu",
279         "Gd",                                     184         "Gd",
280         "Tb",                                     185         "Tb",
281         "Dy",                                     186         "Dy",
282         "Ho",                                     187         "Ho",
283         "Er",                                     188         "Er",
284         "Tm",                                     189         "Tm",
285         "Yb",                                     190         "Yb",
286         "Lu",                                     191         "Lu",
287         "Hf",                                     192         "Hf",
288         "Ta",                                     193         "Ta",
289         "W",                                      194         "W",
290         "Re",                                     195         "Re",
291         "Os",                                     196         "Os",
292         "Ir",                                     197         "Ir",
293         "Pt",                                     198         "Pt",
294         "Au",                                     199         "Au",
295         "Hg",                                     200         "Hg",
296         "Tl",                                     201         "Tl",
297         "Pb",                                     202         "Pb",
298         "Bi",                                     203         "Bi",
299         "Po",                                     204         "Po",
300         "At",                                     205         "At",
301         "Rn",                                     206         "Rn",
302         "Fr",                                     207         "Fr",
303         "Ra",                                     208         "Ra",
304         "Ac",                                     209         "Ac",
305         "Th",                                     210         "Th",
306         "Pa",                                     211         "Pa",
307         "U",                                      212         "U",
308         "Np",                                     213         "Np",
309         "Pu",                                     214         "Pu",
310         "Am",                                     215         "Am",
311         "Cm",                                     216         "Cm",
312         "Bk",                                     217         "Bk",
313         "Cf",                                     218         "Cf",
314         "Es",                                     219         "Es",
315         "Fm",                                     220         "Fm",
316         "Md",                                     221         "Md",
317         "No",                                     222         "No",
318         "Lr",                                     223         "Lr",
319         "Rf",                                     224         "Rf",
320         "Db",                                     225         "Db",
321         "Sg",                                     226         "Sg",
322         "Bh",                                     227         "Bh",
323         "Hs",                                     228         "Hs",
324         "Mt",                                     229         "Mt",
325         "Ds",                                     230         "Ds",
326         "Rg",                                     231         "Rg",
327         "Cn"                                      232         "Cn"
328       };                                          233       };
329                                                   234 
330       /// \brief Digit names to compose IUPAC     235       /// \brief Digit names to compose IUPAC element names
331       const std::string elementIUPACDigits = "    236       const std::string elementIUPACDigits = "nubtqphsoe";
332                                                   237 
333 #define INCL_DEFAULT_SEPARATION_ENERGY 6.83       238 #define INCL_DEFAULT_SEPARATION_ENERGY 6.83
334       const G4double theINCLProtonSeparationEn    239       const G4double theINCLProtonSeparationEnergy = INCL_DEFAULT_SEPARATION_ENERGY;
335       const G4double theINCLNeutronSeparationE    240       const G4double theINCLNeutronSeparationEnergy = INCL_DEFAULT_SEPARATION_ENERGY;
336       const G4double theINCLLambdaSeparationEn << 
337       //const G4double theINCLantiProtonSepara << 
338       const G4double theINCLantiProtonSeparati << 
339       G4ThreadLocal G4double protonSeparationE    241       G4ThreadLocal G4double protonSeparationEnergy = INCL_DEFAULT_SEPARATION_ENERGY;
340       G4ThreadLocal G4double neutronSeparation    242       G4ThreadLocal G4double neutronSeparationEnergy = INCL_DEFAULT_SEPARATION_ENERGY;
341       G4ThreadLocal G4double lambdaSeparationE << 
342       //G4ThreadLocal G4double antiprotonSepar << 
343       //G4ThreadLocal G4double antiprotonSepar << 
344 #undef INCL_DEFAULT_SEPARATION_ENERGY             243 #undef INCL_DEFAULT_SEPARATION_ENERGY
345                                                   244 
346       G4ThreadLocal G4double rpCorrelationCoef    245       G4ThreadLocal G4double rpCorrelationCoefficient[UnknownParticle];
347                                                   246 
348       G4ThreadLocal G4double neutronSkin = 0.0    247       G4ThreadLocal G4double neutronSkin = 0.0;
349       G4ThreadLocal G4double neutronHalo = 0.0    248       G4ThreadLocal G4double neutronHalo = 0.0;
350                                                   249 
351 #ifdef INCLXX_IN_GEANT4_MODE                      250 #ifdef INCLXX_IN_GEANT4_MODE
352       G4ThreadLocal G4IonTable *theG4IonTable;    251       G4ThreadLocal G4IonTable *theG4IonTable;
353 #endif                                            252 #endif
354                                                   253 
355       /// \brief Default value for constant Fe    254       /// \brief Default value for constant Fermi momentum
356       G4ThreadLocal G4double constantFermiMome    255       G4ThreadLocal G4double constantFermiMomentum = 0.0;
357                                                   256 
358       /// \brief Transform a IUPAC char to an     257       /// \brief Transform a IUPAC char to an char representing an integer digit
359       char iupacToInt(char c) {                   258       char iupacToInt(char c) {
360         return (char)(((G4int)'0')+elementIUPA    259         return (char)(((G4int)'0')+elementIUPACDigits.find(c));
361       }                                           260       }
362                                                   261 
363       /// \brief Transform an integer digit (r    262       /// \brief Transform an integer digit (represented by a char) to a IUPAC char
364       char intToIUPAC(char n) { return element    263       char intToIUPAC(char n) { return elementIUPACDigits.at(n); }
365                                                   264 
366       /// \brief Get the singleton instance of    265       /// \brief Get the singleton instance of the natural isotopic distributions
367       const NaturalIsotopicDistributions *getN    266       const NaturalIsotopicDistributions *getNaturalIsotopicDistributions() {
368         if(!theNaturalIsotopicDistributions)      267         if(!theNaturalIsotopicDistributions)
369           theNaturalIsotopicDistributions = ne    268           theNaturalIsotopicDistributions = new NaturalIsotopicDistributions;
370         return theNaturalIsotopicDistributions    269         return theNaturalIsotopicDistributions;
371       }                                           270       }
372                                                   271 
373     } // namespace                                272     } // namespace
374                                                   273 
375     void initialize(Config const * const theCo    274     void initialize(Config const * const theConfig /*=0*/) {
376       protonMass = theINCLNucleonMass;            275       protonMass = theINCLNucleonMass;
377       neutronMass = theINCLNucleonMass;        << 276       neutronMass = theINCLNucleonMass;
378       piPlusMass = theINCLPionMass;               277       piPlusMass = theINCLPionMass;
379       piMinusMass = theINCLPionMass;              278       piMinusMass = theINCLPionMass;
380       piZeroMass = theINCLPionMass;               279       piZeroMass = theINCLPionMass;
381                                                   280 
382       etaMass = theINCLEtaMass;                << 
383       omegaMass = theINCLOmegaMass;            << 
384       etaPrimeMass = theINCLEtaPrimeMass;      << 
385       photonMass = theINCLPhotonMass;          << 
386                                                << 
387       SigmaPlusMass = theRealSigmaPlusMass;    << 
388       SigmaMinusMass = theRealSigmaMinusMass;  << 
389       SigmaZeroMass = theRealSigmaZeroMass;    << 
390       LambdaMass = theINCLLambdaMass;          << 
391       KPlusMass = theRealChargedKaonMass;      << 
392       KZeroMass = theRealNeutralKaonMass;      << 
393       KZeroBarMass = theRealNeutralKaonMass;   << 
394       KShortMass = theRealNeutralKaonMass;     << 
395       KLongMass = theRealNeutralKaonMass;      << 
396       KMinusMass = theRealChargedKaonMass;     << 
397                                                << 
398       antiProtonMass = theRealAntiProtonMass;  << 
399       XiZeroMass = theRealXiZeroMass;          << 
400       XiMinusMass = theRealXiMinusMass;        << 
401       antiNeutronMass = theRealAntiNeutronMass << 
402       antiSigmaPlusMass = theRealAntiSigmaPlus << 
403       antiSigmaMinusMass = theRealAntiSigmaMin << 
404       antiSigmaZeroMass = theRealAntiSigmaZero << 
405       antiLambdaMass = theRealAntiLambdaMass;  << 
406       antiXiZeroMass = theRealAntiXiZeroMass;  << 
407       antiXiMinusMass = theRealAntiXiMinusMass << 
408                                                << 
409       if(theConfig && theConfig->getUseRealMas    281       if(theConfig && theConfig->getUseRealMasses()) {
410         getTableMass = getRealMass;               282         getTableMass = getRealMass;
411         getTableParticleMass = getRealMass;       283         getTableParticleMass = getRealMass;
412       } else {                                    284       } else {
413         getTableMass = getINCLMass;               285         getTableMass = getINCLMass;
414         getTableParticleMass = getINCLMass;       286         getTableParticleMass = getINCLMass;
415       }                                           287       }
416                                                   288 
417 #ifndef INCLXX_IN_GEANT4_MODE                     289 #ifndef INCLXX_IN_GEANT4_MODE
418       std::string dataFilePath;                   290       std::string dataFilePath;
419       if(theConfig)                               291       if(theConfig)
420         dataFilePath = theConfig->getINCLXXDat    292         dataFilePath = theConfig->getINCLXXDataFilePath();
421       NuclearMassTable::initialize(dataFilePat    293       NuclearMassTable::initialize(dataFilePath, getRealMass(Proton), getRealMass(Neutron));
422 #endif                                            294 #endif
423                                                   295 
424 #ifdef INCLXX_IN_GEANT4_MODE                      296 #ifdef INCLXX_IN_GEANT4_MODE
425       G4ParticleTable *theG4ParticleTable = G4    297       G4ParticleTable *theG4ParticleTable = G4ParticleTable::GetParticleTable();
426       theG4IonTable = theG4ParticleTable->GetI    298       theG4IonTable = theG4ParticleTable->GetIonTable();
427       theRealProtonMass = theG4ParticleTable->    299       theRealProtonMass = theG4ParticleTable->FindParticle("proton")->GetPDGMass() / MeV;
428       theRealNeutronMass = theG4ParticleTable- << 300       theRealNeutronMass = theG4ParticleTable->FindParticle("neutron")->GetPDGMass() / MeV;
429       theRealChargedPiMass = theG4ParticleTabl    301       theRealChargedPiMass = theG4ParticleTable->FindParticle("pi+")->GetPDGMass() / MeV;
430       theRealPiZeroMass = theG4ParticleTable->    302       theRealPiZeroMass = theG4ParticleTable->FindParticle("pi0")->GetPDGMass() / MeV;
431                                                << 
432       theRealEtaMass = theG4ParticleTable->Fin << 
433       theRealOmegaMass = theG4ParticleTable->F << 
434       theRealEtaPrimeMass = theG4ParticleTable << 
435       theRealPhotonMass = theG4ParticleTable-> << 
436                                                << 
437       theRealSigmaPlusMass = theG4ParticleTabl << 
438       theRealSigmaZeroMass = theG4ParticleTabl << 
439       theRealSigmaMinusMass = theG4ParticleTab << 
440       theRealLambdaMass = theG4ParticleTable-> << 
441       theRealChargedKaonMass = theG4ParticleTa << 
442       theRealNeutralKaonMass = theG4ParticleTa << 
443                                                << 
444       theRealAntiProtonMass = theG4ParticleTab << 
445       theRealAntiNeutronMass = theG4ParticleTa << 
446       theRealXiZeroMass = theG4ParticleTable-> << 
447       theRealXiMinusMass = theG4ParticleTable- << 
448       theRealAntiSigmaPlusMass = theG4Particle << 
449       theRealAntiSigmaZeroMass = theG4Particle << 
450       theRealAntiSigmaMinusMass = theG4Particl << 
451       theRealAntiLambdaMass = theG4ParticleTab << 
452       theRealAntiXiZeroMass = theG4ParticleTab << 
453       theRealAntiXiMinusMass = theG4ParticleTa << 
454 #endif                                            303 #endif
455                                                   304 
456       minDeltaMass = theRealNeutronMass + theR    305       minDeltaMass = theRealNeutronMass + theRealChargedPiMass + 0.5;
457       minDeltaMass2 = minDeltaMass*minDeltaMas    306       minDeltaMass2 = minDeltaMass*minDeltaMass;
458       minDeltaMassRndm = std::atan((minDeltaMa    307       minDeltaMassRndm = std::atan((minDeltaMass-effectiveDeltaMass)*2./effectiveDeltaWidth);
459                                                   308 
460       piPlusWidth   = theChargedPiWidth;       << 
461       piMinusWidth  = theChargedPiWidth;       << 
462       piZeroWidth   = thePiZeroWidth;          << 
463       etaWidth      = theEtaWidth;             << 
464       omegaWidth    = theOmegaWidth;           << 
465       etaPrimeWidth = theEtaPrimeWidth;        << 
466                                                << 
467       SigmaMinusWidth = theSigmaMinusWidth;    << 
468       SigmaPlusWidth = theSigmaPlusWidth;      << 
469       SigmaZeroWidth = theSigmaZeroWidth;      << 
470       LambdaWidth = theLambdaWidth;            << 
471       KPlusWidth = theChargedKaonWidth;        << 
472       KMinusWidth = theChargedKaonWidth;       << 
473       KShortWidth = theKShortWidth;            << 
474       KLongWidth = theKLongWidth;              << 
475                                                << 
476       // Initialise HFB tables                 << 
477 #ifdef INCLXX_IN_GEANT4_MODE                   << 
478         HFB::initialize();                     << 
479 #else                                          << 
480         HFB::initialize(dataFilePath);         << 
481 #endif                                         << 
482                                                << 
483       // Initialise the separation-energy func    309       // Initialise the separation-energy function
484       if(!theConfig || theConfig->getSeparatio    310       if(!theConfig || theConfig->getSeparationEnergyType()==INCLSeparationEnergy)
485         getSeparationEnergy = getSeparationEne    311         getSeparationEnergy = getSeparationEnergyINCL;
486       else if(theConfig->getSeparationEnergyTy    312       else if(theConfig->getSeparationEnergyType()==RealSeparationEnergy)
487         getSeparationEnergy = getSeparationEne    313         getSeparationEnergy = getSeparationEnergyReal;
488       else if(theConfig->getSeparationEnergyTy    314       else if(theConfig->getSeparationEnergyType()==RealForLightSeparationEnergy)
489         getSeparationEnergy = getSeparationEne    315         getSeparationEnergy = getSeparationEnergyRealForLight;
490       else {                                      316       else {
491         INCL_FATAL("Unrecognized separation-en    317         INCL_FATAL("Unrecognized separation-energy type in ParticleTable initialization: " << theConfig->getSeparationEnergyType() << '\n');
492         return;                                   318         return;
493       }                                           319       }
494                                                   320 
495       // Initialise the Fermi-momentum functio    321       // Initialise the Fermi-momentum function
496       if(!theConfig || theConfig->getFermiMome    322       if(!theConfig || theConfig->getFermiMomentumType()==ConstantFermiMomentum) {
497         getFermiMomentum = ParticleTable::getF    323         getFermiMomentum = ParticleTable::getFermiMomentumConstant;
498         if(theConfig) {                           324         if(theConfig) {
499           const G4double aFermiMomentum = theC    325           const G4double aFermiMomentum = theConfig->getFermiMomentum();
500           if(aFermiMomentum>0.)                   326           if(aFermiMomentum>0.)
501             constantFermiMomentum = aFermiMome    327             constantFermiMomentum = aFermiMomentum;
502           else                                    328           else
503             constantFermiMomentum = PhysicalCo    329             constantFermiMomentum = PhysicalConstants::Pf;
504         } else {                                  330         } else {
505           constantFermiMomentum = PhysicalCons    331           constantFermiMomentum = PhysicalConstants::Pf;
506         }                                         332         }
507       } else if(theConfig->getFermiMomentumTyp    333       } else if(theConfig->getFermiMomentumType()==ConstantLightFermiMomentum)
508         getFermiMomentum = ParticleTable::getF    334         getFermiMomentum = ParticleTable::getFermiMomentumConstantLight;
509       else if(theConfig->getFermiMomentumType(    335       else if(theConfig->getFermiMomentumType()==MassDependentFermiMomentum)
510         getFermiMomentum = ParticleTable::getF    336         getFermiMomentum = ParticleTable::getFermiMomentumMassDependent;
511       else {                                      337       else {
512         INCL_FATAL("Unrecognized Fermi-momentu    338         INCL_FATAL("Unrecognized Fermi-momentum type in ParticleTable initialization: " << theConfig->getFermiMomentumType() << '\n');
513         return;                                   339         return;
514       }                                           340       }
515                                                   341 
516       // Initialise the r-p correlation coeffi    342       // Initialise the r-p correlation coefficients
517       std::fill(rpCorrelationCoefficient, rpCo    343       std::fill(rpCorrelationCoefficient, rpCorrelationCoefficient + UnknownParticle, 1.);
518       if(theConfig) {                             344       if(theConfig) {
519         rpCorrelationCoefficient[Proton] = the    345         rpCorrelationCoefficient[Proton] = theConfig->getRPCorrelationCoefficient(Proton);
520         rpCorrelationCoefficient[Neutron] = th    346         rpCorrelationCoefficient[Neutron] = theConfig->getRPCorrelationCoefficient(Neutron);
521       }                                           347       }
522                                                   348 
523       // Initialise the neutron-skin parameter    349       // Initialise the neutron-skin parameters
524       if(theConfig) {                             350       if(theConfig) {
525         neutronSkin = theConfig->getNeutronSki    351         neutronSkin = theConfig->getNeutronSkin();
526         neutronHalo = theConfig->getNeutronHal    352         neutronHalo = theConfig->getNeutronHalo();
527       }                                           353       }
528                                                   354 
529     }                                             355     }
530                                                   356 
531     G4int getIsospin(const ParticleType t) {      357     G4int getIsospin(const ParticleType t) {
532       // Actually this is the 3rd component of    358       // Actually this is the 3rd component of isospin (I_z) multiplied by 2!
533       if(t == Proton) {                           359       if(t == Proton) {
534         return 1;                                 360         return 1;
535       } else if(t == Neutron) {                   361       } else if(t == Neutron) {
536         return -1;                                362         return -1;
537       } else if(t == PiPlus) {                    363       } else if(t == PiPlus) {
538         return 2;                                 364         return 2;
539       } else if(t == PiMinus) {                   365       } else if(t == PiMinus) {
540         return -2;                                366         return -2;
541       } else if(t == PiZero) {                    367       } else if(t == PiZero) {
542         return 0;                                 368         return 0;
543       } else if(t == DeltaPlusPlus) {             369       } else if(t == DeltaPlusPlus) {
544         return 3;                                 370         return 3;
545       } else if(t == DeltaPlus) {                 371       } else if(t == DeltaPlus) {
546         return 1;                                 372         return 1;
547       } else if(t == DeltaZero) {                 373       } else if(t == DeltaZero) {
548         return -1;                                374         return -1;
549       } else if(t == DeltaMinus) {                375       } else if(t == DeltaMinus) {
550         return -3;                                376         return -3;
551       } else if(t == Lambda) {                 << 
552         return 0;                              << 
553       } else if(t == SigmaPlus) {              << 
554         return 2;                              << 
555       } else if(t == SigmaZero) {              << 
556         return 0;                              << 
557       } else if(t == SigmaMinus) {             << 
558         return -2;                             << 
559       } else if(t == KPlus) {                  << 
560         return 1;                              << 
561       } else if(t == KZero) {                  << 
562         return -1;                             << 
563       } else if(t == KZeroBar) {               << 
564         return 1;                              << 
565       } else if(t == KShort) {                 << 
566         return 0;                              << 
567       } else if(t == KLong) {                  << 
568         return 0;                              << 
569       } else if(t == KMinus) {                 << 
570         return -1;                             << 
571       } else if(t == Eta) {                    << 
572         return 0;                              << 
573       } else if(t == Omega) {                  << 
574         return 0;                              << 
575       } else if(t == EtaPrime) {               << 
576         return 0;                              << 
577       } else if(t == Photon) {                 << 
578         return 0;                              << 
579       } else if(t == antiProton) {             << 
580         return -1;                             << 
581       } else if(t == XiMinus) {                << 
582         return -1;                             << 
583       } else if(t == XiZero) {                 << 
584         return 1;                              << 
585       } else if(t == antiNeutron) {            << 
586         return 1;                              << 
587       } else if(t == antiLambda) {             << 
588         return 0;                              << 
589       } else if(t == antiSigmaPlus) {          << 
590         return -2;                             << 
591       } else if(t == antiSigmaZero) {          << 
592         return 0;                              << 
593       } else if(t == antiSigmaMinus) {         << 
594         return 2;                              << 
595       } else if(t == antiXiMinus) {            << 
596         return 1;                              << 
597       } else if(t == antiXiZero) {             << 
598         return -1;                             << 
599       }                                           377       }
                                                   >> 378 
600       INCL_ERROR("Requested isospin of an unkn    379       INCL_ERROR("Requested isospin of an unknown particle!");
601       return -10; // Unknown                      380       return -10; // Unknown
602     }                                             381     }
603                                                   382 
604     std::string getShortName(const ParticleSpe << 383     std::string getShortName(const ParticleSpecies &s) {
605       if(sp.theType==Composite && sp.theS == 0 << 384       if(s.theType==Composite)
606         return getShortName(sp.theA,sp.theZ);  << 385         return getShortName(s.theA,s.theZ);
607       else if(sp.theType==Composite)           << 
608         return getName(sp.theA,sp.theZ,sp.theS << 
609       else                                        386       else
610         return getShortName(sp.theType);       << 387         return getShortName(s.theType);
611     }                                             388     }
612                                                << 389 
613     std::string getName(const ParticleSpecies  << 390     std::string getName(const ParticleSpecies &s) {
614       if(sp.theType==Composite && sp.theS == 0 << 391       if(s.theType==Composite)
615         return getName(sp.theA,sp.theZ);       << 392         return getName(s.theA,s.theZ);
616       else if(sp.theType==Composite)           << 
617         return getName(sp.theA,sp.theZ,sp.theS << 
618       else                                        393       else
619         return getName(sp.theType);            << 394         return getName(s.theType);
620     }                                             395     }
621                                                   396 
622     std::string getName(const G4int A, const G    397     std::string getName(const G4int A, const G4int Z) {
623       std::stringstream stream;                   398       std::stringstream stream;
624       stream << getElementName(Z) << "-" << A;    399       stream << getElementName(Z) << "-" << A;
625       return stream.str();                        400       return stream.str();
626     }                                             401     }
627                                                   402 
628     std::string getName(const G4int A, const G << 
629       std::stringstream stream;                << 
630       if(S >= 0) // S < 0 for hypernuclei      << 
631         return getName(A, Z);                  << 
632       else if(S == -1)                         << 
633         stream << getElementName(Z) << "-" <<  << 
634       else                                     << 
635         stream << getElementName(Z) << "-" <<  << 
636       return stream.str();                     << 
637     }                                          << 
638                                                << 
639     std::string getShortName(const G4int A, co    403     std::string getShortName(const G4int A, const G4int Z) {
640       std::stringstream stream;                   404       std::stringstream stream;
641       stream << getElementName(Z);                405       stream << getElementName(Z);
642       if(A>0)                                     406       if(A>0)
643         stream << A;                              407         stream << A;
644       return stream.str();                        408       return stream.str();
645     }                                             409     }
646                                                   410 
647     std::string getName(const ParticleType p)     411     std::string getName(const ParticleType p) {
648       if(p == G4INCL::Proton) {                   412       if(p == G4INCL::Proton) {
649         return std::string("proton");             413         return std::string("proton");
650       } else if(p == G4INCL::Neutron) {           414       } else if(p == G4INCL::Neutron) {
651         return std::string("neutron");            415         return std::string("neutron");
652       } else if(p == G4INCL::DeltaPlusPlus) {     416       } else if(p == G4INCL::DeltaPlusPlus) {
653         return std::string("delta++");            417         return std::string("delta++");
654       } else if(p == G4INCL::DeltaPlus) {         418       } else if(p == G4INCL::DeltaPlus) {
655         return std::string("delta+");             419         return std::string("delta+");
656       } else if(p == G4INCL::DeltaZero) {         420       } else if(p == G4INCL::DeltaZero) {
657         return std::string("delta0");             421         return std::string("delta0");
658       } else if(p == G4INCL::DeltaMinus) {        422       } else if(p == G4INCL::DeltaMinus) {
659         return std::string("delta-");             423         return std::string("delta-");
660       } else if(p == G4INCL::PiPlus) {            424       } else if(p == G4INCL::PiPlus) {
661         return std::string("pi+");                425         return std::string("pi+");
662       } else if(p == G4INCL::PiZero) {            426       } else if(p == G4INCL::PiZero) {
663         return std::string("pi0");                427         return std::string("pi0");
664       } else if(p == G4INCL::PiMinus) {           428       } else if(p == G4INCL::PiMinus) {
665         return std::string("pi-");                429         return std::string("pi-");
666       } else if(p == G4INCL::Lambda) {         << 
667         return std::string("lambda");          << 
668       } else if(p == G4INCL::SigmaPlus) {      << 
669         return std::string("sigma+");          << 
670       } else if(p == G4INCL::SigmaZero) {      << 
671         return std::string("sigma0");          << 
672       } else if(p == G4INCL::SigmaMinus) {     << 
673         return std::string("sigma-");          << 
674       } else if(p == G4INCL::antiProton) {     << 
675         return std::string("antiproton");      << 
676       } else if(p == G4INCL::XiMinus) {        << 
677         return std::string("xi-");             << 
678       } else if(p == G4INCL::XiZero) {         << 
679         return std::string("xi0");             << 
680       } else if(p == G4INCL::antiNeutron) {    << 
681         return std::string("antineutron");     << 
682       } else if(p == G4INCL::antiSigmaPlus) {  << 
683         return std::string("antisigma+");      << 
684       } else if(p == G4INCL::antiSigmaZero) {  << 
685         return std::string("antisigma0");      << 
686       } else if(p == G4INCL::antiSigmaMinus) { << 
687         return std::string("antisigma-");      << 
688       } else if(p == G4INCL::antiLambda) {     << 
689         return std::string("antilambda");      << 
690       } else if(p == G4INCL::antiXiMinus) {    << 
691         return std::string("antixi-");         << 
692       } else if(p == G4INCL::antiXiZero) {     << 
693         return std::string("antixi0");         << 
694       } else if(p == G4INCL::KPlus) {          << 
695         return std::string("kaon+");           << 
696       } else if(p == G4INCL::KZero) {          << 
697         return std::string("kaon0");           << 
698       } else if(p == G4INCL::KZeroBar) {       << 
699         return std::string("kaon0bar");        << 
700       } else if(p == G4INCL::KMinus) {         << 
701         return std::string("kaon-");           << 
702       } else if(p == G4INCL::KShort) {         << 
703         return std::string("kaonshort");       << 
704       } else if(p == G4INCL::KLong) {          << 
705         return std::string("kaonlong");        << 
706       } else if(p == G4INCL::Composite) {         430       } else if(p == G4INCL::Composite) {
707         return std::string("composite");          431         return std::string("composite");
708       } else if(p == G4INCL::Eta) {            << 
709         return std::string("eta");             << 
710       } else if(p == G4INCL::Omega) {          << 
711         return std::string("omega");           << 
712       } else if(p == G4INCL::EtaPrime) {       << 
713         return std::string("etaprime");        << 
714       } else if(p == G4INCL::Photon) {         << 
715         return std::string("photon");          << 
716       }                                           432       }
717       return std::string("unknown");              433       return std::string("unknown");
718     }                                             434     }
719                                                   435 
720     std::string getShortName(const ParticleTyp    436     std::string getShortName(const ParticleType p) {
721       if(p == G4INCL::Proton) {                   437       if(p == G4INCL::Proton) {
722         return std::string("p");                  438         return std::string("p");
723       } else if(p == G4INCL::Neutron) {           439       } else if(p == G4INCL::Neutron) {
724         return std::string("n");                  440         return std::string("n");
725       } else if(p == G4INCL::DeltaPlusPlus) {     441       } else if(p == G4INCL::DeltaPlusPlus) {
726         return std::string("d++");                442         return std::string("d++");
727       } else if(p == G4INCL::DeltaPlus) {         443       } else if(p == G4INCL::DeltaPlus) {
728         return std::string("d+");                 444         return std::string("d+");
729       } else if(p == G4INCL::DeltaZero) {         445       } else if(p == G4INCL::DeltaZero) {
730         return std::string("d0");                 446         return std::string("d0");
731       } else if(p == G4INCL::DeltaMinus) {        447       } else if(p == G4INCL::DeltaMinus) {
732         return std::string("d-");                 448         return std::string("d-");
733       } else if(p == G4INCL::PiPlus) {            449       } else if(p == G4INCL::PiPlus) {
734         return std::string("pi+");                450         return std::string("pi+");
735       } else if(p == G4INCL::PiZero) {            451       } else if(p == G4INCL::PiZero) {
736         return std::string("pi0");                452         return std::string("pi0");
737       } else if(p == G4INCL::PiMinus) {           453       } else if(p == G4INCL::PiMinus) {
738         return std::string("pi-");                454         return std::string("pi-");
739       } else if(p == G4INCL::Lambda) {         << 
740         return std::string("l");               << 
741       } else if(p == G4INCL::SigmaPlus) {      << 
742         return std::string("s+");              << 
743       } else if(p == G4INCL::SigmaZero) {      << 
744         return std::string("s0");              << 
745       } else if(p == G4INCL::SigmaMinus) {     << 
746         return std::string("s-");              << 
747       } else if(p == G4INCL::antiProton) {     << 
748         return std::string("pb");              << 
749       } else if(p == G4INCL::XiMinus) {        << 
750         return std::string("x-");              << 
751       } else if(p == G4INCL::XiZero) {         << 
752         return std::string("x0");              << 
753       } else if(p == G4INCL::antiNeutron) {    << 
754         return std::string("nb");              << 
755       } else if(p == G4INCL::antiSigmaPlus) {  << 
756         return std::string("s+b");             << 
757       } else if(p == G4INCL::antiSigmaZero) {  << 
758         return std::string("s0b");             << 
759       } else if(p == G4INCL::antiSigmaMinus) { << 
760         return std::string("s-b");             << 
761       } else if(p == G4INCL::antiLambda) {     << 
762         return std::string("lb");              << 
763       } else if(p == G4INCL::antiXiMinus) {    << 
764         return std::string("x-b");             << 
765       } else if(p == G4INCL::antiXiZero) {     << 
766         return std::string("x0b");             << 
767       } else if(p == G4INCL::KPlus) {          << 
768         return std::string("k+");              << 
769       } else if(p == G4INCL::KZero) {          << 
770         return std::string("k0");              << 
771       } else if(p == G4INCL::KZeroBar) {       << 
772         return std::string("k0b");             << 
773       } else if(p == G4INCL::KMinus) {         << 
774         return std::string("k-");              << 
775       } else if(p == G4INCL::KShort) {         << 
776         return std::string("ks");              << 
777       } else if(p == G4INCL::KLong) {          << 
778         return std::string("kl");              << 
779       } else if(p == G4INCL::Composite) {         455       } else if(p == G4INCL::Composite) {
780         return std::string("comp");               456         return std::string("comp");
781       } else if(p == G4INCL::Eta) {            << 
782         return std::string("eta");             << 
783       } else if(p == G4INCL::Omega) {          << 
784         return std::string("omega");           << 
785       } else if(p == G4INCL::EtaPrime) {       << 
786         return std::string("etap");            << 
787       } else if(p == G4INCL::Photon) {         << 
788         return std::string("photon");          << 
789       }                                           457       }
790       return std::string("unknown");              458       return std::string("unknown");
791     }                                             459     }
792                                                   460 
793     G4double getINCLMass(const ParticleType pt    461     G4double getINCLMass(const ParticleType pt) {
794       if(pt == Proton) {                          462       if(pt == Proton) {
795         return protonMass;                        463         return protonMass;
796       } else if(pt == Neutron) {                  464       } else if(pt == Neutron) {
797         return neutronMass;                       465         return neutronMass;
798       } else if(pt == PiPlus) {                   466       } else if(pt == PiPlus) {
799         return piPlusMass;                        467         return piPlusMass;
800       } else if(pt == PiMinus) {                  468       } else if(pt == PiMinus) {
801         return piMinusMass;                       469         return piMinusMass;
802       } else if(pt == PiZero) {                   470       } else if(pt == PiZero) {
803         return piZeroMass;                        471         return piZeroMass;
804       } else if(pt == SigmaPlus) {             << 
805         return SigmaPlusMass;                  << 
806       } else if(pt == SigmaMinus) {            << 
807         return SigmaMinusMass;                 << 
808       } else if(pt == SigmaZero) {             << 
809         return SigmaZeroMass;                  << 
810       } else if(pt == Lambda) {                << 
811         return LambdaMass;                     << 
812       } else if(pt == antiProton) {            << 
813         return antiProtonMass;                 << 
814       } else if(pt == XiMinus) {               << 
815         return XiMinusMass;                    << 
816       } else if(pt == XiZero) {                << 
817         return XiZeroMass;                     << 
818       } else if(pt == antiNeutron) {           << 
819         return antiNeutronMass;                << 
820       } else if(pt == antiSigmaPlus) {         << 
821         return antiSigmaPlusMass;              << 
822       } else if(pt == antiSigmaMinus) {        << 
823         return antiSigmaMinusMass;             << 
824       } else if(pt == antiSigmaZero) {         << 
825         return antiSigmaZeroMass;              << 
826       } else if(pt == antiLambda) {            << 
827         return antiLambdaMass;                 << 
828       } else if(pt == antiXiMinus) {           << 
829         return antiXiMinusMass;                << 
830       } else if(pt == antiXiZero) {            << 
831         return antiXiZeroMass;                 << 
832       } else if(pt == KPlus) {                 << 
833         return KPlusMass;                      << 
834       } else if(pt == KZero) {                 << 
835         return KZeroMass;                      << 
836       } else if(pt == KZeroBar) {              << 
837         return KZeroBarMass;                   << 
838       } else if(pt == KMinus) {                << 
839         return KMinusMass;                     << 
840       } else if(pt == KShort) {                << 
841         return KShortMass;                     << 
842       } else if(pt == KLong) {                 << 
843         return KLongMass;                      << 
844       } else if(pt == Eta) {                   << 
845         return etaMass;                        << 
846       } else if(pt == Omega) {                 << 
847         return omegaMass;                      << 
848       } else if(pt == EtaPrime) {              << 
849         return etaPrimeMass;                   << 
850       } else if(pt == Photon) {                << 
851         return photonMass;                     << 
852       } else {                                    472       } else {
853         INCL_ERROR("getMass : Unknown particle    473         INCL_ERROR("getMass : Unknown particle type." << '\n');
854         return 0.0;                               474         return 0.0;
855       }                                           475       }
856     }                                             476     }
857                                                << 477 
858     G4double getRealMass(const ParticleType t)    478     G4double getRealMass(const ParticleType t) {
859       switch(t) {                                 479       switch(t) {
860         case Proton:                              480         case Proton:
861           return theRealProtonMass;               481           return theRealProtonMass;
862           break;                                  482           break;
863         case Neutron:                             483         case Neutron:
864           return theRealNeutronMass;              484           return theRealNeutronMass;
865           break;                                  485           break;
866         case PiPlus:                              486         case PiPlus:
867         case PiMinus:                             487         case PiMinus:
868           return theRealChargedPiMass;            488           return theRealChargedPiMass;
869           break;                                  489           break;
870         case PiZero:                              490         case PiZero:
871           return theRealPiZeroMass;               491           return theRealPiZeroMass;
872           break;                                  492           break;
873         case Eta:                              << 
874           return theRealEtaMass;               << 
875           break;                               << 
876         case Omega:                            << 
877           return theRealOmegaMass;             << 
878           break;                               << 
879         case EtaPrime:                         << 
880           return theRealEtaPrimeMass;          << 
881           break;                               << 
882         case Photon:                           << 
883           return theRealPhotonMass;            << 
884           break;                               << 
885         case Lambda:                           << 
886           return theRealLambdaMass;            << 
887           break;                               << 
888         case KPlus:                            << 
889         case KMinus:                           << 
890           return theRealChargedKaonMass;       << 
891           break;                               << 
892         case KZero:                            << 
893         case KZeroBar:                         << 
894         case KShort:                           << 
895         case KLong:                            << 
896           return theRealNeutralKaonMass;       << 
897           break;                               << 
898         case SigmaPlus:                        << 
899           return theRealSigmaPlusMass;         << 
900           break;                               << 
901         case SigmaZero:                        << 
902           return theRealSigmaZeroMass;         << 
903           break;                               << 
904         case SigmaMinus:                       << 
905           return theRealSigmaMinusMass;        << 
906           break;                               << 
907         case antiProton:                       << 
908           return theRealAntiProtonMass;        << 
909           break;                               << 
910         case XiMinus:                          << 
911           return theRealXiMinusMass;           << 
912           break;                               << 
913         case XiZero:                           << 
914           return theRealXiZeroMass;            << 
915           break;                               << 
916         case antiNeutron:                      << 
917           return theRealAntiNeutronMass;       << 
918           break;                               << 
919         case antiSigmaPlus:                    << 
920           return theRealAntiSigmaPlusMass;     << 
921           break;                               << 
922         case antiSigmaZero:                    << 
923           return theRealAntiSigmaZeroMass;     << 
924           break;                               << 
925         case antiSigmaMinus:                   << 
926           return theRealAntiSigmaMinusMass;    << 
927           break;                               << 
928         case antiXiMinus:                      << 
929           return theRealAntiXiMinusMass;       << 
930           break;                               << 
931         case antiXiZero:                       << 
932           return theRealAntiXiZeroMass;        << 
933           break;                               << 
934         case antiLambda:                       << 
935           return theRealAntiLambdaMass;        << 
936           break;                               << 
937         default:                                  493         default:
938           INCL_ERROR("Particle::getRealMass :     494           INCL_ERROR("Particle::getRealMass : Unknown particle type." << '\n');
939           return 0.0;                             495           return 0.0;
940           break;                                  496           break;
941       }                                           497       }
942     }                                             498     }
943                                                << 499 
944     G4double getRealMass(const G4int A, const  << 500     G4double getRealMass(const G4int A, const G4int Z) {
945 // assert(A>=0);                                  501 // assert(A>=0);
946       // For nuclei with Z<0 or Z>A, assume th    502       // For nuclei with Z<0 or Z>A, assume that the exotic charge state is due to pions
947       if(Z<0 && S<0)                           << 
948         return (A+S)*theRealNeutronMass - S*La << 
949       else if(Z>A && S<0)                      << 
950         return (A+S)*theRealProtonMass - S*Lam << 
951       if(Z<0)                                     503       if(Z<0)
952         return (A)*theRealNeutronMass - Z*getR << 504         return A*neutronMass - Z*getRealMass(PiMinus);
953       else if(Z>A)                                505       else if(Z>A)
954         return (A)*theRealProtonMass + (A-Z)*g << 506         return A*protonMass + (A-Z)*getRealMass(PiPlus);
955       else if(Z==0 && S==0)                    << 507       else if(Z==0)
956         return A*theRealNeutronMass;           << 508         return A*getRealMass(Neutron);
957       else if(A==Z)                               509       else if(A==Z)
958         return A*theRealProtonMass;            << 510         return A*getRealMass(Proton);
959       else if(Z==0 && S<0)                     << 
960         return (A+S)*theRealNeutronMass-S*Lamb << 
961       else if(A>1) {                              511       else if(A>1) {
962 #ifndef INCLXX_IN_GEANT4_MODE                     512 #ifndef INCLXX_IN_GEANT4_MODE
963         return ::G4INCL::NuclearMassTable::get << 513         return ::G4INCL::NuclearMassTable::getMass(A,Z);
964 #else                                             514 #else
965         if(S<0) return theG4IonTable->GetNucle << 515         return theG4IonTable->GetNucleusMass(Z,A) / MeV;
966         else    return theG4IonTable->GetNucle << 
967 #endif                                            516 #endif
968       } else                                      517       } else
969         return 0.;                                518         return 0.;
970     }                                             519     }
971                                                   520 
972     G4double getINCLMass(const G4int A, const  << 521     G4double getINCLMass(const G4int A, const G4int Z) {
973 // assert(A>=0);                                  522 // assert(A>=0);
974       // For nuclei with Z<0 or Z>A, assume th    523       // For nuclei with Z<0 or Z>A, assume that the exotic charge state is due to pions
975       // Note that S<0 for lambda              << 524       if(Z<0)
976       if(Z<0 && S<0)                           << 525         return A*neutronMass - Z*getINCLMass(PiMinus);
977         return (A+S)*neutronMass - S*LambdaMas << 
978       else if(Z>A && S<0)                      << 
979         return (A+S)*protonMass - S*LambdaMass << 
980       else if(Z<0)                             << 
981         return (A)*neutronMass - Z*getINCLMass << 
982       else if(Z>A)                                526       else if(Z>A)
983         return (A)*protonMass + (A-Z)*getINCLM << 527         return A*protonMass + (A-Z)*getINCLMass(PiPlus);
984       else if(A>1 && S<0)                      << 
985         return Z*(protonMass - protonSeparatio << 
986       else if(A>1)                                528       else if(A>1)
987         return Z*(protonMass - protonSeparatio    529         return Z*(protonMass - protonSeparationEnergy) + (A-Z)*(neutronMass - neutronSeparationEnergy);
988       else if(A==1 && Z==0 && S==0)            << 530       else if(A==1 && Z==0)
989         return getINCLMass(Neutron);              531         return getINCLMass(Neutron);
990       else if(A==1 && Z==1 && S==0)            << 532       else if(A==1 && Z==1)
991         return getINCLMass(Proton);               533         return getINCLMass(Proton);
992       else if(A==1 && Z==0 && S==-1)           << 
993         return getINCLMass(Lambda);            << 
994       else                                        534       else
995         return 0.;                                535         return 0.;
996     }                                             536     }
997                                                   537 
998     G4double getTableQValue(const G4int A1, co << 538     G4double getTableQValue(const G4int A1, const G4int Z1, const G4int A2, const G4int Z2) {
999       return getTableMass(A1,Z1,S1) + getTable << 539       return getTableMass(A1,Z1) + getTableMass(A2,Z2) - getTableMass(A1+A2,Z1+Z2);
1000     }                                            540     }
1001                                                  541 
1002     G4double getTableQValue(const G4int A1, c << 542     G4double getTableQValue(const G4int A1, const G4int Z1, const G4int A2, const G4int Z2, const G4int A3, const G4int Z3) {
1003       return getTableMass(A1,Z1,S1) + getTabl << 543       return getTableMass(A1,Z1) + getTableMass(A2,Z2) - getTableMass(A3,Z3) - getTableMass(A1+A2-A3,Z1+Z2-Z3);
1004     }                                            544     }
1005                                                  545 
1006     G4double getTableSpeciesMass(const Partic    546     G4double getTableSpeciesMass(const ParticleSpecies &p) {
1007       if(p.theType == Composite)                 547       if(p.theType == Composite)
1008         return (*getTableMass)(p.theA, p.theZ << 548         return (*getTableMass)(p.theA, p.theZ);
1009       else                                       549       else
1010         return (*getTableParticleMass)(p.theT    550         return (*getTableParticleMass)(p.theType);
1011     }                                            551     }
1012                                                  552 
1013     G4int getMassNumber(const ParticleType t) << 553     G4int getMassNumber(const ParticleType t) {
1014                                               << 
1015       switch(t) {                                554       switch(t) {
1016         case Proton:                             555         case Proton:
1017         case Neutron:                            556         case Neutron:
1018         case DeltaPlusPlus:                      557         case DeltaPlusPlus:
1019         case DeltaPlus:                          558         case DeltaPlus:
1020         case DeltaZero:                          559         case DeltaZero:
1021         case DeltaMinus:                         560         case DeltaMinus:
1022         case SigmaPlus:                       << 
1023         case SigmaZero:                       << 
1024         case SigmaMinus:                      << 
1025         case Lambda:                          << 
1026         case XiZero:                          << 
1027         case XiMinus:                         << 
1028           return 1;                              561           return 1;
1029           break;                              << 
1030         case antiProton:                      << 
1031         case antiNeutron:                     << 
1032         case antiSigmaPlus:                   << 
1033         case antiSigmaZero:                   << 
1034         case antiSigmaMinus:                  << 
1035         case antiLambda:                      << 
1036         case antiXiZero:                      << 
1037         case antiXiMinus:                     << 
1038           return -1;                          << 
1039           break;                                 562           break;
1040         case PiPlus:                             563         case PiPlus:
1041         case PiMinus:                            564         case PiMinus:
1042         case PiZero:                             565         case PiZero:
1043         case KPlus:                           << 
1044         case KZero:                           << 
1045         case KZeroBar:                        << 
1046         case KShort:                          << 
1047         case KLong:                           << 
1048         case KMinus:                          << 
1049         case Eta:                             << 
1050         case Omega:                           << 
1051         case EtaPrime:                        << 
1052         case Photon:                          << 
1053           return 0;                              566           return 0;
1054           break;                                 567           break;
1055         default:                                 568         default:
1056           return 0;                              569           return 0;
1057           break;                                 570           break;
1058       }                                          571       }
1059     }                                            572     }
1060                                                  573 
1061     G4int getChargeNumber(const ParticleType     574     G4int getChargeNumber(const ParticleType t) {
1062       switch(t) {                                575       switch(t) {
1063         case DeltaPlusPlus:                      576         case DeltaPlusPlus:
1064           return 2;                              577           return 2;
1065           break;                                 578           break;
1066         case Proton:                             579         case Proton:
1067         case DeltaPlus:                          580         case DeltaPlus:
1068         case PiPlus:                             581         case PiPlus:
1069         case SigmaPlus:                       << 
1070         case KPlus:                           << 
1071         case antiSigmaMinus:                  << 
1072         case antiXiMinus:                     << 
1073           return 1;                              582           return 1;
1074           break;                              << 583           break;
1075         case Neutron:                            584         case Neutron:
1076         case DeltaZero:                          585         case DeltaZero:
1077         case PiZero:                             586         case PiZero:
1078         case SigmaZero:                       << 
1079         case Lambda:                          << 
1080         case KZero:                           << 
1081         case KZeroBar:                        << 
1082         case KShort:                          << 
1083         case KLong:                           << 
1084         case Eta:                             << 
1085         case Omega:                           << 
1086         case EtaPrime:                        << 
1087         case Photon:                          << 
1088         case XiZero:                          << 
1089         case antiNeutron:                     << 
1090         case antiLambda:                      << 
1091         case antiSigmaZero:                   << 
1092         case antiXiZero:                      << 
1093           return 0;                              587           return 0;
1094           break;                                 588           break;
1095         case DeltaMinus:                         589         case DeltaMinus:
1096         case PiMinus:                            590         case PiMinus:
1097         case SigmaMinus:                      << 
1098         case KMinus:                          << 
1099         case antiProton:                      << 
1100         case XiMinus:                         << 
1101         case antiSigmaPlus:                   << 
1102           return -1;                             591           return -1;
1103           break;                              << 
1104         default:                              << 
1105           return 0;                           << 
1106           break;                                 592           break;
1107       }                                       << 
1108     }                                         << 
1109                                               << 
1110     G4int getStrangenessNumber(const Particle << 
1111       switch(t) {                             << 
1112         case DeltaPlusPlus:                   << 
1113         case DeltaPlus:                       << 
1114         case DeltaZero:                       << 
1115         case DeltaMinus:                      << 
1116         case Proton:                          << 
1117         case Neutron:                         << 
1118         case PiPlus:                          << 
1119         case PiZero:                          << 
1120         case PiMinus:                         << 
1121         case Eta:                             << 
1122         case Omega:                           << 
1123         case EtaPrime:                        << 
1124         case Photon:                          << 
1125         case antiProton:                      << 
1126         case antiNeutron:                     << 
1127           return 0;                           << 
1128           break;                              << 
1129         case XiMinus:                         << 
1130         case XiZero:                          << 
1131         case antiXiMinus:                     << 
1132         case antiXiZero:                      << 
1133           return 2;                           << 
1134           break;                              << 
1135         case antiLambda:                      << 
1136         case antiSigmaPlus:                   << 
1137         case antiSigmaZero:                   << 
1138         case antiSigmaMinus:                  << 
1139           return 1;                           << 
1140           break;                              << 
1141         case Lambda:                          << 
1142         case SigmaPlus:                       << 
1143         case SigmaZero:                       << 
1144         case SigmaMinus:                      << 
1145         case KZeroBar:                        << 
1146         case KMinus:                          << 
1147           return -1;                          << 
1148           break;                              << 
1149         case KPlus:                           << 
1150         case KZero:                           << 
1151           return 1;                           << 
1152           break;                              << 
1153         case KShort:                          << 
1154           return 0;                           << 
1155           break;                              << 
1156         case KLong:                           << 
1157           return 0;                           << 
1158           break;                              << 
1159         default:                                 593         default:
1160           return 0;                              594           return 0;
1161           break;                                 595           break;
1162       }                                          596       }
1163     }                                            597     }
1164                                                  598 
1165     G4double getNuclearRadius(const ParticleT    599     G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z) {
1166 // assert(A>=0);                                 600 // assert(A>=0);
1167       if(A > 19 || (A < 6 && A >= 2)) {       << 601       if(A >= 19 || (A < 6 && A >= 2)) {
1168         // For large (Woods-Saxon or Modified    602         // For large (Woods-Saxon or Modified Harmonic Oscillator) or small
1169         // (Gaussian) nuclei, the radius para    603         // (Gaussian) nuclei, the radius parameter is just the nuclear radius
1170         return getRadiusParameter(t,A,Z);        604         return getRadiusParameter(t,A,Z);
1171       } else if(A < clusterTableASize && Z>=0    605       } else if(A < clusterTableASize && Z>=0 && Z < clusterTableZSize && A >= 6) {
1172         const G4double thisRMS = positionRMS[    606         const G4double thisRMS = positionRMS[Z][A];
1173         if(thisRMS>0.0)                          607         if(thisRMS>0.0)
1174           return thisRMS;                        608           return thisRMS;
1175         else {                                   609         else {
1176           INCL_DEBUG("getNuclearRadius: Radiu    610           INCL_DEBUG("getNuclearRadius: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
1177                      << "returning radius for    611                      << "returning radius for C12");
1178           return positionRMS[6][12];             612           return positionRMS[6][12];
1179         }                                        613         }
1180       } else if(A <= 19) {                    << 614       } else if(A < 19) {
1181         const G4double theRadiusParameter = g    615         const G4double theRadiusParameter = getRadiusParameter(t, A, Z);
1182         const G4double theDiffusenessParamete    616         const G4double theDiffusenessParameter = getSurfaceDiffuseness(t, A, Z);
1183         // The formula yields the nuclear RMS    617         // The formula yields the nuclear RMS radius based on the parameters of
1184         // the nuclear-density function          618         // the nuclear-density function
1185         return 1.225*theDiffusenessParameter*    619         return 1.225*theDiffusenessParameter*
1186           std::sqrt((2.+5.*theRadiusParameter    620           std::sqrt((2.+5.*theRadiusParameter)/(2.+3.*theRadiusParameter));
1187       } else {                                   621       } else {
1188         INCL_ERROR("getNuclearRadius: No radi    622         INCL_ERROR("getNuclearRadius: No radius for nucleus A = " << A << " Z = " << Z << '\n');
1189         return 0.0;                              623         return 0.0;
1190       }                                          624       }
1191     }                                            625     }
1192                                                  626 
1193     G4double getLargestNuclearRadius(const G4    627     G4double getLargestNuclearRadius(const G4int A, const G4int Z) {
1194       return Math::max(getNuclearRadius(Proto    628       return Math::max(getNuclearRadius(Proton, A, Z), getNuclearRadius(Neutron, A, Z));
1195     }                                            629     }
1196                                                  630 
1197     G4double getRadiusParameter(const Particl    631     G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z) {
1198 // assert(A>0);                                  632 // assert(A>0);
1199       if(A > 19) {                            << 633       if(A >= 28) {
1200         // radius fit for lambdas             << 
1201         if(t==Lambda){                        << 
1202          G4double r0 = (1.128+0.439*std::pow( << 
1203          return r0;                           << 
1204         }                                     << 
1205         // phenomenological radius fit           634         // phenomenological radius fit
1206         G4double r0 = (2.745e-4 * A + 1.063)     635         G4double r0 = (2.745e-4 * A + 1.063) * std::pow(A, 1.0/3.0);
1207         // HFB calculations                   << 
1208         if(getRPCorrelationCoefficient(t)<1.) << 
1209          G4double r0hfb = HFB::getRadiusParam << 
1210          if(r0hfb>0.)r0 = r0hfb;              << 
1211         }                                     << 
1212         //                                    << 
1213         if(t==Neutron)                           636         if(t==Neutron)
1214           r0 += neutronSkin;                     637           r0 += neutronSkin;
1215         return r0;                               638         return r0;
1216       } else if(A < 6 && A >= 2) {               639       } else if(A < 6 && A >= 2) {
1217         if(Z<clusterTableZSize && Z>=0) {        640         if(Z<clusterTableZSize && Z>=0) {
1218           const G4double thisRMS = positionRM    641           const G4double thisRMS = positionRMS[Z][A];
1219           if(thisRMS>0.0)                        642           if(thisRMS>0.0)
1220             return thisRMS;                      643             return thisRMS;
1221           else {                                 644           else {
1222             INCL_DEBUG("getRadiusParameter: R    645             INCL_DEBUG("getRadiusParameter: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
1223                        << "returning radius f    646                        << "returning radius for C12");
1224             return positionRMS[6][12];           647             return positionRMS[6][12];
1225           }                                      648           }
1226         } else {                                 649         } else {
1227           INCL_DEBUG("getRadiusParameter: Rad    650           INCL_DEBUG("getRadiusParameter: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
1228                      << "returning radius for    651                      << "returning radius for C12");
1229           return positionRMS[6][12];             652           return positionRMS[6][12];
1230         }                                        653         }
1231       } else if(A <= 19 && A >= 6) {          << 654       } else if(A < 28 && A >= 6) {
1232         if(t==Lambda){                        << 
1233          G4double r0 = (1.128+0.439*std::pow( << 
1234          return r0;                           << 
1235         }                                     << 
1236         // HFB calculations                   << 
1237         if(getRPCorrelationCoefficient(t)<1.) << 
1238          G4double r0hfb = HFB::getSurfaceDiff << 
1239          if(r0hfb>0.)return r0hfb;            << 
1240         }                                     << 
1241         return mediumRadius[A-1];                655         return mediumRadius[A-1];
1242         //      return 1.581*mediumDiffusenes    656         //      return 1.581*mediumDiffuseness[A-1]*(2.+5.*mediumRadius[A-1])/(2.+3.*mediumRadius[A-1]);
1243       } else {                                   657       } else {
1244         INCL_ERROR("getRadiusParameter: No ra    658         INCL_ERROR("getRadiusParameter: No radius for nucleus A = " << A << " Z = " << Z << '\n');
1245         return 0.0;                              659         return 0.0;
1246       }                                          660       }
1247     }                                            661     }
1248                                                  662 
1249     G4double getMaximumNuclearRadius(const Pa    663     G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z) {
1250       const G4double XFOISA = 8.0;               664       const G4double XFOISA = 8.0;
1251       if(A > 19) {                            << 665       if(A >= 19) {
1252         return getNuclearRadius(t,A,Z) + XFOI    666         return getNuclearRadius(t,A,Z) + XFOISA * getSurfaceDiffuseness(t,A,Z);
1253       } else if(A <= 19 && A >= 6) {          << 667       } else if(A < 19 && A >= 6) {
1254         return 5.5 + 0.3 * (G4double(A) - 6.0    668         return 5.5 + 0.3 * (G4double(A) - 6.0)/12.0;
1255       } else if(A >= 2) {                        669       } else if(A >= 2) {
1256         return getNuclearRadius(t, A, Z) + 4.    670         return getNuclearRadius(t, A, Z) + 4.5;
1257       } else {                                   671       } else {
1258         INCL_ERROR("getMaximumNuclearRadius :    672         INCL_ERROR("getMaximumNuclearRadius : No maximum radius for nucleus A = " << A << " Z = " << Z << '\n');
1259         return 0.0;                              673         return 0.0;
1260       }                                          674       }
1261     }                                            675     }
1262                                                  676 
1263     G4double getSurfaceDiffuseness(const Part    677     G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z) {
1264       if(A > 19) {                            << 678       if(A >= 28) {
1265         // phenomenological fit               << 
1266         G4double a = 1.63e-4 * A + 0.510;        679         G4double a = 1.63e-4 * A + 0.510;
1267         // HFB calculations                   << 
1268         if(getRPCorrelationCoefficient(t)<1.) << 
1269           G4double ahfb = HFB::getSurfaceDiff << 
1270           if(ahfb>0.)a=ahfb;                  << 
1271         }                                     << 
1272         //                                    << 
1273         if(t==Lambda){                        << 
1274         // Like for neutrons                  << 
1275           G4double ahfb = HFB::getSurfaceDiff << 
1276           if(ahfb>0.)a=ahfb;                  << 
1277         }                                     << 
1278         if(t==Neutron)                           680         if(t==Neutron)
1279           a += neutronHalo;                      681           a += neutronHalo;
1280         return a;                                682         return a;
1281       } else if(A <= 19 && A >= 6) {          << 683       } else if(A < 28 && A >= 19) {
1282         // HFB calculations                   << 684         return mediumDiffuseness[A-1];
1283         if(getRPCorrelationCoefficient(t)<1.) << 685       } else if(A < 19 && A >= 6) {
1284           G4double ahfb = HFB::getRadiusParam << 
1285           if(ahfb>0.)return ahfb;             << 
1286         }                                     << 
1287         return mediumDiffuseness[A-1];           686         return mediumDiffuseness[A-1];
1288       } else if(A < 6 && A >= 2) {               687       } else if(A < 6 && A >= 2) {
1289         INCL_ERROR("getSurfaceDiffuseness: wa    688         INCL_ERROR("getSurfaceDiffuseness: was called for A = " << A << " Z = " << Z << '\n');
1290         return 0.0;                              689         return 0.0;
1291       } else {                                   690       } else {
1292         INCL_ERROR("getSurfaceDiffuseness: No    691         INCL_ERROR("getSurfaceDiffuseness: No diffuseness for nucleus A = " << A << " Z = " << Z << '\n');
1293         return 0.0;                              692         return 0.0;
1294       }                                          693       }
1295     }                                            694     }
1296                                                  695 
1297     G4double getMomentumRMS(const G4int A, co    696     G4double getMomentumRMS(const G4int A, const G4int Z) {
1298 // assert(Z>=0 && A>=0 && Z<=A);                 697 // assert(Z>=0 && A>=0 && Z<=A);
1299       return getFermiMomentum(A,Z) * Math::sq    698       return getFermiMomentum(A,Z) * Math::sqrtThreeFifths;
1300     }                                            699     }
1301                                                  700 
1302     G4double getSeparationEnergyINCL(const Pa    701     G4double getSeparationEnergyINCL(const ParticleType t, const G4int /*A*/, const G4int /*Z*/) {
1303       if(t==Proton)                              702       if(t==Proton)
1304         return theINCLProtonSeparationEnergy;    703         return theINCLProtonSeparationEnergy;
1305       else if(t==Neutron)                        704       else if(t==Neutron)
1306         return theINCLNeutronSeparationEnergy    705         return theINCLNeutronSeparationEnergy;
1307       else if(t==Lambda)                      << 
1308         return theINCLLambdaSeparationEnergy; << 
1309       else if(t==antiProton)                  << 
1310         return theINCLantiProtonSeparationEne << 
1311       else {                                     706       else {
1312         INCL_ERROR("ParticleTable::getSeparat    707         INCL_ERROR("ParticleTable::getSeparationEnergyINCL : Unknown particle type." << '\n');
1313         return 0.0;                              708         return 0.0;
1314       }                                          709       }
1315     }                                            710     }
1316                                                  711 
1317     G4double getSeparationEnergyReal(const Pa    712     G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z) {
1318       // Real separation energies for all nuc    713       // Real separation energies for all nuclei
1319       if(t==Proton)                              714       if(t==Proton)
1320         return (*getTableParticleMass)(Proton << 715         return (*getTableParticleMass)(Proton) + (*getTableMass)(A-1,Z-1) - (*getTableMass)(A,Z);
1321       else if(t==Neutron)                        716       else if(t==Neutron)
1322         return (*getTableParticleMass)(Neutro << 717         return (*getTableParticleMass)(Neutron) + (*getTableMass)(A-1,Z) - (*getTableMass)(A,Z);
1323       else if(t==Lambda)                      << 
1324         return (*getTableParticleMass)(Lambda << 
1325       else {                                     718       else {
1326         INCL_ERROR("ParticleTable::getSeparat    719         INCL_ERROR("ParticleTable::getSeparationEnergyReal : Unknown particle type." << '\n');
1327         return 0.0;                              720         return 0.0;
1328       }                                          721       }
1329     }                                            722     }
1330                                                  723 
1331     G4double getSeparationEnergyRealForLight(    724     G4double getSeparationEnergyRealForLight(const ParticleType t, const G4int A, const G4int Z) {
1332       // Real separation energies for light n    725       // Real separation energies for light nuclei, fixed values for heavy nuclei
1333       if(Z<clusterTableZSize && A<clusterTabl    726       if(Z<clusterTableZSize && A<clusterTableASize)
1334         return getSeparationEnergyReal(t, A,     727         return getSeparationEnergyReal(t, A, Z);
1335       else                                       728       else
1336         return getSeparationEnergyINCL(t, A,     729         return getSeparationEnergyINCL(t, A, Z);
1337     }                                            730     }
1338                                                  731 
1339     G4double getProtonSeparationEnergy() { re    732     G4double getProtonSeparationEnergy() { return protonSeparationEnergy; }
1340                                                  733 
1341     G4double getNeutronSeparationEnergy() { r    734     G4double getNeutronSeparationEnergy() { return neutronSeparationEnergy; }
1342                                                  735 
1343     G4double getLambdaSeparationEnergy() { re << 736     void setProtonSeparationEnergy(const G4double s) { protonSeparationEnergy = s; }
1344                                               << 
1345     void setProtonSeparationEnergy(const G4do << 
1346                                               << 
1347     void setNeutronSeparationEnergy(const G4d << 
1348                                                  737 
1349     void setLambdaSeparationEnergy(const G4do << 738     void setNeutronSeparationEnergy(const G4double s) { neutronSeparationEnergy  = s; }
1350                                                  739 
1351     std::string getElementName(const G4int Z)    740     std::string getElementName(const G4int Z) {
1352       if(Z<1) {                                  741       if(Z<1) {
1353         INCL_WARN("getElementName called with    742         INCL_WARN("getElementName called with Z<1" << '\n');
1354         return elementTable[0];                  743         return elementTable[0];
1355       } else if(Z<elementTableSize)              744       } else if(Z<elementTableSize)
1356         return elementTable[Z];                  745         return elementTable[Z];
1357       else                                       746       else
1358         return getIUPACElementName(Z);           747         return getIUPACElementName(Z);
1359     }                                            748     }
1360                                                  749 
1361     std::string getIUPACElementName(const G4i    750     std::string getIUPACElementName(const G4int Z) {
1362       std::stringstream elementStream;           751       std::stringstream elementStream;
1363       elementStream << Z;                        752       elementStream << Z;
1364       std::string elementName = elementStream    753       std::string elementName = elementStream.str();
1365       std::transform(elementName.begin(), ele    754       std::transform(elementName.begin(), elementName.end(), elementName.begin(), intToIUPAC);
1366       elementName[0] = (char)std::toupper(ele << 755       elementName[0] = std::toupper(elementName.at(0));
1367       return elementName;                        756       return elementName;
1368     }                                            757     }
1369                                                  758 
1370     G4int parseElement(std::string pS) {         759     G4int parseElement(std::string pS) {
1371       // Normalize the element name              760       // Normalize the element name
1372       std::transform(pS.begin(), pS.end(), pS    761       std::transform(pS.begin(), pS.end(), pS.begin(), ::tolower);
1373       pS[0] = (char)std::toupper(pS[0]);      << 762       pS[0] = ::toupper(pS[0]);
1374                                                  763 
1375       const std::string *iter = std::find(ele    764       const std::string *iter = std::find(elementTable, elementTable+elementTableSize, pS);
1376       if(iter != elementTable+elementTableSiz    765       if(iter != elementTable+elementTableSize)
1377         return G4int(iter - elementTable);    << 766         return iter - elementTable;
1378       else                                       767       else
1379         return ParticleTable::parseIUPACEleme    768         return ParticleTable::parseIUPACElement(pS);
1380     }                                            769     }
1381                                                  770 
1382     G4int parseIUPACElement(std::string const << 771     G4int parseIUPACElement(std::string const &s) {
1383       // Normalise to lower case                 772       // Normalise to lower case
1384       std::string elementName(sel);           << 773       std::string elementName(s);
1385       std::transform(elementName.begin(), ele    774       std::transform(elementName.begin(), elementName.end(), elementName.begin(), ::tolower);
1386       // Return 0 if the element name contain    775       // Return 0 if the element name contains anything but IUPAC digits
1387       if(elementName.find_first_not_of(elemen    776       if(elementName.find_first_not_of(elementIUPACDigits)!=std::string::npos)
1388         return 0;                                777         return 0;
1389       std::transform(elementName.begin(), ele    778       std::transform(elementName.begin(), elementName.end(), elementName.begin(), iupacToInt);
1390       std::stringstream elementStream(element    779       std::stringstream elementStream(elementName);
1391       G4int Z;                                   780       G4int Z;
1392       elementStream >> Z;                        781       elementStream >> Z;
1393       return Z;                                  782       return Z;
1394     }                                            783     }
1395                                                  784 
1396     IsotopicDistribution const &getNaturalIso    785     IsotopicDistribution const &getNaturalIsotopicDistribution(const G4int Z) {
1397       return getNaturalIsotopicDistributions(    786       return getNaturalIsotopicDistributions()->getIsotopicDistribution(Z);
1398     }                                            787     }
1399                                                  788 
1400     G4int drawRandomNaturalIsotope(const G4in    789     G4int drawRandomNaturalIsotope(const G4int Z) {
1401       return getNaturalIsotopicDistributions(    790       return getNaturalIsotopicDistributions()->drawRandomIsotope(Z);
1402     }                                            791     }
1403                                                  792 
1404     G4double getFermiMomentumConstant(const G    793     G4double getFermiMomentumConstant(const G4int /*A*/, const G4int /*Z*/) {
1405       return constantFermiMomentum;              794       return constantFermiMomentum;
1406     }                                            795     }
1407                                                  796 
1408     G4double getFermiMomentumConstantLight(co    797     G4double getFermiMomentumConstantLight(const G4int A, const G4int Z) {
1409 // assert(Z>0 && A>0 && Z<=A);                   798 // assert(Z>0 && A>0 && Z<=A);
1410       if(Z<clusterTableZSize && A<clusterTabl    799       if(Z<clusterTableZSize && A<clusterTableASize) {
1411         const G4double rms = momentumRMS[Z][A    800         const G4double rms = momentumRMS[Z][A];
1412         return ((rms>0.) ? rms : momentumRMS[    801         return ((rms>0.) ? rms : momentumRMS[6][12]) * Math::sqrtFiveThirds;
1413       } else                                     802       } else
1414         return getFermiMomentumConstant(A,Z);    803         return getFermiMomentumConstant(A,Z);
1415     }                                            804     }
1416                                                  805 
1417     G4double getFermiMomentumMassDependent(co    806     G4double getFermiMomentumMassDependent(const G4int A, const G4int /*Z*/) {
1418 // assert(A>0);                                  807 // assert(A>0);
1419       static const G4double alphaParam = 259.    808       static const G4double alphaParam = 259.416; // MeV/c
1420       static const G4double betaParam  = 152.    809       static const G4double betaParam  = 152.824; // MeV/c
1421       static const G4double gammaParam = 9.51    810       static const G4double gammaParam = 9.5157E-2;
1422       return alphaParam - betaParam*std::exp(    811       return alphaParam - betaParam*std::exp(-gammaParam*((G4double)A));
1423     }                                            812     }
1424                                                  813 
1425     G4double getRPCorrelationCoefficient(cons    814     G4double getRPCorrelationCoefficient(const ParticleType t) {
1426 // assert(t==Proton || t==Neutron || t==Lambd << 815 // assert(t==Proton || t==Neutron);
1427       return rpCorrelationCoefficient[t];        816       return rpCorrelationCoefficient[t];
1428     }                                            817     }
1429                                                  818 
1430     G4double getNeutronSkin() { return neutro    819     G4double getNeutronSkin() { return neutronSkin; }
1431                                                  820 
1432     G4double getNeutronHalo() { return neutro    821     G4double getNeutronHalo() { return neutronHalo; }
1433                                                  822 
1434     G4ThreadLocal G4double minDeltaMass = 0.;    823     G4ThreadLocal G4double minDeltaMass = 0.;
1435     G4ThreadLocal G4double minDeltaMass2 = 0.    824     G4ThreadLocal G4double minDeltaMass2 = 0.;
1436     G4ThreadLocal G4double minDeltaMassRndm =    825     G4ThreadLocal G4double minDeltaMassRndm = 0.;
1437     G4ThreadLocal NuclearMassFn getTableMass     826     G4ThreadLocal NuclearMassFn getTableMass = NULL;
1438     G4ThreadLocal ParticleMassFn getTablePart    827     G4ThreadLocal ParticleMassFn getTableParticleMass = NULL;
1439     G4ThreadLocal SeparationEnergyFn getSepar    828     G4ThreadLocal SeparationEnergyFn getSeparationEnergy = NULL;
1440     G4ThreadLocal FermiMomentumFn getFermiMom    829     G4ThreadLocal FermiMomentumFn getFermiMomentum = NULL;
1441                                                  830 
1442     ParticleType getPionType(const G4int isos    831     ParticleType getPionType(const G4int isosp) {
1443 // assert(isosp == -2 || isosp == 0 || isosp     832 // assert(isosp == -2 || isosp == 0 || isosp == 2);
1444         if (isosp == -2) {                       833         if (isosp == -2) {
1445             return PiMinus;                      834             return PiMinus;
1446         }                                        835         }
1447         else if (isosp == 0) {                   836         else if (isosp == 0) {
1448             return PiZero;                       837             return PiZero;
1449         }                                        838         }
1450         else {                                   839         else {
1451             return PiPlus;                       840             return PiPlus;
1452         }                                        841         }
1453     }                                            842     }
1454                                                  843 
1455     ParticleType getNucleonType(const G4int i    844     ParticleType getNucleonType(const G4int isosp) {
1456 // assert(isosp == -1 || isosp == 1);            845 // assert(isosp == -1 || isosp == 1);
1457         if (isosp == -1) {                       846         if (isosp == -1) {
1458             return Neutron;                      847             return Neutron;
1459         }                                        848         }
1460         else {                                   849         else {
1461             return Proton;                       850             return Proton;
1462         }                                        851         }
1463     }                                            852     }
1464                                                  853 
1465     ParticleType getDeltaType(const G4int iso    854     ParticleType getDeltaType(const G4int isosp) {
1466 // assert(isosp == -3 || isosp == -1 || isosp    855 // assert(isosp == -3 || isosp == -1 || isosp == 1 || isosp == 3);
1467         if (isosp == -3) {                       856         if (isosp == -3) {
1468             return DeltaMinus;                   857             return DeltaMinus;
1469         }                                        858         }
1470         else if (isosp == -1) {                  859         else if (isosp == -1) {
1471             return DeltaZero;                    860             return DeltaZero;
1472         }                                        861         }
1473         else if (isosp == 1) {                   862         else if (isosp == 1) {
1474             return DeltaPlus;                    863             return DeltaPlus;
1475         }                                        864         }
1476         else {                                   865         else {
1477             return DeltaPlusPlus;                866             return DeltaPlusPlus;
1478         }                                        867         }
1479     }                                            868     }
1480                                                  869 
1481     ParticleType getSigmaType(const G4int iso << 
1482 // assert(isosp == -2 || isosp == 0 || isosp  << 
1483         if (isosp == -2) {                    << 
1484             return SigmaMinus;                << 
1485         }                                     << 
1486         else if (isosp == 0) {                << 
1487             return SigmaZero;                 << 
1488         }                                     << 
1489         else {                                << 
1490             return SigmaPlus;                 << 
1491         }                                     << 
1492     }                                         << 
1493                                               << 
1494     ParticleType getXiType(const G4int isosp) << 
1495 // assert(isosp == -1 || isosp == 1);         << 
1496         if (isosp == -1) {                    << 
1497             return XiMinus;                   << 
1498         }                                     << 
1499         else {                                << 
1500             return XiZero;                    << 
1501         }                                     << 
1502     }                                         << 
1503                                               << 
1504   /*ParticleType getAntiNucleonType(const G4i << 
1505 // assert(isosp == -1); //|| isosp == 1       << 
1506       if (isosp == -1) {                      << 
1507           return antiProton;                  << 
1508       }                                       << 
1509       else {                                  << 
1510           return antiNeutron;                 << 
1511       }                                       << 
1512     }*/                                       << 
1513                                               << 
1514     ParticleType getAntiSigmaType(const G4int << 
1515 // assert(isosp == -2 || isosp == 0 || isosp  << 
1516         if (isosp == -2) {                    << 
1517             return antiSigmaPlus;             << 
1518         }                                     << 
1519         else if (isosp == 0) {                << 
1520             return antiSigmaZero;             << 
1521         }                                     << 
1522         else {                                << 
1523             return antiSigmaMinus;            << 
1524         }                                     << 
1525     }                                         << 
1526                                               << 
1527     ParticleType getAntiXiType(const G4int is << 
1528 // assert(isosp == -1 || isosp == 1);         << 
1529         if (isosp == -1) {                    << 
1530             return antiXiZero;                << 
1531         }                                     << 
1532         else {                                << 
1533             return antiXiMinus;               << 
1534         }                                     << 
1535     }                                         << 
1536                                               << 
1537     ParticleType getKaonType(const G4int isos << 
1538 // assert(isosp == -1 || isosp == 1);         << 
1539         if (isosp == -1) {                    << 
1540             return KZero;                     << 
1541         }                                     << 
1542         else {                                << 
1543             return KPlus;                     << 
1544         }                                     << 
1545     }                                         << 
1546                                               << 
1547     ParticleType getAntiKaonType(const G4int  << 
1548 // assert(isosp == -1 || isosp == 1);         << 
1549         if (isosp == -1) {                    << 
1550             return KMinus;                    << 
1551         }                                     << 
1552         else {                                << 
1553             return KZeroBar;                  << 
1554         }                                     << 
1555     }                                         << 
1556                                               << 
1557     G4double getWidth(const ParticleType pt)  << 
1558 // assert(pt == PiPlus || pt == PiMinus || pt << 
1559           if(pt == PiPlus) {                  << 
1560               return piPlusWidth;             << 
1561           } else if(pt == PiMinus) {          << 
1562               return piMinusWidth;            << 
1563           } else if(pt == PiZero) {           << 
1564               return piZeroWidth;             << 
1565           } else if(pt == Eta) {              << 
1566               return etaWidth;                << 
1567           } else if(pt == Omega) {            << 
1568               return omegaWidth;              << 
1569           } else if(pt == EtaPrime) {         << 
1570               return etaPrimeWidth;           << 
1571           } else if(pt == SigmaPlus) {        << 
1572               return SigmaPlusWidth;          << 
1573           } else if(pt == SigmaZero) {        << 
1574               return SigmaZeroWidth;          << 
1575           } else if(pt == SigmaMinus) {       << 
1576               return SigmaMinusWidth;         << 
1577           } else if(pt == KPlus) {            << 
1578               return KPlusWidth;              << 
1579           } else if(pt == KMinus) {           << 
1580               return KMinusWidth;             << 
1581           } else if(pt == KShort) {           << 
1582               return KShortWidth;             << 
1583           } else if(pt == KLong) {            << 
1584               return KLongWidth;              << 
1585           } else if(pt == Lambda) {           << 
1586               return LambdaWidth;             << 
1587           } else if(pt == XiMinus) {          << 
1588               return XiMinusWidth;            << 
1589           } else if(pt == XiZero) {           << 
1590               return XiZeroWidth;             << 
1591           } else if(pt == antiSigmaPlus) {    << 
1592               return antiSigmaPlusWidth;      << 
1593           } else if(pt == antiSigmaZero) {    << 
1594               return antiSigmaZeroWidth;      << 
1595           } else if(pt == antiSigmaMinus) {   << 
1596               return antiSigmaMinusWidth;     << 
1597           } else if(pt == antiLambda) {       << 
1598               return antiLambdaWidth;         << 
1599           } else if(pt == antiXiMinus) {      << 
1600               return antiXiMinusWidth;        << 
1601           } else if(pt == antiXiZero) {       << 
1602               return antiXiZeroWidth;         << 
1603           } else {                            << 
1604               INCL_ERROR("getWidth : Unknown  << 
1605               return 0.0;                     << 
1606           }                                   << 
1607       }                                       << 
1608                                               << 
1609   } // namespace ParticleTable                   870   } // namespace ParticleTable
1610 } // namespace G4INCL                            871 } // namespace G4INCL
1611                                                  872 
1612                                                  873