36G4bool G4PhysicsModelCatalog::isInitialized =
false;
37std::vector< G4int >* G4PhysicsModelCatalog::theVectorOfModelIDs =
nullptr;
38std::vector< G4String >* G4PhysicsModelCatalog::theVectorOfModelNames =
nullptr;
46 if ( theVectorOfModelIDs ==
nullptr && theVectorOfModelNames ==
nullptr ) {
47 static std::vector< G4int > aVectorOfInts;
48 theVectorOfModelIDs = &aVectorOfInts;
49 static std::vector< G4String > aVectorOfStrings;
50 theVectorOfModelNames = &aVectorOfStrings;
85 InsertModel( 10000,
"model_EM" );
88 InsertModel( 10010,
"model_DeltaElectron" );
89 InsertModel( 10011,
"model_DeltaEBelowCut" );
90 InsertModel( 10012,
"model_PhotoElectron" );
91 InsertModel( 10013,
"model_ComptonElectron" );
92 InsertModel( 10014,
"model_TripletElectron" );
95 InsertModel( 10020,
"model_Bremsstrahlung" );
96 InsertModel( 10021,
"model_SplitBremsstrahlung" );
97 InsertModel( 10022,
"model_ComptonGamma" );
98 InsertModel( 10023,
"model_Annihilation" );
99 InsertModel( 10024,
"model_TripletGamma" );
100 InsertModel( 10025,
"model_GammaGammaEntanglement" );
103 InsertModel( 10030,
"model_EplusEminisPair" );
106 InsertModel( 10040,
"model_Fluorescence" );
107 InsertModel( 10041,
"model_gammaPIXE" );
108 InsertModel( 10050,
"model_AugerElectron" );
109 InsertModel( 10051,
"model_ePIXE" );
112 InsertModel( 10060,
"model_IonRecoil" );
115 InsertModel( 11000,
"model_DNA" );
116 InsertModel( 11001,
"model_Ritchie1994eSolvation" );
117 InsertModel( 11002,
"model_Terrisol1990eSolvation" );
118 InsertModel( 11003,
"model_Meesungnoen2002eSolvation" );
119 InsertModel( 11004,
"model_Kreipl2009eSolvation" );
120 InsertModel( 11005,
"model_MeesungnoenSolid2002eSolvation" );
140 InsertModel( 20000,
"model_projectileEMDissociation" );
141 InsertModel( 20001,
"model_targetEMDissociation" );
146 InsertModel( 20100,
"model_LENDorBERTModel" );
149 InsertModel( 20150,
"model_GammaNPreco" );
154 InsertModel( 20200,
"model_G4ElectroVDNuclearModel" );
157 InsertModel( 20300,
"model_G4MuonVDNuclearModel" );
162 InsertModel( 20510,
"model_nu-e-inelastic" );
165 InsertModel( 20520,
"model_neutrino-nucleus" );
169 InsertModel( 20530,
"model_ANuElNuclCcModel" );
171 InsertModel( 20540,
"model_ANuElNuclNcModel" );
173 InsertModel( 20550,
"model_ANuMuNuclCcModel" );
175 InsertModel( 20560,
"model_ANuMuNuclNcModel" );
177 InsertModel( 20570,
"model_NuElNuclCcModel" );
179 InsertModel( 20580,
"model_NuElNuclNcModel" );
181 InsertModel( 20590,
"model_NuMuNuclCcModel" );
183 InsertModel( 20600,
"model_NuMuNuclNcModel" );
197 InsertModel( 21000,
"model_hElasticLHEP" );
199 InsertModel( 21010,
"model_AntiAElastic" );
201 InsertModel( 21020,
"model_hElasticCHIPS" );
203 InsertModel( 21030,
"model_DiffuseElastic" );
205 InsertModel( 21040,
"model_DiffuseElasticV2" );
207 InsertModel( 21050,
"model_NNDiffuseElastic" );
209 InsertModel( 21060,
"model_hElasticGlauber" );
211 InsertModel( 21070,
"model_HadrHadrElastic" );
213 InsertModel( 21080,
"model_hLowEElastic" );
215 InsertModel( 21090,
"model_G4LEHadronProtonElastic" );
217 InsertModel( 21100,
"model_G4LEnp" );
219 InsertModel( 21110,
"model_G4LEpp" );
221 InsertModel( 21120,
"model_n-e-elastic" );
223 InsertModel( 21130,
"model_nu-e-elastic" );
228 InsertModel( 21200,
"model_ChargeExchange" );
233 InsertModel( 21300,
"model_QuasiElastic" );
238 InsertModel( 21500,
"model_LMsdGenerator" );
249 InsertModel( 22000,
"model_TheoFSGenerator" );
251 InsertModel( 22100,
"model_FTFP" );
253 InsertModel( 22150,
"model_FTFB" );
255 InsertModel( 22175,
"model_FTFQGSP" );
257 InsertModel( 22200,
"model_QGSP" );
259 InsertModel( 22250,
"model_QGSB" );
270 InsertModel( 23000,
"model_BertiniCascade" );
274 InsertModel( 23100,
"model_G4BinaryCascade" );
276 InsertModel( 23110,
"model_G4BinaryLightIonReaction" );
279 InsertModel( 23200,
"model_INCLXXCascade" );
282 InsertModel( 23300,
"model_QMDModel" );
305 InsertModel( 24000,
"model_PRECO" );
308 InsertModel( 24010,
"model_LowEIonPreco" );
311 InsertModel( 24050,
"model_G4NonEquilibriumEvaporator" );
318 InsertModel( 24100,
"model_G4EvaporationChannel" );
321 InsertModel( 24110,
"model_e-InternalConversion" );
324 InsertModel( 24120,
"model_G4UnstableFragmentBreakUp" );
329 InsertModel( 24150,
"model_G4PhotonEvaporation" );
332 InsertModel( 24160,
"model_nRadCapture" );
337 InsertModel( 24200,
"model_G4GEMChannel" );
340 InsertModel( 24210,
"model_G4GEMChannelVI" );
345 InsertModel( 24300,
"model_G4FermiBreakUpVI" );
350 InsertModel( 24350,
"model_G4StatMF" );
355 InsertModel( 24400,
"model_G4WilsonAblationModel" );
360 InsertModel( 24450,
"model_G4CompetitiveFission" );
365 InsertModel( 24500,
"model_ABLA" );
370 InsertModel( 24600,
"model_G4EquilibriumEvaporator" );
387 InsertModel( 25000,
"model_NeutronHPCapture" );
390 InsertModel( 25010,
"model_NeutronHPElastic" );
393 InsertModel( 25020,
"model_NeutronHPFission" );
399 InsertModel( 25030,
"model_G4ParticleHPNInelasticFS_F01" );
401 InsertModel( 25031,
"model_G4ParticleHPNXInelasticFS_F02" );
403 InsertModel( 25032,
"model_G4ParticleHP2NDInelasticFS_F03" );
405 InsertModel( 25033,
"model_G4ParticleHP2NInelasticFS_F04" );
407 InsertModel( 25034,
"model_G4ParticleHP3NInelasticFS_F05" );
409 InsertModel( 25035,
"model_G4ParticleHPNAInelasticFS_F06" );
411 InsertModel( 25036,
"model_G4ParticleHPN3AInelasticFS_F07" );
413 InsertModel( 25037,
"model_G4ParticleHP2NAInelasticFS_F08" );
415 InsertModel( 25038,
"model_G4ParticleHP3NAInelasticFS_F09" );
417 InsertModel( 25039,
"model_G4ParticleHPNPInelasticFS_F10" );
419 InsertModel( 25040,
"model_G4ParticleHPN2AInelasticFS_F11" );
421 InsertModel( 25041,
"model_G4ParticleHP2N2AInelasticFS_F12" );
423 InsertModel( 25042,
"model_G4ParticleHPNDInelasticFS_F13" );
425 InsertModel( 25043,
"model_G4ParticleHPNTInelasticFS_F14" );
427 InsertModel( 25044,
"model_G4ParticleHPNHe3InelasticFS_F15" );
429 InsertModel( 25045,
"model_G4ParticleHPND2AInelasticFS_F16" );
431 InsertModel( 25046,
"model_G4ParticleHPNT2AInelasticFS_F17" );
433 InsertModel( 25047,
"model_G4ParticleHP4NInelasticFS_F18" );
435 InsertModel( 25048,
"model_G4ParticleHP2NPInelasticFS_F19" );
437 InsertModel( 25049,
"model_G4ParticleHP3NPInelasticFS_F20" );
439 InsertModel( 25050,
"model_G4ParticleHPN2PInelasticFS_F21" );
441 InsertModel( 25051,
"model_G4ParticleHPNPAInelasticFS_F22" );
443 InsertModel( 25052,
"model_G4ParticleHPPInelasticFS_F23" );
445 InsertModel( 25053,
"model_G4ParticleHPDInelasticFS_F24" );
447 InsertModel( 25054,
"model_G4ParticleHPTInelasticFS_F25" );
449 InsertModel( 25055,
"model_G4ParticleHPHe3InelasticFS_F26" );
451 InsertModel( 25056,
"model_G4ParticleHPAInelasticFS_F27" );
453 InsertModel( 25057,
"model_G4ParticleHP2AInelasticFS_F28" );
455 InsertModel( 25058,
"model_G4ParticleHP3AInelasticFS_F29" );
457 InsertModel( 25059,
"model_G4ParticleHP2PInelasticFS_F30" );
459 InsertModel( 25060,
"model_G4ParticleHPPAInelasticFS_F31" );
461 InsertModel( 25061,
"model_G4ParticleHPD2AInelasticFS_F32" );
463 InsertModel( 25062,
"model_G4ParticleHPT2AInelasticFS_F33" );
465 InsertModel( 25063,
"model_G4ParticleHPPDInelasticFS_F34" );
467 InsertModel( 25064,
"model_G4ParticleHPPTInelasticFS_F35" );
469 InsertModel( 25065,
"model_G4ParticleHPDAInelasticFS_F36" );
474 InsertModel( 25200,
"model_LENDModel" );
479 InsertModel( 25210,
"model_LENDCapture" );
481 InsertModel( 25220,
"model_LENDElastic" );
483 InsertModel( 25230,
"model_LENDFission" );
485 InsertModel( 25240,
"model_LENDInelastic" );
487 InsertModel( 25250,
"model_LENDCombinedModel" );
489 InsertModel( 25260,
"model_LENDGammaModel" );
494 InsertModel( 25510,
"model_RDM_IT" );
495 InsertModel( 25520,
"model_RDM_BetaMinus" );
496 InsertModel( 25530,
"model_RDM_BetaPlus" );
497 InsertModel( 25540,
"model_RDM_KshellEC" );
498 InsertModel( 25550,
"model_RDM_LshellEC" );
499 InsertModel( 25560,
"model_RDM_MshellEC" );
500 InsertModel( 25570,
"model_RDM_NshellEC" );
501 InsertModel( 25580,
"model_RDM_Alpha" );
502 InsertModel( 25590,
"model_RDM_Proton" );
503 InsertModel( 25600,
"model_RDM_Neutron" );
504 InsertModel( 25610,
"model_RDM_SpFission" );
505 InsertModel( 25620,
"model_RDM_BDProton" );
506 InsertModel( 25630,
"model_RDM_BDNeutron" );
507 InsertModel( 25640,
"model_RDM_Beta2Minus" );
508 InsertModel( 25650,
"model_RDM_Beta2Plus" );
509 InsertModel( 25660,
"model_RDM_Proton2" );
510 InsertModel( 25670,
"model_RDM_Neutron2" );
511 InsertModel( 25680,
"model_RDM_Triton" );
513 InsertModel( 25810,
"model_RDM_AtomicRelaxation" );
531 InsertModel( 26000,
"model_hBertiniCaptureAtRest_EMCascade" );
532 InsertModel( 26001,
"model_hBertiniCaptureAtRest_NuclearCapture" );
533 InsertModel( 26002,
"model_hBertiniCaptureAtRest_DIO" );
535 InsertModel( 26010,
"model_hFritiofCaptureAtRest_EMCascade" );
536 InsertModel( 26011,
"model_hFritiofCaptureAtRest_NuclearCapture" );
537 InsertModel( 26012,
"model_hFritiofCaptureAtRest_DIO" );
539 InsertModel( 26020,
"model_hFritiofWithBinaryCascadeCaptureAtRest_EMCascade" );
540 InsertModel( 26021,
"model_hFritiofWithBinaryCascadeCaptureAtRest_NuclearCapture" );
541 InsertModel( 26022,
"model_hFritiofWithBinaryCascadeCaptureAtRest_DIO" );
543 InsertModel( 26030,
"model_muMinusCaptureAtRest_EMCascade" );
544 InsertModel( 26031,
"model_muMinusCaptureAtRest_NuclearCapture" );
545 InsertModel( 26032,
"model_muMinusCaptureAtRest_DIO" );
550 InsertModel( 26100,
"model_G4LFission" );
553 InsertModel( 26110,
"model_G4LLNLFission" );
558 InsertModel( 26200,
"model_G4WilsonAbrasion" );
563 InsertModel( 26300,
"model_G4CRCoalescence" );
575 InsertModel( 30010,
"model_GenBiasForceCollision" );
583 InsertModel( 31010,
"model_channeling" );
597 isInitialized =
true;
610void G4PhysicsModelCatalog::SanityCheck() {
611 if ( theVectorOfModelIDs->size() != theVectorOfModelNames->size() ) {
613 ed <<
"theVectorOfModelIDs' size=" << theVectorOfModelIDs->size()
614 <<
" is NOT the same as theVectorOfModelNames's size=" << theVectorOfModelNames->size();
615 G4Exception(
"G4PhysicsModelCatalog::SanityCheck()",
"PhysModelCatalog001",
618 G4bool isModelIDOutsideRange =
false;
619 G4bool isModelIDRepeated =
false;
620 G4bool isModelNameRepeated =
false;
621 for (
int idx = 0; idx <
Entries(); ++idx ) {
622 G4int modelID = (*theVectorOfModelIDs)[ idx ];
623 G4String modelName = (*theVectorOfModelNames)[ idx ];
625 isModelIDOutsideRange =
true;
627 for (
int jdx = idx + 1; jdx <
Entries(); ++jdx ) {
628 if(modelID == (*theVectorOfModelIDs)[jdx])
630 isModelIDRepeated =
true;
632 if(modelName == (*theVectorOfModelNames)[jdx])
634 isModelNameRepeated =
true;
638 if ( isModelIDOutsideRange || isModelIDRepeated || isModelNameRepeated ) {
640 if(isModelIDOutsideRange)
642 ed <<
"theVectorOfModelIDs has NOT all entries between "
646 if(isModelIDRepeated)
648 ed <<
"theVectorOfModelIDs has NOT all unique IDs !";
650 if(isModelNameRepeated)
652 ed <<
"theVectorOfModelNames has NOT all unique names !";
654 G4Exception(
"G4PhysicsModelCatalog::SanityCheck()",
"PhysModelCatalog002",
667 for (
int idx = 0; idx <
Entries(); ++idx ) {
668 if ( (*theVectorOfModelIDs)[ idx ] == modelID ) {
669 modelName = (*theVectorOfModelNames)[ idx ];
679 return ( modelIndex >= 0 && modelIndex <
Entries() ) ? (*theVectorOfModelNames)[ modelIndex ] :
"Undefined";
684 return ( modelIndex >= 0 && modelIndex <
Entries() ) ? (*theVectorOfModelIDs)[ modelIndex ] : -1;
695 if ( (*theVectorOfModelNames)[ idx ] == modelName ) {
696 modelID = (*theVectorOfModelIDs)[ idx ];
705 G4int modelIndex = -1;
708 if ( (*theVectorOfModelIDs)[ idx ] == modelID ) {
719 G4int modelIndex = -1;
721 if ( (*theVectorOfModelNames)[ idx ] == modelName ) {
732 return ( theVectorOfModelIDs !=
nullptr ) ?
G4int( theVectorOfModelIDs->size() ) : -1;
738 <<
" ==================================================== " <<
G4endl
739 <<
" === G4PhysicsModelCatalog::PrintAllInformation() === " <<
G4endl
740 <<
" ==================================================== " <<
G4endl
741 <<
" SIZE (i.e. number of models in the catalog)=" <<
Entries() <<
G4endl;
742 for (
int idx = 0; idx <
Entries(); ++idx ) {
743 G4int modelID = (*theVectorOfModelIDs)[ idx ];
744 G4String modelName = (*theVectorOfModelNames)[ idx ];
745 G4cout <<
"\t index=" << idx <<
"\t modelName=" << modelName
746 <<
"\t modelID=" << modelID <<
G4endl;
748 G4cout <<
" ==================================================== " <<
G4endl
749 <<
" ==================================================== " <<
G4endl
750 <<
" ==================================================== " <<
G4endl
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4GLOB_DLL std::ostream G4cout
static const G4String GetModelNameFromIndex(const G4int modelIndex)
static G4int GetMaxAllowedModelIDValue()
static G4int GetMinAllowedModelIDValue()
static void PrintAllInformation()
static G4int GetModelIndex(const G4int modelID)
static const G4String GetModelNameFromID(const G4int modelID)
static G4int GetModelID(const G4int modelIndex)