File indexing completed on 2023-03-17 11:24:51
0001 #include "SimG4Core/CustomPhysics/interface/CustomPhysics.h"
0002 #include "SimG4Core/CustomPhysics/interface/CustomPhysicsList.h"
0003 #include "SimG4Core/CustomPhysics/interface/CustomPhysicsListSS.h"
0004 #include "SimG4Core/PhysicsLists/interface/CMSEmStandardPhysics.h"
0005 #include "SimG4Core/PhysicsLists/interface/CMSHadronPhysicsFTFP_BERT.h"
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007 #include "SimG4Core/CustomPhysics/interface/APrimePhysics.h"
0008
0009 #include "G4DecayPhysics.hh"
0010 #include "G4EmExtraPhysics.hh"
0011 #include "G4IonPhysics.hh"
0012 #include "G4StoppingPhysics.hh"
0013 #include "G4HadronElasticPhysics.hh"
0014 #include "G4NeutronTrackingCut.hh"
0015
0016 #include "G4SystemOfUnits.hh"
0017
0018 CustomPhysics::CustomPhysics(const edm::ParameterSet& p) : PhysicsList(p) {
0019 int ver = p.getUntrackedParameter<int>("Verbosity", 0);
0020 bool tracking = p.getParameter<bool>("TrackingCut");
0021 bool ssPhys = p.getUntrackedParameter<bool>("ExoticaPhysicsSS", false);
0022 bool dbrem = p.getUntrackedParameter<bool>("DBrem", false);
0023 double timeLimit = p.getParameter<double>("MaxTrackTime") * ns;
0024 edm::LogInfo("PhysicsList") << "You are using the simulation engine: "
0025 << "FTFP_BERT_EMM for regular particles \n"
0026 << "CustomPhysicsList " << ssPhys << " for exotics; "
0027 << " tracking cut " << tracking << " t(ns)= " << timeLimit / ns;
0028
0029 RegisterPhysics(new CMSEmStandardPhysics(ver, p));
0030
0031
0032 RegisterPhysics(new G4EmExtraPhysics(ver));
0033
0034
0035 RegisterPhysics(new G4DecayPhysics(ver));
0036
0037
0038 RegisterPhysics(new G4HadronElasticPhysics(ver));
0039
0040
0041 RegisterPhysics(new CMSHadronPhysicsFTFP_BERT(ver));
0042
0043
0044 RegisterPhysics(new G4StoppingPhysics(ver));
0045
0046
0047 RegisterPhysics(new G4IonPhysics(ver));
0048
0049
0050 if (tracking) {
0051 G4NeutronTrackingCut* ncut = new G4NeutronTrackingCut(ver);
0052 ncut->SetTimeLimit(timeLimit);
0053 RegisterPhysics(ncut);
0054 }
0055
0056
0057 if (dbrem) {
0058 RegisterPhysics(new APrimePhysics(p.getUntrackedParameter<double>("DBremMass"),
0059 p.getUntrackedParameter<std::string>("DBremScaleFile"),
0060 p.getUntrackedParameter<double>("DBremBiasFactor")));
0061 } else if (ssPhys) {
0062 RegisterPhysics(new CustomPhysicsListSS("custom", p));
0063 } else {
0064 RegisterPhysics(new CustomPhysicsList("custom", p));
0065 }
0066 }