GGS(GenericGEANT4Simulation)Software  2.99.0
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Macros
GGSCRMCPhysicsList.cpp
1 /*
2  * GGSCRMCPhysicsList.cpp
3  *
4  * Created on: 15 Feb 2019
5  * Author: Nicola Mori
6  */
7 
8 #include "montecarlo/physicslists/GGSCRMCPhysicsList.h"
10 #include "utils/GGSSmartLog.h"
11 
12 #include "G4HadronPhysicsCRMC.hh"
13 
15 
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");
28 }
29 
31  const std::string routineName("GGSCRMCPhysicsList::ConstructProcess");
32 
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.");
36  }
37 
38  FTFP_BERT::ConstructProcess();
39 
40  // Set CRMC underlying model
41  // 0 - EPOS LHC 1 - EPOS 1.99 12 - DPMJET3
42  // see CRMC documentation for the complete list of
43  // available models
44  int crmcModelID = -1;
45 
46  // Post-LHC
47  if (_modelName == "EPOS-LHC") {
48  crmcModelID = 0;
49  } else if (_modelName == "QGSJETII-04") {
50  crmcModelID = 7;
51  } else if (_modelName == "SIBYLL-2.3") {
52  crmcModelID = 6;
53  }
54  // Pre-LHC
55  else if (_modelName == "DPMJET") {
56  crmcModelID = 12;
57  } else if (_modelName == "EPOS-1.99") {
58  crmcModelID = 1;
59  } else if (_modelName == "QGSJET-01") {
60  crmcModelID = 2;
61  } else if (_modelName == "QGSJETII-03") {
62  crmcModelID = 11;
63  }
64 
65  else {
66  G4Exception("GGSCRMCPhysicsList::ConstructProcess", "0", G4ExceptionSeverity::FatalException,
67  std::string("Unknown model: ").append(_modelName).c_str());
68  }
69 
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();
75 }
#define GGSENDL
Definition: GGSSmartLog.h:131
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.