Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/global/management/src/G4PhysicsModelCatalog.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 /global/management/src/G4PhysicsModelCatalog.cc (Version 11.3.0) and /global/management/src/G4PhysicsModelCatalog.cc (Version 11.2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // G4PhysicsModelCatalog class implementation      26 // G4PhysicsModelCatalog class implementation
 27 //                                                 27 //
 28 // Author: M.Asai (SLAC), 26 September 2013        28 // Author: M.Asai (SLAC), 26 September 2013
 29 //                                                 29 //
 30 // Revised in August 2021 by A.Ribon (CERN).       30 // Revised in August 2021 by A.Ribon (CERN).
 31 // -------------------------------------------     31 // --------------------------------------------------------------------------
 32                                                    32 
 33 #include "G4PhysicsModelCatalog.hh"                33 #include "G4PhysicsModelCatalog.hh"
 34 #include "G4Threading.hh"                          34 #include "G4Threading.hh"
 35                                                    35 
 36 G4bool G4PhysicsModelCatalog::isInitialized =      36 G4bool G4PhysicsModelCatalog::isInitialized = false;
 37 std::vector< G4int >*    G4PhysicsModelCatalog     37 std::vector< G4int >*    G4PhysicsModelCatalog::theVectorOfModelIDs   = nullptr;
 38 std::vector< G4String >* G4PhysicsModelCatalog     38 std::vector< G4String >* G4PhysicsModelCatalog::theVectorOfModelNames = nullptr;
 39                                                    39 
 40 // -------------------------------------------     40 // --------------------------------------------------------------------------
 41 void G4PhysicsModelCatalog::Initialize() {         41 void G4PhysicsModelCatalog::Initialize() {
 42   if(isInitialized)                                42   if(isInitialized)
 43   {                                                43   {
 44     return;                                        44     return;
 45   }                                                45   }
 46   if ( theVectorOfModelIDs == nullptr  &&  the     46   if ( theVectorOfModelIDs == nullptr  &&  theVectorOfModelNames == nullptr ) {
 47     static std::vector< G4int > aVectorOfInts;     47     static std::vector< G4int > aVectorOfInts;
 48     theVectorOfModelIDs = &aVectorOfInts;          48     theVectorOfModelIDs = &aVectorOfInts;
 49     static std::vector< G4String > aVectorOfSt     49     static std::vector< G4String > aVectorOfStrings;
 50     theVectorOfModelNames = &aVectorOfStrings;     50     theVectorOfModelNames = &aVectorOfStrings;
 51                                                    51 
 52     // NOTE:                                       52     // NOTE:
 53     // The goal is that, starting from Geant4      53     // The goal is that, starting from Geant4 version 11.0, all the three
 54     // identifiers (modelID, index, name) rema     54     // identifiers (modelID, index, name) remain the same regardless of the
 55     // physics list, application, and version      55     // physics list, application, and version of Geant4.
 56     // Therefore, after Geant4 11.0, you can o     56     // Therefore, after Geant4 11.0, you can only add an entry - e.g. when
 57     // a new model is added, or when a pre-exi     57     // a new model is added, or when a pre-existing model not yet present
 58     // in this catalogue is included - at the      58     // in this catalogue is included - at the bottom of this method
 59     // (rather than inserting it in the middle     59     // (rather than inserting it in the middle), and do NOT delete anything.
 60     //                                             60     //
 61     // For the modelID values, these are the c     61     // For the modelID values, these are the considerations and choices made:
 62     // - Values below 1000 are excluded becaus     62     // - Values below 1000 are excluded because reserved to process and
 63     //   sub-process ID values.                    63     //   sub-process ID values.
 64     // - Whenever resonable, modelID values sh     64     // - Whenever resonable, modelID values should have free spaces between
 65     //   them, to allow for eventual, future v     65     //   them, to allow for eventual, future variants - e.g. different
 66     //   tunings of the same model - to keep m     66     //   tunings of the same model - to keep modelID values close to the
 67     //   original model.                           67     //   original model.
 68     // - modelID values are between 10'000 and     68     // - modelID values are between 10'000 and 39'999, with the following
 69     //   subdivision in 3 categories (identifi     69     //   subdivision in 3 categories (identified by the most significant
 70     //   digit):                                   70     //   digit):
 71     //   *  Values between 10'000 and 19'999 a     71     //   *  Values between 10'000 and 19'999 are for EM models
 72     //   *  Values between 20'000 and 29'999 a     72     //   *  Values between 20'000 and 29'999 are for HAD models
 73     //   *  Values between 30'000 and 39'999 a     73     //   *  Values between 30'000 and 39'999 are for all the other models
 74     //      (i.e. included neither in EM model     74     //      (i.e. included neither in EM models nor in HAD models).
 75     //   Note that larger values of modelID ar     75     //   Note that larger values of modelID are neither more difficult to
 76     //   handle nor less computing performant      76     //   handle nor less computing performant with respect to smaller values
 77     //   (we remind that, for plotting, the in     77     //   (we remind that, for plotting, the index of the model, rather than
 78     //    its modelID, should be conveniently      78     //    its modelID, should be conveniently used, whereas for all the rest
 79     //    the modelID is recommended).             79     //    the modelID is recommended).
 80                                                    80     
 81     // =======================================     81     // =======================================================================
 82     // ================= 1st EM MODELS : from      82     // ================= 1st EM MODELS : from 10'000 to 19'999 ===============
 83     // =======================================     83     // =======================================================================
 84                                                    84 
 85     InsertModel( 10000, "model_EM" );              85     InsertModel( 10000, "model_EM" );
 86                                                    86     
 87     // e- production                               87     // e- production
 88     InsertModel( 10010, "model_DeltaElectron"      88     InsertModel( 10010, "model_DeltaElectron" );
 89     InsertModel( 10011, "model_DeltaEBelowCut"     89     InsertModel( 10011, "model_DeltaEBelowCut" );
 90     InsertModel( 10012, "model_PhotoElectron"      90     InsertModel( 10012, "model_PhotoElectron" );
 91     InsertModel( 10013, "model_ComptonElectron     91     InsertModel( 10013, "model_ComptonElectron" );
 92     InsertModel( 10014, "model_TripletElectron     92     InsertModel( 10014, "model_TripletElectron" );
 93                                                    93 
 94     // gamma production                            94     // gamma production
 95     InsertModel( 10020, "model_Bremsstrahlung"     95     InsertModel( 10020, "model_Bremsstrahlung" );
 96     InsertModel( 10021, "model_SplitBremsstrah     96     InsertModel( 10021, "model_SplitBremsstrahlung" );
 97     InsertModel( 10022, "model_ComptonGamma" )     97     InsertModel( 10022, "model_ComptonGamma" );
 98     InsertModel( 10023, "model_Annihilation" )     98     InsertModel( 10023, "model_Annihilation" );
 99     InsertModel( 10024, "model_TripletGamma" )     99     InsertModel( 10024, "model_TripletGamma" );
100     InsertModel( 10025, "model_GammaGammaEntan    100     InsertModel( 10025, "model_GammaGammaEntanglement" );
101                                                   101 
102     // e+e- pair production                       102     // e+e- pair production
103     InsertModel( 10030, "model_EplusEminisPair    103     InsertModel( 10030, "model_EplusEminisPair" );
104                                                   104 
105     // atomic de-excitation                       105     // atomic de-excitation
106     InsertModel( 10040, "model_Fluorescence" )    106     InsertModel( 10040, "model_Fluorescence" );
107     InsertModel( 10041, "model_gammaPIXE" );      107     InsertModel( 10041, "model_gammaPIXE" );
108     InsertModel( 10050, "model_AugerElectron"     108     InsertModel( 10050, "model_AugerElectron" );
109     InsertModel( 10051, "model_ePIXE" );          109     InsertModel( 10051, "model_ePIXE" );
110                                                   110 
111     // recoil ions                                111     // recoil ions
112     InsertModel( 10060, "model_IonRecoil" );      112     InsertModel( 10060, "model_IonRecoil" );
113                                                   113 
114     // DNA models                                 114     // DNA models
115     InsertModel( 11000, "model_DNA" );            115     InsertModel( 11000, "model_DNA" );
116     InsertModel( 11001, "model_Ritchie1994eSol    116     InsertModel( 11001, "model_Ritchie1994eSolvation" );
117     InsertModel( 11002, "model_Terrisol1990eSo    117     InsertModel( 11002, "model_Terrisol1990eSolvation" );
118     InsertModel( 11003, "model_Meesungnoen2002    118     InsertModel( 11003, "model_Meesungnoen2002eSolvation" );
119     InsertModel( 11004, "model_Kreipl2009eSolv    119     InsertModel( 11004, "model_Kreipl2009eSolvation" );
120     InsertModel( 11005, "model_MeesungnoenSoli    120     InsertModel( 11005, "model_MeesungnoenSolid2002eSolvation" );
121                                                   121 
122     // =======================================    122     // =======================================================================
123     // ============= 2nd HADRONIC MODELS : fro    123     // ============= 2nd HADRONIC MODELS : from 20'000 to 29'999 =============
124     // =======================================    124     // =======================================================================
125                                                   125 
126     // ---------------------------------------    126     // ----------------------------------------------------------
127     // --- Gamma- , Lepto- , Neutrino-nuclear     127     // --- Gamma- , Lepto- , Neutrino-nuclear : 20'000-20'999 ---
128     // ---------------------------------------    128     // ----------------------------------------------------------
129     //    -  20'000 - 20'099 : Electromagnetic    129     //    -  20'000 - 20'099 : Electromagnetic dissociation models
130     //    -  20'100 - 20'199 : Gamma-nuclear m    130     //    -  20'100 - 20'199 : Gamma-nuclear models
131     //    -  20'200 - 20-299 : Electron/positr    131     //    -  20'200 - 20-299 : Electron/positron-nuclear models
132     //    -  20'300 - 20'399 : Muon-nuclear mo    132     //    -  20'300 - 20'399 : Muon-nuclear models
133     //    -  20'400 - 20'499 : Tau-nuclear mod    133     //    -  20'400 - 20'499 : Tau-nuclear models
134     //    -  20'500 - 20'999 : Neutrino models    134     //    -  20'500 - 20'999 : Neutrino models...
135     //    ...                                     135     //    ...
136                                                   136 
137     // --- EM dissociation models: 20'000 - 20    137     // --- EM dissociation models: 20'000 - 20'099 ---
138                                                   138 
139     // Class G4EMDissociation                     139     // Class G4EMDissociation
140     InsertModel( 20000, "model_projectileEMDis    140     InsertModel( 20000, "model_projectileEMDissociation" );
141     InsertModel( 20001, "model_targetEMDissoci    141     InsertModel( 20001, "model_targetEMDissociation" );
142                                                   142 
143     // --- Gamma-nuclear models: 20'100 - 20'1    143     // --- Gamma-nuclear models: 20'100 - 20'199 ---
144                                                   144 
145     // Class G4LENDorBERTModel                    145     // Class G4LENDorBERTModel
146     InsertModel( 20100, "model_LENDorBERTModel    146     InsertModel( 20100, "model_LENDorBERTModel" );
147                                                   147 
148     // Class G4LowEGammaNuclearModel              148     // Class G4LowEGammaNuclearModel
149     InsertModel( 20150, "model_GammaNPreco" );    149     InsertModel( 20150, "model_GammaNPreco" );
150                                                   150 
151     // --- Charged-lepton - nuclear models: 20    151     // --- Charged-lepton - nuclear models: 20'200 - 20'499 ---
152                                                   152     
153     // Class G4ElectroVDNuclearModel              153     // Class G4ElectroVDNuclearModel
154     InsertModel( 20200, "model_G4ElectroVDNucl    154     InsertModel( 20200, "model_G4ElectroVDNuclearModel" );
155                                                   155     
156     // Class G4MuonVDNuclearModel                 156     // Class G4MuonVDNuclearModel
157     InsertModel( 20300, "model_G4MuonVDNuclear    157     InsertModel( 20300, "model_G4MuonVDNuclearModel" );
158                                                   158 
159     // --- Neutrino models: 20'500 - 20'999 --    159     // --- Neutrino models: 20'500 - 20'999 ---
160                                                   160     
161     // Class G4NeutrinoElectronCcModel            161     // Class G4NeutrinoElectronCcModel
162     InsertModel( 20510, "model_nu-e-inelastic"    162     InsertModel( 20510, "model_nu-e-inelastic" );
163                                                   163 
164     // Class G4NeutrinoNucleusModel               164     // Class G4NeutrinoNucleusModel
165     InsertModel( 20520, "model_neutrino-nucleu    165     InsertModel( 20520, "model_neutrino-nucleus" );
166                                                   166     
167     // The following classes derives from G4Ne    167     // The following classes derives from G4NeutrinoNucleusModel
168     // Class G4ANuElNucleusCcModel                168     // Class G4ANuElNucleusCcModel
169     InsertModel( 20530, "model_ANuElNuclCcMode    169     InsertModel( 20530, "model_ANuElNuclCcModel" );
170     // Class G4ANuElNucleusNcModel                170     // Class G4ANuElNucleusNcModel
171     InsertModel( 20540, "model_ANuElNuclNcMode    171     InsertModel( 20540, "model_ANuElNuclNcModel" );
172     // Class G4ANuMuNucleusCcModel                172     // Class G4ANuMuNucleusCcModel
173     InsertModel( 20550, "model_ANuMuNuclCcMode    173     InsertModel( 20550, "model_ANuMuNuclCcModel" );
174     // Class G4ANuMuNucleusNcModel                174     // Class G4ANuMuNucleusNcModel
175     InsertModel( 20560, "model_ANuMuNuclNcMode    175     InsertModel( 20560, "model_ANuMuNuclNcModel" );
176     // Class G4NuElNucleusCcModel                 176     // Class G4NuElNucleusCcModel
177     InsertModel( 20570, "model_NuElNuclCcModel    177     InsertModel( 20570, "model_NuElNuclCcModel" );
178     // Class G4NuElNucleusNcModel                 178     // Class G4NuElNucleusNcModel
179     InsertModel( 20580, "model_NuElNuclNcModel    179     InsertModel( 20580, "model_NuElNuclNcModel" );
180     // Class G4NuMuNucleusCcModel                 180     // Class G4NuMuNucleusCcModel
181     InsertModel( 20590, "model_NuMuNuclCcModel    181     InsertModel( 20590, "model_NuMuNuclCcModel" );
182     // Class G4NuMuNucleusNcModel                 182     // Class G4NuMuNucleusNcModel
183     InsertModel( 20600, "model_NuMuNuclNcModel    183     InsertModel( 20600, "model_NuMuNuclNcModel" );
184                                                   184     
185     // ---------------------------------------    185     // ------------------------------------------------------------------------------------------
186     // --- Elastic, Charge-Exchange, Quasi-Ela    186     // --- Elastic, Charge-Exchange, Quasi-Elastic, specialized Diffraction : 21'000 - 21'999 ---
187     // ---------------------------------------    187     // ------------------------------------------------------------------------------------------
188     //    -  21'000 - 21'199 : Elastic            188     //    -  21'000 - 21'199 : Elastic
189     //    -  21'200 - 21'299 : Charge-Exchange    189     //    -  21'200 - 21'299 : Charge-Exchange
190     //    -  21'300 - 21'499 : Quasi-Elastic      190     //    -  21'300 - 21'499 : Quasi-Elastic
191     //    -  21'500 - 21'999 : specialized Dif    191     //    -  21'500 - 21'999 : specialized Diffraction generators
192     // ---------------------------------------    192     // -----------------------------------------------------------
193                                                   193 
194     // --- Elastic models: 21'000 - 21'199 ---    194     // --- Elastic models: 21'000 - 21'199 ---
195                                                   195     
196     // Class G4HadronElastic                      196     // Class G4HadronElastic
197     InsertModel( 21000, "model_hElasticLHEP" )    197     InsertModel( 21000, "model_hElasticLHEP" );
198     // Class G4AntiNuclElastic                    198     // Class G4AntiNuclElastic
199     InsertModel( 21010, "model_AntiAElastic" )    199     InsertModel( 21010, "model_AntiAElastic" );
200     // Class G4ChipsElasticModel                  200     // Class G4ChipsElasticModel
201     InsertModel( 21020, "model_hElasticCHIPS"     201     InsertModel( 21020, "model_hElasticCHIPS" );
202     // Class G4DiffuseElastic                     202     // Class G4DiffuseElastic
203     InsertModel( 21030, "model_DiffuseElastic"    203     InsertModel( 21030, "model_DiffuseElastic" );
204     // Class G4DiffuseElasticV2                   204     // Class G4DiffuseElasticV2
205     InsertModel( 21040, "model_DiffuseElasticV    205     InsertModel( 21040, "model_DiffuseElasticV2" );
206     // Class G4NuclNuclDiffuseElastic             206     // Class G4NuclNuclDiffuseElastic
207     InsertModel( 21050, "model_NNDiffuseElasti    207     InsertModel( 21050, "model_NNDiffuseElastic" );
208     // Class G4ElasticHadrNucleusHE               208     // Class G4ElasticHadrNucleusHE
209     InsertModel( 21060, "model_hElasticGlauber    209     InsertModel( 21060, "model_hElasticGlauber" );
210     // Class G4hhElastic                          210     // Class G4hhElastic
211     InsertModel( 21070, "model_HadrHadrElastic    211     InsertModel( 21070, "model_HadrHadrElastic" );
212     // Class G4LowEHadronElastic                  212     // Class G4LowEHadronElastic
213     InsertModel( 21080, "model_hLowEElastic" )    213     InsertModel( 21080, "model_hLowEElastic" );
214     // Class G4LEHadronProtonElastic              214     // Class G4LEHadronProtonElastic
215     InsertModel( 21090, "model_G4LEHadronProto    215     InsertModel( 21090, "model_G4LEHadronProtonElastic" );
216     // Class G4LEnp                               216     // Class G4LEnp
217     InsertModel( 21100, "model_G4LEnp" );         217     InsertModel( 21100, "model_G4LEnp" );
218     // Class G4LEpp                               218     // Class G4LEpp
219     InsertModel( 21110, "model_G4LEpp" );         219     InsertModel( 21110, "model_G4LEpp" );
220     // Class G4NeutronElectronElModel             220     // Class G4NeutronElectronElModel
221     InsertModel( 21120, "model_n-e-elastic" );    221     InsertModel( 21120, "model_n-e-elastic" );
222     // Class G4NeutrinoElectronNcModel            222     // Class G4NeutrinoElectronNcModel
223     InsertModel( 21130, "model_nu-e-elastic" )    223     InsertModel( 21130, "model_nu-e-elastic" );
224                                                   224     
225     // --- Charge exchange : 21'200 - 21'299 -    225     // --- Charge exchange : 21'200 - 21'299 ---
226                                                   226     
227     // Class: G4ChargeExchange                    227     // Class: G4ChargeExchange
228     InsertModel( 21200, "model_ChargeExchange"    228     InsertModel( 21200, "model_ChargeExchange" );
229                                                   229 
230     // --- Quasi-Elastic : 21'300 - 21'499 ---    230     // --- Quasi-Elastic : 21'300 - 21'499 ---
231                                                   231     
232     // Class: G4QuasiElasticChannel (which use    232     // Class: G4QuasiElasticChannel (which uses Chips's model G4QuasiElRatios)
233     InsertModel( 21300, "model_QuasiElastic" )    233     InsertModel( 21300, "model_QuasiElastic" );
234                                                   234 
235     // --- Special diffraction generators : 21    235     // --- Special diffraction generators : 21'500 - 21'999 ---
236                                                   236     
237     // Class: G4LMsdGenerator                     237     // Class: G4LMsdGenerator
238     InsertModel( 21500, "model_LMsdGenerator"     238     InsertModel( 21500, "model_LMsdGenerator" );
239                                                   239 
240     // ---------------------------------------    240     // -----------------------------------------------------------------
241     // --- High energy-models (e.g. string mod    241     // --- High energy-models (e.g. string models) : 22'000 - 22'999 ---
242     // ---------------------------------------    242     // -----------------------------------------------------------------
243     //    -  22'000 - 22'099 : G4TheoFSGenerat    243     //    -  22'000 - 22'099 : G4TheoFSGenerator
244     //    -  22'100 - 22'199 : FTF                244     //    -  22'100 - 22'199 : FTF
245     //    -  22'200 - 22'299 : QGS                245     //    -  22'200 - 22'299 : QGS
246     //    -  ...                                  246     //    -  ...
247     // For gamma         - nuclear : QGS strin    247     // For gamma         - nuclear : QGS string formation + QGS  string fragmentation + Precompound
248     // For e-/e+/mu-/mu+ - nuclear : FTF strin    248     // For e-/e+/mu-/mu+ - nuclear : FTF string formation + Lund string fragmentation + Precompound
249     InsertModel( 22000, "model_TheoFSGenerator    249     InsertModel( 22000, "model_TheoFSGenerator" );
250     // FTF string formation + Lund string frag    250     // FTF string formation + Lund string fragmentation + Precompound
251     InsertModel( 22100, "model_FTFP" );           251     InsertModel( 22100, "model_FTFP" );
252     // FTF string formation + Lund string frag    252     // FTF string formation + Lund string fragmentation + Binary Cascade
253     InsertModel( 22150, "model_FTFB" );           253     InsertModel( 22150, "model_FTFB" );
254     // FTF string formation + QGS string fragm    254     // FTF string formation + QGS string fragmentation + Precompound
255     InsertModel( 22175, "model_FTFQGSP" );        255     InsertModel( 22175, "model_FTFQGSP" );
256     // QGS string formation + QGS string fragm    256     // QGS string formation + QGS string fragmentation + Precompound
257     InsertModel( 22200, "model_QGSP" );           257     InsertModel( 22200, "model_QGSP" );
258     // QGS string formation + QGS string fragm    258     // QGS string formation + QGS string fragmentation + Binary Cascade
259     InsertModel( 22250, "model_QGSB" );           259     InsertModel( 22250, "model_QGSB" );
260                                                   260 
261     // ---------------------------------------    261     // ----------------------------------------------------
262     // --- Intermediate energy models : 23'000    262     // --- Intermediate energy models : 23'000 - 23'999 ---
263     // ---------------------------------------    263     // ----------------------------------------------------
264     //    -  23'000 - 23'099 : BERT               264     //    -  23'000 - 23'099 : BERT
265     //    -  23'100 - 23'199 : BIC                265     //    -  23'100 - 23'199 : BIC
266     //    -  23'200 - 23'299 : INCL               266     //    -  23'200 - 23'299 : INCL
267     //    -  23'300 - 23'399 : QMD                267     //    -  23'300 - 23'399 : QMD
268     //    ...                                     268     //    ...
269     // Class: G4CascadeInterface                  269     // Class: G4CascadeInterface
270     InsertModel( 23000, "model_BertiniCascade"    270     InsertModel( 23000, "model_BertiniCascade" );
271                                                   271 
272     // The names are similar, but not identica    272     // The names are similar, but not identical, to those before Geant4 11.
273     // Class: G4BinaryCascade                     273     // Class: G4BinaryCascade
274     InsertModel( 23100, "model_G4BinaryCascade    274     InsertModel( 23100, "model_G4BinaryCascade" );
275     // Class: G4BinaryLightIonReaction            275     // Class: G4BinaryLightIonReaction
276     InsertModel( 23110, "model_G4BinaryLightIo    276     InsertModel( 23110, "model_G4BinaryLightIonReaction" );
277                                                   277 
278     // Class: G4INCLXXInterface                   278     // Class: G4INCLXXInterface
279     InsertModel( 23200, "model_INCLXXCascade"     279     InsertModel( 23200, "model_INCLXXCascade" );
280                                                   280 
281     // Class: G4QMDReaction                       281     // Class: G4QMDReaction
282     InsertModel( 23300, "model_QMDModel" );       282     InsertModel( 23300, "model_QMDModel" );
283                                                   283 
284     // ---------------------------------------    284     // --------------------------------------------------------------
285     // --- Pre-equilibrium/De-excitation model    285     // --- Pre-equilibrium/De-excitation models : 24'000 - 24'999 ---
286     // ---------------------------------------    286     // --------------------------------------------------------------
287     //    -  Pre-equilibrium : 24'000 - 24'099    287     //    -  Pre-equilibrium : 24'000 - 24'099
288     //       *  24'000 - 24'049 : precompound     288     //       *  24'000 - 24'049 : precompound
289     //       *  24'050 - 24'099 : internal BER    289     //       *  24'050 - 24'099 : internal BERT pre-equilibrium
290     //    -  de-excitation : 24'100 - 24'999      290     //    -  de-excitation : 24'100 - 24'999
291     //       *  24'100 - 24'149 : Evaporation     291     //       *  24'100 - 24'149 : Evaporation
292     //       *  24'150 - 24'199 : Photon evapo    292     //       *  24'150 - 24'199 : Photon evaporation
293     //       *  24'200 - 24'299 : GEM evaporat    293     //       *  24'200 - 24'299 : GEM evaporation
294     //       *  24'300 - 24'349 : Fermi BreakU    294     //       *  24'300 - 24'349 : Fermi BreakUp
295     //       *  24'350 - 24'399 : Multifragmen    295     //       *  24'350 - 24'399 : Multifragmentation
296     //       *  24'400 - 24'449 : Ablation        296     //       *  24'400 - 24'449 : Ablation
297     //       *  24'450 - 24'499 : Fission         297     //       *  24'450 - 24'499 : Fission
298     //       *  24'500 - 24'599 : ABLA            298     //       *  24'500 - 24'599 : ABLA
299     //       *  24'600 - 24'699 : internal BER    299     //       *  24'600 - 24'699 : internal BERT de-excitation
300     //       ...                                  300     //       ...
301                                                   301 
302     // --- Pre-equilibrium: 24'000 - 24'099 --    302     // --- Pre-equilibrium: 24'000 - 24'099 ---
303                                                   303 
304     // Class: G4PreCompoundModel                  304     // Class: G4PreCompoundModel
305     InsertModel( 24000, "model_PRECO" );          305     InsertModel( 24000, "model_PRECO" );
306                                                   306 
307     // Class: G4LowEIonFragmentation              307     // Class: G4LowEIonFragmentation
308     InsertModel( 24010, "model_LowEIonPreco" )    308     InsertModel( 24010, "model_LowEIonPreco" );
309                                                   309 
310     // Class: G4NonEquilibriumEvaporator (i.e.    310     // Class: G4NonEquilibriumEvaporator (i.e. BERT pre-equilibrium)
311     InsertModel( 24050, "model_G4NonEquilibriu    311     InsertModel( 24050, "model_G4NonEquilibriumEvaporator" );
312                                                   312 
313     // --- De-excitation: 24'100 - 24'999 ---     313     // --- De-excitation: 24'100 - 24'999 ---
314                                                   314 
315     //     --- Evaporation: 24'100-  24'149 --    315     //     --- Evaporation: 24'100-  24'149 ---
316                                                   316     
317     // Class: G4EvaporationChannel                317     // Class: G4EvaporationChannel
318     InsertModel( 24100, "model_G4EvaporationCh    318     InsertModel( 24100, "model_G4EvaporationChannel" );
319                                                   319 
                                                   >> 320     // Classes that use it: G4NeutronRadCapture and G4ExcitationHandler
                                                   >> 321     InsertModel( 24110, "model_e-InternalConversion" );
                                                   >> 322     
320     // Class: G4UnstableFragmentBreakUp           323     // Class: G4UnstableFragmentBreakUp
321     InsertModel( 24120, "model_G4UnstableFragm    324     InsertModel( 24120, "model_G4UnstableFragmentBreakUp" );
322                                                   325 
323     //     --- Photon-Evaporation: 24'150 - 24    326     //     --- Photon-Evaporation: 24'150 - 24'199 ---
324                                                   327     
325     // Class: G4PhotonEvaporation                 328     // Class: G4PhotonEvaporation
326     InsertModel( 24150, "model_G4PhotonEvapora    329     InsertModel( 24150, "model_G4PhotonEvaporation" );
327                                                   330     
328     // Class: G4NeutronRadCapture                 331     // Class: G4NeutronRadCapture
329     InsertModel( 24160, "model_nRadCapture" );    332     InsertModel( 24160, "model_nRadCapture" );
330                                                   333 
331     //     --- GEM evaporation : 24'200 - 24'2    334     //     --- GEM evaporation : 24'200 - 24'299 ---
332                                                   335     
333     // Class: G4GEMChannel                        336     // Class: G4GEMChannel
334     InsertModel( 24200, "model_G4GEMChannel" )    337     InsertModel( 24200, "model_G4GEMChannel" );
335                                                   338     
336     // Class: G4GEMChannelVI                      339     // Class: G4GEMChannelVI
337     InsertModel( 24210, "model_G4GEMChannelVI"    340     InsertModel( 24210, "model_G4GEMChannelVI" );
338                                                   341     
339     //     --- Fermi BreakUp : 24'300 - 24'349    342     //     --- Fermi BreakUp : 24'300 - 24'349 ---
340                                                   343     
341     // Class: G4FermiBreakUpVI                    344     // Class: G4FermiBreakUpVI
342     InsertModel( 24300, "model_G4FermiBreakUpV    345     InsertModel( 24300, "model_G4FermiBreakUpVI" );
343                                                   346     
344     //     --- Multifragmentation : 24'350 - 2    347     //     --- Multifragmentation : 24'350 - 24'399 ---
345                                                   348     
346     // Class: G4StatMF                            349     // Class: G4StatMF
347     InsertModel( 24350, "model_G4StatMF" );       350     InsertModel( 24350, "model_G4StatMF" );
348                                                   351 
349     //     --- Ablation : 24'400 - 24'449 ---     352     //     --- Ablation : 24'400 - 24'449 ---
350                                                   353     
351     // Class: G4WilsonAblationModel               354     // Class: G4WilsonAblationModel
352     InsertModel( 24400, "model_G4WilsonAblatio    355     InsertModel( 24400, "model_G4WilsonAblationModel" );
353                                                   356 
354     //     --- Fission : 24'450 - 24'499 ---      357     //     --- Fission : 24'450 - 24'499 ---
355                                                   358   
356     // Class: G4CompetitiveFission                359     // Class: G4CompetitiveFission
357     InsertModel( 24450, "model_G4CompetitiveFi    360     InsertModel( 24450, "model_G4CompetitiveFission" );
358                                                   361 
359     //     --- ABLA : 24'500 - 24'599 ---         362     //     --- ABLA : 24'500 - 24'599 ---
360                                                   363 
361     // Class: G4AblaInterface                     364     // Class: G4AblaInterface
362     InsertModel( 24500, "model_ABLA" );           365     InsertModel( 24500, "model_ABLA" );
363                                                   366     
364     //     --- internal BERT de-excitation : 2    367     //     --- internal BERT de-excitation : 24'600 - 24'699 ---
365                                                   368     
366     // Class: G4EquilibriumEvaporator             369     // Class: G4EquilibriumEvaporator
367     InsertModel( 24600, "model_G4EquilibriumEv    370     InsertModel( 24600, "model_G4EquilibriumEvaporator" );
368                                                   371 
369     //     --- Other types of de-excitation :     372     //     --- Other types of de-excitation : 24'700 - 24'999 ---
370                                                   373 
371     //     ...                                    374     //     ...
372                                                   375     
373     // ---------------------------------------    376     // ------------------------------------------------
374     // --- Low-energy data-driven : 25'000 - 2    377     // --- Low-energy data-driven : 25'000 - 25'999 ---
375     // ---------------------------------------    378     // ------------------------------------------------
376     //    -  25'000 - 25'199 : ParticleHP         379     //    -  25'000 - 25'199 : ParticleHP
377     //    -  25'200 - 25'299 : LEND            << 380     //    -  25'200 - 25'200 : LEND
378     //       ...                                  381     //       ...
379     //    -  25'500 - 25'999 : RadioactiveDeca    382     //    -  25'500 - 25'999 : RadioactiveDecay
380                                                   383 
381     // --- ParticleHP : 25'000 - 25'199 ---       384     // --- ParticleHP : 25'000 - 25'199 ---
382                                                   385     
383     // Classes: G4ParticleHPCapture , G4Partic    386     // Classes: G4ParticleHPCapture , G4ParticleHPCaptureFS
384     InsertModel( 25000, "model_NeutronHPCaptur    387     InsertModel( 25000, "model_NeutronHPCapture" );
385                                                   388 
386     // Classes: G4ParticleHPElastic , G4Partic    389     // Classes: G4ParticleHPElastic , G4ParticleHPElasticFS
387     InsertModel( 25010, "model_NeutronHPElasti    390     InsertModel( 25010, "model_NeutronHPElastic" );
388                                                   391 
389     // Classes: G4ParticleHPFission , G4Partic    392     // Classes: G4ParticleHPFission , G4ParticleHPFissionFS , G4WendtFissionFragmentGenerator
390     InsertModel( 25020, "model_NeutronHPFissio    393     InsertModel( 25020, "model_NeutronHPFission" );
391                                                   394 
392     // Inelastic: the following classes inheri    395     // Inelastic: the following classes inherit from either G4ParticleHPInelasticBaseFS or
393     //            G4ParticleHPInelasticCompFS,    396     //            G4ParticleHPInelasticCompFS, which in turn inherit from G4ParticleHPFinalState
394                                                   397 
395     // Class G4ParticleHPNInelasticFS             398     // Class G4ParticleHPNInelasticFS
396     InsertModel( 25030, "model_G4ParticleHPNIn    399     InsertModel( 25030, "model_G4ParticleHPNInelasticFS_F01" );
397     // Class model_G4ParticleHPNXInelasticFS      400     // Class model_G4ParticleHPNXInelasticFS
398     InsertModel( 25031, "model_G4ParticleHPNXI    401     InsertModel( 25031, "model_G4ParticleHPNXInelasticFS_F02" );
399     // Class G4ParticleHP2NDInelasticFS           402     // Class G4ParticleHP2NDInelasticFS
400     InsertModel( 25032, "model_G4ParticleHP2ND    403     InsertModel( 25032, "model_G4ParticleHP2NDInelasticFS_F03" );
401     // Class G4ParticleHP2NInelasticFS            404     // Class G4ParticleHP2NInelasticFS
402     InsertModel( 25033, "model_G4ParticleHP2NI    405     InsertModel( 25033, "model_G4ParticleHP2NInelasticFS_F04" );
403     // Class G4ParticleHP3NInelasticFS            406     // Class G4ParticleHP3NInelasticFS
404     InsertModel( 25034, "model_G4ParticleHP3NI    407     InsertModel( 25034, "model_G4ParticleHP3NInelasticFS_F05" );
405     // Class G4ParticleHPNAInelasticFS            408     // Class G4ParticleHPNAInelasticFS
406     InsertModel( 25035, "model_G4ParticleHPNAI    409     InsertModel( 25035, "model_G4ParticleHPNAInelasticFS_F06" );
407     // Class G4ParticleHPN3AInelasticFS           410     // Class G4ParticleHPN3AInelasticFS
408     InsertModel( 25036, "model_G4ParticleHPN3A    411     InsertModel( 25036, "model_G4ParticleHPN3AInelasticFS_F07" );
409     // Class G4ParticleHP2NAInelasticFS           412     // Class G4ParticleHP2NAInelasticFS
410     InsertModel( 25037, "model_G4ParticleHP2NA    413     InsertModel( 25037, "model_G4ParticleHP2NAInelasticFS_F08" );
411     // Class G4ParticleHP3NAInelasticFS           414     // Class G4ParticleHP3NAInelasticFS
412     InsertModel( 25038, "model_G4ParticleHP3NA    415     InsertModel( 25038, "model_G4ParticleHP3NAInelasticFS_F09" );
413     // Class G4ParticleHPNPInelasticFS            416     // Class G4ParticleHPNPInelasticFS
414     InsertModel( 25039, "model_G4ParticleHPNPI    417     InsertModel( 25039, "model_G4ParticleHPNPInelasticFS_F10" );
415     // Class G4ParticleHPN2AInelasticFS           418     // Class G4ParticleHPN2AInelasticFS
416     InsertModel( 25040, "model_G4ParticleHPN2A    419     InsertModel( 25040, "model_G4ParticleHPN2AInelasticFS_F11" );
417     // Clas G4ParticleHP2N2AInelasticFS           420     // Clas G4ParticleHP2N2AInelasticFS
418     InsertModel( 25041, "model_G4ParticleHP2N2    421     InsertModel( 25041, "model_G4ParticleHP2N2AInelasticFS_F12" );
419     // Class G4ParticleHPNDInelasticFS            422     // Class G4ParticleHPNDInelasticFS
420     InsertModel( 25042, "model_G4ParticleHPNDI    423     InsertModel( 25042, "model_G4ParticleHPNDInelasticFS_F13" );
421     // Class G4ParticleHPNTInelasticFS            424     // Class G4ParticleHPNTInelasticFS
422     InsertModel( 25043, "model_G4ParticleHPNTI    425     InsertModel( 25043, "model_G4ParticleHPNTInelasticFS_F14" );
423     // Class G4ParticleHPNHe3InelasticFS          426     // Class G4ParticleHPNHe3InelasticFS
424     InsertModel( 25044, "model_G4ParticleHPNHe    427     InsertModel( 25044, "model_G4ParticleHPNHe3InelasticFS_F15" );
425     // Class G4ParticleHPND2AInelasticFS          428     // Class G4ParticleHPND2AInelasticFS
426     InsertModel( 25045, "model_G4ParticleHPND2    429     InsertModel( 25045, "model_G4ParticleHPND2AInelasticFS_F16" );
427     // Class G4ParticleHPNT2AInelasticFS          430     // Class G4ParticleHPNT2AInelasticFS
428     InsertModel( 25046, "model_G4ParticleHPNT2    431     InsertModel( 25046, "model_G4ParticleHPNT2AInelasticFS_F17" );
429     // Class G4ParticleHP4NInelasticFS            432     // Class G4ParticleHP4NInelasticFS
430     InsertModel( 25047, "model_G4ParticleHP4NI    433     InsertModel( 25047, "model_G4ParticleHP4NInelasticFS_F18" );
431     // Class G4ParticleHP2NPInelasticFS           434     // Class G4ParticleHP2NPInelasticFS
432     InsertModel( 25048, "model_G4ParticleHP2NP    435     InsertModel( 25048, "model_G4ParticleHP2NPInelasticFS_F19" );
433     // Class G4ParticleHP3NPInelasticFS           436     // Class G4ParticleHP3NPInelasticFS
434     InsertModel( 25049, "model_G4ParticleHP3NP    437     InsertModel( 25049, "model_G4ParticleHP3NPInelasticFS_F20" );
435     // Class G4ParticleHPN2PInelasticFS           438     // Class G4ParticleHPN2PInelasticFS
436     InsertModel( 25050, "model_G4ParticleHPN2P    439     InsertModel( 25050, "model_G4ParticleHPN2PInelasticFS_F21" );
437     // Class G4ParticleHPNPAInelasticFS           440     // Class G4ParticleHPNPAInelasticFS
438     InsertModel( 25051, "model_G4ParticleHPNPA    441     InsertModel( 25051, "model_G4ParticleHPNPAInelasticFS_F22" );
439     // Class G4ParticleHPPInelasticFS             442     // Class G4ParticleHPPInelasticFS
440     InsertModel( 25052, "model_G4ParticleHPPIn    443     InsertModel( 25052, "model_G4ParticleHPPInelasticFS_F23" );
441     // Class G4ParticleHPDInelasticFS             444     // Class G4ParticleHPDInelasticFS
442     InsertModel( 25053, "model_G4ParticleHPDIn    445     InsertModel( 25053, "model_G4ParticleHPDInelasticFS_F24" );
443     // Class G4ParticleHPTInelasticFS             446     // Class G4ParticleHPTInelasticFS
444     InsertModel( 25054, "model_G4ParticleHPTIn    447     InsertModel( 25054, "model_G4ParticleHPTInelasticFS_F25" );
445     // Class G4ParticleHPHe3InelasticFS           448     // Class G4ParticleHPHe3InelasticFS
446     InsertModel( 25055, "model_G4ParticleHPHe3    449     InsertModel( 25055, "model_G4ParticleHPHe3InelasticFS_F26" );
447     // Class G4ParticleHPAInelasticFS             450     // Class G4ParticleHPAInelasticFS
448     InsertModel( 25056, "model_G4ParticleHPAIn    451     InsertModel( 25056, "model_G4ParticleHPAInelasticFS_F27" );
449     // Class G4ParticleHP2AInelasticFS            452     // Class G4ParticleHP2AInelasticFS
450     InsertModel( 25057, "model_G4ParticleHP2AI    453     InsertModel( 25057, "model_G4ParticleHP2AInelasticFS_F28" );
451     // Class G4ParticleHP3AInelasticFS            454     // Class G4ParticleHP3AInelasticFS
452     InsertModel( 25058, "model_G4ParticleHP3AI    455     InsertModel( 25058, "model_G4ParticleHP3AInelasticFS_F29" );
453     // Class G4ParticleHP2PInelasticFS            456     // Class G4ParticleHP2PInelasticFS
454     InsertModel( 25059, "model_G4ParticleHP2PI    457     InsertModel( 25059, "model_G4ParticleHP2PInelasticFS_F30" );
455     // Class G4ParticleHPPAInelasticFS            458     // Class G4ParticleHPPAInelasticFS
456     InsertModel( 25060, "model_G4ParticleHPPAI    459     InsertModel( 25060, "model_G4ParticleHPPAInelasticFS_F31" );
457     // Class G4ParticleHPD2AInelasticFS           460     // Class G4ParticleHPD2AInelasticFS
458     InsertModel( 25061, "model_G4ParticleHPD2A    461     InsertModel( 25061, "model_G4ParticleHPD2AInelasticFS_F32" );
459     // Class G4ParticleHPT2AInelasticFS           462     // Class G4ParticleHPT2AInelasticFS
460     InsertModel( 25062, "model_G4ParticleHPT2A    463     InsertModel( 25062, "model_G4ParticleHPT2AInelasticFS_F33" );
461     // Class G4ParticleHPPDInelasticFS            464     // Class G4ParticleHPPDInelasticFS
462     InsertModel( 25063, "model_G4ParticleHPPDI    465     InsertModel( 25063, "model_G4ParticleHPPDInelasticFS_F34" );
463     // Class G4ParticleHPPTInelasticFS            466     // Class G4ParticleHPPTInelasticFS
464     InsertModel( 25064, "model_G4ParticleHPPTI    467     InsertModel( 25064, "model_G4ParticleHPPTInelasticFS_F35" );
465     // Class G4ParticleHPDAInelasticFS            468     // Class G4ParticleHPDAInelasticFS
466     InsertModel( 25065, "model_G4ParticleHPDAI    469     InsertModel( 25065, "model_G4ParticleHPDAInelasticFS_F36" );
467                                                   470 
468     // --- LEND : 25'200 - 25'299 ---             471     // --- LEND : 25'200 - 25'299 ---
469                                                   472 
470     // Class: G4LENDModel                         473     // Class: G4LENDModel
471     InsertModel( 25200, "model_LENDModel" );      474     InsertModel( 25200, "model_LENDModel" );
472                                                   475 
473     // The following classes inherit from G4LE    476     // The following classes inherit from G4LENDModel
474                                                   477 
475     // Class: G4LENDCapture                       478     // Class: G4LENDCapture
476     InsertModel( 25210, "model_LENDCapture" );    479     InsertModel( 25210, "model_LENDCapture" );
477     // Class: G4LENDElastic                       480     // Class: G4LENDElastic
478     InsertModel( 25220, "model_LENDElastic" );    481     InsertModel( 25220, "model_LENDElastic" );
479     // Class: G4LENDFission                       482     // Class: G4LENDFission
480     InsertModel( 25230, "model_LENDFission" );    483     InsertModel( 25230, "model_LENDFission" );
481     // Class: G4LENDInelastic                     484     // Class: G4LENDInelastic
482     InsertModel( 25240, "model_LENDInelastic"     485     InsertModel( 25240, "model_LENDInelastic" );
483     // Class: G4LENDCombinedModel                 486     // Class: G4LENDCombinedModel
484     InsertModel( 25250, "model_LENDCombinedMod    487     InsertModel( 25250, "model_LENDCombinedModel" );
485     // Class: G4LENDGammaModel                    488     // Class: G4LENDGammaModel
486     InsertModel( 25260, "model_LENDGammaModel"    489     InsertModel( 25260, "model_LENDGammaModel" );
487                                                   490     
488     // --- Radioactive Decay : 25'500 - 25'999    491     // --- Radioactive Decay : 25'500 - 25'999 ---
489                                                   492     
490     // 25'510 +  10*G4RadioactiveDecayMode        493     // 25'510 +  10*G4RadioactiveDecayMode
491     InsertModel( 25510, "model_RDM_IT" );         494     InsertModel( 25510, "model_RDM_IT" );
492     InsertModel( 25520, "model_RDM_BetaMinus"     495     InsertModel( 25520, "model_RDM_BetaMinus" );
493     InsertModel( 25530, "model_RDM_BetaPlus" )    496     InsertModel( 25530, "model_RDM_BetaPlus" );
494     InsertModel( 25540, "model_RDM_KshellEC" )    497     InsertModel( 25540, "model_RDM_KshellEC" );
495     InsertModel( 25550, "model_RDM_LshellEC" )    498     InsertModel( 25550, "model_RDM_LshellEC" );
496     InsertModel( 25560, "model_RDM_MshellEC" )    499     InsertModel( 25560, "model_RDM_MshellEC" );
497     InsertModel( 25570, "model_RDM_NshellEC" )    500     InsertModel( 25570, "model_RDM_NshellEC" );
498     InsertModel( 25580, "model_RDM_Alpha" );      501     InsertModel( 25580, "model_RDM_Alpha" );
499     InsertModel( 25590, "model_RDM_Proton" );     502     InsertModel( 25590, "model_RDM_Proton" );
500     InsertModel( 25600, "model_RDM_Neutron" );    503     InsertModel( 25600, "model_RDM_Neutron" );
501     InsertModel( 25610, "model_RDM_SpFission"     504     InsertModel( 25610, "model_RDM_SpFission" );
502     InsertModel( 25620, "model_RDM_BDProton" )    505     InsertModel( 25620, "model_RDM_BDProton" );
503     InsertModel( 25630, "model_RDM_BDNeutron"     506     InsertModel( 25630, "model_RDM_BDNeutron" );
504     InsertModel( 25640, "model_RDM_Beta2Minus"    507     InsertModel( 25640, "model_RDM_Beta2Minus" );
505     InsertModel( 25650, "model_RDM_Beta2Plus"     508     InsertModel( 25650, "model_RDM_Beta2Plus" );
506     InsertModel( 25660, "model_RDM_Proton2" );    509     InsertModel( 25660, "model_RDM_Proton2" );
507     InsertModel( 25670, "model_RDM_Neutron2" )    510     InsertModel( 25670, "model_RDM_Neutron2" );
508     InsertModel( 25680, "model_RDM_Triton" );     511     InsertModel( 25680, "model_RDM_Triton" );
509                                                   512 
510     InsertModel( 25810, "model_RDM_AtomicRelax    513     InsertModel( 25810, "model_RDM_AtomicRelaxation" );
511                                                   514 
512     // ---------------------------------------    515     // -------------------------------------------------------------------
513     // --- Others HAD (everything not include     516     // --- Others HAD (everything not include above) : 26'000 - 26'999 ---
514     // ---------------------------------------    517     // -------------------------------------------------------------------
515     //    -  26'000 - 26'099 : Stopping           518     //    -  26'000 - 26'099 : Stopping
516     //    -  26'100 - 26'199 : Fission            519     //    -  26'100 - 26'199 : Fission
517     //    -  26'200 - 26'299 : Abration           520     //    -  26'200 - 26'299 : Abration
518     //    -  26'300 - 26'399 : Coalescence        521     //    -  26'300 - 26'399 : Coalescence
519     //    ...                                     522     //    ...
520                                                   523 
521     // --- Stopping : 26'000 - 26'099 ---         524     // --- Stopping : 26'000 - 26'099 ---
522                                                   525     
523     // Below are classes that derives from G4H    526     // Below are classes that derives from G4HadronStoppingProcess .
524     // The names are the same as before Geant4    527     // The names are the same as before Geant4 11, except for the "model_" prefix.
525     // Classes that use it: G4HadronStoppingPr    528     // Classes that use it: G4HadronStoppingProcess .
526                                                   529     
527     // Class: G4HadronicAbsorptionBertini         530     // Class: G4HadronicAbsorptionBertini
528     InsertModel( 26000, "model_hBertiniCapture    531     InsertModel( 26000, "model_hBertiniCaptureAtRest_EMCascade" );
529     InsertModel( 26001, "model_hBertiniCapture    532     InsertModel( 26001, "model_hBertiniCaptureAtRest_NuclearCapture" );
530     InsertModel( 26002, "model_hBertiniCapture    533     InsertModel( 26002, "model_hBertiniCaptureAtRest_DIO" );
531     // Class: G4HadronicAbsorptionFritiof         534     // Class: G4HadronicAbsorptionFritiof
532     InsertModel( 26010, "model_hFritiofCapture    535     InsertModel( 26010, "model_hFritiofCaptureAtRest_EMCascade" );
533     InsertModel( 26011, "model_hFritiofCapture    536     InsertModel( 26011, "model_hFritiofCaptureAtRest_NuclearCapture" );
534     InsertModel( 26012, "model_hFritiofCapture    537     InsertModel( 26012, "model_hFritiofCaptureAtRest_DIO" );
535     // Class: G4HadronicAbsorptionFritiofWithB    538     // Class: G4HadronicAbsorptionFritiofWithBinaryCascade
536     InsertModel( 26020, "model_hFritiofWithBin    539     InsertModel( 26020, "model_hFritiofWithBinaryCascadeCaptureAtRest_EMCascade" );
537     InsertModel( 26021, "model_hFritiofWithBin    540     InsertModel( 26021, "model_hFritiofWithBinaryCascadeCaptureAtRest_NuclearCapture" );
538     InsertModel( 26022, "model_hFritiofWithBin    541     InsertModel( 26022, "model_hFritiofWithBinaryCascadeCaptureAtRest_DIO" );
539     // Class: G4MuonMinusCapture                  542     // Class: G4MuonMinusCapture
540     InsertModel( 26030, "model_muMinusCaptureA    543     InsertModel( 26030, "model_muMinusCaptureAtRest_EMCascade" );
541     InsertModel( 26031, "model_muMinusCaptureA    544     InsertModel( 26031, "model_muMinusCaptureAtRest_NuclearCapture" );
542     InsertModel( 26032, "model_muMinusCaptureA    545     InsertModel( 26032, "model_muMinusCaptureAtRest_DIO" );
543                                                   546 
544     // --- Fission : 26'100 - 26'199 ---          547     // --- Fission : 26'100 - 26'199 ---
545                                                   548 
546     // Class G4LFission                           549     // Class G4LFission
547     InsertModel( 26100, "model_G4LFission" );     550     InsertModel( 26100, "model_G4LFission" );
548                                                   551 
549     // LLNL fission (related classes: G4Fissio    552     // LLNL fission (related classes: G4FissionLibrary, G4LLNLFission, G4FissLib, G4fissionEvent)
550     InsertModel( 26110, "model_G4LLNLFission"     553     InsertModel( 26110, "model_G4LLNLFission" );
551                                                   554 
552     // --- Abration : 26'200 - 26'299 ---         555     // --- Abration : 26'200 - 26'299 ---
553                                                   556 
554     // Class G4WilsonAbrasionModel                557     // Class G4WilsonAbrasionModel
555     InsertModel( 26200, "model_G4WilsonAbrasio    558     InsertModel( 26200, "model_G4WilsonAbrasion" );
556                                                   559     
557     // --- Coalescence : 26'300 - 26'399 ---      560     // --- Coalescence : 26'300 - 26'399 ---
558                                                   561 
559     // Class G4CRCoalescence                      562     // Class G4CRCoalescence
560     InsertModel( 26300, "model_G4CRCoalescence    563     InsertModel( 26300, "model_G4CRCoalescence" );
561                                                   564     
562     // =======================================    565     // ==========================================================================
563     // === 3rd OTHER (i.e. non-EM and non-HAD)    566     // === 3rd OTHER (i.e. non-EM and non-HAD) MODELS : from 30'000 to 39'999 ===
564     // =======================================    567     // ==========================================================================
565                                                   568 
566     // -------------------------------            569     // -------------------------------
567     // --- Biasing : 30'000-30'999 ---            570     // --- Biasing : 30'000-30'999 ---
568     // -------------------------------            571     // -------------------------------    
569                                                   572 
570     // The name is the same as before Geant4 1    573     // The name is the same as before Geant4 11, except for the "model_" prefix.
571     // Classes that use it: G4BOptrForceCollis    574     // Classes that use it: G4BOptrForceCollision
572     InsertModel( 30010, "model_GenBiasForceCol    575     InsertModel( 30010, "model_GenBiasForceCollision" );
573                                                   576 
574     // ----------------------------------         577     // ----------------------------------
575     // --- Channeling : 31'000-31'999 ---         578     // --- Channeling : 31'000-31'999 ---
576     // ----------------------------------         579     // ----------------------------------
577                                                   580     
578     // The name is the same as before Geant4 1    581     // The name is the same as before Geant4 11, except for the "model_" prefix.
579     // Classes that use it: G4Channeling , G4C    582     // Classes that use it: G4Channeling , G4ChannelingOptrChangeCrossSection
580     InsertModel( 31010, "model_channeling" );     583     InsertModel( 31010, "model_channeling" );
581                                                   584 
582     // --- Others ... ---                         585     // --- Others ... ---
583                                                   586 
584     // =======================================    587     // ======================================================================
585     // ================== 4th MODELS ADDED AFT << 588     // ================== 4th MODELS ADDED AFTER Geant4 11 ==================   
586     // =======================================    589     // ======================================================================
587     // PLEASE ADD MODELS ONLY BELOW HERE, WITH    590     // PLEASE ADD MODELS ONLY BELOW HERE, WITH PROPER  modelID .
588     // IF YOU ARE NOT SURE, PLEASE CONTACT ONE    591     // IF YOU ARE NOT SURE, PLEASE CONTACT ONE OF THE COORDINATORS OF THE
589     // GEANT4 PHYSICS WORKING GROUPS.             592     // GEANT4 PHYSICS WORKING GROUPS.
590                                                   593     
591     // Class: G4HadronicAbsorptionINCLXX          594     // Class: G4HadronicAbsorptionINCLXX
592     InsertModel( 26040, "model_hINCLXXCaptureA    595     InsertModel( 26040, "model_hINCLXXCaptureAtRest_EMCascade" );
593     InsertModel( 26041, "model_hINCLXXCaptureA    596     InsertModel( 26041, "model_hINCLXXCaptureAtRest_NuclearCapture" );
594     InsertModel( 26042, "model_hINCLXXCaptureA    597     InsertModel( 26042, "model_hINCLXXCaptureAtRest_DIO" );
595                                                   598 
596     // Class: G4LightIonQMDReaction            << 
597     InsertModel( 23310, "model_LightIonQMDMode << 
598                                                << 
599     // Class: G4NuDEXEvaporation (to be added  << 
600     // InsertModel( 24700, "model_nuDEX_evapor << 
601                                                << 
602     // Class: G4NuDEXNeutronCapture            << 
603     InsertModel( 25300, "model_nuDEX_neutronCa << 
604                                                << 
605     // ...                                        599     // ...
606                                                   600     
607     SanityCheck();                                601     SanityCheck();
608     isInitialized = true;                         602     isInitialized = true;
609                                                   603 
610     // The following call is commented out bec    604     // The following call is commented out because it should be protected by
611     // the verbosity level, but this would imp    605     // the verbosity level, but this would imply a dependency of the global
612     // category to other categories which is n    606     // category to other categories which is not allowed.
613     // Anyhow, the call  G4PhysicsModelCatalog    607     // Anyhow, the call  G4PhysicsModelCatalog::PrintAllInformation()
614     // can be easily placed elsewhere (in eith    608     // can be easily placed elsewhere (in either user code, or even in other
615     // Geant4 classes).                           609     // Geant4 classes).
616     //PrintAllInformation();                      610     //PrintAllInformation();
617   }                                               611   }
618 }                                                 612 }
619                                                   613 
620 // -------------------------------------------    614 // --------------------------------------------------------------------------
621 void G4PhysicsModelCatalog::SanityCheck() {       615 void G4PhysicsModelCatalog::SanityCheck() {
622   if ( theVectorOfModelIDs->size() != theVecto    616   if ( theVectorOfModelIDs->size() != theVectorOfModelNames->size() ) {
623     G4ExceptionDescription ed;                    617     G4ExceptionDescription ed;
624     ed << "theVectorOfModelIDs' size=" << theV    618     ed << "theVectorOfModelIDs' size=" << theVectorOfModelIDs->size()
625        << " is NOT the same as theVectorOfMode    619        << " is NOT the same as theVectorOfModelNames's size=" << theVectorOfModelNames->size();
626     G4Exception( "G4PhysicsModelCatalog::Sanit    620     G4Exception( "G4PhysicsModelCatalog::SanityCheck()", "PhysModelCatalog001",
627      FatalException, ed, "should be the same!"    621      FatalException, ed, "should be the same!" );    
628   } else {                                        622   } else {
629     G4bool isModelIDOutsideRange = false;         623     G4bool isModelIDOutsideRange = false;
630     G4bool isModelIDRepeated = false;             624     G4bool isModelIDRepeated = false;
631     G4bool isModelNameRepeated = false;           625     G4bool isModelNameRepeated = false;
632     for ( int idx = 0; idx < Entries(); ++idx     626     for ( int idx = 0; idx < Entries(); ++idx ) {
633       G4int modelID = (*theVectorOfModelIDs)[     627       G4int modelID = (*theVectorOfModelIDs)[ idx ];
634       G4String modelName = (*theVectorOfModelN    628       G4String modelName = (*theVectorOfModelNames)[ idx ];
635       if ( modelID < GetMinAllowedModelIDValue    629       if ( modelID < GetMinAllowedModelIDValue() || modelID > GetMaxAllowedModelIDValue() ) {
636   isModelIDOutsideRange = true;                   630   isModelIDOutsideRange = true;
637       }                                           631       }
638       for ( int jdx = idx + 1; jdx < Entries()    632       for ( int jdx = idx + 1; jdx < Entries(); ++jdx ) {
639         if(modelID == (*theVectorOfModelIDs)[j    633         if(modelID == (*theVectorOfModelIDs)[jdx])
640         {                                         634         {
641           isModelIDRepeated = true;               635           isModelIDRepeated = true;
642         }                                         636         }
643         if(modelName == (*theVectorOfModelName    637         if(modelName == (*theVectorOfModelNames)[jdx])
644         {                                         638         {
645           isModelNameRepeated = true;             639           isModelNameRepeated = true;
646         }                                         640         }
647       }                                           641       }
648     }                                             642     }
649     if ( isModelIDOutsideRange || isModelIDRep    643     if ( isModelIDOutsideRange || isModelIDRepeated || isModelNameRepeated ) {
650       G4ExceptionDescription ed;                  644       G4ExceptionDescription ed;
651       if(isModelIDOutsideRange)                   645       if(isModelIDOutsideRange)
652       {                                           646       {
653         ed << "theVectorOfModelIDs has NOT all    647         ed << "theVectorOfModelIDs has NOT all entries between "
654            << GetMinAllowedModelIDValue() << "    648            << GetMinAllowedModelIDValue() << " and "
655            << GetMaxAllowedModelIDValue();        649            << GetMaxAllowedModelIDValue();
656       }                                           650       }
657       if(isModelIDRepeated)                       651       if(isModelIDRepeated)
658       {                                           652       {
659         ed << "theVectorOfModelIDs has NOT all    653         ed << "theVectorOfModelIDs has NOT all unique IDs !";
660       }                                           654       }
661       if(isModelNameRepeated)                     655       if(isModelNameRepeated)
662       {                                           656       {
663         ed << "theVectorOfModelNames has NOT a    657         ed << "theVectorOfModelNames has NOT all unique names !";
664       }                                           658       }
665       G4Exception( "G4PhysicsModelCatalog::San    659       G4Exception( "G4PhysicsModelCatalog::SanityCheck()", "PhysModelCatalog002",
666        FatalException, ed, "cannot continue!"     660        FatalException, ed, "cannot continue!" );
667     }                                             661     }
668   }                                               662   }
669   return;                                         663   return;
670 }                                                 664 }
671                                                   665 
672 // -------------------------------------------    666 // --------------------------------------------------------------------------
673                                                   667 
674 // -------------------------------------------    668 // --------------------------------------------------------------------------
675 const G4String G4PhysicsModelCatalog::GetModel    669 const G4String G4PhysicsModelCatalog::GetModelNameFromID( const G4int modelID ) {
676   G4String modelName = "Undefined";               670   G4String modelName = "Undefined";
677   if ( modelID >= GetMinAllowedModelIDValue()     671   if ( modelID >= GetMinAllowedModelIDValue()  &&  modelID <= GetMaxAllowedModelIDValue() ) {
678     for ( int idx = 0; idx < Entries(); ++idx     672     for ( int idx = 0; idx < Entries(); ++idx ) {
679       if ( (*theVectorOfModelIDs)[ idx ] == mo    673       if ( (*theVectorOfModelIDs)[ idx ] == modelID ) {
680   modelName = (*theVectorOfModelNames)[ idx ];    674   modelName = (*theVectorOfModelNames)[ idx ];
681   break;                                          675   break;
682       }                                           676       }
683     }                                             677     }
684   }                                               678   }
685   return modelName;                               679   return modelName;
686 }                                                 680 }
687                                                   681 
688 // -------------------------------------------    682 // --------------------------------------------------------------------------
689 const G4String G4PhysicsModelCatalog::GetModel    683 const G4String G4PhysicsModelCatalog::GetModelNameFromIndex( const G4int modelIndex ) {
690   return ( modelIndex >= 0  &&  modelIndex < E << 684   return ( modelIndex >= 0  &&  modelIndex < Entries() ) ? (*theVectorOfModelNames)[ modelIndex ] : "Undefined";
691        ? (*theVectorOfModelNames)[ modelIndex  << 
692 }                                                 685 }
693                                                   686 
694 // -------------------------------------------    687 // --------------------------------------------------------------------------
695 G4int G4PhysicsModelCatalog::GetModelID( const    688 G4int G4PhysicsModelCatalog::GetModelID( const G4int modelIndex ) {
696   return ( modelIndex >= 0  &&  modelIndex < E << 689   return ( modelIndex >= 0  &&  modelIndex < Entries() ) ? (*theVectorOfModelIDs)[ modelIndex ] : -1;
697        ? (*theVectorOfModelIDs)[ modelIndex ]  << 
698 }                                                 690 }
699                                                   691 
700 // -------------------------------------------    692 // --------------------------------------------------------------------------
701 G4int G4PhysicsModelCatalog::GetModelID( const    693 G4int G4PhysicsModelCatalog::GetModelID( const G4String& modelName ) {
702   if(!isInitialized)                              694   if(!isInitialized)
703   {                                               695   {
704     Initialize();                                 696     Initialize();
705   }                                               697   }
706   G4int modelID = -1;                             698   G4int modelID = -1;
707   for ( G4int idx = 0; idx < Entries(); ++idx     699   for ( G4int idx = 0; idx < Entries(); ++idx ) {
708     if ( (*theVectorOfModelNames)[ idx ] == mo    700     if ( (*theVectorOfModelNames)[ idx ] == modelName ) {
709       modelID = (*theVectorOfModelIDs)[ idx ];    701       modelID = (*theVectorOfModelIDs)[ idx ];
710       break;                                      702       break;
711     }                                             703     }
712   }                                               704   }
713   return modelID;                                 705   return modelID;
714 }                                                 706 }
715                                                   707 
716 // -------------------------------------------    708 // --------------------------------------------------------------------------
717 G4int G4PhysicsModelCatalog::GetModelIndex( co    709 G4int G4PhysicsModelCatalog::GetModelIndex( const G4int modelID ) {
718   G4int modelIndex = -1;                          710   G4int modelIndex = -1;
719   if ( modelID >= GetMinAllowedModelIDValue()     711   if ( modelID >= GetMinAllowedModelIDValue()  &&  modelID <= GetMaxAllowedModelIDValue() ) {
720     for ( G4int idx = 0; idx < Entries(); ++id    712     for ( G4int idx = 0; idx < Entries(); ++idx ) {
721       if ( (*theVectorOfModelIDs)[ idx ] == mo    713       if ( (*theVectorOfModelIDs)[ idx ] == modelID ) {
722   modelIndex = idx;                               714   modelIndex = idx;
723   break;                                          715   break;
724       }                                           716       }
725     }                                             717     }
726   }                                               718   }
727   return modelIndex;                              719   return modelIndex;
728 }                                                 720 }
729                                                   721 
730 // -------------------------------------------    722 // --------------------------------------------------------------------------
731 G4int G4PhysicsModelCatalog::GetModelIndex( co    723 G4int G4PhysicsModelCatalog::GetModelIndex( const G4String& modelName ) {
732   G4int modelIndex = -1;                          724   G4int modelIndex = -1;
733   for ( G4int idx = 0; idx < Entries(); ++idx     725   for ( G4int idx = 0; idx < Entries(); ++idx ) {
734     if ( (*theVectorOfModelNames)[ idx ] == mo    726     if ( (*theVectorOfModelNames)[ idx ] == modelName ) {
735       modelIndex = idx;                           727       modelIndex = idx;
736       break;                                      728       break;
737     }                                             729     }
738   }                                               730   }
739   return modelIndex;                              731   return modelIndex;
740 }                                                 732 }
741                                                   733 
742 // -------------------------------------------    734 // --------------------------------------------------------------------------
743 G4int G4PhysicsModelCatalog::Entries() {          735 G4int G4PhysicsModelCatalog::Entries() {
744   // It is enough to check the size of one of     736   // It is enough to check the size of one of the two vectors, because they have the same size.
745   return ( theVectorOfModelIDs != nullptr ) ?     737   return ( theVectorOfModelIDs != nullptr ) ? G4int( theVectorOfModelIDs->size() ) : -1;
746 }                                                 738 }
747                                                   739 
748 // -------------------------------------------    740 // --------------------------------------------------------------------------
749 void G4PhysicsModelCatalog::PrintAllInformatio    741 void G4PhysicsModelCatalog::PrintAllInformation() {
750   G4cout << G4endl                                742   G4cout << G4endl
751    << " ======================================    743    << " ==================================================== " << G4endl
752    << " === G4PhysicsModelCatalog::PrintAllInf    744    << " === G4PhysicsModelCatalog::PrintAllInformation() === " << G4endl
753    << " ======================================    745    << " ==================================================== " << G4endl
754    << " SIZE (i.e. number of models in the cat    746    << " SIZE (i.e. number of models in the catalog)=" << Entries() << G4endl;
755   for ( int idx = 0; idx < Entries(); ++idx )     747   for ( int idx = 0; idx < Entries(); ++idx ) {
756     G4int modelID = (*theVectorOfModelIDs)[ id    748     G4int modelID = (*theVectorOfModelIDs)[ idx ];
757     G4String modelName = (*theVectorOfModelNam    749     G4String modelName = (*theVectorOfModelNames)[ idx ];
758     G4cout << "\t index=" << idx << "\t modelN    750     G4cout << "\t index=" << idx << "\t modelName=" << modelName
759      << "\t modelID=" << modelID << G4endl;       751      << "\t modelID=" << modelID << G4endl;
760   }                                               752   }
761   G4cout << " ================================    753   G4cout << " ==================================================== " << G4endl
762    << " ======================================    754    << " ==================================================== " << G4endl
763    << " ======================================    755    << " ==================================================== " << G4endl
764    << G4endl;                                     756    << G4endl;
765 }                                                 757 }
766                                                   758