6 #include "G4ParticleDefinition.hh" 7 #include "G4ProcessManager.hh" 9 #include "G4StepLimiter.hh" 10 #include "G4hMultipleScattering.hh" 11 #include "G4hIonisation.hh" 12 #include "G4hhIonisation.hh" 13 #include "G4mplIonisationModel.hh" 15 #include "CLHEP/Units/GlobalSystemOfUnits.h" 18 : G4VPhysicsConstructor(
"Monopole Physics") {
25 if (pdt && mass > 0.0) {
27 for (HepPDT::ParticleDataTable::const_iterator p = pdt->begin(); p != pdt->end(); ++
p, ++
ii) {
30 if (strcmp(particleName.c_str(),
"Monopole") == 0) {
31 names.push_back(particle.name());
33 elCharges.push_back((
int)(particle.charge()));
37 G4cout <<
"CMSMonopolePhysics: Monopole[" << ii <<
"] " << particleName <<
" Mass " << particle.mass()
38 <<
" GeV, Magnetic Charge " << magCharge <<
", Electric Charge " << particle.charge() << G4endl;
39 }
else if (strcmp(particleName.c_str(),
"AntiMono") == 0) {
40 names.push_back(particle.name());
42 elCharges.push_back((
int)(particle.charge()));
46 G4cout <<
"CMSMonopolePhysics: Monopole[" << ii <<
"] " << particleName <<
" Mass " << particle.mass()
47 <<
" GeV, Magnetic Charge " << magCharge <<
", Electric Charge " << particle.charge() << G4endl;
52 G4cout <<
"CMSMonopolePhysics has " <<
names.size() <<
" monopole candidates and delta Ray option " << deltaRay
59 for (
unsigned int ii = 0;
ii <
names.size(); ++
ii) {
76 G4cout <<
"### CMSMonopolePhysics ConstructProcess()" << G4endl;
78 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
83 G4ProcessManager* pmanager = mpl->GetProcessManager();
86 o <<
"Monopole without a Process Manager";
92 G4double
mass = mpl->GetPDGMass();
94 G4cout <<
"### CMSMonopolePhysics instantiates for " << mpl->GetParticleName() <<
" at " << mpl <<
" Mass " 95 << mass /
CLHEP::GeV <<
" GeV Mag " << magn <<
" Process manager " << pmanager << G4endl;
100 pmanager->RemoveProcess(idxt);
104 if (mpl->GetPDGCharge() != 0.0) {
106 G4hMultipleScattering* hmsc =
new G4hMultipleScattering();
107 ph->RegisterProcess(hmsc, mpl);
109 G4hIonisation* hioni =
new G4hIonisation();
110 ph->RegisterProcess(hioni, mpl);
115 G4mplIonisationModel* ion =
new G4mplIonisationModel(magn,
"PAI");
116 ion->SetParticle(mpl);
117 mplioni->AddEmModel(0, ion, ion);
119 ph->RegisterProcess(mplioni, mpl);
121 pmanager->AddDiscreteProcess(
new G4StepLimiter());
123 pmanager->DumpInfo();
T getUntrackedParameter(std::string const &, T const &) const
~CMSMonopolePhysics() override
std::vector< int > pdgEncodings
HepPDT::ParticleDataTable ParticleDataTable
std::vector< Monopole * > monopoles
std::vector< int > elCharges
HepPDT::ParticleData ParticleData
std::vector< std::string > names
void ConstructProcess() override
void ConstructParticle() override
CMSMonopolePhysics(const HepPDT::ParticleDataTable *table_, const edm::ParameterSet &p)
G4double MagneticCharge() const
std::vector< double > masses