File indexing completed on 2024-05-10 02:21:24
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 <CLHEP/Units/SystemOfUnits.h>
0017 using CLHEP::ns;
0018
0019 CustomPhysics::CustomPhysics(const edm::ParameterSet& p) : PhysicsList(p) {
0020 int ver = p.getUntrackedParameter<int>("Verbosity", 0);
0021 bool tracking = p.getParameter<bool>("TrackingCut");
0022 bool ssPhys = p.getUntrackedParameter<bool>("ExoticaPhysicsSS", false);
0023 bool dbrem = p.getUntrackedParameter<bool>("DBrem", false);
0024 double timeLimit = p.getParameter<double>("MaxTrackTime") * ns;
0025 edm::LogInfo("PhysicsList") << "You are using the simulation engine: "
0026 << "FTFP_BERT_EMM for regular particles \n"
0027 << "CustomPhysicsList " << ssPhys << " for exotics; "
0028 << " tracking cut " << tracking << " t(ns)= " << timeLimit / ns;
0029
0030 RegisterPhysics(new CMSEmStandardPhysics(ver, p));
0031
0032
0033 RegisterPhysics(new G4EmExtraPhysics(ver));
0034
0035
0036 RegisterPhysics(new G4DecayPhysics(ver));
0037
0038
0039 RegisterPhysics(new G4HadronElasticPhysics(ver));
0040
0041
0042 RegisterPhysics(new CMSHadronPhysicsFTFP_BERT(ver));
0043
0044
0045 RegisterPhysics(new G4StoppingPhysics(ver));
0046
0047
0048 RegisterPhysics(new G4IonPhysics(ver));
0049
0050
0051 if (tracking) {
0052 G4NeutronTrackingCut* ncut = new G4NeutronTrackingCut(ver);
0053 ncut->SetTimeLimit(timeLimit);
0054 RegisterPhysics(ncut);
0055 }
0056
0057
0058 if (dbrem) {
0059 RegisterPhysics(new APrimePhysics(p.getUntrackedParameter<double>("DBremMass"),
0060 p.getUntrackedParameter<std::string>("DBremScaleFile"),
0061 p.getUntrackedParameter<double>("DBremBiasFactor")));
0062 } else if (ssPhys) {
0063 RegisterPhysics(new CustomPhysicsListSS("custom", p));
0064 } else {
0065 RegisterPhysics(new CustomPhysicsList("custom", p));
0066 }
0067 }