8 #include "montecarlo/physicslists/GGSCRMCPhysicsList.h"
12 #include "G4HadronPhysicsCRMC.hh"
17 : FTFP_BERT(), _modelName("DPMJET"), _modelUpperThreshold(1. * CLHEP::TeV), _modelLowerThreshold(10. * CLHEP::TeV),
18 _messenger(this, "/GGS/physicsList/crmc/") {
19 _messenger.DeclareProperty(
"modelName", _modelName)
20 .SetCandidates(
"EPOS-LHC QGSJETII-04 SIBYLL-2.3 DPMJET EPOS-1.99 QGSJET-01 QGSJETII-03")
21 .SetGuidance(
"The CRMC model to be used for high-energy hadron-hadron interactions");
22 _messenger.DeclarePropertyWithUnit(
23 "modelLowerThreshold",
"TeV", _modelLowerThreshold,
24 "The lower energy threshold of the smooth transition region from FTFP_BERT to the CRMC model");
25 _messenger.DeclarePropertyWithUnit(
26 "modelUpperThreshold",
"TeV", _modelUpperThreshold,
27 "The upper energy threshold of the smooth transition region from FTFP_BERT to the CRMC model");
31 const std::string routineName(
"GGSCRMCPhysicsList::ConstructProcess");
33 if (G4Threading::IsMultithreadedApplication()) {
34 G4Exception(
"GGSCRMCPhysicsList::ConstructProcess",
"CRMC is not thread-safe", G4ExceptionSeverity::FatalException,
35 "GGSCRMC physics list can't be used in a MT run; please launch GGSPenny with the -st option.");
38 FTFP_BERT::ConstructProcess();
47 if (_modelName ==
"EPOS-LHC") {
49 }
else if (_modelName ==
"QGSJETII-04") {
51 }
else if (_modelName ==
"SIBYLL-2.3") {
55 else if (_modelName ==
"DPMJET") {
57 }
else if (_modelName ==
"EPOS-1.99") {
59 }
else if (_modelName ==
"QGSJET-01") {
61 }
else if (_modelName ==
"QGSJETII-03") {
66 G4Exception(
"GGSCRMCPhysicsList::ConstructProcess",
"0", G4ExceptionSeverity::FatalException,
67 std::string(
"Unknown model: ").append(_modelName).c_str());
70 GGSCOUT(INFO) <<
"CRMC hadronic interaction engine. Model: " << _modelName <<
", thresholds: ("
71 << _modelLowerThreshold / CLHEP::TeV <<
"," << _modelUpperThreshold / CLHEP::TeV <<
") TeV." <<
GGSENDL;
72 G4HadronPhysicsCRMC *crmcModel =
new G4HadronPhysicsCRMC(crmcModelID);
73 crmcModel->SetEnergyThreshold(_modelLowerThreshold, _modelUpperThreshold);
74 crmcModel->ConstructProcess();
void ConstructProcess()
Constructs the physical processes.
#define PhysicsListPlugin(plClass)
Macro for automatic definition of physics list builder function.
Physics list based on CRMC for high-energy hadron-hadron interactions.