Geant4 Cross Reference |
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