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" );
595 InsertModel( 26040,
"model_hINCLXXCaptureAtRest_EMCascade" );
596 InsertModel( 26041,
"model_hINCLXXCaptureAtRest_NuclearCapture" );
597 InsertModel( 26042,
"model_hINCLXXCaptureAtRest_DIO" );
600 InsertModel( 23310,
"model_LightIonQMDModel" );
605 isInitialized =
true;
618void G4PhysicsModelCatalog::SanityCheck() {
619 if ( theVectorOfModelIDs->size() != theVectorOfModelNames->size() ) {
621 ed <<
"theVectorOfModelIDs' size=" << theVectorOfModelIDs->size()
622 <<
" is NOT the same as theVectorOfModelNames's size=" << theVectorOfModelNames->size();
623 G4Exception(
"G4PhysicsModelCatalog::SanityCheck()",
"PhysModelCatalog001",
626 G4bool isModelIDOutsideRange =
false;
627 G4bool isModelIDRepeated =
false;
628 G4bool isModelNameRepeated =
false;
629 for (
int idx = 0; idx <
Entries(); ++idx ) {
630 G4int modelID = (*theVectorOfModelIDs)[ idx ];
631 G4String modelName = (*theVectorOfModelNames)[ idx ];
633 isModelIDOutsideRange =
true;
635 for (
int jdx = idx + 1; jdx <
Entries(); ++jdx ) {
636 if(modelID == (*theVectorOfModelIDs)[jdx])
638 isModelIDRepeated =
true;
640 if(modelName == (*theVectorOfModelNames)[jdx])
642 isModelNameRepeated =
true;
646 if ( isModelIDOutsideRange || isModelIDRepeated || isModelNameRepeated ) {
648 if(isModelIDOutsideRange)
650 ed <<
"theVectorOfModelIDs has NOT all entries between "
654 if(isModelIDRepeated)
656 ed <<
"theVectorOfModelIDs has NOT all unique IDs !";
658 if(isModelNameRepeated)
660 ed <<
"theVectorOfModelNames has NOT all unique names !";
662 G4Exception(
"G4PhysicsModelCatalog::SanityCheck()",
"PhysModelCatalog002",
675 for (
int idx = 0; idx <
Entries(); ++idx ) {
676 if ( (*theVectorOfModelIDs)[ idx ] == modelID ) {
677 modelName = (*theVectorOfModelNames)[ idx ];
687 return ( modelIndex >= 0 && modelIndex <
Entries() )
688 ? (*theVectorOfModelNames)[ modelIndex ] :
G4String(
"Undefined");
693 return ( modelIndex >= 0 && modelIndex <
Entries() )
694 ? (*theVectorOfModelIDs)[ modelIndex ] : -1;
705 if ( (*theVectorOfModelNames)[ idx ] == modelName ) {
706 modelID = (*theVectorOfModelIDs)[ idx ];
715 G4int modelIndex = -1;
718 if ( (*theVectorOfModelIDs)[ idx ] == modelID ) {
729 G4int modelIndex = -1;
731 if ( (*theVectorOfModelNames)[ idx ] == modelName ) {
742 return ( theVectorOfModelIDs !=
nullptr ) ?
G4int( theVectorOfModelIDs->size() ) : -1;
748 <<
" ==================================================== " <<
G4endl
749 <<
" === G4PhysicsModelCatalog::PrintAllInformation() === " <<
G4endl
750 <<
" ==================================================== " <<
G4endl
751 <<
" SIZE (i.e. number of models in the catalog)=" <<
Entries() <<
G4endl;
752 for (
int idx = 0; idx <
Entries(); ++idx ) {
753 G4int modelID = (*theVectorOfModelIDs)[ idx ];
754 G4String modelName = (*theVectorOfModelNames)[ idx ];
755 G4cout <<
"\t index=" << idx <<
"\t modelName=" << modelName
756 <<
"\t modelID=" << modelID <<
G4endl;
758 G4cout <<
" ==================================================== " <<
G4endl
759 <<
" ==================================================== " <<
G4endl
760 <<
" ==================================================== " <<
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)