Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/hadronic/Hadr09/src/HadronicGenerator.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 /examples/extended/hadronic/Hadr09/src/HadronicGenerator.cc (Version 11.3.0) and /examples/extended/hadronic/Hadr09/src/HadronicGenerator.cc (Version 11.0.p2)


  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 /// \file HadronicGenerator.cc                     26 /// \file HadronicGenerator.cc
 27 /// \brief Implementation of the HadronicGener     27 /// \brief Implementation of the HadronicGenerator class
 28 //                                                 28 //
 29 //--------------------------------------------     29 //------------------------------------------------------------------------
 30 // Class: HadronicGenerator                        30 // Class: HadronicGenerator
 31 // Author: Alberto Ribon (CERN EP/SFT)             31 // Author: Alberto Ribon (CERN EP/SFT)
 32 // Date: May 2020                                  32 // Date: May 2020
 33 //--------------------------------------------     33 //------------------------------------------------------------------------
 34                                                    34 
 35 //....oooOO0OOooo........oooOO0OOooo........oo     35 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 36 //....oooOO0OOooo........oooOO0OOooo........oo     36 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 37                                                    37 
 38 #include "HadronicGenerator.hh"                    38 #include "HadronicGenerator.hh"
                                                   >>  39 #include <iomanip>
                                                   >>  40 #include "globals.hh"
                                                   >>  41 #include "G4ios.hh"
                                                   >>  42 #include "G4PhysicalConstants.hh"
                                                   >>  43 #include "G4Material.hh"
                                                   >>  44 #include "G4ProcessManager.hh"
                                                   >>  45 #include "G4VParticleChange.hh"
                                                   >>  46 #include "G4ParticleTable.hh"
                                                   >>  47 #include "G4IonTable.hh"
                                                   >>  48 #include "G4DynamicParticle.hh"
                                                   >>  49 #include "G4DecayPhysics.hh"
                                                   >>  50 #include "G4Box.hh"
                                                   >>  51 #include "G4PVPlacement.hh"
                                                   >>  52 #include "G4Step.hh"
                                                   >>  53 #include "G4UnitsTable.hh"
                                                   >>  54 #include "G4SystemOfUnits.hh"
                                                   >>  55 #include "G4StateManager.hh"
                                                   >>  56 #include "G4TouchableHistory.hh"
                                                   >>  57 #include "G4TransportationManager.hh"
 39                                                    58 
 40 #include "G4AblaInterface.hh"                  <<  59 #include "G4PionMinus.hh"
                                                   >>  60 #include "G4PionPlus.hh"
                                                   >>  61 #include "G4KaonMinus.hh"
                                                   >>  62 #include "G4KaonPlus.hh"
                                                   >>  63 #include "G4KaonZeroLong.hh"
                                                   >>  64 #include "G4KaonZeroShort.hh"
                                                   >>  65 #include "G4Proton.hh"
                                                   >>  66 #include "G4Neutron.hh"
                                                   >>  67 #include "G4Deuteron.hh"
                                                   >>  68 #include "G4Triton.hh"
                                                   >>  69 #include "G4He3.hh"
 41 #include "G4Alpha.hh"                              70 #include "G4Alpha.hh"
 42 #include "G4AntiAlpha.hh"                      <<  71 #include "G4Lambda.hh"
 43 #include "G4AntiBMesonZero.hh"                 <<  72 #include "G4SigmaPlus.hh"
 44 #include "G4AntiBsMesonZero.hh"                <<  73 #include "G4SigmaZero.hh"
 45 #include "G4AntiDMesonZero.hh"                 <<  74 #include "G4SigmaMinus.hh"
                                                   >>  75 #include "G4XiMinus.hh"
                                                   >>  76 #include "G4XiZero.hh"
                                                   >>  77 #include "G4OmegaMinus.hh"
                                                   >>  78 #include "G4AntiProton.hh"
                                                   >>  79 #include "G4AntiNeutron.hh"
 46 #include "G4AntiDeuteron.hh"                       80 #include "G4AntiDeuteron.hh"
 47 #include "G4AntiDoubleHyperDoubleNeutron.hh"   <<  81 #include "G4AntiTriton.hh"
 48 #include "G4AntiDoubleHyperH4.hh"              << 
 49 #include "G4AntiHe3.hh"                            82 #include "G4AntiHe3.hh"
 50 #include "G4AntiHyperAlpha.hh"                 <<  83 #include "G4AntiAlpha.hh"
 51 #include "G4AntiHyperH4.hh"                    << 
 52 #include "G4AntiHyperHe5.hh"                   << 
 53 #include "G4AntiHyperTriton.hh"                << 
 54 #include "G4AntiLambda.hh"                         84 #include "G4AntiLambda.hh"
 55 #include "G4AntiLambdab.hh"                    << 
 56 #include "G4AntiLambdacPlus.hh"                << 
 57 #include "G4AntiNeutron.hh"                    << 
 58 #include "G4AntiOmegaMinus.hh"                 << 
 59 #include "G4AntiOmegabMinus.hh"                << 
 60 #include "G4AntiOmegacZero.hh"                 << 
 61 #include "G4AntiProton.hh"                     << 
 62 #include "G4AntiSigmaMinus.hh"                 << 
 63 #include "G4AntiSigmaPlus.hh"                      85 #include "G4AntiSigmaPlus.hh"
 64 #include "G4AntiSigmaZero.hh"                      86 #include "G4AntiSigmaZero.hh"
 65 #include "G4AntiTriton.hh"                     <<  87 #include "G4AntiSigmaMinus.hh"
 66 #include "G4AntiXiMinus.hh"                        88 #include "G4AntiXiMinus.hh"
 67 #include "G4AntiXiZero.hh"                         89 #include "G4AntiXiZero.hh"
 68 #include "G4AntiXibMinus.hh"                   <<  90 #include "G4AntiOmegaMinus.hh"
 69 #include "G4AntiXibZero.hh"                    <<  91 #include "G4GenericIon.hh"
 70 #include "G4AntiXicPlus.hh"                    <<  92 
 71 #include "G4AntiXicZero.hh"                    <<  93 #include "G4DMesonPlus.hh"
 72 #include "G4BGGNucleonInelasticXS.hh"          <<  94 #include "G4DMesonMinus.hh"
 73 #include "G4BGGPionInelasticXS.hh"             <<  95 #include "G4DMesonZero.hh"
 74 #include "G4BMesonMinus.hh"                    <<  96 #include "G4AntiDMesonZero.hh"
                                                   >>  97 #include "G4DsMesonPlus.hh"
                                                   >>  98 #include "G4DsMesonMinus.hh"
 75 #include "G4BMesonPlus.hh"                         99 #include "G4BMesonPlus.hh"
                                                   >> 100 #include "G4BMesonMinus.hh"
 76 #include "G4BMesonZero.hh"                        101 #include "G4BMesonZero.hh"
 77 #include "G4BcMesonMinus.hh"                   << 102 #include "G4AntiBMesonZero.hh"
 78 #include "G4BcMesonPlus.hh"                    << 
 79 #include "G4BinaryCascade.hh"                  << 
 80 #include "G4BinaryLightIonReaction.hh"         << 
 81 #include "G4Box.hh"                            << 
 82 #include "G4BsMesonZero.hh"                       103 #include "G4BsMesonZero.hh"
                                                   >> 104 #include "G4AntiBsMesonZero.hh"
                                                   >> 105 #include "G4BcMesonPlus.hh"
                                                   >> 106 #include "G4BcMesonMinus.hh"
                                                   >> 107 #include "G4LambdacPlus.hh"
                                                   >> 108 #include "G4AntiLambdacPlus.hh"
                                                   >> 109 #include "G4XicPlus.hh"
                                                   >> 110 #include "G4AntiXicPlus.hh"
                                                   >> 111 #include "G4XicZero.hh"
                                                   >> 112 #include "G4AntiXicZero.hh"
                                                   >> 113 #include "G4OmegacZero.hh"
                                                   >> 114 #include "G4AntiOmegacZero.hh"
                                                   >> 115 #include "G4Lambdab.hh"
                                                   >> 116 #include "G4AntiLambdab.hh"
                                                   >> 117 #include "G4XibZero.hh"
                                                   >> 118 #include "G4AntiXibZero.hh"
                                                   >> 119 #include "G4XibMinus.hh"
                                                   >> 120 #include "G4AntiXibMinus.hh"
                                                   >> 121 #include "G4OmegabMinus.hh"
                                                   >> 122 #include "G4AntiOmegabMinus.hh"
                                                   >> 123 
                                                   >> 124 #include "G4HadronInelasticProcess.hh"
                                                   >> 125 #include "G4HadronicParameters.hh"
                                                   >> 126 
 83 #include "G4CascadeInterface.hh"                  127 #include "G4CascadeInterface.hh"
 84 #include "G4ChipsHyperonInelasticXS.hh"        << 128 #include "G4TheoFSGenerator.hh"
 85 #include "G4ComponentAntiNuclNuclearXS.hh"     << 129 #include "G4GeneratorPrecompoundInterface.hh"
 86 #include "G4ComponentGGHadronNucleusXsc.hh"    << 
 87 #include "G4ComponentGGNuclNuclXsc.hh"         << 
 88 #include "G4CrossSectionInelastic.hh"          << 
 89 #include "G4DMesonMinus.hh"                    << 
 90 #include "G4DMesonPlus.hh"                     << 
 91 #include "G4DMesonZero.hh"                     << 
 92 #include "G4DecayPhysics.hh"                   << 
 93 #include "G4Deuteron.hh"                       << 
 94 #include "G4DoubleHyperDoubleNeutron.hh"       << 
 95 #include "G4DoubleHyperH4.hh"                  << 
 96 #include "G4DsMesonMinus.hh"                   << 
 97 #include "G4DsMesonPlus.hh"                    << 
 98 #include "G4DynamicParticle.hh"                << 
 99 #include "G4ExcitationHandler.hh"                 130 #include "G4ExcitationHandler.hh"
                                                   >> 131 #include "G4PreCompoundModel.hh"
                                                   >> 132 #include "G4LundStringFragmentation.hh"
100 #include "G4ExcitedStringDecay.hh"                133 #include "G4ExcitedStringDecay.hh"
101 #include "G4FTFModel.hh"                          134 #include "G4FTFModel.hh"
102 #include "G4GeneratorPrecompoundInterface.hh"  << 135 #include "G4BinaryCascade.hh"
103 #include "G4GenericIon.hh"                     << 136 #include "G4BinaryLightIonReaction.hh"
104 #include "G4HadronInelasticProcess.hh"         << 
105 #include "G4HadronicParameters.hh"             << 
106 #include "G4He3.hh"                            << 
107 #include "G4HyperAlpha.hh"                     << 
108 #include "G4HyperH4.hh"                        << 
109 #include "G4HyperHe5.hh"                       << 
110 #include "G4HyperTriton.hh"                    << 
111 #include "G4INCLXXInterface.hh"                   137 #include "G4INCLXXInterface.hh"
112 #include "G4IonTable.hh"                       << 138 #include "G4AblaInterface.hh"
113 #include "G4KaonMinus.hh"                      << 139 #include "G4QuasiElasticChannel.hh"
114 #include "G4KaonPlus.hh"                       << 
115 #include "G4KaonZeroLong.hh"                   << 
116 #include "G4KaonZeroShort.hh"                  << 
117 #include "G4Lambda.hh"                         << 
118 #include "G4Lambdab.hh"                        << 
119 #include "G4LambdacPlus.hh"                    << 
120 #include "G4LundStringFragmentation.hh"        << 
121 #include "G4Material.hh"                       << 
122 #include "G4Neutron.hh"                        << 
123 #include "G4NeutronInelasticXS.hh"             << 
124 #include "G4OmegaMinus.hh"                     << 
125 #include "G4OmegabMinus.hh"                    << 
126 #include "G4OmegacZero.hh"                     << 
127 #include "G4PVPlacement.hh"                    << 
128 #include "G4ParticleTable.hh"                  << 
129 #include "G4PhysicalConstants.hh"              << 
130 #include "G4PionMinus.hh"                      << 
131 #include "G4PionPlus.hh"                       << 
132 #include "G4PreCompoundModel.hh"               << 
133 #include "G4ProcessManager.hh"                 << 
134 #include "G4Proton.hh"                         << 
135 #include "G4QGSMFragmentation.hh"                 140 #include "G4QGSMFragmentation.hh"
136 #include "G4QGSModel.hh"                          141 #include "G4QGSModel.hh"
137 #include "G4QGSParticipants.hh"                   142 #include "G4QGSParticipants.hh"
138 #include "G4QuasiElasticChannel.hh"            << 
139 #include "G4SigmaMinus.hh"                     << 
140 #include "G4SigmaPlus.hh"                      << 
141 #include "G4SigmaZero.hh"                      << 
142 #include "G4StateManager.hh"                   << 
143 #include "G4Step.hh"                           << 
144 #include "G4SystemOfUnits.hh"                  << 
145 #include "G4TheoFSGenerator.hh"                << 
146 #include "G4TouchableHistory.hh"               << 
147 #include "G4TransportationManager.hh"          << 
148 #include "G4Triton.hh"                         << 
149 #include "G4UnitsTable.hh"                     << 
150 #include "G4VCrossSectionDataSet.hh"           << 
151 #include "G4VParticleChange.hh"                << 
152 #include "G4XiMinus.hh"                        << 
153 #include "G4XiZero.hh"                         << 
154 #include "G4XibMinus.hh"                       << 
155 #include "G4XibZero.hh"                        << 
156 #include "G4XicPlus.hh"                        << 
157 #include "G4XicZero.hh"                        << 
158 #include "G4ios.hh"                            << 
159 #include "globals.hh"                          << 
160                                                   143 
161 #include <iomanip>                             << 144 #include "G4VCrossSectionDataSet.hh"
                                                   >> 145 #include "G4CrossSectionInelastic.hh"
                                                   >> 146 #include "G4BGGNucleonInelasticXS.hh"
                                                   >> 147 #include "G4NeutronInelasticXS.hh"
                                                   >> 148 #include "G4BGGPionInelasticXS.hh"
                                                   >> 149 #include "G4ComponentGGHadronNucleusXsc.hh"
                                                   >> 150 #include "G4ChipsHyperonInelasticXS.hh"
                                                   >> 151 #include "G4ComponentAntiNuclNuclearXS.hh"
                                                   >> 152 #include "G4ComponentGGNuclNuclXsc.hh"
