33 : G4VPhysicsConstructor(
"Monopole physics"),
40 const auto monopoleInPDG = TDatabasePDG::Instance()->GetParticle(c_monopolePDGCode);
41 const auto antiMonopoleInPDG = TDatabasePDG::Instance()->GetParticle(-c_monopolePDGCode);
42 if (!monopoleInPDG || !antiMonopoleInPDG) {
43 B2FATAL(
"Monopole physics was requested, but the monopole parameters"
44 "were not registered in local PDG database under PID code " << c_monopolePDGCode);
46 fElCharge = monopoleInPDG->Charge() / 3.0;
48 SetPhysicsType(bUnknown);
65 if (verboseLevel > 0) {
66 G4cout <<
"G4MonopolePhysics::ConstructProcess" << G4endl;
69 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
70 G4ProcessManager* pmanager[2] = {
fMpl->GetProcessManager(),
fApl->GetProcessManager()};
74 G4double magn =
fMpl->MagneticCharge();
75 G4double elec =
fMpl->GetPDGCharge();
77 if (emin < keV) { emin = keV; }
79 G4int nbin = G4lrint(10 * std::log10(emax / emin));
83 pmanager[0]->RemoveProcess(0);
85 pmanager[1]->RemoveProcess(0);
93 G4double chg =
sqrt(magn * magn + elec * elec);
95 mplioni->SetDEDXBinning(nbin);
96 mplioni->SetMinKinEnergy(emin);
97 mplioni->SetMaxKinEnergy(emax);
98 ph->RegisterProcess(mplioni,
fMpl);
99 ph->RegisterProcess(mplioni,
fApl);
101 if (elec != 0.0 && magn == 0.0) {
102 G4hIonisation* hhioni =
new G4hIonisation();
103 hhioni->SetDEDXBinning(nbin);
104 hhioni->SetMinKinEnergy(emin);
105 hhioni->SetMaxKinEnergy(emax);
106 ph->RegisterProcess(hhioni,
fMpl);
107 ph->RegisterProcess(hhioni,
fApl);
109 ph->RegisterProcess(
new G4StepLimiter(),
fMpl);
110 ph->RegisterProcess(
new G4StepLimiter(),
fApl);