5 #include "G4ParticleDefinition.hh" 6 #include "G4ProcessManager.hh" 8 #include "G4StepLimiter.hh" 9 #include "G4mplIonisation.hh" 10 #include "G4mplIonisationWithDeltaModel.hh" 11 #include "G4hMultipleScattering.hh" 12 #include "G4hIonisation.hh" 13 #include "G4hhIonisation.hh" 15 #include "CLHEP/Units/GlobalSystemOfUnits.h" 19 G4VPhysicsConstructor(
"Monopole Physics")
27 if (pdt && mass > 0.0) {
29 for (HepPDT::ParticleDataTable::const_iterator p=pdt->begin();
30 p != pdt->end(); ++
p,++
ii) {
33 if (strcmp(particleName.c_str(),
"Monopole") == 0) {
34 names.push_back(particle.name());
36 elCharges.push_back((
int)(particle.charge()));
39 if (
verbose > 0)
G4cout <<
"CMSMonopolePhysics: Monopole[" << ii
40 <<
"] " << particleName <<
" Mass " 41 << particle.mass() <<
" GeV, Magnetic Charge " 42 << magCharge <<
", Electric Charge " 43 << particle.charge() << G4endl;
44 }
else if(strcmp(particleName.c_str(),
"AntiMono") == 0) {
45 names.push_back(particle.name());
47 elCharges.push_back((
int)(particle.charge()));
50 if (
verbose > 0)
G4cout <<
"CMSMonopolePhysics: Monopole[" << ii
51 <<
"] " << particleName <<
" Mass " 52 << particle.mass() <<
" GeV, Magnetic Charge " 53 << magCharge <<
", Electric Charge " 54 << particle.charge() << G4endl;
59 <<
" monopole candidates and delta Ray option " 60 << deltaRay << G4endl;
76 <<
" GeV, magnetic charge " << mc
87 G4cout <<
"### CMSMonopolePhysics ConstructProcess()" << G4endl;
89 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
94 G4ProcessManager *pmanager = mpl->GetProcessManager();
97 o <<
"Monopole without a Process Manager";
103 G4double
mass = mpl->GetPDGMass();
105 G4cout <<
"### CMSMonopolePhysics instantiates for " 106 << mpl->GetParticleName()
107 <<
" at " << mpl <<
" Mass " << mass/
CLHEP::GeV 108 <<
" GeV Mag " << magn <<
" Process manager " << pmanager
114 pmanager->RemoveProcess(idxt);
118 if (mpl->GetPDGCharge() != 0.0) {
120 G4hMultipleScattering* hmsc =
new G4hMultipleScattering();
121 ph->RegisterProcess(hmsc, mpl);
123 G4hIonisation* hioni =
new G4hIonisation();
124 ph->RegisterProcess(hioni, mpl);
127 G4mplIonisation* mplioni =
new G4mplIonisation(magn);
128 ph->RegisterProcess(mplioni, mpl);
130 pmanager->AddDiscreteProcess(
new G4StepLimiter());
131 if (
verbose > 1) { 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