162                                                   153 
163 //....oooOO0OOooo........oooOO0OOooo........oo    154 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
164                                                   155 
165 HadronicGenerator::HadronicGenerator(const G4S << 156 HadronicGenerator::HadronicGenerator( const G4String physicsCase ) :
166   : fPhysicsCase(physicsCase),                 << 157   fPhysicsCase( physicsCase ), fPhysicsCaseIsSupported( false ),
167     fPhysicsCaseIsSupported(false),            << 158   fLastHadronicProcess( nullptr ), fPartTable( nullptr )
168     fLastHadronicProcess(nullptr),             << 
169     fPartTable(nullptr)                        << 
170 {                                                 159 {
171   // The constructor set-ups all the particles    160   // The constructor set-ups all the particles, models, cross sections and
172   // hadronic inelastic processes.                161   // hadronic inelastic processes.
173   // This should be done only once for each ap    162   // This should be done only once for each application.
174   // In the case of a multi-threaded applicati    163   // In the case of a multi-threaded application using this class,
175   // the constructor should be invoked for eac    164   // the constructor should be invoked for each thread,
176   // i.e. one instance of the class should be     165   // i.e. one instance of the class should be kept per thread.
177   // The particles and processes that are crea    166   // The particles and processes that are created in this constructor
178   // will then be used by the method GenerateI    167   // will then be used by the method GenerateInteraction at each interaction.
179   // Notes:                                       168   // Notes:
180   // - Neither the hadronic models nor the cro    169   // - Neither the hadronic models nor the cross sections are used directly
181   //   by the method GenerateInteraction, but     170   //   by the method GenerateInteraction, but they are associated to the
182   //   hadronic processes and used by Geant4 t    171   //   hadronic processes and used by Geant4 to simulate the collision;
183   // - Although the class generates only final    172   // - Although the class generates only final states, but not free mean paths,
184   //   inelastic hadron-nuclear cross sections    173   //   inelastic hadron-nuclear cross sections are needed by Geant4 to sample
185   //   the target nucleus from the target mate    174   //   the target nucleus from the target material.
186                                                << 175   
187   // Definition of particles                      176   // Definition of particles
188   G4GenericIon* gion = G4GenericIon::Definitio    177   G4GenericIon* gion = G4GenericIon::Definition();
189   gion->SetProcessManager(new G4ProcessManager << 178   gion->SetProcessManager( new G4ProcessManager( gion ) );
190   G4DecayPhysics* decays = new G4DecayPhysics;    179   G4DecayPhysics* decays = new G4DecayPhysics;
191   decays->ConstructParticle();                 << 180   decays->ConstructParticle();  
192   fPartTable = G4ParticleTable::GetParticleTab    181   fPartTable = G4ParticleTable::GetParticleTable();
193   fPartTable->SetReadiness();                     182   fPartTable->SetReadiness();
194   G4IonTable* ions = fPartTable->GetIonTable()    183   G4IonTable* ions = fPartTable->GetIonTable();
195   ions->CreateAllIon();                           184   ions->CreateAllIon();
196   ions->CreateAllIsomer();                        185   ions->CreateAllIsomer();
197                                                   186 
198   // Build BERT model                             187   // Build BERT model
199   G4CascadeInterface* theBERTmodel = new G4Cas    188   G4CascadeInterface* theBERTmodel = new G4CascadeInterface;
200                                                   189 
201   // Build BIC model                              190   // Build BIC model
202   G4BinaryCascade* theBICmodel = new G4BinaryC    191   G4BinaryCascade* theBICmodel = new G4BinaryCascade;
203   G4PreCompoundModel* thePreEquilib = new G4Pr << 192   G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel( new G4ExcitationHandler );
204   theBICmodel->SetDeExcitation(thePreEquilib); << 193   theBICmodel->SetDeExcitation( thePreEquilib );
205                                                   194 
206   // Build BinaryLightIon model                   195   // Build BinaryLightIon model
207   G4PreCompoundModel* thePreEquilibBis = new G << 196   G4PreCompoundModel* thePreEquilibBis = new G4PreCompoundModel( new G4ExcitationHandler );
208   G4BinaryLightIonReaction* theIonBICmodel = n << 197   G4BinaryLightIonReaction* theIonBICmodel = new G4BinaryLightIonReaction( thePreEquilibBis );
209                                                   198 
210   // Build the INCL model                         199   // Build the INCL model
211   G4INCLXXInterface* theINCLmodel = new G4INCL    200   G4INCLXXInterface* theINCLmodel = new G4INCLXXInterface;
212   const G4bool useAblaDeExcitation = false;  /    201   const G4bool useAblaDeExcitation = false;  // By default INCL uses Preco: set "true" to use
213                                              /    202                                              // ABLA DeExcitation
214   if (theINCLmodel && useAblaDeExcitation) {   << 203   if ( theINCLmodel && useAblaDeExcitation ) {
215     G4AblaInterface* theAblaInterface = new G4    204     G4AblaInterface* theAblaInterface = new G4AblaInterface;
216     theINCLmodel->SetDeExcitation(theAblaInter << 205     theINCLmodel->SetDeExcitation( theAblaInterface );
217   }                                               206   }
218                                                << 207   
219   // Build the FTFP model (FTF/Preco) : 4 inst    208   // Build the FTFP model (FTF/Preco) : 4 instances with different kinetic energy intervals.
220   // (Notice that these kinetic energy interva    209   // (Notice that these kinetic energy intervals are applied per nucleons, so they are fine
221   // for all types of hadron and ion projectil    210   // for all types of hadron and ion projectile).
222   // Model instance without energy constraint.    211   // Model instance without energy constraint.
223   // (Used for the case of FTFP model, and for    212   // (Used for the case of FTFP model, and for light anti-ions in all physics lists.)
224   G4TheoFSGenerator* theFTFPmodel = new G4Theo << 213   G4TheoFSGenerator* theFTFPmodel = new G4TheoFSGenerator( "FTFP" );
225   theFTFPmodel->SetMaxEnergy(G4HadronicParamet << 214   theFTFPmodel->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
226   G4GeneratorPrecompoundInterface* theCascade     215   G4GeneratorPrecompoundInterface* theCascade = new G4GeneratorPrecompoundInterface;
227   theCascade->SetDeExcitation(thePreEquilib);  << 216   theCascade->SetDeExcitation( thePreEquilib );
228   theFTFPmodel->SetTransport(theCascade);      << 217   theFTFPmodel->SetTransport( theCascade );
229   G4LundStringFragmentation* theLundFragmentat    218   G4LundStringFragmentation* theLundFragmentation = new G4LundStringFragmentation;
230   G4ExcitedStringDecay* theStringDecay = new G << 219   G4ExcitedStringDecay* theStringDecay = new G4ExcitedStringDecay( theLundFragmentation );
231   G4FTFModel* theStringModel = new G4FTFModel;    220   G4FTFModel* theStringModel = new G4FTFModel;
232   theStringModel->SetFragmentationModel(theStr << 221   theStringModel->SetFragmentationModel( theStringDecay );
233                                                   222 
234   // If the following line is set, then the sq    223   // If the following line is set, then the square of the impact parameter is sampled
235   // randomly from a flat distribution in the     224   // randomly from a flat distribution in the range [ Bmin*Bmin, Bmax*Bmax ]
236   //***LOOKHERE*** CHOOSE IMPACT PARAMETER MIN << 225   //theStringModel->SetBminBmax( 0.0, 2.0*fermi );  //***LOOKHERE*** CHOOSE IMPACT PARAMETER MIN & MAX
237   // theStringModel->SetBminBmax( 0.0, 2.0*fer << 
238                                                   226 
239   theFTFPmodel->SetHighEnergyGenerator(theStri << 227   theFTFPmodel->SetHighEnergyGenerator( theStringModel );
240   // Model instance with constraint to be abov    228   // Model instance with constraint to be above a kinetic energy threshold.
241   // (Used for ions in all physics lists, and,    229   // (Used for ions in all physics lists, and, in the case of non-QGS-based physics lists,
242   // also for pions, kaons, nucleons and hyper << 230   // also for pions, kaons, nucleons and hyperons.)  
243   G4TheoFSGenerator* theFTFPmodel_aboveThresho << 231   G4TheoFSGenerator* theFTFPmodel_aboveThreshold = new G4TheoFSGenerator( "FTFP" );
244   theFTFPmodel_aboveThreshold->SetMaxEnergy(G4 << 232   theFTFPmodel_aboveThreshold->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
245   theFTFPmodel_aboveThreshold->SetTransport(th << 233   theFTFPmodel_aboveThreshold->SetTransport( theCascade );
246   theFTFPmodel_aboveThreshold->SetHighEnergyGe << 234   theFTFPmodel_aboveThreshold->SetHighEnergyGenerator( theStringModel );
247   // Model instance with constraint to be with    235   // Model instance with constraint to be within two kinetic energy thresholds.
248   // (Used in the case of QGS-based physics li << 236   // (Used in the case of QGS-based physics lists for pions, kaons, nucleons and hyperons.)  
249   G4TheoFSGenerator* theFTFPmodel_constrained  << 237   G4TheoFSGenerator* theFTFPmodel_constrained = new G4TheoFSGenerator( "FTFP" );
250   theFTFPmodel_constrained->SetMaxEnergy(G4Had << 238   theFTFPmodel_constrained->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
251   theFTFPmodel_constrained->SetTransport(theCa << 239   theFTFPmodel_constrained->SetTransport( theCascade );
252   theFTFPmodel_constrained->SetHighEnergyGener << 240   theFTFPmodel_constrained->SetHighEnergyGenerator( theStringModel );
253   // Model instance to be used down to zero ki    241   // Model instance to be used down to zero kinetic energy, with eventual constraint
254   // - in the case of QGS-based physics lists     242   // - in the case of QGS-based physics lists - to be below a kinetic energy threshold.
255   // (Used for anti-baryons, anti-hyperons, an    243   // (Used for anti-baryons, anti-hyperons, and charmed and bottom hadrons.)
256   G4TheoFSGenerator* theFTFPmodel_belowThresho << 244   G4TheoFSGenerator* theFTFPmodel_belowThreshold = new G4TheoFSGenerator( "FTFP" );
257   theFTFPmodel_belowThreshold->SetMaxEnergy(G4 << 245   theFTFPmodel_belowThreshold->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
258   theFTFPmodel_belowThreshold->SetTransport(th << 246   theFTFPmodel_belowThreshold->SetTransport( theCascade );
259   theFTFPmodel_belowThreshold->SetHighEnergyGe << 247   theFTFPmodel_belowThreshold->SetHighEnergyGenerator( theStringModel );
260                                                   248 
261   // Build the QGSP model (QGS/Preco)             249   // Build the QGSP model (QGS/Preco)
262   G4TheoFSGenerator* theQGSPmodel = new G4Theo << 250   G4TheoFSGenerator* theQGSPmodel = new G4TheoFSGenerator( "QGSP" );
263   theQGSPmodel->SetMaxEnergy(G4HadronicParamet << 251   theQGSPmodel->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
264   theQGSPmodel->SetTransport(theCascade);      << 252   theQGSPmodel->SetTransport( theCascade );
265   G4QGSMFragmentation* theQgsmFragmentation =     253   G4QGSMFragmentation* theQgsmFragmentation = new G4QGSMFragmentation;
266   G4ExcitedStringDecay* theQgsmStringDecay = n << 254   G4ExcitedStringDecay* theQgsmStringDecay = new G4ExcitedStringDecay( theQgsmFragmentation );
267   G4VPartonStringModel* theQgsmStringModel = n << 255   G4VPartonStringModel* theQgsmStringModel = new G4QGSModel< G4QGSParticipants >;
268   theQgsmStringModel->SetFragmentationModel(th << 256   theQgsmStringModel->SetFragmentationModel( theQgsmStringDecay );
269   theQGSPmodel->SetHighEnergyGenerator(theQgsm << 257   theQGSPmodel->SetHighEnergyGenerator( theQgsmStringModel );
270   G4QuasiElasticChannel* theQuasiElastic = new    258   G4QuasiElasticChannel* theQuasiElastic = new G4QuasiElasticChannel;  // QGSP uses quasi-elastic
271   theQGSPmodel->SetQuasiElasticChannel(theQuas << 259   theQGSPmodel->SetQuasiElasticChannel( theQuasiElastic );
272                                                   260 
273   // For the case of "physics-list proxies", s    261   // For the case of "physics-list proxies", select the energy range for each hadronic model.
274   // Note: the transition energy between hadro    262   // Note: the transition energy between hadronic models vary between physics lists,
275   //       type of hadrons, and version of Gea    263   //       type of hadrons, and version of Geant4. Here, for simplicity, we use an uniform
276   //       energy transition for all types of     264   //       energy transition for all types of hadrons and regardless of the Geant4 version;
277   //       moreover, for "FTFP_INCLXX" we use     265   //       moreover, for "FTFP_INCLXX" we use a different energy transition range
278   //       between FTFP and INCL than in the r    266   //       between FTFP and INCL than in the real physics list.
279   if (fPhysicsCase == "FTFP_BERT_ATL" || fPhys << 267   if ( fPhysicsCase == "FTFP_BERT_ATL"  ||
280       || fPhysicsCase == "FTFP_INCLXX" || fPhy << 268        fPhysicsCase == "FTFP_BERT"      ||
281   {                                            << 269        fPhysicsCase == "FTFP_INCLXX"    ||
                                                   >> 270        fPhysicsCase == "QGSP_BERT"      ||
                                                   >> 271        fPhysicsCase == "QGSP_BIC" ) {
282     const G4double ftfpMinE = G4HadronicParame    272     const G4double ftfpMinE = G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade();
283     const G4double bertMaxE = G4HadronicParame    273     const G4double bertMaxE = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade();
284     const G4double ftfpMinE_ATL = 9.0 * CLHEP: << 274     const G4double ftfpMinE_ATL =  9.0*CLHEP::GeV;
285     const G4double bertMaxE_ATL = 12.0 * CLHEP << 275     const G4double bertMaxE_ATL = 12.0*CLHEP::GeV;
286     const G4double ftfpMaxE = G4HadronicParame    276     const G4double ftfpMaxE = G4HadronicParameters::Instance()->GetMaxEnergyTransitionQGS_FTF();
287     const G4double qgspMinE = G4HadronicParame    277     const G4double qgspMinE = G4HadronicParameters::Instance()->GetMinEnergyTransitionQGS_FTF();
288     theFTFPmodel->SetMinEnergy(0.0);           << 278     theFTFPmodel->SetMinEnergy( 0.0 );
289     theFTFPmodel_belowThreshold->SetMinEnergy( << 279     theFTFPmodel_belowThreshold->SetMinEnergy( 0.0 );
290     if (fPhysicsCase == "FTFP_BERT_ATL") {     << 280     if ( fPhysicsCase == "FTFP_BERT_ATL" ) {
291       theBERTmodel->SetMaxEnergy(bertMaxE_ATL) << 281       theBERTmodel->SetMaxEnergy( bertMaxE_ATL );
292       theIonBICmodel->SetMaxEnergy(bertMaxE_AT << 282       theIonBICmodel->SetMaxEnergy( bertMaxE_ATL );
293       theFTFPmodel_aboveThreshold->SetMinEnerg << 283       theFTFPmodel_aboveThreshold->SetMinEnergy( ftfpMinE_ATL );
294       theFTFPmodel_constrained->SetMinEnergy(f << 284       theFTFPmodel_constrained->SetMinEnergy( ftfpMinE_ATL );
295     }                                          << 285     } else {
296     else {                                     << 286       theBERTmodel->SetMaxEnergy( bertMaxE );
297       theBERTmodel->SetMaxEnergy(bertMaxE);    << 287       theIonBICmodel->SetMaxEnergy( bertMaxE );
298       theIonBICmodel->SetMaxEnergy(bertMaxE);  << 288       theFTFPmodel_aboveThreshold->SetMinEnergy( ftfpMinE );
299       theFTFPmodel_aboveThreshold->SetMinEnerg << 289       theFTFPmodel_constrained->SetMinEnergy( ftfpMinE );
300       theFTFPmodel_constrained->SetMinEnergy(f << 
301     }                                             290     }
302     if (fPhysicsCase == "FTFP_INCLXX") {       << 291     if ( fPhysicsCase == "FTFP_INCLXX" ) {
303       theINCLmodel->SetMaxEnergy(bertMaxE);    << 292       theINCLmodel->SetMaxEnergy( bertMaxE );
304     }                                             293     }
305     if (fPhysicsCase == "QGSP_BERT" || fPhysic << 294     if ( fPhysicsCase == "QGSP_BERT"  ||
306       theFTFPmodel_constrained->SetMaxEnergy(f << 295          fPhysicsCase == "QGSP_BIC" ) {
307       theFTFPmodel_belowThreshold->SetMaxEnerg << 296       theFTFPmodel_constrained->SetMaxEnergy( ftfpMaxE );
308       theQGSPmodel->SetMinEnergy(qgspMinE);    << 297       theFTFPmodel_belowThreshold->SetMaxEnergy( ftfpMaxE );
309       theBICmodel->SetMaxEnergy(bertMaxE);     << 298       theQGSPmodel->SetMinEnergy( qgspMinE );
                                                   >> 299       theBICmodel->SetMaxEnergy( bertMaxE );
310     }                                             300     }
311   }                                               301   }
312                                                   302 
313   // Cross sections (needed by Geant4 to sampl    303   // Cross sections (needed by Geant4 to sample the target nucleus from the target material)
314   G4VCrossSectionDataSet* thePionMinusXSdata = << 304   G4VCrossSectionDataSet* thePionMinusXSdata =
315   thePionMinusXSdata->BuildPhysicsTable(*(G4Pi << 305     new G4BGGPionInelasticXS( G4PionMinus::Definition() );
316   G4VCrossSectionDataSet* thePionPlusXSdata =  << 306   thePionMinusXSdata->BuildPhysicsTable( *(G4PionMinus::Definition()) );
317   thePionPlusXSdata->BuildPhysicsTable(*(G4Pio << 307   G4VCrossSectionDataSet* thePionPlusXSdata =
                                                   >> 308     new G4BGGPionInelasticXS( G4PionPlus::Definition() );
                                                   >> 309   thePionPlusXSdata->BuildPhysicsTable( *(G4PionPlus::Definition()) );
318   G4VCrossSectionDataSet* theKaonXSdata =         310   G4VCrossSectionDataSet* theKaonXSdata =
319     new G4CrossSectionInelastic(new G4Componen << 311     new G4CrossSectionInelastic( new G4ComponentGGHadronNucleusXsc );
320   theKaonXSdata->BuildPhysicsTable(*(G4KaonMin << 312   theKaonXSdata->BuildPhysicsTable( *(G4KaonMinus::Definition()) );
321   theKaonXSdata->BuildPhysicsTable(*(G4KaonPlu << 313   theKaonXSdata->BuildPhysicsTable( *(G4KaonPlus::Definition()) );
322   theKaonXSdata->BuildPhysicsTable(*(G4KaonZer << 314   theKaonXSdata->BuildPhysicsTable( *(G4KaonZeroLong::Definition()) );
323   theKaonXSdata->BuildPhysicsTable(*(G4KaonZer << 315   theKaonXSdata->BuildPhysicsTable( *(G4KaonZeroShort::Definition()) );
324   G4VCrossSectionDataSet* theProtonXSdata = ne << 316   G4VCrossSectionDataSet* theProtonXSdata = new G4BGGNucleonInelasticXS( G4Proton::Proton() );
325   theProtonXSdata->BuildPhysicsTable(*(G4Proto << 317   theProtonXSdata->BuildPhysicsTable( *(G4Proton::Definition()) );
326   G4VCrossSectionDataSet* theNeutronXSdata = n    318   G4VCrossSectionDataSet* theNeutronXSdata = new G4NeutronInelasticXS;
327   theNeutronXSdata->BuildPhysicsTable(*(G4Neut << 319   theNeutronXSdata->BuildPhysicsTable( *(G4Neutron::Definition()) );
328   // For hyperon and anti-hyperons we can use     320   // For hyperon and anti-hyperons we can use either Chips or, for G4 >= 10.5,
329   // Glauber-Gribov cross sections                321   // Glauber-Gribov cross sections
330   // G4VCrossSectionDataSet* theHyperonsXSdata << 322   //G4VCrossSectionDataSet* theHyperonsXSdata = new G4ChipsHyperonInelasticXS;
331   G4VCrossSectionDataSet* theHyperonsXSdata =     323   G4VCrossSectionDataSet* theHyperonsXSdata =
332     new G4CrossSectionInelastic(new G4Componen << 324     new G4CrossSectionInelastic( new G4ComponentGGHadronNucleusXsc );
333   G4VCrossSectionDataSet* theAntibaryonsXSdata    325   G4VCrossSectionDataSet* theAntibaryonsXSdata =
334     new G4CrossSectionInelastic(new G4Componen << 326     new G4CrossSectionInelastic( new G4ComponentAntiNuclNuclearXS );
335   G4VCrossSectionDataSet* theNuclNuclXSdata =     327   G4VCrossSectionDataSet* theNuclNuclXSdata =
336     new G4CrossSectionInelastic(new G4Componen << 328     new G4CrossSectionInelastic( new G4ComponentGGNuclNuclXsc );
337                                                   329 
338   // Set up inelastic processes : store them i    330   // Set up inelastic processes : store them in a map (with particle definition as key)
339   //                              for convenie    331   //                              for convenience
340   typedef std::pair<G4ParticleDefinition*, G4H << 332   typedef std::pair< G4ParticleDefinition*, G4HadronicProcess* > ProcessPair;
341   G4HadronicProcess* thePionMinusInelasticProc    333   G4HadronicProcess* thePionMinusInelasticProcess =
342     new G4HadronInelasticProcess("pi-Inelastic << 334     new G4HadronInelasticProcess( "pi-Inelastic", G4PionMinus::Definition() );    
343   fProcessMap.insert(ProcessPair(G4PionMinus:: << 335   fProcessMap.insert( ProcessPair( G4PionMinus::Definition(), thePionMinusInelasticProcess ) );
344   G4HadronicProcess* thePionPlusInelasticProce    336   G4HadronicProcess* thePionPlusInelasticProcess =
345     new G4HadronInelasticProcess("pi+Inelastic << 337     new G4HadronInelasticProcess( "pi+Inelastic", G4PionPlus::Definition() );    
346   fProcessMap.insert(ProcessPair(G4PionPlus::D << 338   fProcessMap.insert( ProcessPair( G4PionPlus::Definition(), thePionPlusInelasticProcess ) );
347   G4HadronicProcess* theKaonMinusInelasticProc    339   G4HadronicProcess* theKaonMinusInelasticProcess =
348     new G4HadronInelasticProcess("kaon-Inelast << 340     new G4HadronInelasticProcess( "kaon-Inelastic", G4KaonMinus::Definition() );        
349   fProcessMap.insert(ProcessPair(G4KaonMinus:: << 341   fProcessMap.insert( ProcessPair( G4KaonMinus::Definition(), theKaonMinusInelasticProcess ) );
350   G4HadronicProcess* theKaonPlusInelasticProce    342   G4HadronicProcess* theKaonPlusInelasticProcess =
351     new G4HadronInelasticProcess("kaon+Inelast << 343     new G4HadronInelasticProcess( "kaon+Inelastic", G4KaonPlus::Definition() );        
352   fProcessMap.insert(ProcessPair(G4KaonPlus::D << 344   fProcessMap.insert( ProcessPair( G4KaonPlus::Definition(), theKaonPlusInelasticProcess ) );
353   G4HadronicProcess* theKaonZeroLInelasticProc    345   G4HadronicProcess* theKaonZeroLInelasticProcess =
354     new G4HadronInelasticProcess("kaon0LInelas << 346     new G4HadronInelasticProcess( "kaon0LInelastic", G4KaonZeroLong::Definition() );        
355   fProcessMap.insert(ProcessPair(G4KaonZeroLon << 347   fProcessMap.insert( ProcessPair( G4KaonZeroLong::Definition(), theKaonZeroLInelasticProcess ) );
356   G4HadronicProcess* theKaonZeroSInelasticProc    348   G4HadronicProcess* theKaonZeroSInelasticProcess =
357     new G4HadronInelasticProcess("kaon0SInelas << 349     new G4HadronInelasticProcess( "kaon0SInelastic", G4KaonZeroShort::Definition() );        
358   fProcessMap.insert(ProcessPair(G4KaonZeroSho << 350   fProcessMap.insert( ProcessPair( G4KaonZeroShort::Definition(), theKaonZeroSInelasticProcess ) );
359   G4HadronicProcess* theProtonInelasticProcess    351   G4HadronicProcess* theProtonInelasticProcess =
360     new G4HadronInelasticProcess("protonInelas << 352     new G4HadronInelasticProcess( "protonInelastic", G4Proton::Definition() );        
361   fProcessMap.insert(ProcessPair(G4Proton::Def << 353   fProcessMap.insert( ProcessPair( G4Proton::Definition(), theProtonInelasticProcess ) );
362   G4HadronicProcess* theNeutronInelasticProces    354   G4HadronicProcess* theNeutronInelasticProcess =
363     new G4HadronInelasticProcess("neutronInela << 355     new G4HadronInelasticProcess( "neutronInelastic", G4Neutron::Definition() );        
364   fProcessMap.insert(ProcessPair(G4Neutron::De << 356   fProcessMap.insert( ProcessPair( G4Neutron::Definition(), theNeutronInelasticProcess ) );
365   G4HadronicProcess* theDeuteronInelasticProce    357   G4HadronicProcess* theDeuteronInelasticProcess =
366     new G4HadronInelasticProcess("dInelastic", << 358     new G4HadronInelasticProcess( "dInelastic", G4Deuteron::Definition() );        
367   fProcessMap.insert(ProcessPair(G4Deuteron::D << 359   fProcessMap.insert( ProcessPair( G4Deuteron::Definition(), theDeuteronInelasticProcess ) );
368   G4HadronicProcess* theTritonInelasticProcess    360   G4HadronicProcess* theTritonInelasticProcess =
369     new G4HadronInelasticProcess("tInelastic", << 361     new G4HadronInelasticProcess( "tInelastic", G4Triton::Definition() );        
370   fProcessMap.insert(ProcessPair(G4Triton::Def << 362   fProcessMap.insert( ProcessPair( G4Triton::Definition(), theTritonInelasticProcess ) );
371   G4HadronicProcess* theHe3InelasticProcess =     363   G4HadronicProcess* theHe3InelasticProcess =
372     new G4HadronInelasticProcess("he3Inelastic << 364     new G4HadronInelasticProcess( "he3Inelastic", G4He3::Definition() );        
373   fProcessMap.insert(ProcessPair(G4He3::Defini << 365   fProcessMap.insert( ProcessPair( G4He3::Definition(), theHe3InelasticProcess ) );
374   G4HadronicProcess* theAlphaInelasticProcess     366   G4HadronicProcess* theAlphaInelasticProcess =
375     new G4HadronInelasticProcess("alphaInelast << 367     new G4HadronInelasticProcess( "alphaInelastic", G4Alpha::Definition() );        
376   fProcessMap.insert(ProcessPair(G4Alpha::Defi << 368   fProcessMap.insert( ProcessPair( G4Alpha::Definition(), theAlphaInelasticProcess ) );
377   G4HadronicProcess* theIonInelasticProcess =     369   G4HadronicProcess* theIonInelasticProcess =
378     new G4HadronInelasticProcess("ionInelastic << 370     new G4HadronInelasticProcess( "ionInelastic", G4GenericIon::Definition() );        
379   fProcessMap.insert(ProcessPair(G4GenericIon: << 371   fProcessMap.insert( ProcessPair( G4GenericIon::Definition(), theIonInelasticProcess ) );
380   G4HadronicProcess* theLambdaInelasticProcess    372   G4HadronicProcess* theLambdaInelasticProcess =
381     new G4HadronInelasticProcess("lambdaInelas << 373     new G4HadronInelasticProcess( "lambdaInelastic", G4Lambda::Definition() );        
382   fProcessMap.insert(ProcessPair(G4Lambda::Def << 374   fProcessMap.insert( ProcessPair( G4Lambda::Definition(), theLambdaInelasticProcess ) );
383   G4HadronicProcess* theSigmaMinusInelasticPro    375   G4HadronicProcess* theSigmaMinusInelasticProcess =
384     new G4HadronInelasticProcess("sigma-Inelas << 376     new G4HadronInelasticProcess( "sigma-Inelastic", G4SigmaMinus::Definition() );        
385   fProcessMap.insert(ProcessPair(G4SigmaMinus: << 377   fProcessMap.insert( ProcessPair( G4SigmaMinus::Definition(), theSigmaMinusInelasticProcess ) );
386   G4HadronicProcess* theSigmaPlusInelasticProc    378   G4HadronicProcess* theSigmaPlusInelasticProcess =
387     new G4HadronInelasticProcess("sigma+Inelas << 379     new G4HadronInelasticProcess( "sigma+Inelastic", G4SigmaPlus::Definition() );        
388   fProcessMap.insert(ProcessPair(G4SigmaPlus:: << 380   fProcessMap.insert( ProcessPair( G4SigmaPlus::Definition(), theSigmaPlusInelasticProcess ) );
389   G4HadronicProcess* theXiMinusInelasticProces    381   G4HadronicProcess* theXiMinusInelasticProcess =
390     new G4HadronInelasticProcess("xi-Inelastic << 382     new G4HadronInelasticProcess( "xi-Inelastic", G4XiMinus::Definition() );        
391   fProcessMap.insert(ProcessPair(G4XiMinus::De << 383   fProcessMap.insert( ProcessPair( G4XiMinus::Definition(), theXiMinusInelasticProcess ) );
392   G4HadronicProcess* theXiZeroInelasticProcess    384   G4HadronicProcess* theXiZeroInelasticProcess =
393     new G4HadronInelasticProcess("xi0Inelastic << 385     new G4HadronInelasticProcess( "xi0Inelastic", G4XiZero::Definition() );        
394   fProcessMap.insert(ProcessPair(G4XiZero::Def << 386   fProcessMap.insert( ProcessPair( G4XiZero::Definition(), theXiZeroInelasticProcess ) );
395   G4HadronicProcess* theOmegaMinusInelasticPro    387   G4HadronicProcess* theOmegaMinusInelasticProcess =
396     new G4HadronInelasticProcess("omega-Inelas << 388     new G4HadronInelasticProcess( "omega-Inelastic", G4OmegaMinus::Definition() );        
397   fProcessMap.insert(ProcessPair(G4OmegaMinus: << 389   fProcessMap.insert( ProcessPair( G4OmegaMinus::Definition(), theOmegaMinusInelasticProcess ) );
398   G4HadronicProcess* theAntiProtonInelasticPro    390   G4HadronicProcess* theAntiProtonInelasticProcess =
399     new G4HadronInelasticProcess("anti_protonI << 391     new G4HadronInelasticProcess( "anti_protonInelastic", G4AntiProton::Definition() );        
400   fProcessMap.insert(ProcessPair(G4AntiProton: << 392   fProcessMap.insert( ProcessPair( G4AntiProton::Definition(), theAntiProtonInelasticProcess ) );
401   G4HadronicProcess* theAntiNeutronInelasticPr    393   G4HadronicProcess* theAntiNeutronInelasticProcess =
402     new G4HadronInelasticProcess("anti_neutron << 394     new G4HadronInelasticProcess( "anti_neutronInelastic", G4AntiNeutron::Definition() );        
403   fProcessMap.insert(ProcessPair(G4AntiNeutron << 395   fProcessMap.insert( ProcessPair( G4AntiNeutron::Definition(), theAntiNeutronInelasticProcess ) );
404   G4HadronicProcess* theAntiDeuteronInelasticP    396   G4HadronicProcess* theAntiDeuteronInelasticProcess =
405     new G4HadronInelasticProcess("anti_deutero << 397     new G4HadronInelasticProcess( "anti_deuteronInelastic", G4AntiDeuteron::Definition() );            
406   fProcessMap.insert(ProcessPair(G4AntiDeutero << 398   fProcessMap.insert( ProcessPair( G4AntiDeuteron::Definition(),
                                                   >> 399                                    theAntiDeuteronInelasticProcess ) );
407   G4HadronicProcess* theAntiTritonInelasticPro    400   G4HadronicProcess* theAntiTritonInelasticProcess =
408     new G4HadronInelasticProcess("anti_tritonI << 401     new G4HadronInelasticProcess( "anti_tritonInelastic", G4AntiTriton::Definition() );        
409   fProcessMap.insert(ProcessPair(G4AntiTriton: << 402   fProcessMap.insert( ProcessPair( G4AntiTriton::Definition(), theAntiTritonInelasticProcess ) );
410   G4HadronicProcess* theAntiHe3InelasticProces    403   G4HadronicProcess* theAntiHe3InelasticProcess =
411     new G4HadronInelasticProcess("anti_He3Inel << 404     new G4HadronInelasticProcess( "anti_He3Inelastic", G4AntiHe3::Definition() );        
412   fProcessMap.insert(ProcessPair(G4AntiHe3::De << 405   fProcessMap.insert( ProcessPair( G4AntiHe3::Definition(), theAntiHe3InelasticProcess ) );
413   G4HadronicProcess* theAntiAlphaInelasticProc    406   G4HadronicProcess* theAntiAlphaInelasticProcess =
414     new G4HadronInelasticProcess("anti_alphaIn << 407     new G4HadronInelasticProcess( "anti_alphaInelastic", G4AntiAlpha::Definition() );        
415   fProcessMap.insert(ProcessPair(G4AntiAlpha:: << 408   fProcessMap.insert( ProcessPair( G4AntiAlpha::Definition(), theAntiAlphaInelasticProcess ) );
416   G4HadronicProcess* theAntiLambdaInelasticPro    409   G4HadronicProcess* theAntiLambdaInelasticProcess =
417     new G4HadronInelasticProcess("anti-lambdaI << 410     new G4HadronInelasticProcess( "anti-lambdaInelastic", G4AntiLambda::Definition() );        
418   fProcessMap.insert(ProcessPair(G4AntiLambda: << 411   fProcessMap.insert( ProcessPair( G4AntiLambda::Definition(), theAntiLambdaInelasticProcess ) );
419   G4HadronicProcess* theAntiSigmaMinusInelasti    412   G4HadronicProcess* theAntiSigmaMinusInelasticProcess =
420     new G4HadronInelasticProcess("anti_sigma-I << 413     new G4HadronInelasticProcess( "anti_sigma-Inelastic", G4AntiSigmaMinus::Definition() );        
421   fProcessMap.insert(                          << 414   fProcessMap.insert( ProcessPair( G4AntiSigmaMinus::Definition(),
422     ProcessPair(G4AntiSigmaMinus::Definition() << 415                                    theAntiSigmaMinusInelasticProcess ) );
423   G4HadronicProcess* theAntiSigmaPlusInelastic    416   G4HadronicProcess* theAntiSigmaPlusInelasticProcess =
424     new G4HadronInelasticProcess("anti_sigma+I << 417     new G4HadronInelasticProcess( "anti_sigma+Inelastic", G4AntiSigmaPlus::Definition() );        
425   fProcessMap.insert(ProcessPair(G4AntiSigmaPl << 418   fProcessMap.insert( ProcessPair( G4AntiSigmaPlus::Definition(),
                                                   >> 419                                    theAntiSigmaPlusInelasticProcess ) );
426   G4HadronicProcess* theAntiXiMinusInelasticPr    420   G4HadronicProcess* theAntiXiMinusInelasticProcess =
427     new G4HadronInelasticProcess("anti_xi-Inel << 421     new G4HadronInelasticProcess( "anti_xi-Inelastic", G4AntiXiMinus::Definition() );        
428   fProcessMap.insert(ProcessPair(G4AntiXiMinus << 422   fProcessMap.insert( ProcessPair( G4AntiXiMinus::Definition(), theAntiXiMinusInelasticProcess ) );
429   G4HadronicProcess* theAntiXiZeroInelasticPro    423   G4HadronicProcess* theAntiXiZeroInelasticProcess =
430     new G4HadronInelasticProcess("anti_xi0Inel << 424     new G4HadronInelasticProcess( "anti_xi0Inelastic", G4AntiXiZero::Definition() );        
431   fProcessMap.insert(ProcessPair(G4AntiXiZero: << 425   fProcessMap.insert( ProcessPair( G4AntiXiZero::Definition(), theAntiXiZeroInelasticProcess ) );
432   G4HadronicProcess* theAntiOmegaMinusInelasti    426   G4HadronicProcess* theAntiOmegaMinusInelasticProcess =
433     new G4HadronInelasticProcess("anti_omega-I << 427     new G4HadronInelasticProcess( "anti_omega-Inelastic", G4AntiOmegaMinus::Definition() );        
434   fProcessMap.insert(                          << 428   fProcessMap.insert( ProcessPair( G4AntiOmegaMinus::Definition(),
435     ProcessPair(G4AntiOmegaMinus::Definition() << 429                                    theAntiOmegaMinusInelasticProcess ) );
436                                                   430 
437   G4HadronicProcess* theDPlusInelasticProcess     431   G4HadronicProcess* theDPlusInelasticProcess =
438     new G4HadronInelasticProcess("D+Inelastic" << 432     new G4HadronInelasticProcess( "D+Inelastic", G4DMesonPlus::Definition() );
439   fProcessMap.insert(ProcessPair(G4DMesonPlus: << 433   fProcessMap.insert( ProcessPair( G4DMesonPlus::Definition(), theDPlusInelasticProcess ) );
440   G4HadronicProcess* theDMinusInelasticProcess    434   G4HadronicProcess* theDMinusInelasticProcess =
441     new G4HadronInelasticProcess("D-Inelastic" << 435     new G4HadronInelasticProcess( "D-Inelastic", G4DMesonMinus::Definition() );
442   fProcessMap.insert(ProcessPair(G4DMesonMinus << 436   fProcessMap.insert( ProcessPair( G4DMesonMinus::Definition(), theDMinusInelasticProcess ) );
443   G4HadronicProcess* theDZeroInelasticProcess     437   G4HadronicProcess* theDZeroInelasticProcess =
444     new G4HadronInelasticProcess("D0Inelastic" << 438     new G4HadronInelasticProcess( "D0Inelastic", G4DMesonZero::Definition() );
445   fProcessMap.insert(ProcessPair(G4DMesonZero: << 439   fProcessMap.insert( ProcessPair( G4DMesonZero::Definition(), theDZeroInelasticProcess ) );
446   G4HadronicProcess* theAntiDZeroInelasticProc    440   G4HadronicProcess* theAntiDZeroInelasticProcess =
447     new G4HadronInelasticProcess("anti_D0Inela << 441     new G4HadronInelasticProcess( "anti_D0Inelastic", G4AntiDMesonZero::Definition() );
448   fProcessMap.insert(ProcessPair(G4AntiDMesonZ << 442   fProcessMap.insert( ProcessPair( G4AntiDMesonZero::Definition(),
                                                   >> 443            theAntiDZeroInelasticProcess ) );
449   G4HadronicProcess* theDsPlusInelasticProcess    444   G4HadronicProcess* theDsPlusInelasticProcess =
450     new G4HadronInelasticProcess("Ds+Inelastic << 445     new G4HadronInelasticProcess( "Ds+Inelastic", G4DsMesonPlus::Definition() );
451   fProcessMap.insert(ProcessPair(G4DsMesonPlus << 446   fProcessMap.insert( ProcessPair( G4DsMesonPlus::Definition(), theDsPlusInelasticProcess ) );
452   G4HadronicProcess* theDsMinusInelasticProces    447   G4HadronicProcess* theDsMinusInelasticProcess =
453     new G4HadronInelasticProcess("Ds-Inelastic << 448     new G4HadronInelasticProcess( "Ds-Inelastic", G4DsMesonMinus::Definition() );
454   fProcessMap.insert(ProcessPair(G4DsMesonMinu << 449   fProcessMap.insert( ProcessPair( G4DsMesonMinus::Definition(), theDsMinusInelasticProcess ) );
455   G4HadronicProcess* theBPlusInelasticProcess     450   G4HadronicProcess* theBPlusInelasticProcess =
456     new G4HadronInelasticProcess("B+Inelastic" << 451     new G4HadronInelasticProcess( "B+Inelastic", G4BMesonPlus::Definition() );
457   fProcessMap.insert(ProcessPair(G4BMesonPlus: << 452   fProcessMap.insert( ProcessPair( G4BMesonPlus::Definition(), theBPlusInelasticProcess ) );
458   G4HadronicProcess* theBMinusInelasticProcess    453   G4HadronicProcess* theBMinusInelasticProcess =
459     new G4HadronInelasticProcess("B-Inelastic" << 454     new G4HadronInelasticProcess( "B-Inelastic", G4BMesonMinus::Definition() );
460   fProcessMap.insert(ProcessPair(G4BMesonMinus << 455   fProcessMap.insert( ProcessPair( G4BMesonMinus::Definition(), theBMinusInelasticProcess ) );
461   G4HadronicProcess* theBZeroInelasticProcess     456   G4HadronicProcess* theBZeroInelasticProcess =
462     new G4HadronInelasticProcess("B0Inelastic" << 457     new G4HadronInelasticProcess( "B0Inelastic", G4BMesonZero::Definition() );
463   fProcessMap.insert(ProcessPair(G4BMesonZero: << 458   fProcessMap.insert( ProcessPair( G4BMesonZero::Definition(), theBZeroInelasticProcess ) );
464   G4HadronicProcess* theAntiBZeroInelasticProc    459   G4HadronicProcess* theAntiBZeroInelasticProcess =
465     new G4HadronInelasticProcess("anti_B0Inela << 460     new G4HadronInelasticProcess( "anti_B0Inelastic", G4AntiBMesonZero::Definition() );
466   fProcessMap.insert(ProcessPair(G4AntiBMesonZ << 461   fProcessMap.insert( ProcessPair( G4AntiBMesonZero::Definition(),
                                                   >> 462            theAntiBZeroInelasticProcess ) );
467   G4HadronicProcess* theBsZeroInelasticProcess    463   G4HadronicProcess* theBsZeroInelasticProcess =
468     new G4HadronInelasticProcess("Bs0Inelastic << 464     new G4HadronInelasticProcess( "Bs0Inelastic", G4BsMesonZero::Definition() );
469   fProcessMap.insert(ProcessPair(G4BsMesonZero << 465   fProcessMap.insert( ProcessPair( G4BsMesonZero::Definition(), theBsZeroInelasticProcess ) );
470   G4HadronicProcess* theAntiBsZeroInelasticPro    466   G4HadronicProcess* theAntiBsZeroInelasticProcess =
471     new G4HadronInelasticProcess("anti_Bs0Inel << 467     new G4HadronInelasticProcess( "anti_Bs0Inelastic", G4AntiBsMesonZero::Definition() );
472   fProcessMap.insert(ProcessPair(G4AntiBsMeson << 468   fProcessMap.insert( ProcessPair( G4AntiBsMesonZero::Definition(),
                                                   >> 469            theAntiBsZeroInelasticProcess ) );
473   G4HadronicProcess* theBcPlusInelasticProcess    470   G4HadronicProcess* theBcPlusInelasticProcess =
474     new G4HadronInelasticProcess("Bc+Inelastic << 471     new G4HadronInelasticProcess( "Bc+Inelastic", G4BcMesonPlus::Definition() );
475   fProcessMap.insert(ProcessPair(G4BcMesonPlus << 472   fProcessMap.insert( ProcessPair( G4BcMesonPlus::Definition(), theBcPlusInelasticProcess ) );
476   G4HadronicProcess* theBcMinusInelasticProces    473   G4HadronicProcess* theBcMinusInelasticProcess =
477     new G4HadronInelasticProcess("Bc-Inelastic << 474     new G4HadronInelasticProcess( "Bc-Inelastic", G4BcMesonMinus::Definition() );
478   fProcessMap.insert(ProcessPair(G4BcMesonMinu << 475   fProcessMap.insert( ProcessPair( G4BcMesonMinus::Definition(), theBcMinusInelasticProcess ) );
479   G4HadronicProcess* theLambdacPlusInelasticPr    476   G4HadronicProcess* theLambdacPlusInelasticProcess =
480     new G4HadronInelasticProcess("lambda_c+Ine << 477     new G4HadronInelasticProcess( "lambda_c+Inelastic", G4LambdacPlus::Definition() );
481   fProcessMap.insert(ProcessPair(G4LambdacPlus << 478   fProcessMap.insert( ProcessPair( G4LambdacPlus::Definition(),
                                                   >> 479            theLambdacPlusInelasticProcess ) );
482   G4HadronicProcess* theAntiLambdacPlusInelast    480   G4HadronicProcess* theAntiLambdacPlusInelasticProcess =
483     new G4HadronInelasticProcess("anti_lambda_ << 481     new G4HadronInelasticProcess( "anti_lambda_c+Inelastic", G4AntiLambdacPlus::Definition() );
484   fProcessMap.insert(                          << 482   fProcessMap.insert( ProcessPair( G4AntiLambdacPlus::Definition(),
485     ProcessPair(G4AntiLambdacPlus::Definition( << 483            theAntiLambdacPlusInelasticProcess ) );
486   G4HadronicProcess* theXicPlusInelasticProces    484   G4HadronicProcess* theXicPlusInelasticProcess =
487     new G4HadronInelasticProcess("xi_c+Inelast << 485     new G4HadronInelasticProcess( "xi_c+Inelastic", G4XicPlus::Definition() );
488   fProcessMap.insert(ProcessPair(G4XicPlus::De << 486   fProcessMap.insert( ProcessPair( G4XicPlus::Definition(), theXicPlusInelasticProcess ) );
489   G4HadronicProcess* theAntiXicPlusInelasticPr    487   G4HadronicProcess* theAntiXicPlusInelasticProcess =
490     new G4HadronInelasticProcess("anti_xi_c+In << 488     new G4HadronInelasticProcess( "anti_xi_c+Inelastic", G4AntiXicPlus::Definition() );
491   fProcessMap.insert(ProcessPair(G4AntiXicPlus << 489   fProcessMap.insert( ProcessPair( G4AntiXicPlus::Definition(),
                                                   >> 490            theAntiXicPlusInelasticProcess ) );
492   G4HadronicProcess* theXicZeroInelasticProces    491   G4HadronicProcess* theXicZeroInelasticProcess =
493     new G4HadronInelasticProcess("xi_c0Inelast << 492     new G4HadronInelasticProcess( "xi_c0Inelastic", G4XicZero::Definition() );
494   fProcessMap.insert(ProcessPair(G4XicZero::De << 493   fProcessMap.insert( ProcessPair( G4XicZero::Definition(), theXicZeroInelasticProcess ) );
495   G4HadronicProcess* theAntiXicZeroInelasticPr    494   G4HadronicProcess* theAntiXicZeroInelasticProcess =
496     new G4HadronInelasticProcess("anti_xi_c0In << 495     new G4HadronInelasticProcess( "anti_xi_c0Inelastic", G4AntiXicZero::Definition() );
497   fProcessMap.insert(ProcessPair(G4AntiXicZero << 496   fProcessMap.insert( ProcessPair( G4AntiXicZero::Definition(),
                                                   >> 497            theAntiXicZeroInelasticProcess ) );
498   G4HadronicProcess* theOmegacZeroInelasticPro    498   G4HadronicProcess* theOmegacZeroInelasticProcess =
499     new G4HadronInelasticProcess("omega_c0Inel << 499     new G4HadronInelasticProcess( "omega_c0Inelastic", G4OmegacZero::Definition() );
500   fProcessMap.insert(ProcessPair(G4OmegacZero: << 500   fProcessMap.insert( ProcessPair( G4OmegacZero::Definition(), theOmegacZeroInelasticProcess ) );
501   G4HadronicProcess* theAntiOmegacZeroInelasti    501   G4HadronicProcess* theAntiOmegacZeroInelasticProcess =
502     new G4HadronInelasticProcess("anti_omega_c << 502     new G4HadronInelasticProcess( "anti_omega_c0Inelastic", G4AntiOmegacZero::Definition() );
503   fProcessMap.insert(                          << 503   fProcessMap.insert( ProcessPair( G4AntiOmegacZero::Definition(),
504     ProcessPair(G4AntiOmegacZero::Definition() << 504            theAntiOmegacZeroInelasticProcess ) );
505   G4HadronicProcess* theLambdabInelasticProces    505   G4HadronicProcess* theLambdabInelasticProcess =
506     new G4HadronInelasticProcess("lambda_bInel << 506     new G4HadronInelasticProcess( "lambda_bInelastic", G4Lambdab::Definition() );
507   fProcessMap.insert(ProcessPair(G4Lambdab::De << 507   fProcessMap.insert( ProcessPair( G4Lambdab::Definition(), theLambdabInelasticProcess ) );
508   G4HadronicProcess* theAntiLambdabInelasticPr    508   G4HadronicProcess* theAntiLambdabInelasticProcess =
509     new G4HadronInelasticProcess("anti_lambda_ << 509     new G4HadronInelasticProcess( "anti_lambda_bInelastic", G4AntiLambdab::Definition() );
510   fProcessMap.insert(ProcessPair(G4AntiLambdab << 510   fProcessMap.insert( ProcessPair( G4AntiLambdab::Definition(),
                                                   >> 511            theAntiLambdabInelasticProcess ) );
511   G4HadronicProcess* theXibZeroInelasticProces    512   G4HadronicProcess* theXibZeroInelasticProcess =
512     new G4HadronInelasticProcess("xi_b0Inelast << 513     new G4HadronInelasticProcess( "xi_b0Inelastic", G4XibZero::Definition() );
513   fProcessMap.insert(ProcessPair(G4XibZero::De << 514   fProcessMap.insert( ProcessPair( G4XibZero::Definition(), theXibZeroInelasticProcess ) );
514   G4HadronicProcess* theAntiXibZeroInelasticPr    515   G4HadronicProcess* theAntiXibZeroInelasticProcess =
515     new G4HadronInelasticProcess("anti_xi_b0In << 516     new G4HadronInelasticProcess( "anti_xi_b0Inelastic", G4AntiXibZero::Definition() );
516   fProcessMap.insert(ProcessPair(G4AntiXibZero << 517   fProcessMap.insert( ProcessPair( G4AntiXibZero::Definition(),
                                                   >> 518            theAntiXibZeroInelasticProcess ) );
517   G4HadronicProcess* theXibMinusInelasticProce    519   G4HadronicProcess* theXibMinusInelasticProcess =
518     new G4HadronInelasticProcess("xi_b-Inelast << 520     new G4HadronInelasticProcess( "xi_b-Inelastic", G4XibMinus::Definition() );
519   fProcessMap.insert(ProcessPair(G4XibMinus::D << 521   fProcessMap.insert( ProcessPair( G4XibMinus::Definition(), theXibMinusInelasticProcess ) );
520   G4HadronicProcess* theAntiXibMinusInelasticP    522   G4HadronicProcess* theAntiXibMinusInelasticProcess =
521     new G4HadronInelasticProcess("anti_xi_b-In << 523     new G4HadronInelasticProcess( "anti_xi_b-Inelastic", G4AntiXibMinus::Definition() );
522   fProcessMap.insert(ProcessPair(G4AntiXibMinu << 524   fProcessMap.insert( ProcessPair( G4AntiXibMinus::Definition(),
                                                   >> 525            theAntiXibMinusInelasticProcess ) );
523   G4HadronicProcess* theOmegabMinusInelasticPr    526   G4HadronicProcess* theOmegabMinusInelasticProcess =
524     new G4HadronInelasticProcess("omega_b-Inel << 527     new G4HadronInelasticProcess( "omega_b-Inelastic", G4OmegabMinus::Definition() );
525   fProcessMap.insert(ProcessPair(G4OmegabMinus << 528   fProcessMap.insert( ProcessPair( G4OmegabMinus::Definition(),
                                                   >> 529            theOmegabMinusInelasticProcess ) );
526   G4HadronicProcess* theAntiOmegabMinusInelast    530   G4HadronicProcess* theAntiOmegabMinusInelasticProcess =
527     new G4HadronInelasticProcess("anti_omega_b << 531     new G4HadronInelasticProcess( "anti_omega_b-Inelastic", G4AntiOmegabMinus::Definition() );
528   fProcessMap.insert(                          << 532   fProcessMap.insert( ProcessPair( G4AntiOmegabMinus::Definition(),
529     ProcessPair(G4AntiOmegabMinus::Definition( << 533            theAntiOmegabMinusInelasticProcess ) );
530                                                << 
531   G4HadronicProcess* theHyperTritonInelasticPr << 
532     new G4HadronInelasticProcess("hypertritonI << 
533   fProcessMap.insert(ProcessPair(G4HyperTriton << 
534   G4HadronicProcess* theAntiHyperTritonInelast << 
535     new G4HadronInelasticProcess("anti_hypertr << 
536   fProcessMap.insert(                          << 
537     ProcessPair(G4AntiHyperTriton::Definition( << 
538   G4HadronicProcess* theHyperAlphaInelasticPro << 
539     new G4HadronInelasticProcess("hyperalphaIn << 
540   fProcessMap.insert(ProcessPair(G4HyperAlpha: << 
541   G4HadronicProcess* theAntiHyperAlphaInelasti << 
542     new G4HadronInelasticProcess("anti_hyperal << 
543   fProcessMap.insert(                          << 
544     ProcessPair(G4AntiHyperAlpha::Definition() << 
545   G4HadronicProcess* theHyperH4InelasticProces << 
546     new G4HadronInelasticProcess("hyperH4Inela << 
547   fProcessMap.insert(ProcessPair(G4HyperH4::De << 
548   G4HadronicProcess* theAntiHyperH4InelasticPr << 
549     new G4HadronInelasticProcess("anti_hyperH4 << 
550   fProcessMap.insert(ProcessPair(G4AntiHyperH4 << 
551   G4HadronicProcess* theDoubleHyperH4Inelastic << 
552     new G4HadronInelasticProcess("doublehyperH << 
553   fProcessMap.insert(ProcessPair(G4DoubleHyper << 
554   G4HadronicProcess* theAntiDoubleHyperH4Inela << 
555     new G4HadronInelasticProcess("anti_doubleh << 
556   fProcessMap.insert(                          << 
557     ProcessPair(G4AntiDoubleHyperH4::Definitio << 
558   G4HadronicProcess* theDoubleHyperDoubleNeutr << 
559     "doublehyperdoubleneutronInelastic", G4Dou << 
560   fProcessMap.insert(ProcessPair(G4DoubleHyper << 
561                                  theDoubleHype << 
562   G4HadronicProcess* theAntiDoubleHyperDoubleN << 
563     "anti_doublehyperdoubleneutronInelastic",  << 
564   fProcessMap.insert(ProcessPair(G4AntiDoubleH << 
565                                  theAntiDouble << 
566   G4HadronicProcess* theHyperHe5InelasticProce << 
567     new G4HadronInelasticProcess("hyperHe5Inel << 
568   fProcessMap.insert(ProcessPair(G4HyperHe5::D << 
569   G4HadronicProcess* theAntiHyperHe5InelasticP << 
570     new G4HadronInelasticProcess("anti_hyperHe << 
571   fProcessMap.insert(ProcessPair(G4AntiHyperHe << 
572                                                   534 
573   // Add the cross sections to the correspondi    535   // Add the cross sections to the corresponding hadronic processes
574   thePionMinusInelasticProcess->AddDataSet(the << 536   thePionMinusInelasticProcess->AddDataSet( thePionMinusXSdata );
575   thePionPlusInelasticProcess->AddDataSet(theP << 537   thePionPlusInelasticProcess->AddDataSet( thePionPlusXSdata );
576   theKaonMinusInelasticProcess->AddDataSet(the << 538   theKaonMinusInelasticProcess->AddDataSet( theKaonXSdata );
577   theKaonPlusInelasticProcess->AddDataSet(theK << 539   theKaonPlusInelasticProcess->AddDataSet( theKaonXSdata );
578   theKaonZeroLInelasticProcess->AddDataSet(the << 540   theKaonZeroLInelasticProcess->AddDataSet( theKaonXSdata );
579   theKaonZeroSInelasticProcess->AddDataSet(the << 541   theKaonZeroSInelasticProcess->AddDataSet( theKaonXSdata );
580   theProtonInelasticProcess->AddDataSet(thePro << 542   theProtonInelasticProcess->AddDataSet( theProtonXSdata );
581   theNeutronInelasticProcess->AddDataSet(theNe << 543   theNeutronInelasticProcess->AddDataSet( theNeutronXSdata );
582   theDeuteronInelasticProcess->AddDataSet(theN << 544   theDeuteronInelasticProcess->AddDataSet( theNuclNuclXSdata );
583   theTritonInelasticProcess->AddDataSet(theNuc << 545   theTritonInelasticProcess->AddDataSet( theNuclNuclXSdata );
584   theHe3InelasticProcess->AddDataSet(theNuclNu << 546   theHe3InelasticProcess->AddDataSet( theNuclNuclXSdata );
585   theAlphaInelasticProcess->AddDataSet(theNucl << 547   theAlphaInelasticProcess->AddDataSet( theNuclNuclXSdata );
586   theIonInelasticProcess->AddDataSet(theNuclNu << 548   theIonInelasticProcess->AddDataSet( theNuclNuclXSdata );
587   theLambdaInelasticProcess->AddDataSet(theHyp << 549   theLambdaInelasticProcess->AddDataSet( theHyperonsXSdata );
588   theSigmaMinusInelasticProcess->AddDataSet(th << 550   theSigmaMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
589   theSigmaPlusInelasticProcess->AddDataSet(the << 551   theSigmaPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
590   theXiMinusInelasticProcess->AddDataSet(theHy << 552   theXiMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
591   theXiZeroInelasticProcess->AddDataSet(theHyp << 553   theXiZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
592   theOmegaMinusInelasticProcess->AddDataSet(th << 554   theOmegaMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
593   theAntiProtonInelasticProcess->AddDataSet(th << 555   theAntiProtonInelasticProcess->AddDataSet( theAntibaryonsXSdata );
594   theAntiNeutronInelasticProcess->AddDataSet(t << 556   theAntiNeutronInelasticProcess->AddDataSet( theAntibaryonsXSdata );
595   theAntiDeuteronInelasticProcess->AddDataSet( << 557   theAntiDeuteronInelasticProcess->AddDataSet( theAntibaryonsXSdata );
596   theAntiTritonInelasticProcess->AddDataSet(th << 558   theAntiTritonInelasticProcess->AddDataSet( theAntibaryonsXSdata );
597   theAntiHe3InelasticProcess->AddDataSet(theAn << 559   theAntiHe3InelasticProcess->AddDataSet( theAntibaryonsXSdata );
598   theAntiAlphaInelasticProcess->AddDataSet(the << 560   theAntiAlphaInelasticProcess->AddDataSet( theHyperonsXSdata );
599   theAntiLambdaInelasticProcess->AddDataSet(th << 561   theAntiLambdaInelasticProcess->AddDataSet( theHyperonsXSdata );
600   theAntiSigmaMinusInelasticProcess->AddDataSe << 562   theAntiSigmaMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
601   theAntiSigmaPlusInelasticProcess->AddDataSet << 563   theAntiSigmaPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
602   theAntiXiMinusInelasticProcess->AddDataSet(t << 564   theAntiXiMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
603   theAntiXiZeroInelasticProcess->AddDataSet(th << 565   theAntiXiZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
604   theAntiOmegaMinusInelasticProcess->AddDataSe << 566   theAntiOmegaMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
605                                                << 567 
606   theDPlusInelasticProcess->AddDataSet(theHype << 568   theDPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
607   theDMinusInelasticProcess->AddDataSet(theHyp << 569   theDMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
608   theDZeroInelasticProcess->AddDataSet(theHype << 570   theDZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
609   theAntiDZeroInelasticProcess->AddDataSet(the << 571   theAntiDZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
610   theDsPlusInelasticProcess->AddDataSet(theHyp << 572   theDsPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
611   theDsMinusInelasticProcess->AddDataSet(theHy << 573   theDsMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
612   theBPlusInelasticProcess->AddDataSet(theHype << 574   theBPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
613   theBMinusInelasticProcess->AddDataSet(theHyp << 575   theBMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
614   theBZeroInelasticProcess->AddDataSet(theHype << 576   theBZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
615   theAntiBZeroInelasticProcess->AddDataSet(the << 577   theAntiBZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
616   theBsZeroInelasticProcess->AddDataSet(theHyp << 578   theBsZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
617   theAntiBsZeroInelasticProcess->AddDataSet(th << 579   theAntiBsZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
618   theBcPlusInelasticProcess->AddDataSet(theHyp << 580   theBcPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
619   theBcMinusInelasticProcess->AddDataSet(theHy << 581   theBcMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
620   theLambdacPlusInelasticProcess->AddDataSet(t << 582   theLambdacPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
621   theAntiLambdacPlusInelasticProcess->AddDataS << 583   theAntiLambdacPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
622   theXicPlusInelasticProcess->AddDataSet(theHy << 584   theXicPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
623   theAntiXicPlusInelasticProcess->AddDataSet(t << 585   theAntiXicPlusInelasticProcess->AddDataSet( theHyperonsXSdata );
624   theXicZeroInelasticProcess->AddDataSet(theHy << 586   theXicZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
625   theAntiXicZeroInelasticProcess->AddDataSet(t << 587   theAntiXicZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
626   theOmegacZeroInelasticProcess->AddDataSet(th << 588   theOmegacZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
627   theAntiOmegacZeroInelasticProcess->AddDataSe << 589   theAntiOmegacZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
628   theLambdabInelasticProcess->AddDataSet(theHy << 590   theLambdabInelasticProcess->AddDataSet( theHyperonsXSdata );
629   theAntiLambdabInelasticProcess->AddDataSet(t << 591   theAntiLambdabInelasticProcess->AddDataSet( theHyperonsXSdata );
630   theXibZeroInelasticProcess->AddDataSet(theHy << 592   theXibZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
631   theAntiXibZeroInelasticProcess->AddDataSet(t << 593   theAntiXibZeroInelasticProcess->AddDataSet( theHyperonsXSdata );
632   theXibMinusInelasticProcess->AddDataSet(theH << 594   theXibMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
633   theAntiXibMinusInelasticProcess->AddDataSet( << 595   theAntiXibMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
634   theOmegabMinusInelasticProcess->AddDataSet(t << 596   theOmegabMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
635   theAntiOmegabMinusInelasticProcess->AddDataS << 597   theAntiOmegabMinusInelasticProcess->AddDataSet( theHyperonsXSdata );
636                                                << 
637   theHyperTritonInelasticProcess->AddDataSet(t << 
638   theAntiHyperTritonInelasticProcess->AddDataS << 
639   theHyperAlphaInelasticProcess->AddDataSet(th << 
640   theAntiHyperAlphaInelasticProcess->AddDataSe << 
641   theHyperH4InelasticProcess->AddDataSet(theNu << 
642   theAntiHyperH4InelasticProcess->AddDataSet(t << 
643   theDoubleHyperH4InelasticProcess->AddDataSet << 
644   theAntiDoubleHyperH4InelasticProcess->AddDat << 
645   theDoubleHyperDoubleNeutronInelasticProcess- << 
646   theAntiDoubleHyperDoubleNeutronInelasticProc << 
647   theHyperHe5InelasticProcess->AddDataSet(theN << 
648   theAntiHyperHe5InelasticProcess->AddDataSet( << 
649                                                   598 
650   // Register the proper hadronic model(s) to     599   // Register the proper hadronic model(s) to the corresponding hadronic processes.
651   // Note: hadronic models ("BERT", "BIC", "Io    600   // Note: hadronic models ("BERT", "BIC", "IonBIC", "INCL", "FTFP", "QGSP") are
652   //       used for the hadrons and energies t    601   //       used for the hadrons and energies they are applicable
653   //       (exception for INCL, which in recen    602   //       (exception for INCL, which in recent versions of Geant4 can handle
654   //        more hadron types and higher energ    603   //        more hadron types and higher energies than considered here).
655   //       For "physics-list proxies" ("FTFP_B    604   //       For "physics-list proxies" ("FTFP_BERT", "FTFP_BERT_ATL", "QGSP_BERT",
656   //       "QGSP_BIC", "FTFP_INCLXX"), all had    605   //       "QGSP_BIC", "FTFP_INCLXX"), all hadron types and all energies are covered
657   //       by combining different hadronic mod    606   //       by combining different hadronic models - similarly (but not identically)
658   //       to the corresponding physics lists.    607   //       to the corresponding physics lists.
659   if (fPhysicsCase == "BIC" || fPhysicsCase == << 608   if ( fPhysicsCase == "BIC"  ||
                                                   >> 609        fPhysicsCase == "QGSP_BIC" ) {
660     // The BIC model is applicable to nucleons    610     // The BIC model is applicable to nucleons and pions,
661     // whereas in the physics list QGSP_BIC it    611     // whereas in the physics list QGSP_BIC it is used only for nucleons
662     fPhysicsCaseIsSupported = true;               612     fPhysicsCaseIsSupported = true;
663     theProtonInelasticProcess->RegisterMe(theB << 613     theProtonInelasticProcess->RegisterMe( theBICmodel );
664     theNeutronInelasticProcess->RegisterMe(the << 614     theNeutronInelasticProcess->RegisterMe( theBICmodel );
665     if (fPhysicsCase == "BIC") {               << 615     if ( fPhysicsCase == "BIC" ) {
666       thePionMinusInelasticProcess->RegisterMe << 616       thePionMinusInelasticProcess->RegisterMe( theBICmodel );
667       thePionPlusInelasticProcess->RegisterMe( << 617       thePionPlusInelasticProcess->RegisterMe( theBICmodel );
668     }                                          << 618     } else {
669     else {                                     << 619       thePionMinusInelasticProcess->RegisterMe( theBERTmodel );
670       thePionMinusInelasticProcess->RegisterMe << 620       thePionPlusInelasticProcess->RegisterMe( theBERTmodel );
671       thePionPlusInelasticProcess->RegisterMe( << 
672     }                                             621     }
673   }                                            << 622   } else if ( fPhysicsCase == "INCL"  ||
674   else if (fPhysicsCase == "INCL" || fPhysicsC << 623               fPhysicsCase == "FTFP_INCLXX" ) {
675     // We consider here for simplicity only nu    624     // We consider here for simplicity only nucleons and pions
676     // (although recent versions of INCL can h    625     // (although recent versions of INCL can handle others particles as well)
677     fPhysicsCaseIsSupported = true;               626     fPhysicsCaseIsSupported = true;
678     thePionMinusInelasticProcess->RegisterMe(t << 627     thePionMinusInelasticProcess->RegisterMe( theINCLmodel );    
679     thePionPlusInelasticProcess->RegisterMe(th << 628     thePionPlusInelasticProcess->RegisterMe( theINCLmodel );    
680     theProtonInelasticProcess->RegisterMe(theI << 629     theProtonInelasticProcess->RegisterMe( theINCLmodel );    
681     theNeutronInelasticProcess->RegisterMe(the << 630     theNeutronInelasticProcess->RegisterMe( theINCLmodel );    
682   }                                            << 631   }
683   if (fPhysicsCase == "IonBIC" || fPhysicsCase << 632   if ( fPhysicsCase == "IonBIC"         ||
684       || fPhysicsCase == "FTFP_INCLXX" || fPhy << 633        fPhysicsCase == "FTFP_BERT_ATL"  ||
685   {                                            << 634        fPhysicsCase == "FTFP_BERT"      ||
                                                   >> 635        fPhysicsCase == "FTFP_INCLXX"    ||
                                                   >> 636        fPhysicsCase == "QGSP_BERT"      ||
                                                   >> 637        fPhysicsCase == "QGSP_BIC"  ) {
686     // The Binary Light Ion model is used for     638     // The Binary Light Ion model is used for ions in all physics lists
687     fPhysicsCaseIsSupported = true;               639     fPhysicsCaseIsSupported = true;
688     theDeuteronInelasticProcess->RegisterMe(th << 640     theDeuteronInelasticProcess->RegisterMe( theIonBICmodel );    
689     theTritonInelasticProcess->RegisterMe(theI << 641     theTritonInelasticProcess->RegisterMe( theIonBICmodel );    
690     theHe3InelasticProcess->RegisterMe(theIonB << 642     theHe3InelasticProcess->RegisterMe( theIonBICmodel );    
691     theAlphaInelasticProcess->RegisterMe(theIo << 643     theAlphaInelasticProcess->RegisterMe( theIonBICmodel );  
692     theIonInelasticProcess->RegisterMe(theIonB << 644     theIonInelasticProcess->RegisterMe( theIonBICmodel );
693   }                                            << 645   }
694   if (fPhysicsCase == "QGSP" || fPhysicsCase = << 646   if ( fPhysicsCase == "QGSP"       ||
                                                   >> 647        fPhysicsCase == "QGSP_BERT"  ||
                                                   >> 648        fPhysicsCase == "QGSP_BIC" ) {
695     fPhysicsCaseIsSupported = true;               649     fPhysicsCaseIsSupported = true;
696     thePionMinusInelasticProcess->RegisterMe(t << 650     thePionMinusInelasticProcess->RegisterMe( theQGSPmodel );
697     thePionPlusInelasticProcess->RegisterMe(th << 651     thePionPlusInelasticProcess->RegisterMe( theQGSPmodel );
698     theKaonMinusInelasticProcess->RegisterMe(t << 652     theKaonMinusInelasticProcess->RegisterMe( theQGSPmodel );
699     theKaonPlusInelasticProcess->RegisterMe(th << 653     theKaonPlusInelasticProcess->RegisterMe( theQGSPmodel );
700     theKaonZeroLInelasticProcess->RegisterMe(t << 654     theKaonZeroLInelasticProcess->RegisterMe( theQGSPmodel );
701     theKaonZeroSInelasticProcess->RegisterMe(t << 655     theKaonZeroSInelasticProcess->RegisterMe( theQGSPmodel );
702     theProtonInelasticProcess->RegisterMe(theQ << 656     theProtonInelasticProcess->RegisterMe( theQGSPmodel );
703     theNeutronInelasticProcess->RegisterMe(the << 657     theNeutronInelasticProcess->RegisterMe( theQGSPmodel );
704     theLambdaInelasticProcess->RegisterMe(theQ << 658     theLambdaInelasticProcess->RegisterMe( theQGSPmodel );
705     theSigmaMinusInelasticProcess->RegisterMe( << 659     theSigmaMinusInelasticProcess->RegisterMe( theQGSPmodel );
706     theSigmaPlusInelasticProcess->RegisterMe(t << 660     theSigmaPlusInelasticProcess->RegisterMe( theQGSPmodel );
707     theXiMinusInelasticProcess->RegisterMe(the << 661     theXiMinusInelasticProcess->RegisterMe( theQGSPmodel );
708     theXiZeroInelasticProcess->RegisterMe(theQ << 662     theXiZeroInelasticProcess->RegisterMe( theQGSPmodel );
709     theOmegaMinusInelasticProcess->RegisterMe( << 663     theOmegaMinusInelasticProcess->RegisterMe( theQGSPmodel );
710     theAntiProtonInelasticProcess->RegisterMe( << 664     theAntiProtonInelasticProcess->RegisterMe( theQGSPmodel );
711     theAntiNeutronInelasticProcess->RegisterMe << 665     theAntiNeutronInelasticProcess->RegisterMe( theQGSPmodel );
712     theAntiLambdaInelasticProcess->RegisterMe( << 666     theAntiLambdaInelasticProcess->RegisterMe( theQGSPmodel );
713     theAntiSigmaMinusInelasticProcess->Registe << 667     theAntiSigmaMinusInelasticProcess->RegisterMe( theQGSPmodel );
714     theAntiSigmaPlusInelasticProcess->Register << 668     theAntiSigmaPlusInelasticProcess->RegisterMe( theQGSPmodel );
715     theAntiXiMinusInelasticProcess->RegisterMe << 669     theAntiXiMinusInelasticProcess->RegisterMe( theQGSPmodel );
716     theAntiXiZeroInelasticProcess->RegisterMe( << 670     theAntiXiZeroInelasticProcess->RegisterMe( theQGSPmodel );
717     theAntiOmegaMinusInelasticProcess->Registe << 671     theAntiOmegaMinusInelasticProcess->RegisterMe( theQGSPmodel );
718     theDPlusInelasticProcess->RegisterMe(theQG << 672     theDPlusInelasticProcess->RegisterMe( theQGSPmodel );
719     theDMinusInelasticProcess->RegisterMe(theQ << 673     theDMinusInelasticProcess->RegisterMe( theQGSPmodel );
720     theDZeroInelasticProcess->RegisterMe(theQG << 674     theDZeroInelasticProcess->RegisterMe( theQGSPmodel );
721     theAntiDZeroInelasticProcess->RegisterMe(t << 675     theAntiDZeroInelasticProcess->RegisterMe( theQGSPmodel );
722     theDsPlusInelasticProcess->RegisterMe(theQ << 676     theDsPlusInelasticProcess->RegisterMe( theQGSPmodel );
723     theDsMinusInelasticProcess->RegisterMe(the << 677     theDsMinusInelasticProcess->RegisterMe( theQGSPmodel );
724     theBPlusInelasticProcess->RegisterMe(theQG << 678     theBPlusInelasticProcess->RegisterMe( theQGSPmodel );
725     theBMinusInelasticProcess->RegisterMe(theQ << 679     theBMinusInelasticProcess->RegisterMe( theQGSPmodel );
726     theBZeroInelasticProcess->RegisterMe(theQG << 680     theBZeroInelasticProcess->RegisterMe( theQGSPmodel );
727     theAntiBZeroInelasticProcess->RegisterMe(t << 681     theAntiBZeroInelasticProcess->RegisterMe( theQGSPmodel );
728     theBsZeroInelasticProcess->RegisterMe(theQ << 682     theBsZeroInelasticProcess->RegisterMe( theQGSPmodel );
729     theAntiBsZeroInelasticProcess->RegisterMe( << 683     theAntiBsZeroInelasticProcess->RegisterMe( theQGSPmodel );
730     theBcPlusInelasticProcess->RegisterMe(theQ << 684     theBcPlusInelasticProcess->RegisterMe( theQGSPmodel );
731     theBcMinusInelasticProcess->RegisterMe(the << 685     theBcMinusInelasticProcess->RegisterMe( theQGSPmodel );
732     theLambdacPlusInelasticProcess->RegisterMe << 686     theLambdacPlusInelasticProcess->RegisterMe( theQGSPmodel );
733     theAntiLambdacPlusInelasticProcess->Regist << 687     theAntiLambdacPlusInelasticProcess->RegisterMe( theQGSPmodel );
734     theXicPlusInelasticProcess->RegisterMe(the << 688     theXicPlusInelasticProcess->RegisterMe( theQGSPmodel );
735     theAntiXicPlusInelasticProcess->RegisterMe << 689     theAntiXicPlusInelasticProcess->RegisterMe( theQGSPmodel );
736     theXicZeroInelasticProcess->RegisterMe(the << 690     theXicZeroInelasticProcess->RegisterMe( theQGSPmodel );
737     theAntiXicZeroInelasticProcess->RegisterMe << 691     theAntiXicZeroInelasticProcess->RegisterMe( theQGSPmodel );
738     theOmegacZeroInelasticProcess->RegisterMe( << 692     theOmegacZeroInelasticProcess->RegisterMe( theQGSPmodel );
739     theAntiOmegacZeroInelasticProcess->Registe << 693     theAntiOmegacZeroInelasticProcess->RegisterMe( theQGSPmodel );
740     theLambdabInelasticProcess->RegisterMe(the << 694     theLambdabInelasticProcess->RegisterMe( theQGSPmodel );
741     theAntiLambdabInelasticProcess->RegisterMe << 695     theAntiLambdabInelasticProcess->RegisterMe( theQGSPmodel );
742     theXibZeroInelasticProcess->RegisterMe(the << 696     theXibZeroInelasticProcess->RegisterMe( theQGSPmodel );
743     theAntiXibZeroInelasticProcess->RegisterMe << 697     theAntiXibZeroInelasticProcess->RegisterMe( theQGSPmodel );
744     theXibMinusInelasticProcess->RegisterMe(th << 698     theXibMinusInelasticProcess->RegisterMe( theQGSPmodel );
745     theAntiXibMinusInelasticProcess->RegisterM << 699     theAntiXibMinusInelasticProcess->RegisterMe( theQGSPmodel );
746     theOmegabMinusInelasticProcess->RegisterMe << 700     theOmegabMinusInelasticProcess->RegisterMe( theQGSPmodel );
747     theAntiOmegabMinusInelasticProcess->Regist << 701     theAntiOmegabMinusInelasticProcess->RegisterMe( theQGSPmodel );
748   }                                            << 702   }
749   if (fPhysicsCase == "BERT" || fPhysicsCase = << 703   if ( fPhysicsCase == "BERT"           ||
750       || fPhysicsCase == "QGSP_BERT")          << 704        fPhysicsCase == "FTFP_BERT_ATL"  ||
751   {                                            << 705        fPhysicsCase == "FTFP_BERT"      ||
                                                   >> 706        fPhysicsCase == "QGSP_BERT" ) {
752     // The BERT model is used for pions and nu    707     // The BERT model is used for pions and nucleons in all Bertini-based physics lists
753     fPhysicsCaseIsSupported = true;               708     fPhysicsCaseIsSupported = true;
754     thePionMinusInelasticProcess->RegisterMe(t << 709     thePionMinusInelasticProcess->RegisterMe( theBERTmodel );
755     thePionPlusInelasticProcess->RegisterMe(th << 710     thePionPlusInelasticProcess->RegisterMe( theBERTmodel );
756     theProtonInelasticProcess->RegisterMe(theB << 711     theProtonInelasticProcess->RegisterMe( theBERTmodel );
757     theNeutronInelasticProcess->RegisterMe(the << 712     theNeutronInelasticProcess->RegisterMe( theBERTmodel );
758   }                                            << 713   }
759   if (fPhysicsCase == "BERT" || fPhysicsCase = << 714   if ( fPhysicsCase == "BERT"           ||
760       || fPhysicsCase == "FTFP_INCLXX" || fPhy << 715        fPhysicsCase == "FTFP_BERT_ATL"  ||
761   {                                            << 716        fPhysicsCase == "FTFP_BERT"      ||
                                                   >> 717        fPhysicsCase == "FTFP_INCLXX"    ||
                                                   >> 718        fPhysicsCase == "QGSP_BERT"      ||
                                                   >> 719        fPhysicsCase == "QGSP_BIC" ) {
762     // The BERT model is used for kaons and hy    720     // The BERT model is used for kaons and hyperons in all physics lists
763     fPhysicsCaseIsSupported = true;               721     fPhysicsCaseIsSupported = true;
764     theKaonMinusInelasticProcess->RegisterMe(t << 722     theKaonMinusInelasticProcess->RegisterMe( theBERTmodel );
765     theKaonPlusInelasticProcess->RegisterMe(th << 723     theKaonPlusInelasticProcess->RegisterMe( theBERTmodel );
766     theKaonZeroLInelasticProcess->RegisterMe(t << 724     theKaonZeroLInelasticProcess->RegisterMe( theBERTmodel );
767     theKaonZeroSInelasticProcess->RegisterMe(t << 725     theKaonZeroSInelasticProcess->RegisterMe( theBERTmodel );
768     theLambdaInelasticProcess->RegisterMe(theB << 726     theLambdaInelasticProcess->RegisterMe( theBERTmodel );
769     theSigmaMinusInelasticProcess->RegisterMe( << 727     theSigmaMinusInelasticProcess->RegisterMe( theBERTmodel );
770     theSigmaPlusInelasticProcess->RegisterMe(t << 728     theSigmaPlusInelasticProcess->RegisterMe( theBERTmodel );
771     theXiMinusInelasticProcess->RegisterMe(the << 729     theXiMinusInelasticProcess->RegisterMe( theBERTmodel );
772     theXiZeroInelasticProcess->RegisterMe(theB << 730     theXiZeroInelasticProcess->RegisterMe( theBERTmodel );
773     theOmegaMinusInelasticProcess->RegisterMe( << 731     theOmegaMinusInelasticProcess->RegisterMe( theBERTmodel );
774   }                                            << 732   }
775   if (fPhysicsCase == "FTFP" || fPhysicsCase = << 733   if ( fPhysicsCase == "FTFP"           ||
776       || fPhysicsCase == "FTFP_INCLXX" || fPhy << 734        fPhysicsCase == "FTFP_BERT_ATL"  ||
777   {                                            << 735        fPhysicsCase == "FTFP_BERT"      ||
                                                   >> 736        fPhysicsCase == "FTFP_INCLXX"    ||
                                                   >> 737        fPhysicsCase == "QGSP_BERT"      ||
                                                   >> 738        fPhysicsCase == "QGSP_BIC" ) {
778     // The FTFP model is applied for all hadro    739     // The FTFP model is applied for all hadrons, but in different energy intervals according
779     // whether it is consider as a stand-alone    740     // whether it is consider as a stand-alone hadronic model, or within physics lists
780     fPhysicsCaseIsSupported = true;               741     fPhysicsCaseIsSupported = true;
781     theAntiDeuteronInelasticProcess->RegisterM << 742     theAntiDeuteronInelasticProcess->RegisterMe( theFTFPmodel );
782     theAntiTritonInelasticProcess->RegisterMe( << 743     theAntiTritonInelasticProcess->RegisterMe( theFTFPmodel );
783     theAntiHe3InelasticProcess->RegisterMe(the << 744     theAntiHe3InelasticProcess->RegisterMe( theFTFPmodel );
784     theAntiAlphaInelasticProcess->RegisterMe(t << 745     theAntiAlphaInelasticProcess->RegisterMe( theFTFPmodel );
785     G4TheoFSGenerator* theFTFPmodelToBeUsed =     746     G4TheoFSGenerator* theFTFPmodelToBeUsed = theFTFPmodel_aboveThreshold;
786     if (fPhysicsCase == "FTFP") {              << 747     if ( fPhysicsCase == "FTFP" ) {
787       theFTFPmodelToBeUsed = theFTFPmodel;        748       theFTFPmodelToBeUsed = theFTFPmodel;
788     }                                          << 749     } else if ( fPhysicsCase == "QGSP_BERT"  ||  fPhysicsCase == "QGSP_BIC" ) {
789     else if (fPhysicsCase == "QGSP_BERT" || fP << 
790       theFTFPmodelToBeUsed = theFTFPmodel_cons    750       theFTFPmodelToBeUsed = theFTFPmodel_constrained;
791     }                                          << 751     }        
792     thePionMinusInelasticProcess->RegisterMe(t << 752     thePionMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
793     thePionPlusInelasticProcess->RegisterMe(th << 753     thePionPlusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
794     theKaonMinusInelasticProcess->RegisterMe(t << 754     theKaonMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
795     theKaonPlusInelasticProcess->RegisterMe(th << 755     theKaonPlusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
796     theKaonZeroLInelasticProcess->RegisterMe(t << 756     theKaonZeroLInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
797     theKaonZeroSInelasticProcess->RegisterMe(t << 757     theKaonZeroSInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
798     theProtonInelasticProcess->RegisterMe(theF << 758     theProtonInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
799     theAntiProtonInelasticProcess->RegisterMe( << 759     theAntiProtonInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
800     theNeutronInelasticProcess->RegisterMe(the << 760     theNeutronInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
801     theAntiNeutronInelasticProcess->RegisterMe << 761     theAntiNeutronInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
802     theLambdaInelasticProcess->RegisterMe(theF << 762     theLambdaInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
803     theAntiLambdaInelasticProcess->RegisterMe( << 763     theAntiLambdaInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
804     theSigmaMinusInelasticProcess->RegisterMe( << 764     theSigmaMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
805     theAntiSigmaMinusInelasticProcess->Registe << 765     theAntiSigmaMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
806     theSigmaPlusInelasticProcess->RegisterMe(t << 766     theSigmaPlusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
807     theAntiSigmaPlusInelasticProcess->Register << 767     theAntiSigmaPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
808     theXiMinusInelasticProcess->RegisterMe(the << 768     theXiMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
809     theAntiXiMinusInelasticProcess->RegisterMe << 769     theAntiXiMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
810     theXiZeroInelasticProcess->RegisterMe(theF << 770     theXiZeroInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
811     theAntiXiZeroInelasticProcess->RegisterMe( << 771     theAntiXiZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
812     theOmegaMinusInelasticProcess->RegisterMe( << 772     theOmegaMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
813     theAntiOmegaMinusInelasticProcess->Registe << 773     theAntiOmegaMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
814     theDPlusInelasticProcess->RegisterMe(theFT << 774     theDPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
815     theDMinusInelasticProcess->RegisterMe(theF << 775     theDMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
816     theDZeroInelasticProcess->RegisterMe(theFT << 776     theDZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
817     theAntiDZeroInelasticProcess->RegisterMe(t << 777     theAntiDZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
818     theDsPlusInelasticProcess->RegisterMe(theF << 778     theDsPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
819     theDsMinusInelasticProcess->RegisterMe(the << 779     theDsMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
820     theBPlusInelasticProcess->RegisterMe(theFT << 780     theBPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
821     theBMinusInelasticProcess->RegisterMe(theF << 781     theBMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
822     theBZeroInelasticProcess->RegisterMe(theFT << 782     theBZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
823     theAntiBZeroInelasticProcess->RegisterMe(t << 783     theAntiBZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
824     theBsZeroInelasticProcess->RegisterMe(theF << 784     theBsZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
825     theAntiBsZeroInelasticProcess->RegisterMe( << 785     theAntiBsZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
826     theBcPlusInelasticProcess->RegisterMe(theF << 786     theBcPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
827     theBcMinusInelasticProcess->RegisterMe(the << 787     theBcMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
828     theLambdacPlusInelasticProcess->RegisterMe << 788     theLambdacPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
829     theAntiLambdacPlusInelasticProcess->Regist << 789     theAntiLambdacPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
830     theXicPlusInelasticProcess->RegisterMe(the << 790     theXicPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
831     theAntiXicPlusInelasticProcess->RegisterMe << 791     theAntiXicPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
832     theXicZeroInelasticProcess->RegisterMe(the << 792     theXicZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
833     theAntiXicZeroInelasticProcess->RegisterMe << 793     theAntiXicZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
834     theOmegacZeroInelasticProcess->RegisterMe( << 794     theOmegacZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
835     theAntiOmegacZeroInelasticProcess->Registe << 795     theAntiOmegacZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
836     theLambdabInelasticProcess->RegisterMe(the << 796     theLambdabInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
837     theAntiLambdabInelasticProcess->RegisterMe << 797     theAntiLambdabInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
838     theXibZeroInelasticProcess->RegisterMe(the << 798     theXibZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
839     theAntiXibZeroInelasticProcess->RegisterMe << 799     theAntiXibZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
840     theXibMinusInelasticProcess->RegisterMe(th << 800     theXibMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
841     theAntiXibMinusInelasticProcess->RegisterM << 801     theAntiXibMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
842     theOmegabMinusInelasticProcess->RegisterMe << 802     theOmegabMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
843     theAntiOmegabMinusInelasticProcess->Regist << 803     theAntiOmegabMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold );
844     theFTFPmodelToBeUsed = theFTFPmodel_aboveT    804     theFTFPmodelToBeUsed = theFTFPmodel_aboveThreshold;
845     if (fPhysicsCase == "FTFP") theFTFPmodelTo << 805     if ( fPhysicsCase == "FTFP" ) theFTFPmodelToBeUsed = theFTFPmodel;
846     theDeuteronInelasticProcess->RegisterMe(th << 806     theDeuteronInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
847     theTritonInelasticProcess->RegisterMe(theF << 807     theTritonInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
848     theHe3InelasticProcess->RegisterMe(theFTFP << 808     theHe3InelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
849     theAlphaInelasticProcess->RegisterMe(theFT << 809     theAlphaInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
850     theIonInelasticProcess->RegisterMe(theFTFP << 810     theIonInelasticProcess->RegisterMe( theFTFPmodelToBeUsed );
851   }                                            << 
852                                                << 
853   if (G4HadronicParameters::Instance()->Enable << 
854     // Only FTFP and INCL can handle the nucle << 
855     // of light hypernuclei, and only FTFP is  << 
856     // the nuclear interactions of light anti- << 
857     if (fPhysicsCase == "FTFP_BERT" || fPhysic << 
858       fPhysicsCaseIsSupported = true;          << 
859       if (fPhysicsCase == "FTFP_INCLXX") {     << 
860         theHyperTritonInelasticProcess->Regist << 
861         theHyperAlphaInelasticProcess->Registe << 
862         theHyperH4InelasticProcess->RegisterMe << 
863         theDoubleHyperH4InelasticProcess->Regi << 
864         theDoubleHyperDoubleNeutronInelasticPr << 
865         theHyperHe5InelasticProcess->RegisterM << 
866       }                                        << 
867       else {                                   << 
868         theHyperTritonInelasticProcess->Regist << 
869         theHyperAlphaInelasticProcess->Registe << 
870         theHyperH4InelasticProcess->RegisterMe << 
871         theDoubleHyperH4InelasticProcess->Regi << 
872         theDoubleHyperDoubleNeutronInelasticPr << 
873         theHyperHe5InelasticProcess->RegisterM << 
874       }                                        << 
875       theAntiHyperTritonInelasticProcess->Regi << 
876       theAntiHyperAlphaInelasticProcess->Regis << 
877       theAntiHyperH4InelasticProcess->Register << 
878       theAntiDoubleHyperH4InelasticProcess->Re << 
879       theAntiDoubleHyperDoubleNeutronInelastic << 
880       theAntiHyperHe5InelasticProcess->Registe << 
881     }                                          << 
882     if (fPhysicsCase == "FTFP_INCLXX" || fPhys << 
883       fPhysicsCaseIsSupported = true;          << 
884       theHyperTritonInelasticProcess->Register << 
885       theHyperAlphaInelasticProcess->RegisterM << 
886       theHyperH4InelasticProcess->RegisterMe(t << 
887       theDoubleHyperH4InelasticProcess->Regist << 
888       theDoubleHyperDoubleNeutronInelasticProc << 
889       theHyperHe5InelasticProcess->RegisterMe( << 
890     }                                          << 
891   }                                               811   }
892                                                   812 
893   if (!fPhysicsCaseIsSupported) {              << 813   if ( ! fPhysicsCaseIsSupported ) {
894     G4cerr << "ERROR: Not supported final-stat << 814     G4cerr << "ERROR: Not supported final-state hadronic inelastic physics case !"
895            << G4endl << "\t Re-try by choosing << 815            << fPhysicsCase << G4endl
                                                   >> 816            << "\t Re-try by choosing one of the following:" << G4endl
896            << "\t - Hadronic models : BERT, BI    817            << "\t - Hadronic models : BERT, BIC, IonBIC, INCL, FTFP, QGSP" << G4endl
897            << "\t - \"Physics-list proxies\" :    818            << "\t - \"Physics-list proxies\" : FTFP_BERT (default), FTFP_BERT_ATL, \
898                                                   819                                                QGSP_BERT, QGSP_BIC, FTFP_INCLXX"
899            << G4endl;                             820            << G4endl;
900   }                                               821   }
                                                   >> 822 
901 }                                                 823 }
902                                                   824 
903 //....oooOO0OOooo........oooOO0OOooo........oo    825 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
904                                                   826 
905 HadronicGenerator::~HadronicGenerator()        << 827 HadronicGenerator::~HadronicGenerator() {
906 {                                              << 
907   fPartTable->DeleteAllParticles();               828   fPartTable->DeleteAllParticles();
908 }                                                 829 }
909                                                   830 
910 //....oooOO0OOooo........oooOO0OOooo........oo    831 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
911                                                   832 
912 G4bool HadronicGenerator::IsApplicable(const G << 833 G4bool HadronicGenerator::IsApplicable( const G4String &nameProjectile,
913                                        const G << 834                                         const G4double projectileEnergy ) const {
914 {                                              << 835   G4ParticleDefinition* projectileDefinition = fPartTable->FindParticle( nameProjectile );
915   G4ParticleDefinition* projectileDefinition = << 836   return IsApplicable( projectileDefinition, projectileEnergy );
916   return IsApplicable(projectileDefinition, pr << 
917 }                                                 837 }
918                                                   838 
919 //....oooOO0OOooo........oooOO0OOooo........oo    839 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
920                                                   840 
921 G4bool HadronicGenerator::IsApplicable(G4Parti << 841 G4bool HadronicGenerator::IsApplicable( G4ParticleDefinition* projectileDefinition,
922                                        const G << 842                                         const G4double projectileEnergy ) const {
923 {                                              << 843   if ( projectileDefinition == nullptr ) return false;
924   if (projectileDefinition == nullptr) return  << 
925   G4bool isApplicable = true;                     844   G4bool isApplicable = true;
926   // No restrictions for "physics list proxies    845   // No restrictions for "physics list proxies" because they cover all hadron types and energies.
927   // For the individual models, instead, we ne << 846   // For the individual models, instead, we need to consider their limitations. 
928   if (fPhysicsCase == "BERT") {                << 847   if ( fPhysicsCase == "BERT" ) {
929     // We consider BERT model below 15 GeV        848     // We consider BERT model below 15 GeV
930     if (((projectileDefinition != G4PionMinus: << 849     if ( ( ( projectileDefinition != G4PionMinus::Definition()  ) &&
931          && (projectileDefinition != G4PionPlu << 850            ( projectileDefinition != G4PionPlus::Definition()   ) &&
932          && (projectileDefinition != G4Proton: << 851            ( projectileDefinition != G4Proton::Definition()     ) &&
933          && (projectileDefinition != G4Neutron << 852            ( projectileDefinition != G4Neutron::Definition()    ) &&
934          && (projectileDefinition != G4Lambda: << 853            ( projectileDefinition != G4Lambda::Definition()     ) &&
935          && (projectileDefinition != G4SigmaMi << 854            ( projectileDefinition != G4SigmaMinus::Definition() ) &&
936          && (projectileDefinition != G4SigmaPl << 855            ( projectileDefinition != G4SigmaPlus::Definition()  ) &&
937          && (projectileDefinition != G4XiMinus << 856            ( projectileDefinition != G4XiMinus::Definition()    ) &&
938          && (projectileDefinition != G4XiZero: << 857            ( projectileDefinition != G4XiZero::Definition()     ) &&
939          && (projectileDefinition != G4OmegaMi << 858            ( projectileDefinition != G4OmegaMinus::Definition() ) ) ||
940         || (projectileEnergy > 15.0 * CLHEP::G << 859          ( projectileEnergy > 15.0*CLHEP::GeV ) ) {
941     {                                          << 
942       isApplicable = false;                       860       isApplicable = false;
943     }                                             861     }
944   }                                            << 862   } else if ( fPhysicsCase == "QGSP" ) {
945   else if (fPhysicsCase == "QGSP") {           << 
946     // We consider QGSP above 2 GeV and not fo    863     // We consider QGSP above 2 GeV and not for ions or anti-ions
947     if (projectileEnergy < 2.0 * CLHEP::GeV || << 864     if ( projectileEnergy < 2.0*CLHEP::GeV                    ||
948         || projectileDefinition == G4Triton::D << 865          projectileDefinition == G4Deuteron::Definition()     ||
949         || projectileDefinition == G4He3::Defi << 866          projectileDefinition == G4Triton::Definition()       ||
950         || projectileDefinition == G4Alpha::De << 867          projectileDefinition == G4He3::Definition()          ||
951         || projectileDefinition == G4GenericIo << 868          projectileDefinition == G4Alpha::Definition()        ||
952         || projectileDefinition == G4AntiDeute << 869          projectileDefinition == G4GenericIon::Definition()   ||
953         || projectileDefinition == G4AntiTrito << 870          projectileDefinition == G4AntiDeuteron::Definition() ||
954         || projectileDefinition == G4AntiHe3:: << 871          projectileDefinition == G4AntiTriton::Definition()   ||
955         || projectileDefinition == G4AntiAlpha << 872          projectileDefinition == G4AntiHe3::Definition()      ||
956     {                                          << 873          projectileDefinition == G4AntiAlpha::Definition() ) {
957       isApplicable = false;                       874       isApplicable = false;
958     }                                             875     }
959   }                                            << 876   } else if ( fPhysicsCase == "BIC"  ||  fPhysicsCase == "INCL" ) {
960   else if (fPhysicsCase == "BIC" || fPhysicsCa << 
961     // We consider BIC and INCL models only fo    877     // We consider BIC and INCL models only for pions and nucleons below 10 GeV
962     // (although in recent versions INCL is ca    878     // (although in recent versions INCL is capable of handling more hadrons
963     // and up to higher energies)                 879     // and up to higher energies)
964     if (((projectileDefinition != G4PionMinus: << 880     if ( ( ( projectileDefinition != G4PionMinus::Definition() ) &&
965          && (projectileDefinition != G4PionPlu << 881            ( projectileDefinition != G4PionPlus::Definition()  ) &&
966          && (projectileDefinition != G4Proton: << 882            ( projectileDefinition != G4Proton::Definition()    ) &&
967          && (projectileDefinition != G4Neutron << 883            ( projectileDefinition != G4Neutron::Definition()   ) ) ||
968         || (projectileEnergy > 10.0 * CLHEP::G << 884          ( projectileEnergy > 10.0*CLHEP::GeV ) ) {
969     {                                          << 
970       isApplicable = false;                       885       isApplicable = false;
971     }                                             886     }
972   }                                            << 887   } else if ( fPhysicsCase == "IonBIC" ) {
973   else if (fPhysicsCase == "IonBIC") {         << 
974     // We consider IonBIC models only for deut    888     // We consider IonBIC models only for deuteron, triton, He3, alpha
975     // with energies below 10 GeV / nucleon       889     // with energies below 10 GeV / nucleon
976     if (!((projectileDefinition == G4Deuteron: << 890     if ( ! ( ( projectileDefinition == G4Deuteron::Definition()  &&
977            && projectileEnergy < 2 * 10.0 * CL << 891                projectileEnergy < 2*10.0*CLHEP::GeV                 ) ||
978           || (projectileDefinition == G4Triton << 892              ( projectileDefinition == G4Triton::Definition()    &&
979               && projectileEnergy < 3 * 10.0 * << 893                projectileEnergy < 3*10.0*CLHEP::GeV                 ) ||
980           || (projectileDefinition == G4He3::D << 894              ( projectileDefinition == G4He3::Definition()       &&
981               && projectileEnergy < 3 * 10.0 * << 895                projectileEnergy < 3*10.0*CLHEP::GeV                 ) ||
982           || (projectileDefinition == G4Alpha: << 896              ( projectileDefinition == G4Alpha::Definition()     &&
983               && projectileEnergy < 4 * 10.0 * << 897                projectileEnergy < 4*10.0*CLHEP::GeV                 ) ) ) {
984     {                                          << 
985       isApplicable = false;                       898       isApplicable = false;
986     }                                             899     }
987   }                                            << 900   } 
988   return isApplicable;                            901   return isApplicable;
989 }                                                 902 }
990                                                   903 
991 //....oooOO0OOooo........oooOO0OOooo........oo    904 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
992                                                   905 
993 G4VParticleChange* HadronicGenerator::Generate << 906 G4VParticleChange* HadronicGenerator::
994                                                << 907 GenerateInteraction( const G4String &nameProjectile, const G4double projectileEnergy,
995                                                << 908                      const G4ThreeVector &projectileDirection, G4Material* targetMaterial ) {
996                                                << 909   G4ParticleDefinition* projectileDefinition = fPartTable->FindParticle( nameProjectile );
997 {                                              << 910   return GenerateInteraction( projectileDefinition, projectileEnergy,
998   G4ParticleDefinition* projectileDefinition = << 911                               projectileDirection, targetMaterial );
999   return GenerateInteraction(projectileDefinit << 
1000                              targetMaterial); << 
1001 }                                                912 }
1002                                                  913 
1003 //....oooOO0OOooo........oooOO0OOooo........o    914 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
1004                                                  915 
1005 G4VParticleChange* HadronicGenerator::Generat << 916 G4VParticleChange* HadronicGenerator::
1006   G4ParticleDefinition* projectileDefinition, << 917 GenerateInteraction( G4ParticleDefinition* projectileDefinition, const G4double projectileEnergy,
1007   const G4ThreeVector& projectileDirection, G << 918                      const G4ThreeVector &projectileDirection, G4Material* targetMaterial ) {
1008 {                                             << 
1009   // This is the most important method of the    919   // This is the most important method of the HadronicGenerator class:
1010   // the method performs the specified hadron    920   // the method performs the specified hadronic interaction
1011   // (by invoking the "PostStepDoIt" method o    921   // (by invoking the "PostStepDoIt" method of the corresponding hadronic process)
1012   // and returns the final state, i.e. the se    922   // and returns the final state, i.e. the secondaries produced by the collision.
1013   // It is a relatively short method because     923   // It is a relatively short method because the heavy load of setting up all
1014   // possible hadronic processes - with their    924   // possible hadronic processes - with their hadronic models, transition regions,
1015   // and cross sections (the latter is needed    925   // and cross sections (the latter is needed for sampling the target nucleus from
1016   // the target material) - was already done     926   // the target material) - was already done by the constructor of the class.
1017   G4VParticleChange* aChange = nullptr;          927   G4VParticleChange* aChange = nullptr;
1018                                                  928 
1019   if (projectileDefinition == nullptr) {      << 929   if ( projectileDefinition == nullptr ) {
1020     G4cerr << "ERROR: projectileDefinition is    930     G4cerr << "ERROR: projectileDefinition is NULL !" << G4endl;
1021     return aChange;                              931     return aChange;
1022   }                                              932   }
1023                                                  933 
1024   // Debugging print-out                         934   // Debugging print-out
1025   // G4cout << "\t" << projectileDefinition-> << 935   //G4cout << "\t" << projectileDefinition->GetParticleName()
1026   //       << "\t" << projectileEnergy/CLHEP:    936   //       << "\t" << projectileEnergy/CLHEP::GeV
1027   //       << " GeV \t" << projectileDirectio    937   //       << " GeV \t" << projectileDirection
1028   //       << "\t" << ( targetMaterial ? targ    938   //       << "\t" << ( targetMaterial ? targetMaterial->GetName() : "NULL" );
1029   if (!IsApplicable(projectileDefinition, pro << 939   if ( ! IsApplicable( projectileDefinition, projectileEnergy ) ) {
1030     // G4cout << " -> NOT applicable !" ; //< << 940     //G4cout << " -> NOT applicable !" ; //<< G4endl;  // Debugging print-out
1031     return aChange;                              941     return aChange;
1032   }                                              942   }
1033   // G4cout << G4endl;                        << 943   //G4cout << G4endl;
1034                                                  944 
1035   // Check Geant4 state (not strictly needed)    945   // Check Geant4 state (not strictly needed)
1036   // if ( ! G4StateManager::GetStateManager() << 946   //if ( ! G4StateManager::GetStateManager()->SetNewState( G4State_PreInit ) ) {
1037   //  G4cerr << "ERROR: No possible to set G4    947   //  G4cerr << "ERROR: No possible to set G4State_PreInit !" << G4endl;
1038   //  return aChange;                            948   //  return aChange;
1039   //}                                            949   //}
1040                                                  950 
1041   // Geometry definition (not strictly needed    951   // Geometry definition (not strictly needed)
1042   // const G4double dimX = 1.0*mm;            << 952   //const G4double dimX = 1.0*mm;
1043   // const G4double dimY = 1.0*mm;            << 953   //const G4double dimY = 1.0*mm;
1044   // const G4double dimZ = 1.0*mm;            << 954   //const G4double dimZ = 1.0*mm;
1045   // G4Box* sFrame = new G4Box( "Box", dimX,  << 955   //G4Box* sFrame = new G4Box( "Box", dimX, dimY, dimZ );
1046   // G4LogicalVolume* lFrame = new G4LogicalV << 956   //G4LogicalVolume* lFrame = new G4LogicalVolume( sFrame, targetMaterial, "Box", 0, 0, 0 );
1047   // G4PVPlacement* pFrame = new G4PVPlacemen << 957   //G4PVPlacement* pFrame = new G4PVPlacement( 0, G4ThreeVector(), "Box", lFrame, 0, false, 0 );
1048   // G4TransportationManager::GetTransportati << 958   //G4TransportationManager::GetTransportationManager()->SetWorldForTracking( pFrame );
1049                                                  959 
1050   // Projectile track & step                     960   // Projectile track & step
1051   G4DynamicParticle dParticle(projectileDefin << 961   G4DynamicParticle dParticle( projectileDefinition, projectileDirection, projectileEnergy );
1052   const G4double aTime = 0.0;                    962   const G4double aTime = 0.0;
1053   const G4ThreeVector aPosition = G4ThreeVect << 963   const G4ThreeVector aPosition = G4ThreeVector( 0.0, 0.0, 0.0 );
1054   G4Track* gTrack = new G4Track(&dParticle, a << 964   G4Track* gTrack = new G4Track( &dParticle, aTime, aPosition );
1055   G4TouchableHandle fpTouchable(new G4Touchab << 965   G4TouchableHandle fpTouchable( new G4TouchableHistory );  // Not strictly needed
1056   gTrack->SetTouchableHandle(fpTouchable);  / << 966   gTrack->SetTouchableHandle( fpTouchable );                // Not strictly needed
1057   G4Step* step = new G4Step;                     967   G4Step* step = new G4Step;
1058   step->SetTrack(gTrack);                     << 968   step->SetTrack( gTrack );
1059   gTrack->SetStep(step);                      << 969   gTrack->SetStep( step );
1060   G4StepPoint* aPoint = new G4StepPoint;         970   G4StepPoint* aPoint = new G4StepPoint;
1061   aPoint->SetPosition(aPosition);             << 971   aPoint->SetPosition( aPosition );
1062   aPoint->SetMaterial(targetMaterial);        << 972   aPoint->SetMaterial( targetMaterial );
1063   step->SetPreStepPoint(aPoint);              << 973   step->SetPreStepPoint( aPoint );
1064   dParticle.SetKineticEnergy(projectileEnergy << 974   dParticle.SetKineticEnergy( projectileEnergy );
1065   gTrack->SetStep(step);                      << 975   gTrack->SetStep( step );
1066   gTrack->SetKineticEnergy(projectileEnergy); << 976   gTrack->SetKineticEnergy( projectileEnergy );
1067                                                  977 
1068   // Change Geant4 state: from "PreInit" to "    978   // Change Geant4 state: from "PreInit" to "Idle" (not strictly needed)
1069   // if ( ! G4StateManager::GetStateManager() << 979   //if ( ! G4StateManager::GetStateManager()->SetNewState( G4State_Idle ) ) {
1070   //  G4cerr << "ERROR: No possible to set G4    980   //  G4cerr << "ERROR: No possible to set G4State_Idle !" << G4endl;
1071   //  return aChange;                            981   //  return aChange;
1072   //}                                            982   //}
1073                                                  983 
1074   // Finally, the hadronic interaction: hadro    984   // Finally, the hadronic interaction: hadron projectile and ion projectile
1075   // need to be treated slightly differently     985   // need to be treated slightly differently
1076   G4HadronicProcess* theProcess = nullptr;       986   G4HadronicProcess* theProcess = nullptr;
1077   G4ParticleDefinition* theProjectileDef = nu    987   G4ParticleDefinition* theProjectileDef = nullptr;
1078   if (projectileDefinition->IsGeneralIon()) { << 988   if ( projectileDefinition->IsGeneralIon() ) {
1079     theProjectileDef = G4GenericIon::Definiti    989     theProjectileDef = G4GenericIon::Definition();
1080   }                                           << 990   } else {
1081   else {                                      << 
1082     theProjectileDef = projectileDefinition;     991     theProjectileDef = projectileDefinition;
1083   }                                              992   }
1084   auto mapIndex = fProcessMap.find(theProject << 993   auto mapIndex = fProcessMap.find( theProjectileDef );
1085   if (mapIndex != fProcessMap.end()) theProce << 994   if ( mapIndex != fProcessMap.end() ) theProcess = mapIndex->second;
1086   if (theProcess != nullptr) {                << 995   if ( theProcess != nullptr ) {
1087     aChange = theProcess->PostStepDoIt(*gTrac << 996     aChange = theProcess->PostStepDoIt( *gTrack, *step );
1088     //***************************************    997     //**************************************************
1089   }                                           << 998   } else {
1090   else {                                      << 
1091     G4cerr << "ERROR: theProcess is nullptr !    999     G4cerr << "ERROR: theProcess is nullptr !" << G4endl;
1092   }                                              1000   }
1093   fLastHadronicProcess = theProcess;             1001   fLastHadronicProcess = theProcess;
1094   // delete pFrame;                           << 1002   //delete pFrame;
1095   // delete lFrame;                           << 1003   //delete lFrame;
1096   // delete sFrame;                           << 1004   //delete sFrame;
1097                                                  1005 
1098   return aChange;                                1006   return aChange;
1099 }                                                1007 }
1100                                                  1008 
1101 //....oooOO0OOooo........oooOO0OOooo........o    1009 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
1102                                                  1010 
1103 G4double HadronicGenerator::GetImpactParamete << 1011 G4double HadronicGenerator::GetImpactParameter() const {
1104 {                                             << 
1105   G4double impactParameter = -999.0 * fermi;     1012   G4double impactParameter = -999.0 * fermi;
1106   G4HadronicProcess* hadProcess = GetHadronic    1013   G4HadronicProcess* hadProcess = GetHadronicProcess();
1107   G4HadronicInteraction* hadInteraction = Get    1014   G4HadronicInteraction* hadInteraction = GetHadronicInteraction();
1108   G4HadronicInteraction* wantedHadInteraction    1015   G4HadronicInteraction* wantedHadInteraction =
1109     const_cast<G4HadronicProcess*>(hadProcess << 1016     const_cast< G4HadronicProcess* >( hadProcess )->GetHadronicModel( "FTFP" );
1110   if (hadInteraction != nullptr && hadInterac << 1017   if ( hadInteraction != nullptr && hadInteraction == wantedHadInteraction ) {
1111     // FTFP has handled the inelastic hadroni    1018     // FTFP has handled the inelastic hadronic interaction.
1112     G4TheoFSGenerator* theoFSGenerator = dyna << 1019     G4TheoFSGenerator* theoFSGenerator = dynamic_cast< G4TheoFSGenerator* >( hadInteraction );
1113     if (theoFSGenerator != nullptr) {         << 1020     if ( theoFSGenerator != nullptr ) {
1114       const G4FTFModel* ftfModel =            << 1021       const G4FTFModel* ftfModel = dynamic_cast< const G4FTFModel* >( theoFSGenerator->GetHighEnergyGenerator() );
1115         dynamic_cast<const G4FTFModel*>(theoF << 1022       if ( ftfModel != nullptr ) {
1116       if (ftfModel != nullptr) {              << 1023   // ftfModel points to the G4FTFModel object instance that handled the
1117         // ftfModel points to the G4FTFModel  << 1024   // inelastic hadronic interaction.
1118         // inelastic hadronic interaction.    << 
1119         impactParameter = ftfModel->GetImpact    1025         impactParameter = ftfModel->GetImpactParameter();
1120         // G4cout << "\t impactParameter = "  << 1026         //G4cout << "\t impactParameter = " << impactParameter/fermi << " fm" << G4endl;
1121       }                                          1027       }
1122     }                                            1028     }
1123   }                                              1029   }
1124   return impactParameter;                        1030   return impactParameter;
1125 }                                                1031 }
1126                                                  1032 
1127 //....oooOO0OOooo........oooOO0OOooo........o    1033 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
1128                                                  1034 
1129 G4int HadronicGenerator::GetNumberOfProjectil << 1035 G4int HadronicGenerator::GetNumberOfProjectileSpectatorNucleons() const {
1130 {                                             << 
1131   G4double numProjectileSpectatorNucleons = -    1036   G4double numProjectileSpectatorNucleons = -999;
1132   G4HadronicProcess* hadProcess = GetHadronic    1037   G4HadronicProcess* hadProcess = GetHadronicProcess();
1133   G4HadronicInteraction* hadInteraction = Get    1038   G4HadronicInteraction* hadInteraction = GetHadronicInteraction();
1134   G4HadronicInteraction* wantedHadInteraction    1039   G4HadronicInteraction* wantedHadInteraction =
1135     const_cast<G4HadronicProcess*>(hadProcess << 1040     const_cast< G4HadronicProcess* >( hadProcess )->GetHadronicModel( "FTFP" );
1136   if (hadInteraction != nullptr && hadInterac << 1041   if ( hadInteraction != nullptr && hadInteraction == wantedHadInteraction ) {
1137     G4TheoFSGenerator* theoFSGenerator = dyna << 1042     G4TheoFSGenerator* theoFSGenerator = dynamic_cast< G4TheoFSGenerator* >( hadInteraction );
1138     if (theoFSGenerator != nullptr) {         << 1043     if ( theoFSGenerator != nullptr ) {
1139       const G4FTFModel* ftfModel =            << 1044       const G4FTFModel* ftfModel = dynamic_cast< const G4FTFModel* >( theoFSGenerator->GetHighEnergyGenerator() );
1140         dynamic_cast<const G4FTFModel*>(theoF << 1045       if ( ftfModel != nullptr ) {
1141       if (ftfModel != nullptr) {              << 
1142         numProjectileSpectatorNucleons = ftfM    1046         numProjectileSpectatorNucleons = ftfModel->GetNumberOfProjectileSpectatorNucleons();
1143         // G4cout << "\t numProjectileSpectat << 1047         //G4cout << "\t numProjectileSpectatorNucleons = " << numProjectileSpectatorNucleons << G4endl;
1144         //        << G4endl;                  << 
1145       }                                          1048       }
1146     }                                            1049     }
1147   }                                              1050   }
1148   return numProjectileSpectatorNucleons;         1051   return numProjectileSpectatorNucleons;
1149 }                                                1052 }
1150                                                  1053 
1151 //....oooOO0OOooo........oooOO0OOooo........o    1054 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
1152                                                  1055 
1153 G4int HadronicGenerator::GetNumberOfTargetSpe << 1056 G4int HadronicGenerator::GetNumberOfTargetSpectatorNucleons() const {
1154 {                                             << 
1155   G4double numTargetSpectatorNucleons = -999;    1057   G4double numTargetSpectatorNucleons = -999;
1156   G4HadronicProcess* hadProcess = GetHadronic    1058   G4HadronicProcess* hadProcess = GetHadronicProcess();
1157   G4HadronicInteraction* hadInteraction = Get    1059   G4HadronicInteraction* hadInteraction = GetHadronicInteraction();
1158   G4HadronicInteraction* wantedHadInteraction    1060   G4HadronicInteraction* wantedHadInteraction =
1159     const_cast<G4HadronicProcess*>(hadProcess << 1061     const_cast< G4HadronicProcess* >( hadProcess )->GetHadronicModel( "FTFP" );
1160   if (hadInteraction != nullptr && hadInterac << 1062   if ( hadInteraction != nullptr && hadInteraction == wantedHadInteraction ) {
1161     G4TheoFSGenerator* theoFSGenerator = dyna << 1063     G4TheoFSGenerator* theoFSGenerator = dynamic_cast< G4TheoFSGenerator* >( hadInteraction );
1162     if (theoFSGenerator != nullptr) {         << 1064     if ( theoFSGenerator != nullptr ) {
1163       const G4FTFModel* ftfModel =            << 1065       const G4FTFModel* ftfModel = dynamic_cast< const G4FTFModel* >( theoFSGenerator->GetHighEnergyGenerator() );
1164         dynamic_cast<const G4FTFModel*>(theoF << 1066       if ( ftfModel != nullptr ) {
1165       if (ftfModel != nullptr) {              << 
1166         numTargetSpectatorNucleons = ftfModel    1067         numTargetSpectatorNucleons = ftfModel->GetNumberOfTargetSpectatorNucleons();
1167         // G4cout << "\t numTargetSpectatorNu << 1068         //G4cout << "\t numTargetSpectatorNucleons = " << numTargetSpectatorNucleons << G4endl;
1168       }                                          1069       }
1169     }                                            1070     }
1170   }                                              1071   }
1171   return numTargetSpectatorNucleons;             1072   return numTargetSpectatorNucleons;
1172 }                                                1073 }
1173                                                  1074 
1174 //....oooOO0OOooo........oooOO0OOooo........o    1075 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
1175                                                  1076 
1176 G4int HadronicGenerator::GetNumberOfNNcollisi << 1077 G4int HadronicGenerator::GetNumberOfNNcollisions() const {
1177 {                                             << 
1178   G4double numNNcollisions = -999;               1078   G4double numNNcollisions = -999;
1179   G4HadronicProcess* hadProcess = GetHadronic    1079   G4HadronicProcess* hadProcess = GetHadronicProcess();
1180   G4HadronicInteraction* hadInteraction = Get    1080   G4HadronicInteraction* hadInteraction = GetHadronicInteraction();
1181   G4HadronicInteraction* wantedHadInteraction    1081   G4HadronicInteraction* wantedHadInteraction =
1182     const_cast<G4HadronicProcess*>(hadProcess << 1082     const_cast< G4HadronicProcess* >( hadProcess )->GetHadronicModel( "FTFP" );
1183   if (hadInteraction != nullptr && hadInterac << 1083   if ( hadInteraction != nullptr && hadInteraction == wantedHadInteraction ) {
1184     G4TheoFSGenerator* theoFSGenerator = dyna << 1084     G4TheoFSGenerator* theoFSGenerator = dynamic_cast< G4TheoFSGenerator* >( hadInteraction );
1185     if (theoFSGenerator != nullptr) {         << 1085     if ( theoFSGenerator != nullptr ) {
1186       const G4FTFModel* ftfModel =            << 1086       const G4FTFModel* ftfModel = dynamic_cast< const G4FTFModel* >( theoFSGenerator->GetHighEnergyGenerator() );
1187         dynamic_cast<const G4FTFModel*>(theoF << 1087       if ( ftfModel != nullptr ) {
1188       if (ftfModel != nullptr) {              << 
1189         numNNcollisions = ftfModel->GetNumber    1088         numNNcollisions = ftfModel->GetNumberOfNNcollisions();
1190         // G4cout << "\t numNNcollisions = "  << 1089         //G4cout << "\t numNNcollisions = " << numNNcollisions << G4endl;
1191       }                                          1090       }
1192     }                                            1091     }
1193   }                                              1092   }
1194   return numNNcollisions;                        1093   return numNNcollisions;
1195 }                                                1094 }
1196                                                  1095 
1197 //....oooOO0OOooo........oooOO0OOooo........o    1096 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
1198                                                  1097