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 9.1.p2)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 /// \file HadronicGenerator.cc                    
 27 /// \brief Implementation of the HadronicGener    
 28 //                                                
 29 //--------------------------------------------    
 30 // Class: HadronicGenerator                       
 31 // Author: Alberto Ribon (CERN EP/SFT)            
 32 // Date: May 2020                                 
 33 //--------------------------------------------    
 34                                                   
 35 //....oooOO0OOooo........oooOO0OOooo........oo    
 36 //....oooOO0OOooo........oooOO0OOooo........oo    
 37                                                   
 38 #include "HadronicGenerator.hh"                   
 39                                                   
 40 #include "G4AblaInterface.hh"                     
 41 #include "G4Alpha.hh"                             
 42 #include "G4AntiAlpha.hh"                         
 43 #include "G4AntiBMesonZero.hh"                    
 44 #include "G4AntiBsMesonZero.hh"                   
 45 #include "G4AntiDMesonZero.hh"                    
 46 #include "G4AntiDeuteron.hh"                      
 47 #include "G4AntiDoubleHyperDoubleNeutron.hh"      
 48 #include "G4AntiDoubleHyperH4.hh"                 
 49 #include "G4AntiHe3.hh"                           
 50 #include "G4AntiHyperAlpha.hh"                    
 51 #include "G4AntiHyperH4.hh"                       
 52 #include "G4AntiHyperHe5.hh"                      
 53 #include "G4AntiHyperTriton.hh"                   
 54 #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"                     
 64 #include "G4AntiSigmaZero.hh"                     
 65 #include "G4AntiTriton.hh"                        
 66 #include "G4AntiXiMinus.hh"                       
 67 #include "G4AntiXiZero.hh"                        
 68 #include "G4AntiXibMinus.hh"                      
 69 #include "G4AntiXibZero.hh"                       
 70 #include "G4AntiXicPlus.hh"                       
 71 #include "G4AntiXicZero.hh"                       
 72 #include "G4BGGNucleonInelasticXS.hh"             
 73 #include "G4BGGPionInelasticXS.hh"                
 74 #include "G4BMesonMinus.hh"                       
 75 #include "G4BMesonPlus.hh"                        
 76 #include "G4BMesonZero.hh"                        
 77 #include "G4BcMesonMinus.hh"                      
 78 #include "G4BcMesonPlus.hh"                       
 79 #include "G4BinaryCascade.hh"                     
 80 #include "G4BinaryLightIonReaction.hh"            
 81 #include "G4Box.hh"                               
 82 #include "G4BsMesonZero.hh"                       
 83 #include "G4CascadeInterface.hh"                  
 84 #include "G4ChipsHyperonInelasticXS.hh"           
 85 #include "G4ComponentAntiNuclNuclearXS.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"                 
