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( 24120,
"model_G4UnstableFragmentBreakUp" );
326 InsertModel( 24150,
"model_G4PhotonEvaporation" );
329 InsertModel( 24160,
"model_nRadCapture" );
334 InsertModel( 24200,
"model_G4GEMChannel" );
337 InsertModel( 24210,
"model_G4GEMChannelVI" );
342 InsertModel( 24300,
"model_G4FermiBreakUpVI" );
347 InsertModel( 24350,
"model_G4StatMF" );
352 InsertModel( 24400,
"model_G4WilsonAblationModel" );
357 InsertModel( 24450,
"model_G4CompetitiveFission" );
362 InsertModel( 24500,
"model_ABLA" );
367 InsertModel( 24600,
"model_G4EquilibriumEvaporator" );
384 InsertModel( 25000,
"model_NeutronHPCapture" );
387 InsertModel( 25010,
"model_NeutronHPElastic" );
390 InsertModel( 25020,
"model_NeutronHPFission" );
396 InsertModel( 25030,
"model_G4ParticleHPNInelasticFS_F01" );
398 InsertModel( 25031,
"model_G4ParticleHPNXInelasticFS_F02" );
400 InsertModel( 25032,
"model_G4ParticleHP2NDInelasticFS_F03" );
402 InsertModel( 25033,
"model_G4ParticleHP2NInelasticFS_F04" );
404 InsertModel( 25034,
"model_G4ParticleHP3NInelasticFS_F05" );
406 InsertModel( 25035,
"model_G4ParticleHPNAInelasticFS_F06" );
408 InsertModel( 25036,
"model_G4ParticleHPN3AInelasticFS_F07" );
410 InsertModel( 25037,
"model_G4ParticleHP2NAInelasticFS_F08" );
412 InsertModel( 25038,
"model_G4ParticleHP3NAInelasticFS_F09" );
414 InsertModel( 25039,
"model_G4ParticleHPNPInelasticFS_F10" );
416 InsertModel( 25040,
"model_G4ParticleHPN2AInelasticFS_F11" );
418 InsertModel( 25041,
"model_G4ParticleHP2N2AInelasticFS_F12" );
420 InsertModel( 25042,
"model_G4ParticleHPNDInelasticFS_F13" );
422 InsertModel( 25043,
"model_G4ParticleHPNTInelasticFS_F14" );
424 InsertModel( 25044,
"model_G4ParticleHPNHe3InelasticFS_F15" );
426 InsertModel( 25045,
"model_G4ParticleHPND2AInelasticFS_F16" );
428 InsertModel( 25046,
"model_G4ParticleHPNT2AInelasticFS_F17" );
430 InsertModel( 25047,
"model_G4ParticleHP4NInelasticFS_F18" );
432 InsertModel( 25048,
"model_G4ParticleHP2NPInelasticFS_F19" );
434 InsertModel( 25049,
"model_G4ParticleHP3NPInelasticFS_F20" );
436 InsertModel( 25050,
"model_G4ParticleHPN2PInelasticFS_F21" );
438 InsertModel( 25051,
"model_G4ParticleHPNPAInelasticFS_F22" );
440 InsertModel( 25052,
"model_G4ParticleHPPInelasticFS_F23" );
442 InsertModel( 25053,
"model_G4ParticleHPDInelasticFS_F24" );
444 InsertModel( 25054,
"model_G4ParticleHPTInelasticFS_F25" );
446 InsertModel( 25055,
"model_G4ParticleHPHe3InelasticFS_F26" );
448 InsertModel( 25056,
"model_G4ParticleHPAInelasticFS_F27" );
450 InsertModel( 25057,
"model_G4ParticleHP2AInelasticFS_F28" );
452 InsertModel( 25058,
"model_G4ParticleHP3AInelasticFS_F29" );
454 InsertModel( 25059,
"model_G4ParticleHP2PInelasticFS_F30" );
456 InsertModel( 25060,
"model_G4ParticleHPPAInelasticFS_F31" );
458 InsertModel( 25061,
"model_G4ParticleHPD2AInelasticFS_F32" );
460 InsertModel( 25062,
"model_G4ParticleHPT2AInelasticFS_F33" );
462 InsertModel( 25063,
"model_G4ParticleHPPDInelasticFS_F34" );
464 InsertModel( 25064,
"model_G4ParticleHPPTInelasticFS_F35" );
466 InsertModel( 25065,
"model_G4ParticleHPDAInelasticFS_F36" );
471 InsertModel( 25200,
"model_LENDModel" );
476 InsertModel( 25210,
"model_LENDCapture" );
478 InsertModel( 25220,
"model_LENDElastic" );
480 InsertModel( 25230,
"model_LENDFission" );
482 InsertModel( 25240,
"model_LENDInelastic" );
484 InsertModel( 25250,
"model_LENDCombinedModel" );
486 InsertModel( 25260,
"model_LENDGammaModel" );
491 InsertModel( 25510,
"model_RDM_IT" );
492 InsertModel( 25520,
"model_RDM_BetaMinus" );
493 InsertModel( 25530,
"model_RDM_BetaPlus" );
494 InsertModel( 25540,
"model_RDM_KshellEC" );
495 InsertModel( 25550,
"model_RDM_LshellEC" );
496 InsertModel( 25560,
"model_RDM_MshellEC" );
497 InsertModel( 25570,
"model_RDM_NshellEC" );
498 InsertModel( 25580,
"model_RDM_Alpha" );
499 InsertModel( 25590,
"model_RDM_Proton" );
500 InsertModel( 25600,
"model_RDM_Neutron" );
501 InsertModel( 25610,
"model_RDM_SpFission" );
502 InsertModel( 25620,
"model_RDM_BDProton" );
503 InsertModel( 25630,
"model_RDM_BDNeutron" );
504 InsertModel( 25640,
"model_RDM_Beta2Minus" );
505 InsertModel( 25650,
"model_RDM_Beta2Plus" );
506 InsertModel( 25660,
"model_RDM_Proton2" );
507 InsertModel( 25670,
"model_RDM_Neutron2" );
508 InsertModel( 25680,
"model_RDM_Triton" );
510 InsertModel( 25810,
"model_RDM_AtomicRelaxation" );
528 InsertModel( 26000,
"model_hBertiniCaptureAtRest_EMCascade" );
529 InsertModel( 26001,
"model_hBertiniCaptureAtRest_NuclearCapture" );
530 InsertModel( 26002,
"model_hBertiniCaptureAtRest_DIO" );
532 InsertModel( 26010,
"model_hFritiofCaptureAtRest_EMCascade" );
533 InsertModel( 26011,
"model_hFritiofCaptureAtRest_NuclearCapture" );
534 InsertModel( 26012,
"model_hFritiofCaptureAtRest_DIO" );
536 InsertModel( 26020,
"model_hFritiofWithBinaryCascadeCaptureAtRest_EMCascade" );
537 InsertModel( 26021,
"model_hFritiofWithBinaryCascadeCaptureAtRest_NuclearCapture" );
538 InsertModel( 26022,
"model_hFritiofWithBinaryCascadeCaptureAtRest_DIO" );
540 InsertModel( 26030,
"model_muMinusCaptureAtRest_EMCascade" );
541 InsertModel( 26031,
"model_muMinusCaptureAtRest_NuclearCapture" );
542 InsertModel( 26032,
"model_muMinusCaptureAtRest_DIO" );
547 InsertModel( 26100,
"model_G4LFission" );
550 InsertModel( 26110,
"model_G4LLNLFission" );
555 InsertModel( 26200,
"model_G4WilsonAbrasion" );
560 InsertModel( 26300,
"model_G4CRCoalescence" );
572 InsertModel( 30010,
"model_GenBiasForceCollision" );
580 InsertModel( 31010,
"model_channeling" );
592 InsertModel( 26040,
"model_hINCLXXCaptureAtRest_EMCascade" );
593 InsertModel( 26041,
"model_hINCLXXCaptureAtRest_NuclearCapture" );
594 InsertModel( 26042,
"model_hINCLXXCaptureAtRest_DIO" );
597 InsertModel( 23310,
"model_LightIonQMDModel" );
603 InsertModel( 25300,
"model_nuDEX_neutronCapture" );
606 InsertModel( 12020,
"model_Cerenkov" );
607 InsertModel( 12021,
"model_QuasiCerenkov" );
608 InsertModel( 12030,
"model_Scintillation" );
609 InsertModel( 12031,
"model_QuasiScintillation" );
610 InsertModel( 12040,
"model_SynRad" );
611 InsertModel( 12050,
"model_SynchrotronRadiation" );
612 InsertModel( 12060,
"model_XTRenergyLoss" );
613 InsertModel( 12070,
"model_XrayTR" );
616 InsertModel( 21350,
"model_QuasiElastic_FTF" );
617 InsertModel( 21600,
"model_Diffractive_FTF" );
622 isInitialized =
true;
635void G4PhysicsModelCatalog::SanityCheck() {
636 if ( theVectorOfModelIDs->size() != theVectorOfModelNames->size() ) {
638 ed <<
"theVectorOfModelIDs' size=" << theVectorOfModelIDs->size()
639 <<
" is NOT the same as theVectorOfModelNames's size=" << theVectorOfModelNames->size();
640 G4Exception(
"G4PhysicsModelCatalog::SanityCheck()",
"PhysModelCatalog001",
643 G4bool isModelIDOutsideRange =
false;
644 G4bool isModelIDRepeated =
false;
645 G4bool isModelNameRepeated =
false;
646 for (
int idx = 0; idx <
Entries(); ++idx ) {
647 G4int modelID = (*theVectorOfModelIDs)[ idx ];
648 G4String modelName = (*theVectorOfModelNames)[ idx ];
650 isModelIDOutsideRange =
true;
652 for (
int jdx = idx + 1; jdx <
Entries(); ++jdx ) {
653 if(modelID == (*theVectorOfModelIDs)[jdx])
655 isModelIDRepeated =
true;
657 if(modelName == (*theVectorOfModelNames)[jdx])
659 isModelNameRepeated =
true;
663 if ( isModelIDOutsideRange || isModelIDRepeated || isModelNameRepeated ) {
665 if(isModelIDOutsideRange)
667 ed <<
"theVectorOfModelIDs has NOT all entries between "
671 if(isModelIDRepeated)
673 ed <<
"theVectorOfModelIDs has NOT all unique IDs !";
675 if(isModelNameRepeated)
677 ed <<
"theVectorOfModelNames has NOT all unique names !";
679 G4Exception(
"G4PhysicsModelCatalog::SanityCheck()",
"PhysModelCatalog002",
692 for (
int idx = 0; idx <
Entries(); ++idx ) {
693 if ( (*theVectorOfModelIDs)[ idx ] == modelID ) {
694 modelName = (*theVectorOfModelNames)[ idx ];
704 return ( modelIndex >= 0 && modelIndex <
Entries() )
705 ? (*theVectorOfModelNames)[ modelIndex ] :
G4String(
"Undefined");
710 return ( modelIndex >= 0 && modelIndex <
Entries() )
711 ? (*theVectorOfModelIDs)[ modelIndex ] : -1;
722 if ( (*theVectorOfModelNames)[ idx ] == modelName ) {
723 modelID = (*theVectorOfModelIDs)[ idx ];
732 G4int modelIndex = -1;
735 if ( (*theVectorOfModelIDs)[ idx ] == modelID ) {
746 G4int modelIndex = -1;
748 if ( (*theVectorOfModelNames)[ idx ] == modelName ) {
759 return ( theVectorOfModelIDs !=
nullptr ) ?
G4int( theVectorOfModelIDs->size() ) : -1;
765 <<
" ==================================================== " <<
G4endl
766 <<
" === G4PhysicsModelCatalog::PrintAllInformation() === " <<
G4endl
767 <<
" ==================================================== " <<
G4endl
768 <<
" SIZE (i.e. number of models in the catalog)=" <<
Entries() <<
G4endl;
769 for (
int idx = 0; idx <
Entries(); ++idx ) {
770 G4int modelID = (*theVectorOfModelIDs)[ idx ];
771 G4String modelName = (*theVectorOfModelNames)[ idx ];
772 G4cout <<
"\t index=" << idx <<
"\t modelName=" << modelName
773 <<
"\t modelID=" << modelID <<
G4endl;
775 G4cout <<
" ==================================================== " <<
G4endl
776 <<
" ==================================================== " <<
G4endl
777 <<
" ==================================================== " <<
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)