1 #include "G4Version.hh" 2 #if G4VERSION_NUMBER >= 1100 8 #include "G4SystemOfUnits.hh" 9 #include "G4ParticleDefinition.hh" 10 #include "G4EmParameters.hh" 11 #include "G4EmBuilder.hh" 13 #include "G4hMultipleScattering.hh" 14 #include "G4ionIonisation.hh" 16 #include "G4ParticleTable.hh" 18 #include "G4Electron.hh" 19 #include "G4Positron.hh" 20 #include "G4GenericIon.hh" 22 #include "G4MuonNuclearProcess.hh" 23 #include "G4MuonVDNuclearModel.hh" 24 #include "G4MuonPlus.hh" 25 #include "G4MuonMinus.hh" 27 #include "G4PhysicsListHelper.hh" 28 #include "G4BuilderType.hh" 30 CMSEmStandardPhysicsEMMT::CMSEmStandardPhysicsEMMT(G4int ver,
const edm::ParameterSet&
p)
31 : G4VPhysicsConstructor(
"CMSEmStandard_emmt"), fParameterSet(
p) {
33 G4EmParameters* param = G4EmParameters::Instance();
35 param->SetVerbose(ver);
36 param->SetApplyCuts(
true);
37 param->SetStepFunction(0.8, 1 * CLHEP::mm);
38 param->SetMscRangeFactor(0.2);
39 param->SetMscStepLimitType(fMinimal);
40 param->SetFluo(
false);
41 SetPhysicsType(bElectromagnetic);
42 double tcut =
p.getParameter<
double>(
"G4TrackingCut") * CLHEP::MeV;
43 param->SetLowestElectronEnergy(tcut);
44 param->SetLowestMuHadEnergy(tcut);
47 CMSEmStandardPhysicsEMMT::~CMSEmStandardPhysicsEMMT() {}
49 void CMSEmStandardPhysicsEMMT::ConstructParticle() {
51 G4EmBuilder::ConstructMinimalEmSet();
54 void CMSEmStandardPhysicsEMMT::ConstructProcess() {
56 edm::LogVerbatim(
"PhysicsList") <<
"### " << GetPhysicsName() <<
" Construct EM Processes";
59 G4EmBuilder::PrepareEMPhysics();
61 G4PhysicsListHelper*
ph = G4PhysicsListHelper::GetPhysicsListHelper();
63 G4hMultipleScattering* hmsc =
new G4hMultipleScattering(
"ionmsc");
64 G4NuclearStopping* pnuc(
nullptr);
67 auto* trackingManager =
new CMSEmStandardPhysicsTrackingManager(fParameterSet);
69 G4Positron::Positron()->SetTrackingManager(trackingManager);
70 G4Gamma::Gamma()->SetTrackingManager(trackingManager);
73 G4ParticleDefinition* particle = G4GenericIon::GenericIon();
74 G4ionIonisation* ionIoni =
new G4ionIonisation();
75 ph->RegisterProcess(hmsc, particle);
76 ph->RegisterProcess(ionIoni, particle);
79 G4EmBuilder::ConstructCharged(hmsc, pnuc);
82 G4MuonNuclearProcess* muNucProcess =
new G4MuonNuclearProcess();
83 G4MuonVDNuclearModel* muNucModel =
new G4MuonVDNuclearModel();
84 muNucProcess->RegisterMe(muNucModel);
85 ph->RegisterProcess(muNucProcess, G4MuonPlus::MuonPlus());
86 ph->RegisterProcess(muNucProcess, G4MuonMinus::MuonMinus());
Log< level::Info, true > LogVerbatim