File indexing completed on 2023-03-17 11:25:01
0001 #include "QBBCCMS.h"
0002 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0003 #include "SimG4Core/PhysicsLists/interface/CMSEmStandardPhysics.h"
0004
0005 #include "G4EmStandardPhysics.hh"
0006 #include "G4DecayPhysics.hh"
0007 #include "G4EmExtraPhysics.hh"
0008 #include "G4StoppingPhysics.hh"
0009 #include "G4HadronicProcessStore.hh"
0010
0011 #include "G4HadronInelasticQBBC.hh"
0012 #include "G4HadronElasticPhysicsXS.hh"
0013 #include "G4IonPhysics.hh"
0014 #include "G4NeutronTrackingCut.hh"
0015
0016 QBBCCMS::QBBCCMS(const edm::ParameterSet& p) : PhysicsList(p) {
0017 int ver = p.getUntrackedParameter<int>("Verbosity", 0);
0018 bool emPhys = p.getUntrackedParameter<bool>("EMPhysics", true);
0019 bool hadPhys = p.getUntrackedParameter<bool>("HadPhysics", true);
0020 bool tracking = p.getParameter<bool>("TrackingCut");
0021 double timeLimit = p.getParameter<double>("MaxTrackTime") * CLHEP::ns;
0022 edm::LogVerbatim("PhysicsList") << "You are using the simulation engine: "
0023 << "FTFP_BERT_EMM: \n Flags for EM Physics: " << emPhys
0024 << "; Hadronic Physics: " << hadPhys << "; tracking cut: " << tracking
0025 << "; time limit(ns)= " << timeLimit / CLHEP::ns;
0026
0027 if (emPhys) {
0028
0029 RegisterPhysics(new CMSEmStandardPhysics(ver, p));
0030
0031
0032 G4EmExtraPhysics* gn = new G4EmExtraPhysics(ver);
0033 RegisterPhysics(gn);
0034 }
0035
0036
0037 RegisterPhysics(new G4DecayPhysics(ver));
0038
0039 if (hadPhys) {
0040 G4HadronicProcessStore::Instance()->SetVerbose(ver);
0041
0042
0043 RegisterPhysics(new G4HadronElasticPhysicsXS(ver));
0044
0045
0046 RegisterPhysics(new G4HadronInelasticQBBC(ver));
0047
0048
0049 RegisterPhysics(new G4StoppingPhysics(ver));
0050
0051
0052 RegisterPhysics(new G4IonPhysics(ver));
0053
0054
0055 if (tracking) {
0056 G4NeutronTrackingCut* ncut = new G4NeutronTrackingCut(ver);
0057 ncut->SetTimeLimit(timeLimit);
0058 RegisterPhysics(ncut);
0059 }
0060 }
0061 }