100 #include "G4ExcitedStringDecay.hh"                
101 #include "G4FTFModel.hh"                          
102 #include "G4GeneratorPrecompoundInterface.hh"     
103 #include "G4GenericIon.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"                   
112 #include "G4IonTable.hh"                          
113 #include "G4KaonMinus.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"                 
136 #include "G4QGSModel.hh"                          
137 #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                                                   
161 #include <iomanip>                                
162                                                   
163 //....oooOO0OOooo........oooOO0OOooo........oo    
164                                                   
165 HadronicGenerator::HadronicGenerator(const G4S    
166   : fPhysicsCase(physicsCase),                    
167     fPhysicsCaseIsSupported(false),               
168     fLastHadronicProcess(nullptr),                
169     fPartTable(nullptr)                           
170 {                                                 
171   // The constructor set-ups all the particles    
172   // hadronic inelastic processes.                
173   // This should be done only once for each ap    
174   // In the case of a multi-threaded applicati    
175   // the constructor should be invoked for eac    
176   // i.e. one instance of the class should be     
177   // The particles and processes that are crea    
178   // will then be used by the method GenerateI    
179   // Notes:                                       
180   // - Neither the hadronic models nor the cro    
181   //   by the method GenerateInteraction, but     
182   //   hadronic processes and used by Geant4 t    
183   // - Although the class generates only final    
184   //   inelastic hadron-nuclear cross sections    
185   //   the target nucleus from the target mate    
186                                                   
187   // Definition of particles                      
188   G4GenericIon* gion = G4GenericIon::Definitio    
189   gion->SetProcessManager(new G4ProcessManager    
190   G4DecayPhysics* decays = new G4DecayPhysics;    
191   decays->ConstructParticle();                    
192   fPartTable = G4ParticleTable::GetParticleTab    
193   fPartTable->SetReadiness();                     
194   G4IonTable* ions = fPartTable->GetIonTable()    
195   ions->CreateAllIon();                           
196   ions->CreateAllIsomer();                        
197                                                   
198   // Build BERT model                             
199   G4CascadeInterface* theBERTmodel = new G4Cas    
200                                                   
201   // Build BIC model                              
202   G4BinaryCascade* theBICmodel = new G4BinaryC    
203   G4PreCompoundModel* thePreEquilib = new G4Pr    
204   theBICmodel->SetDeExcitation(thePreEquilib);    
205                                                   
206   // Build BinaryLightIon model                   
207   G4PreCompoundModel* thePreEquilibBis = new G    
208   G4BinaryLightIonReaction* theIonBICmodel = n    
209                                                   
210   // Build the INCL model                         
211   G4INCLXXInterface* theINCLmodel = new G4INCL    
212   const G4bool useAblaDeExcitation = false;  /    
213                                              /    
214   if (theINCLmodel && useAblaDeExcitation) {      
215     G4AblaInterface* theAblaInterface = new G4    
216     theINCLmodel->SetDeExcitation(theAblaInter    
217   }                                               
218                                                   
219   // Build the FTFP model (FTF/Preco) : 4 inst    
220   // (Notice that these kinetic energy interva    
221   // for all types of hadron and ion projectil    
222   // Model instance without energy constraint.    
223   // (Used for the case of FTFP model, and for    
224   G4TheoFSGenerator* theFTFPmodel = new G4Theo    
225   theFTFPmodel->SetMaxEnergy(G4HadronicParamet    
226   G4GeneratorPrecompoundInterface* theCascade     
227   theCascade->SetDeExcitation(thePreEquilib);     
228   theFTFPmodel->SetTransport(theCascade);         
229   G4LundStringFragmentation* theLundFragmentat    
230   G4ExcitedStringDecay* theStringDecay = new G    
231   G4FTFModel* theStringModel = new G4FTFModel;    
232   theStringModel->SetFragmentationModel(theStr    
233                                                   
234   // If the following line is set, then the sq    
235   // randomly from a flat distribution in the     
236   //***LOOKHERE*** CHOOSE IMPACT PARAMETER MIN    
237   // theStringModel->SetBminBmax( 0.0, 2.0*fer    
238                                                   
239   theFTFPmodel->SetHighEnergyGenerator(theStri    
240   // Model instance with constraint to be abov    
241   // (Used for ions in all physics lists, and,    
242   // also for pions, kaons, nucleons and hyper    
243   G4TheoFSGenerator* theFTFPmodel_aboveThresho    
244   theFTFPmodel_aboveThreshold->SetMaxEnergy(G4    
245   theFTFPmodel_aboveThreshold->SetTransport(th    
246   theFTFPmodel_aboveThreshold->SetHighEnergyGe    
247   // Model instance with constraint to be with    
248   // (Used in the case of QGS-based physics li    
249   G4TheoFSGenerator* theFTFPmodel_constrained     
250   theFTFPmodel_constrained->SetMaxEnergy(G4Had    
251   theFTFPmodel_constrained->SetTransport(theCa    
252   theFTFPmodel_constrained->SetHighEnergyGener    
253   // Model instance to be used down to zero ki    
254   // - in the case of QGS-based physics lists     
255   // (Used for anti-baryons, anti-hyperons, an    
256   G4TheoFSGenerator* theFTFPmodel_belowThresho    
257   theFTFPmodel_belowThreshold->SetMaxEnergy(G4    
258   theFTFPmodel_belowThreshold->SetTransport(th    
259   theFTFPmodel_belowThreshold->SetHighEnergyGe    
260                                                   
261   // Build the QGSP model (QGS/Preco)             
262   G4TheoFSGenerator* theQGSPmodel = new G4Theo    
263   theQGSPmodel->SetMaxEnergy(G4HadronicParamet    
264   theQGSPmodel->SetTransport(theCascade);         
265   G4QGSMFragmentation* theQgsmFragmentation =     
266   G4ExcitedStringDecay* theQgsmStringDecay = n    
267   G4VPartonStringModel* theQgsmStringModel = n    
268   theQgsmStringModel->SetFragmentationModel(th    
269   theQGSPmodel->SetHighEnergyGenerator(theQgsm    
270   G4QuasiElasticChannel* theQuasiElastic = new    
271   theQGSPmodel->SetQuasiElasticChannel(theQuas    
272                                                   
273   // For the case of "physics-list proxies", s    
274   // Note: the transition energy between hadro    
275   //       type of hadrons, and version of Gea    
276   //       energy transition for all types of     
277   //       moreover, for "FTFP_INCLXX" we use     
278   //       between FTFP and INCL than in the r    
279   if (fPhysicsCase == "FTFP_BERT_ATL" || fPhys    
280       || fPhysicsCase == "FTFP_INCLXX" || fPhy    
281   {                                               
282     const G4double ftfpMinE = G4HadronicParame    
283     const G4double bertMaxE = G4HadronicParame    
284     const G4double ftfpMinE_ATL = 9.0 * CLHEP:    
285     const G4double bertMaxE_ATL = 12.0 * CLHEP    
286     const G4double ftfpMaxE = G4HadronicParame    
287     const G4double qgspMinE = G4HadronicParame    
288     theFTFPmodel->SetMinEnergy(0.0);              
289     theFTFPmodel_belowThreshold->SetMinEnergy(    
290     if (fPhysicsCase == "FTFP_BERT_ATL") {        
291       theBERTmodel->SetMaxEnergy(bertMaxE_ATL)    
292       theIonBICmodel->SetMaxEnergy(bertMaxE_AT    
293       theFTFPmodel_aboveThreshold->SetMinEnerg    
294       theFTFPmodel_constrained->SetMinEnergy(f    
295     }                                             
296     else {                                        
297       theBERTmodel->SetMaxEnergy(bertMaxE);       
298       theIonBICmodel->SetMaxEnergy(bertMaxE);     
299       theFTFPmodel_aboveThreshold->SetMinEnerg    
300       theFTFPmodel_constrained->SetMinEnergy(f    
301     }                                             
302     if (fPhysicsCase == "FTFP_INCLXX") {          
303       theINCLmodel->SetMaxEnergy(bertMaxE);       
304     }                                             
305     if (fPhysicsCase == "QGSP_BERT" || fPhysic    
306       theFTFPmodel_constrained->SetMaxEnergy(f    
307       theFTFPmodel_belowThreshold->SetMaxEnerg    
308       theQGSPmodel->SetMinEnergy(qgspMinE);       
309       theBICmodel->SetMaxEnergy(bertMaxE);        
310     }                                             
311   }                                               
312                                                   
313   // Cross sections (needed by Geant4 to sampl    
314   G4VCrossSectionDataSet* thePionMinusXSdata =    
315   thePionMinusXSdata->BuildPhysicsTable(*(G4Pi    
316   G4VCrossSectionDataSet* thePionPlusXSdata =     
317   thePionPlusXSdata->BuildPhysicsTable(*(G4Pio    
318   G4VCrossSectionDataSet* theKaonXSdata =         
319     new G4CrossSectionInelastic(new G4Componen    
320   theKaonXSdata->BuildPhysicsTable(*(G4KaonMin    
321   theKaonXSdata->BuildPhysicsTable(*(G4KaonPlu    
322   theKaonXSdata->BuildPhysicsTable(*(G4KaonZer    
323   theKaonXSdata->BuildPhysicsTable(*(G4KaonZer    
324   G4VCrossSectionDataSet* theProtonXSdata = ne    
325   theProtonXSdata->BuildPhysicsTable(*(G4Proto    
326   G4VCrossSectionDataSet* theNeutronXSdata = n    
327   theNeutronXSdata->BuildPhysicsTable(*(G4Neut    
328   // For hyperon and anti-hyperons we can use     
329   // Glauber-Gribov cross sections                
330   // G4VCrossSectionDataSet* theHyperonsXSdata    
331   G4VCrossSectionDataSet* theHyperonsXSdata =     
332     new G4CrossSectionInelastic(new G4Componen    
333   G4VCrossSectionDataSet* theAntibaryonsXSdata    
334     new G4CrossSectionInelastic(new G4Componen    
335   G4VCrossSectionDataSet* theNuclNuclXSdata =     
336     new G4CrossSectionInelastic(new G4Componen    
337                                                   
338   // Set up inelastic processes : store them i    
339   //                              for convenie    
340   typedef std::pair<G4ParticleDefinition*, G4H    
341   G4HadronicProcess* thePionMinusInelasticProc    
342     new G4HadronInelasticProcess("pi-Inelastic    
343   fProcessMap.insert(ProcessPair(G4PionMinus::    
344   G4HadronicProcess* thePionPlusInelasticProce    
345     new G4HadronInelasticProcess("pi+Inelastic    
346   fProcessMap.insert(ProcessPair(G4PionPlus::D    
347   G4HadronicProcess* theKaonMinusInelasticProc    
348     new G4HadronInelasticProcess("kaon-Inelast    
349   fProcessMap.insert(ProcessPair(G4KaonMinus::    
350   G4HadronicProcess* theKaonPlusInelasticProce    
351     new G4HadronInelasticProcess("kaon+Inelast    
352   fProcessMap.insert(ProcessPair(G4KaonPlus::D    
353   G4HadronicProcess* theKaonZeroLInelasticProc    
354     new G4HadronInelasticProcess("kaon0LInelas    
355   fProcessMap.insert(ProcessPair(G4KaonZeroLon    
356   G4HadronicProcess* theKaonZeroSInelasticProc    
357     new G4HadronInelasticProcess("kaon0SInelas    
358   fProcessMap.insert(ProcessPair(G4KaonZeroSho    
359   G4HadronicProcess* theProtonInelasticProcess    
360     new G4HadronInelasticProcess("protonInelas    
361   fProcessMap.insert(ProcessPair(G4Proton::Def    
362   G4HadronicProcess* theNeutronInelasticProces    
363     new G4HadronInelasticProcess("neutronInela    
364   fProcessMap.insert(ProcessPair(G4Neutron::De    
365   G4HadronicProcess* theDeuteronInelasticProce    
366     new G4HadronInelasticProcess("dInelastic",    
367   fProcessMap.insert(ProcessPair(G4Deuteron::D    
368   G4HadronicProcess* theTritonInelasticProcess    
369     new G4HadronInelasticProcess("tInelastic",    
370   fProcessMap.insert(ProcessPair(G4Triton::Def    
371   G4HadronicProcess* theHe3InelasticProcess =     
372     new G4HadronInelasticProcess("he3Inelastic    
373   fProcessMap.insert(ProcessPair(G4He3::Defini    
374   G4HadronicProcess* theAlphaInelasticProcess     
375     new G4HadronInelasticProcess("alphaInelast    
376   fProcessMap.insert(ProcessPair(G4Alpha::Defi    
377   G4HadronicProcess* theIonInelasticProcess =     
378     new G4HadronInelasticProcess("ionInelastic    
379   fProcessMap.insert(ProcessPair(G4GenericIon:    
380   G4HadronicProcess* theLambdaInelasticProcess    
381     new G4HadronInelasticProcess("lambdaInelas    
382   fProcessMap.insert(ProcessPair(G4Lambda::Def    
383   G4HadronicProcess* theSigmaMinusInelasticPro    
384     new G4HadronInelasticProcess("sigma-Inelas    
385   fProcessMap.insert(ProcessPair(G4SigmaMinus:    
386   G4HadronicProcess* theSigmaPlusInelasticProc    
387     new G4HadronInelasticProcess("sigma+Inelas    
388   fProcessMap.insert(ProcessPair(G4SigmaPlus::    
389   G4HadronicProcess* theXiMinusInelasticProces    
390     new G4HadronInelasticProcess("xi-Inelastic    
391   fProcessMap.insert(ProcessPair(G4XiMinus::De    
392   G4HadronicProcess* theXiZeroInelasticProcess    
393     new G4HadronInelasticProcess("xi0Inelastic    
394   fProcessMap.insert(ProcessPair(G4XiZero::Def    
395   G4HadronicProcess* theOmegaMinusInelasticPro    
396     new G4HadronInelasticProcess("omega-Inelas    
397   fProcessMap.insert(ProcessPair(G4OmegaMinus:    
398   G4HadronicProcess* theAntiProtonInelasticPro    
399     new G4HadronInelasticProcess("anti_protonI    
400   fProcessMap.insert(ProcessPair(G4AntiProton:    
401   G4HadronicProcess* theAntiNeutronInelasticPr    
402     new G4HadronInelasticProcess("anti_neutron    
403   fProcessMap.insert(ProcessPair(G4AntiNeutron    
404   G4HadronicProcess* theAntiDeuteronInelasticP    
405     new G4HadronInelasticProcess("anti_deutero    
406   fProcessMap.insert(ProcessPair(G4AntiDeutero    
407   G4HadronicProcess* theAntiTritonInelasticPro    
408     new G4HadronInelasticProcess("anti_tritonI    
409   fProcessMap.insert(ProcessPair(G4AntiTriton:    
410   G4HadronicProcess* theAntiHe3InelasticProces    
411     new G4HadronInelasticProcess("anti_He3Inel    
412   fProcessMap.insert(ProcessPair(G4AntiHe3::De    
413   G4HadronicProcess* theAntiAlphaInelasticProc    
414     new G4HadronInelasticProcess("anti_alphaIn    
415   fProcessMap.insert(ProcessPair(G4AntiAlpha::    
416   G4HadronicProcess* theAntiLambdaInelasticPro    
417     new G4HadronInelasticProcess("anti-lambdaI    
418   fProcessMap.insert(ProcessPair(G4AntiLambda:    
419   G4HadronicProcess* theAntiSigmaMinusInelasti    
420     new G4HadronInelasticProcess("anti_sigma-I    
421   fProcessMap.insert(                             
422     ProcessPair(G4AntiSigmaMinus::Definition()    
423   G4HadronicProcess* theAntiSigmaPlusInelastic    
424     new G4HadronInelasticProcess("anti_sigma+I    
425   fProcessMap.insert(ProcessPair(G4AntiSigmaPl    
426   G4HadronicProcess* theAntiXiMinusInelasticPr    
427     new G4HadronInelasticProcess("anti_xi-Inel    
428   fProcessMap.insert(ProcessPair(G4AntiXiMinus    
429   G4HadronicProcess* theAntiXiZeroInelasticPro    
430     new G4HadronInelasticProcess("anti_xi0Inel    
431   fProcessMap.insert(ProcessPair(G4AntiXiZero:    
432   G4HadronicProcess* theAntiOmegaMinusInelasti    
433     new G4HadronInelasticProcess("anti_omega-I    
434   fProcessMap.insert(                             
435     ProcessPair(G4AntiOmegaMinus::Definition()    
436                                                   
437   G4HadronicProcess* theDPlusInelasticProcess     
438     new G4HadronInelasticProcess("D+Inelastic"    
439   fProcessMap.insert(ProcessPair(G4DMesonPlus:    
440   G4HadronicProcess* theDMinusInelasticProcess    
441     new G4HadronInelasticProcess("D-Inelastic"    
442   fProcessMap.insert(ProcessPair(G4DMesonMinus    
443   G4HadronicProcess* theDZeroInelasticProcess     
444     new G4HadronInelasticProcess("D0Inelastic"    
445   fProcessMap.insert(ProcessPair(G4DMesonZero:    
446   G4HadronicProcess* theAntiDZeroInelasticProc    
447     new G4HadronInelasticProcess("anti_D0Inela    
448   fProcessMap.insert(ProcessPair(G4AntiDMesonZ    
449   G4HadronicProcess* theDsPlusInelasticProcess    
450     new G4HadronInelasticProcess("Ds+Inelastic    
451   fProcessMap.insert(ProcessPair(G4DsMesonPlus    
452   G4HadronicProcess* theDsMinusInelasticProces    
453     new G4HadronInelasticProcess("Ds-Inelastic    
454   fProcessMap.insert(ProcessPair(G4DsMesonMinu    
455   G4HadronicProcess* theBPlusInelasticProcess     
456     new G4HadronInelasticProcess("B+Inelastic"    
457   fProcessMap.insert(ProcessPair(G4BMesonPlus:    
458   G4HadronicProcess* theBMinusInelasticProcess    
459     new G4HadronInelasticProcess("B-Inelastic"    
460   fProcessMap.insert(ProcessPair(G4BMesonMinus    
461   G4HadronicProcess* theBZeroInelasticProcess     
462     new G4HadronInelasticProcess("B0Inelastic"    
463   fProcessMap.insert(ProcessPair(G4BMesonZero:    
464   G4HadronicProcess* theAntiBZeroInelasticProc    
465     new G4HadronInelasticProcess("anti_B0Inela    
466   fProcessMap.insert(ProcessPair(G4AntiBMesonZ    
467   G4HadronicProcess* theBsZeroInelasticProcess    
468     new G4HadronInelasticProcess("Bs0Inelastic    
469   fProcessMap.insert(ProcessPair(G4BsMesonZero    
470   G4HadronicProcess* theAntiBsZeroInelasticPro    
471     new G4HadronInelasticProcess("anti_Bs0Inel    
472   fProcessMap.insert(ProcessPair(G4AntiBsMeson    
473   G4HadronicProcess* theBcPlusInelasticProcess    
474     new G4HadronInelasticProcess("Bc+Inelastic    
475   fProcessMap.insert(ProcessPair(G4BcMesonPlus    
476   G4HadronicProcess* theBcMinusInelasticProces    
477     new G4HadronInelasticProcess("Bc-Inelastic    
478   fProcessMap.insert(ProcessPair(G4BcMesonMinu    
479   G4HadronicProcess* theLambdacPlusInelasticPr    
480     new G4HadronInelasticProcess("lambda_c+Ine    
481   fProcessMap.insert(ProcessPair(G4LambdacPlus    
482   G4HadronicProcess* theAntiLambdacPlusInelast    
483     new G4HadronInelasticProcess("anti_lambda_    
484   fProcessMap.insert(                             
485     ProcessPair(G4AntiLambdacPlus::Definition(    
486   G4HadronicProcess* theXicPlusInelasticProces    
487     new G4HadronInelasticProcess("xi_c+Inelast    
488   fProcessMap.insert(ProcessPair(G4XicPlus::De    
489   G4HadronicProcess* theAntiXicPlusInelasticPr    
490     new G4HadronInelasticProcess("anti_xi_c+In    
491   fProcessMap.insert(ProcessPair(G4AntiXicPlus    
492   G4HadronicProcess* theXicZeroInelasticProces    
493     new G4HadronInelasticProcess("xi_c0Inelast    
494   fProcessMap.insert(ProcessPair(G4XicZero::De    
495   G4HadronicProcess* theAntiXicZeroInelasticPr    
496     new G4HadronInelasticProcess("anti_xi_c0In    
497   fProcessMap.insert(ProcessPair(G4AntiXicZero    
498   G4HadronicProcess* theOmegacZeroInelasticPro    
499     new G4HadronInelasticProcess("omega_c0Inel    
500   fProcessMap.insert(ProcessPair(G4OmegacZero:    
501   G4HadronicProcess* theAntiOmegacZeroInelasti    
502     new G4HadronInelasticProcess("anti_omega_c    
503   fProcessMap.insert(                             
504     ProcessPair(G4AntiOmegacZero::Definition()    
505   G4HadronicProcess* theLambdabInelasticProces    
506     new G4HadronInelasticProcess("lambda_bInel    
507   fProcessMap.insert(ProcessPair(G4Lambdab::De    
508   G4HadronicProcess* theAntiLambdabInelasticPr    
509     new G4HadronInelasticProcess("anti_lambda_    
510   fProcessMap.insert(ProcessPair(G4AntiLambdab    
511   G4HadronicProcess* theXibZeroInelasticProces    
512     new G4HadronInelasticProcess("xi_b0Inelast    
513   fProcessMap.insert(ProcessPair(G4XibZero::De    
514   G4HadronicProcess* theAntiXibZeroInelasticPr    
515     new G4HadronInelasticProcess("anti_xi_b0In    
516   fProcessMap.insert(ProcessPair(G4AntiXibZero    
517   G4HadronicProcess* theXibMinusInelasticProce    
518     new G4HadronInelasticProcess("xi_b-Inelast    
519   fProcessMap.insert(ProcessPair(G4XibMinus::D    
520   G4HadronicProcess* theAntiXibMinusInelasticP    
521     new G4HadronInelasticProcess("anti_xi_b-In    
522   fProcessMap.insert(ProcessPair(G4AntiXibMinu    
523   G4HadronicProcess* theOmegabMinusInelasticPr    
524     new G4HadronInelasticProcess("omega_b-Inel    
525   fProcessMap.insert(ProcessPair(G4OmegabMinus    
526   G4HadronicProcess* theAntiOmegabMinusInelast    
527     new G4HadronInelasticProcess("anti_omega_b    
528   fProcessMap.insert(                             
529     ProcessPair(G4AntiOmegabMinus::Definition(    
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                                                   
573   // Add the cross sections to the correspondi    
574   thePionMinusInelasticProcess->AddDataSet(the    
575   thePionPlusInelasticProcess->AddDataSet(theP    
576   theKaonMinusInelasticProcess->AddDataSet(the    
577   theKaonPlusInelasticProcess->AddDataSet(theK    
578   theKaonZeroLInelasticProcess->AddDataSet(the    
579   theKaonZeroSInelasticProcess->AddDataSet(the    
580   theProtonInelasticProcess->AddDataSet(thePro    
581   theNeutronInelasticProcess->AddDataSet(theNe    
582   theDeuteronInelasticProcess->AddDataSet(theN    
583   theTritonInelasticProcess->AddDataSet(theNuc    
584   theHe3InelasticProcess->AddDataSet(theNuclNu    
585   theAlphaInelasticProcess->AddDataSet(theNucl    
586   theIonInelasticProcess->AddDataSet(theNuclNu    
587   theLambdaInelasticProcess->AddDataSet(theHyp    
588   theSigmaMinusInelasticProcess->AddDataSet(th    
589   theSigmaPlusInelasticProcess->AddDataSet(the    
590   theXiMinusInelasticProcess->AddDataSet(theHy    
591   theXiZeroInelasticProcess->AddDataSet(theHyp    
592   theOmegaMinusInelasticProcess->AddDataSet(th    
593   theAntiProtonInelasticProcess->AddDataSet(th    
594   theAntiNeutronInelasticProcess->AddDataSet(t    
595   theAntiDeuteronInelasticProcess->AddDataSet(    
596   theAntiTritonInelasticProcess->AddDataSet(th    
597   theAntiHe3InelasticProcess->AddDataSet(theAn    
598   theAntiAlphaInelasticProcess->AddDataSet(the    
599   theAntiLambdaInelasticProcess->AddDataSet(th    
600   theAntiSigmaMinusInelasticProcess->AddDataSe    
601   theAntiSigmaPlusInelasticProcess->AddDataSet    
602   theAntiXiMinusInelasticProcess->AddDataSet(t    
603   theAntiXiZeroInelasticProcess->AddDataSet(th    
604   theAntiOmegaMinusInelasticProcess->AddDataSe    
605                                                   
606   theDPlusInelasticProcess->AddDataSet(theHype    
607   theDMinusInelasticProcess->AddDataSet(theHyp    
608   theDZeroInelasticProcess->AddDataSet(theHype    
609   theAntiDZeroInelasticProcess->AddDataSet(the    
610   theDsPlusInelasticProcess->AddDataSet(theHyp    
611   theDsMinusInelasticProcess->AddDataSet(theHy    
612   theBPlusInelasticProcess->AddDataSet(theHype    
613   theBMinusInelasticProcess->AddDataSet(theHyp    
614   theBZeroInelasticProcess->AddDataSet(theHype    
615   theAntiBZeroInelasticProcess->AddDataSet(the    
616   theBsZeroInelasticProcess->AddDataSet(theHyp    
617   theAntiBsZeroInelasticProcess->AddDataSet(th    
618   theBcPlusInelasticProcess->AddDataSet(theHyp    
619   theBcMinusInelasticProcess->AddDataSet(theHy    
620   theLambdacPlusInelasticProcess->AddDataSet(t    
621   theAntiLambdacPlusInelasticProcess->AddDataS    
622   theXicPlusInelasticProcess->AddDataSet(theHy    
623   theAntiXicPlusInelasticProcess->AddDataSet(t    
624   theXicZeroInelasticProcess->AddDataSet(theHy    
625   theAntiXicZeroInelasticProcess->AddDataSet(t    
626   theOmegacZeroInelasticProcess->AddDataSet(th    
627   theAntiOmegacZeroInelasticProcess->AddDataSe    
628   theLambdabInelasticProcess->AddDataSet(theHy    
629   theAntiLambdabInelasticProcess->AddDataSet(t    
630   theXibZeroInelasticProcess->AddDataSet(theHy    
631   theAntiXibZeroInelasticProcess->AddDataSet(t    
632   theXibMinusInelasticProcess->AddDataSet(theH    
633   theAntiXibMinusInelasticProcess->AddDataSet(    
634   theOmegabMinusInelasticProcess->AddDataSet(t    
635   theAntiOmegabMinusInelasticProcess->AddDataS    
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                                                   
650   // Register the proper hadronic model(s) to     
651   // Note: hadronic models ("BERT", "BIC", "Io    
652   //       used for the hadrons and energies t    
653   //       (exception for INCL, which in recen    
654   //        more hadron types and higher energ    
655   //       For "physics-list proxies" ("FTFP_B    
656   //       "QGSP_BIC", "FTFP_INCLXX"), all had    
657   //       by combining different hadronic mod    
658   //       to the corresponding physics lists.    
659   if (fPhysicsCase == "BIC" || fPhysicsCase ==    
660     // The BIC model is applicable to nucleons    
661     // whereas in the physics list QGSP_BIC it    
662     fPhysicsCaseIsSupported = true;               
663     theProtonInelasticProcess->RegisterMe(theB    
664     theNeutronInelasticProcess->RegisterMe(the    
665     if (fPhysicsCase == "BIC") {                  
666       thePionMinusInelasticProcess->RegisterMe    
667       thePionPlusInelasticProcess->RegisterMe(    
668     }                                             
669     else {                                        
670       thePionMinusInelasticProcess->RegisterMe    
671       thePionPlusInelasticProcess->RegisterMe(    
672     }                                             
673   }                                               
674   else if (fPhysicsCase == "INCL" || fPhysicsC    
675     // We consider here for simplicity only nu    
676     // (although recent versions of INCL can h    
677     fPhysicsCaseIsSupported = true;               
678     thePionMinusInelasticProcess->RegisterMe(t    
679     thePionPlusInelasticProcess->RegisterMe(th    
680     theProtonInelasticProcess->RegisterMe(theI    
681     theNeutronInelasticProcess->RegisterMe(the    
682   }                                               
683   if (fPhysicsCase == "IonBIC" || fPhysicsCase    
684       || fPhysicsCase == "FTFP_INCLXX" || fPhy    
685   {                                               
686     // The Binary Light Ion model is used for     
687     fPhysicsCaseIsSupported = true;               
688     theDeuteronInelasticProcess->RegisterMe(th    
689     theTritonInelasticProcess->RegisterMe(theI    
690     theHe3InelasticProcess->RegisterMe(theIonB    
691     theAlphaInelasticProcess->RegisterMe(theIo    
692     theIonInelasticProcess->RegisterMe(theIonB    
693   }                                               
694   if (fPhysicsCase == "QGSP" || fPhysicsCase =    
695     fPhysicsCaseIsSupported = true;               
696     thePionMinusInelasticProcess->RegisterMe(t    
697     thePionPlusInelasticProcess->RegisterMe(th    
698     theKaonMinusInelasticProcess->RegisterMe(t    
699     theKaonPlusInelasticProcess->RegisterMe(th    
700     theKaonZeroLInelasticProcess->RegisterMe(t    
701     theKaonZeroSInelasticProcess->RegisterMe(t    
702     theProtonInelasticProcess->RegisterMe(theQ    
703     theNeutronInelasticProcess->RegisterMe(the    
704     theLambdaInelasticProcess->RegisterMe(theQ    
705     theSigmaMinusInelasticProcess->RegisterMe(    
706     theSigmaPlusInelasticProcess->RegisterMe(t    
707     theXiMinusInelasticProcess->RegisterMe(the    
708     theXiZeroInelasticProcess->RegisterMe(theQ    
709     theOmegaMinusInelasticProcess->RegisterMe(    
710     theAntiProtonInelasticProcess->RegisterMe(    
711     theAntiNeutronInelasticProcess->RegisterMe    
712     theAntiLambdaInelasticProcess->RegisterMe(    
713     theAntiSigmaMinusInelasticProcess->Registe    
714     theAntiSigmaPlusInelasticProcess->Register    
715     theAntiXiMinusInelasticProcess->RegisterMe    
716     theAntiXiZeroInelasticProcess->RegisterMe(    
717     theAntiOmegaMinusInelasticProcess->Registe    
718     theDPlusInelasticProcess->RegisterMe(theQG    
719     theDMinusInelasticProcess->RegisterMe(theQ    
720     theDZeroInelasticProcess->RegisterMe(theQG    
721     theAntiDZeroInelasticProcess->RegisterMe(t    
722     theDsPlusInelasticProcess->RegisterMe(theQ    
723     theDsMinusInelasticProcess->RegisterMe(the    
724     theBPlusInelasticProcess->RegisterMe(theQG    
725     theBMinusInelasticProcess->RegisterMe(theQ    
726     theBZeroInelasticProcess->RegisterMe(theQG    
727     theAntiBZeroInelasticProcess->RegisterMe(t    
728     theBsZeroInelasticProcess->RegisterMe(theQ    
729     theAntiBsZeroInelasticProcess->RegisterMe(    
730     theBcPlusInelasticProcess->RegisterMe(theQ    
731     theBcMinusInelasticProcess->RegisterMe(the    
732     theLambdacPlusInelasticProcess->RegisterMe    
733     theAntiLambdacPlusInelasticProcess->Regist    
734     theXicPlusInelasticProcess->RegisterMe(the    
735     theAntiXicPlusInelasticProcess->RegisterMe    
736     theXicZeroInelasticProcess->RegisterMe(the    
737     theAntiXicZeroInelasticProcess->RegisterMe    
738     theOmegacZeroInelasticProcess->RegisterMe(    
739     theAntiOmegacZeroInelasticProcess->Registe    
740     theLambdabInelasticProcess->RegisterMe(the    
741     theAntiLambdabInelasticProcess->RegisterMe    
742     theXibZeroInelasticProcess->RegisterMe(the    
743     theAntiXibZeroInelasticProcess->RegisterMe    
744     theXibMinusInelasticProcess->RegisterMe(th    
745     theAntiXibMinusInelasticProcess->RegisterM    
746     theOmegabMinusInelasticProcess->RegisterMe    
747     theAntiOmegabMinusInelasticProcess->Regist    
748   }                                               
749   if (fPhysicsCase == "BERT" || fPhysicsCase =    
750       || fPhysicsCase == "QGSP_BERT")             
751   {                                               
752     // The BERT model is used for pions and nu    
753     fPhysicsCaseIsSupported = true;               
754     thePionMinusInelasticProcess->RegisterMe(t    
755     thePionPlusInelasticProcess->RegisterMe(th    
756     theProtonInelasticProcess->RegisterMe(theB    
757     theNeutronInelasticProcess->RegisterMe(the    
758   }                                               
759   if (fPhysicsCase == "BERT" || fPhysicsCase =    
760       || fPhysicsCase == "FTFP_INCLXX" || fPhy    
761   {                                               
762     // The BERT model is used for kaons and hy    
763     fPhysicsCaseIsSupported = true;               
764     theKaonMinusInelasticProcess->RegisterMe(t    
765     theKaonPlusInelasticProcess->RegisterMe(th    
766     theKaonZeroLInelasticProcess->RegisterMe(t    
767     theKaonZeroSInelasticProcess->RegisterMe(t    
768     theLambdaInelasticProcess->RegisterMe(theB    
769     theSigmaMinusInelasticProcess->RegisterMe(    
770     theSigmaPlusInelasticProcess->RegisterMe(t    
771     theXiMinusInelasticProcess->RegisterMe(the    
772     theXiZeroInelasticProcess->RegisterMe(theB    
773     theOmegaMinusInelasticProcess->RegisterMe(    
774   }                                               
775   if (fPhysicsCase == "FTFP" || fPhysicsCase =    
776       || fPhysicsCase == "FTFP_INCLXX" || fPhy    
777   {                                               
778     // The FTFP model is applied for all hadro    
779     // whether it is consider as a stand-alone    
780     fPhysicsCaseIsSupported = true;               
781     theAntiDeuteronInelasticProcess->RegisterM    
782     theAntiTritonInelasticProcess->RegisterMe(    
783     theAntiHe3InelasticProcess->RegisterMe(the    
784     theAntiAlphaInelasticProcess->RegisterMe(t    
785     G4TheoFSGenerator* theFTFPmodelToBeUsed =     
786     if (fPhysicsCase == "FTFP") {                 
787       theFTFPmodelToBeUsed = theFTFPmodel;        
788     }                                             
789     else if (fPhysicsCase == "QGSP_BERT" || fP    
790       theFTFPmodelToBeUsed = theFTFPmodel_cons    
791     }                                             
792     thePionMinusInelasticProcess->RegisterMe(t    
793     thePionPlusInelasticProcess->RegisterMe(th    
794     theKaonMinusInelasticProcess->RegisterMe(t    
795     theKaonPlusInelasticProcess->RegisterMe(th    
796     theKaonZeroLInelasticProcess->RegisterMe(t    
797     theKaonZeroSInelasticProcess->RegisterMe(t    
798     theProtonInelasticProcess->RegisterMe(theF    
799     theAntiProtonInelasticProcess->RegisterMe(    
800     theNeutronInelasticProcess->RegisterMe(the    
801     theAntiNeutronInelasticProcess->RegisterMe    
802     theLambdaInelasticProcess->RegisterMe(theF    
803     theAntiLambdaInelasticProcess->RegisterMe(    
804     theSigmaMinusInelasticProcess->RegisterMe(    
805     theAntiSigmaMinusInelasticProcess->Registe    
806     theSigmaPlusInelasticProcess->RegisterMe(t    
807     theAntiSigmaPlusInelasticProcess->Register    
808     theXiMinusInelasticProcess->RegisterMe(the    
809     theAntiXiMinusInelasticProcess->RegisterMe    
810     theXiZeroInelasticProcess->RegisterMe(theF    
811     theAntiXiZeroInelasticProcess->RegisterMe(    
812     theOmegaMinusInelasticProcess->RegisterMe(    
813     theAntiOmegaMinusInelasticProcess->Registe    
814     theDPlusInelasticProcess->RegisterMe(theFT    
815     theDMinusInelasticProcess->RegisterMe(theF    
816     theDZeroInelasticProcess->RegisterMe(theFT    
817     theAntiDZeroInelasticProcess->RegisterMe(t    
818     theDsPlusInelasticProcess->RegisterMe(theF    
819     theDsMinusInelasticProcess->RegisterMe(the    
820     theBPlusInelasticProcess->RegisterMe(theFT    
821     theBMinusInelasticProcess->RegisterMe(theF    
822     theBZeroInelasticProcess->RegisterMe(theFT    
823     theAntiBZeroInelasticProcess->RegisterMe(t    
824     theBsZeroInelasticProcess->RegisterMe(theF    
825     theAntiBsZeroInelasticProcess->RegisterMe(    
826     theBcPlusInelasticProcess->RegisterMe(theF    
827     theBcMinusInelasticProcess->RegisterMe(the    
828     theLambdacPlusInelasticProcess->RegisterMe    
829     theAntiLambdacPlusInelasticProcess->Regist    
830     theXicPlusInelasticProcess->RegisterMe(the    
831     theAntiXicPlusInelasticProcess->RegisterMe    
832     theXicZeroInelasticProcess->RegisterMe(the    
833     theAntiXicZeroInelasticProcess->RegisterMe    
834     theOmegacZeroInelasticProcess->RegisterMe(    
835     theAntiOmegacZeroInelasticProcess->Registe    
836     theLambdabInelasticProcess->RegisterMe(the    
837     theAntiLambdabInelasticProcess->RegisterMe    
838     theXibZeroInelasticProcess->RegisterMe(the    
839     theAntiXibZeroInelasticProcess->RegisterMe    
840     theXibMinusInelasticProcess->RegisterMe(th    
841     theAntiXibMinusInelasticProcess->RegisterM    
842     theOmegabMinusInelasticProcess->RegisterMe    
843     theAntiOmegabMinusInelasticProcess->Regist    
844     theFTFPmodelToBeUsed = theFTFPmodel_aboveT    
845     if (fPhysicsCase == "FTFP") theFTFPmodelTo    
846     theDeuteronInelasticProcess->RegisterMe(th    
847     theTritonInelasticProcess->RegisterMe(theF    
848     theHe3InelasticProcess->RegisterMe(theFTFP    
849     theAlphaInelasticProcess->RegisterMe(theFT    
850     theIonInelasticProcess->RegisterMe(theFTFP    
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   }                                               
892                                                   
893   if (!fPhysicsCaseIsSupported) {                 
894     G4cerr << "ERROR: Not supported final-stat    
895            << G4endl << "\t Re-try by choosing    
896            << "\t - Hadronic models : BERT, BI    
897            << "\t - \"Physics-list proxies\" :    
898                                                   
899            << G4endl;                             
900   }                                               
901 }                                                 
902                                                   
903 //....oooOO0OOooo........oooOO0OOooo........oo    
904                                                   
905 HadronicGenerator::~HadronicGenerator()           
906 {                                                 
907   fPartTable->DeleteAllParticles();               
908 }                                                 
909                                                   
910 //....oooOO0OOooo........oooOO0OOooo........oo    
911                                                   
912 G4bool HadronicGenerator::IsApplicable(const G    
913                                        const G    
914 {                                                 
915   G4ParticleDefinition* projectileDefinition =    
916   return IsApplicable(projectileDefinition, pr    
917 }                                                 
918                                                   
919 //....oooOO0OOooo........oooOO0OOooo........oo    
920                                                   
921 G4bool HadronicGenerator::IsApplicable(G4Parti    
922                                        const G    
923 {                                                 
924   if (projectileDefinition == nullptr) return     
925   G4bool isApplicable = true;                     
926   // No restrictions for "physics list proxies    
927   // For the individual models, instead, we ne    
928   if (fPhysicsCase == "BERT") {                   
929     // We consider BERT model below 15 GeV        
930     if (((projectileDefinition != G4PionMinus:    
931          && (projectileDefinition != G4PionPlu    
932          && (projectileDefinition != G4Proton:    
933          && (projectileDefinition != G4Neutron    
934          && (projectileDefinition != G4Lambda:    
935          && (projectileDefinition != G4SigmaMi    
936          && (projectileDefinition != G4SigmaPl    
937          && (projectileDefinition != G4XiMinus    
938          && (projectileDefinition != G4XiZero:    
939          && (projectileDefinition != G4OmegaMi    
940         || (projectileEnergy > 15.0 * CLHEP::G    
941     {                                             
942       isApplicable = false;                       
943     }                                             
944   }                                               
945   else if (fPhysicsCase == "QGSP") {              
946     // We consider QGSP above 2 GeV and not fo    
947     if (projectileEnergy < 2.0 * CLHEP::GeV ||    
948         || projectileDefinition == G4Triton::D    
949         || projectileDefinition == G4He3::Defi    
950         || projectileDefinition == G4Alpha::De    
951         || projectileDefinition == G4GenericIo    
952         || projectileDefinition == G4AntiDeute    
953         || projectileDefinition == G4AntiTrito    
954         || projectileDefinition == G4AntiHe3::    
955         || projectileDefinition == G4AntiAlpha    
956     {                                             
957       isApplicable = false;                       
958     }                                             
959   }                                               
960   else if (fPhysicsCase == "BIC" || fPhysicsCa    
961     // We consider BIC and INCL models only fo    
962     // (although in recent versions INCL is ca    
963     // and up to higher energies)                 
964     if (((projectileDefinition != G4PionMinus:    
965          && (projectileDefinition != G4PionPlu    
966          && (projectileDefinition != G4Proton:    
967          && (projectileDefinition != G4Neutron    
968         || (projectileEnergy > 10.0 * CLHEP::G    
969     {                                             
970       isApplicable = false;                       
971     }                                             
972   }                                               
973   else if (fPhysicsCase == "IonBIC") {            
974     // We consider IonBIC models only for deut    
975     // with energies below 10 GeV / nucleon       
976     if (!((projectileDefinition == G4Deuteron:    
977            && projectileEnergy < 2 * 10.0 * CL    
978           || (projectileDefinition == G4Triton    
979               && projectileEnergy < 3 * 10.0 *    
980           || (projectileDefinition == G4He3::D    
981               && projectileEnergy < 3 * 10.0 *    
982           || (projectileDefinition == G4Alpha:    
983               && projectileEnergy < 4 * 10.0 *    
984     {                                             
985       isApplicable = false;                       
986     }                                             
987   }                                               
988   return isApplicable;                            
989 }                                                 
990                                                   
991 //....oooOO0OOooo........oooOO0OOooo........oo    
992                                                   
993 G4VParticleChange* HadronicGenerator::Generate    
994                                                   
995                                                   
996                                                   
997 {                                                 
998   G4ParticleDefinition* projectileDefinition =    
999   return GenerateInteraction(projectileDefinit    
1000                              targetMaterial);    
1001 }                                                
1002                                                  
1003 //....oooOO0OOooo........oooOO0OOooo........o    
1004                                                  
1005 G4VParticleChange* HadronicGenerator::Generat    
1006   G4ParticleDefinition* projectileDefinition,    
1007   const G4ThreeVector& projectileDirection, G    
1008 {                                                
1009   // This is the most important method of the    
1010   // the method performs the specified hadron    
1011   // (by invoking the "PostStepDoIt" method o    
1012   // and returns the final state, i.e. the se    
1013   // It is a relatively short method because     
1014   // possible hadronic processes - with their    
1015   // and cross sections (the latter is needed    
1016   // the target material) - was already done     
1017   G4VParticleChange* aChange = nullptr;          
1018                                                  
1019   if (projectileDefinition == nullptr) {         
1020     G4cerr << "ERROR: projectileDefinition is    
1021     return aChange;                              
1022   }                                              
1023                                                  
1024   // Debugging print-out                         
1025   // G4cout << "\t" << projectileDefinition->    
1026   //       << "\t" << projectileEnergy/CLHEP:    
1027   //       << " GeV \t" << projectileDirectio    
1028   //       << "\t" << ( targetMaterial ? targ    
1029   if (!IsApplicable(projectileDefinition, pro    
1030     // G4cout << " -> NOT applicable !" ; //<    
1031     return aChange;                              
1032   }                                              
1033   // G4cout << G4endl;                           
1034                                                  
1035   // Check Geant4 state (not strictly needed)    
1036   // if ( ! G4StateManager::GetStateManager()    
1037   //  G4cerr << "ERROR: No possible to set G4    
1038   //  return aChange;                            
1039   //}                                            
1040                                                  
1041   // Geometry definition (not strictly needed    
1042   // const G4double dimX = 1.0*mm;               
1043   // const G4double dimY = 1.0*mm;               
1044   // const G4double dimZ = 1.0*mm;               
1045   // G4Box* sFrame = new G4Box( "Box", dimX,     
1046   // G4LogicalVolume* lFrame = new G4LogicalV    
1047   // G4PVPlacement* pFrame = new G4PVPlacemen    
1048   // G4TransportationManager::GetTransportati    
1049                                                  
1050   // Projectile track & step                     
1051   G4DynamicParticle dParticle(projectileDefin    
1052   const G4double aTime = 0.0;                    
1053   const G4ThreeVector aPosition = G4ThreeVect    
1054   G4Track* gTrack = new G4Track(&dParticle, a    
1055   G4TouchableHandle fpTouchable(new G4Touchab    
1056   gTrack->SetTouchableHandle(fpTouchable);  /    
1057   G4Step* step = new G4Step;                     
1058   step->SetTrack(gTrack);                        
1059   gTrack->SetStep(step);                         
1060   G4StepPoint* aPoint = new G4StepPoint;         
1061   aPoint->SetPosition(aPosition);                
1062   aPoint->SetMaterial(targetMaterial);           
1063   step->SetPreStepPoint(aPoint);                 
1064   dParticle.SetKineticEnergy(projectileEnergy    
1065   gTrack->SetStep(step);                         
1066   gTrack->SetKineticEnergy(projectileEnergy);    
1067                                                  
1068   // Change Geant4 state: from "PreInit" to "    
1069   // if ( ! G4StateManager::GetStateManager()    
1070   //  G4cerr << "ERROR: No possible to set G4    
1071   //  return aChange;                            
1072   //}                                            
1073                                                  
1074   // Finally, the hadronic interaction: hadro    
1075   // need to be treated slightly differently     
1076   G4HadronicProcess* theProcess = nullptr;       
1077   G4ParticleDefinition* theProjectileDef = nu    
1078   if (projectileDefinition->IsGeneralIon()) {    
1079     theProjectileDef = G4GenericIon::Definiti    
1080   }                                              
1081   else {                                         
1082     theProjectileDef = projectileDefinition;     
1083   }                                              
1084   auto mapIndex = fProcessMap.find(theProject    
1085   if (mapIndex != fProcessMap.end()) theProce    
1086   if (theProcess != nullptr) {                   
1087     aChange = theProcess->PostStepDoIt(*gTrac    
1088     //***************************************    
1089   }                                              
1090   else {                                         
1091     G4cerr << "ERROR: theProcess is nullptr !    
1092   }                                              
1093   fLastHadronicProcess = theProcess;             
1094   // delete pFrame;                              
1095   // delete lFrame;                              
1096   // delete sFrame;                              
1097                                                  
1098   return aChange;                                
1099 }                                                
1100                                                  
1101 //....oooOO0OOooo........oooOO0OOooo........o    
1102                                                  
1103 G4double HadronicGenerator::GetImpactParamete    
1104 {                                                
1105   G4double impactParameter = -999.0 * fermi;     
1106   G4HadronicProcess* hadProcess = GetHadronic    
1107   G4HadronicInteraction* hadInteraction = Get    
1108   G4HadronicInteraction* wantedHadInteraction    
1109     const_cast<G4HadronicProcess*>(hadProcess    
1110   if (hadInteraction != nullptr && hadInterac    
1111     // FTFP has handled the inelastic hadroni    
1112     G4TheoFSGenerator* theoFSGenerator = dyna    
1113     if (theoFSGenerator != nullptr) {            
1114       const G4FTFModel* ftfModel =               
1115         dynamic_cast<const G4FTFModel*>(theoF    
1116       if (ftfModel != nullptr) {                 
1117         // ftfModel points to the G4FTFModel     
1118         // inelastic hadronic interaction.       
1119         impactParameter = ftfModel->GetImpact    
1120         // G4cout << "\t impactParameter = "     
1121       }                                          
1122     }                                            
1123   }                                              
1124   return impactParameter;                        
1125 }                                                
1126                                                  
1127 //....oooOO0OOooo........oooOO0OOooo........o    
1128                                                  
1129 G4int HadronicGenerator::GetNumberOfProjectil    
1130 {                                                
1131   G4double numProjectileSpectatorNucleons = -    
1132   G4HadronicProcess* hadProcess = GetHadronic    
1133   G4HadronicInteraction* hadInteraction = Get    
1134   G4HadronicInteraction* wantedHadInteraction    
1135     const_cast<G4HadronicProcess*>(hadProcess    
1136   if (hadInteraction != nullptr && hadInterac    
1137     G4TheoFSGenerator* theoFSGenerator = dyna    
1138     if (theoFSGenerator != nullptr) {            
1139       const G4FTFModel* ftfModel =               
1140         dynamic_cast<const G4FTFModel*>(theoF    
1141       if (ftfModel != nullptr) {                 
1142         numProjectileSpectatorNucleons = ftfM    
1143         // G4cout << "\t numProjectileSpectat    
1144         //        << G4endl;                     
1145       }                                          
1146     }                                            
1147   }                                              
1148   return numProjectileSpectatorNucleons;         
1149 }                                                
1150                                                  
1151 //....oooOO0OOooo........oooOO0OOooo........o    
1152                                                  
1153 G4int HadronicGenerator::GetNumberOfTargetSpe    
1154 {                                                
1155   G4double numTargetSpectatorNucleons = -999;    
1156   G4HadronicProcess* hadProcess = GetHadronic    
1157   G4HadronicInteraction* hadInteraction = Get    
1158   G4HadronicInteraction* wantedHadInteraction    
1159     const_cast<G4HadronicProcess*>(hadProcess    
1160   if (hadInteraction != nullptr && hadInterac    
1161     G4TheoFSGenerator* theoFSGenerator = dyna    
1162     if (theoFSGenerator != nullptr) {            
1163       const G4FTFModel* ftfModel =               
1164         dynamic_cast<const G4FTFModel*>(theoF    
1165       if (ftfModel != nullptr) {                 
1166         numTargetSpectatorNucleons = ftfModel    
1167         // G4cout << "\t numTargetSpectatorNu    
1168       }                                          
1169     }                                            
1170   }                                              
1171   return numTargetSpectatorNucleons;             
1172 }                                                
1173                                                  
1174 //....oooOO0OOooo........oooOO0OOooo........o    
1175                                                  
1176 G4int HadronicGenerator::GetNumberOfNNcollisi    
1177 {                                                
1178   G4double numNNcollisions = -999;               
1179   G4HadronicProcess* hadProcess = GetHadronic    
1180   G4HadronicInteraction* hadInteraction = Get    
1181   G4HadronicInteraction* wantedHadInteraction    
1182     const_cast<G4HadronicProcess*>(hadProcess    
1183   if (hadInteraction != nullptr && hadInterac    
1184     G4TheoFSGenerator* theoFSGenerator = dyna    
1185     if (theoFSGenerator != nullptr) {            
1186       const G4FTFModel* ftfModel =               
1187         dynamic_cast<const G4FTFModel*>(theoF    
1188       if (ftfModel != nullptr) {                 
1189         numNNcollisions = ftfModel->GetNumber    
1190         // G4cout << "\t numNNcollisions = "     
1191       }                                          
1192     }                                            
1193   }                                              
1194   return numNNcollisions;                        
1195 }                                                
1196                                                  
1197 //....oooOO0OOooo........oooOO0OOooo........o    
1198