CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
CMSMonopolePhysics Class Reference

#include <CMSMonopolePhysics.h>

Inheritance diagram for CMSMonopolePhysics:

Public Member Functions

 CMSMonopolePhysics (const HepPDT::ParticleDataTable *table_, sim::ChordFinderSetter *cfs_, const edm::ParameterSet &p)
 
void ConstructParticle () override
 
void ConstructProcess () override
 
 ~CMSMonopolePhysics () override
 

Private Attributes

sim::ChordFinderSetterchordFinderSetter
 
G4bool deltaRay
 
std::vector< int > elCharges
 
G4int magCharge
 
std::vector< double > masses
 
std::vector< G4Monopole * > monopoles
 
G4bool multiSc
 
std::vector< std::string > names
 
std::vector< int > pdgEncodings
 
G4bool transport
 
G4int verbose
 

Detailed Description

Definition at line 18 of file CMSMonopolePhysics.h.

Constructor & Destructor Documentation

CMSMonopolePhysics::CMSMonopolePhysics ( const HepPDT::ParticleDataTable table_,
sim::ChordFinderSetter cfs_,
const edm::ParameterSet p 
)

Definition at line 19 of file CMSMonopolePhysics.cc.

References deltaRay, elCharges, ecalTB2006H4_GenSimDigiReco_cfg::G4cout, edm::ParameterSet::getUntrackedParameter(), GeV, cuy::ii, magCharge, ResonanceBuilder::mass, masses, monopoles, multiSc, names, AlCaHLTBitMon_ParallelJobs::p, HiggsValidation_cfi::particleName, pdgEncodings, AlCaHLTBitMon_QueryRunRegistry::string, and transport.

21  :
22  G4VPhysicsConstructor("Monopole Physics"), chordFinderSetter(cfs_) {
23 
24  verbose = p.getUntrackedParameter<int>("Verbosity",0);
25  magCharge = p.getUntrackedParameter<int>("MonopoleCharge",1);
26  deltaRay = p.getUntrackedParameter<bool>("MonopoleDeltaRay",true);
27  multiSc = p.getUntrackedParameter<bool>("MonopoleMultiScatter",false);
28  transport = p.getUntrackedParameter<bool>("MonopoleTransport",true);
29  double mass = p.getUntrackedParameter<double>("MonopoleMass",200);
30  if (pdt && mass > 0.0) {
31  int ii=0;
32  for (HepPDT::ParticleDataTable::const_iterator p=pdt->begin();
33  p != pdt->end(); ++p,++ii) {
34  HepPDT::ParticleData particle = (p->second);
35  std::string particleName = (particle.name()).substr(0,8);
36  if (strcmp(particleName.c_str(),"Monopole") == 0) {
37  names.push_back(particle.name());
38  masses.push_back(mass*CLHEP::GeV);
39  elCharges.push_back((int)(particle.charge()));
40  pdgEncodings.push_back(particle.pid());
41  monopoles.push_back(nullptr);
42  //std::cout << "CMSMonopolePhysics: Monopole[" << ii
43  if (verbose > 0) G4cout << "CMSMonopolePhysics: Monopole[" << ii
44  << "] " << particleName << " Mass "
45  << particle.mass() << " GeV, Magnetic Charge "
46  << magCharge << ", Electric Charge "
47  << particle.charge() << G4endl;
48  } else if(strcmp(particleName.c_str(),"AntiMono") == 0) {
49  names.push_back(particle.name());
50  masses.push_back(mass*CLHEP::GeV);
51  elCharges.push_back((int)(particle.charge()));
52  pdgEncodings.push_back(particle.pid());
53  monopoles.push_back(nullptr);
54  //std::cout << "CMSMonopolePhysics: Monopole[" << ii
55  if (verbose > 0) G4cout << "CMSMonopolePhysics: Monopole[" << ii
56  << "] " << particleName << " Mass "
57  << particle.mass() << " GeV, Magnetic Charge "
58  << magCharge << ", Electric Charge "
59  << particle.charge() << G4endl;
60  }
61  }
62  }
63  // std::cout << "CMSMonopolePhysics has " << names.size()
64  if (verbose > 0) G4cout << "CMSMonopolePhysics has " << names.size()
65  << " monopole candidates and delta Ray option "
66  << deltaRay << G4endl;
67 }
T getUntrackedParameter(std::string const &, T const &) const
const double GeV
Definition: MathUtil.h:16
std::vector< int > pdgEncodings
std::vector< G4Monopole * > monopoles
std::vector< int > elCharges
HepPDT::ParticleData ParticleData
std::vector< std::string > names
ii
Definition: cuy.py:588
sim::ChordFinderSetter * chordFinderSetter
std::vector< double > masses
CMSMonopolePhysics::~CMSMonopolePhysics ( )
override

Definition at line 69 of file CMSMonopolePhysics.cc.

69 {}

Member Function Documentation

void CMSMonopolePhysics::ConstructParticle ( )
override

Definition at line 71 of file CMSMonopolePhysics.cc.

References elCharges, ecalTB2006H4_GenSimDigiReco_cfg::G4cout, GeV, cuy::ii, magCharge, masses, monopoles, names, and pdgEncodings.

71  {
72 
73  for (unsigned int ii=0; ii<names.size(); ++ii) {
74  if (!monopoles[ii]) {
75  G4Monopole* mpl = new G4Monopole(names[ii], pdgEncodings[ii],
76  masses[ii], ((pdgEncodings[ii] > 0 ) ? magCharge : -magCharge), elCharges[ii]);;
77  monopoles[ii] = mpl;
78  //std::cout << "Create G4Monopole " << names[ii]
79  if (verbose > 0) G4cout << "Create G4Monopole " << names[ii]
80  << " of mass " << masses[ii]/CLHEP::GeV
81  << " GeV, magnetic charge " << ((pdgEncodings[ii] > 0) ? magCharge : -magCharge)
82  << ", electric charge " << elCharges[ii]
83  << " and PDG encoding " << pdgEncodings[ii]
84  << " at " << monopoles[ii] << G4endl;
85  }
86  }
87 }
const double GeV
Definition: MathUtil.h:16
std::vector< int > pdgEncodings
std::vector< G4Monopole * > monopoles
std::vector< int > elCharges
std::vector< std::string > names
ii
Definition: cuy.py:588
std::vector< double > masses
void CMSMonopolePhysics::ConstructProcess ( )
override

Definition at line 89 of file CMSMonopolePhysics.cc.

References chordFinderSetter, deltaRay, ecalTB2006H4_GenSimDigiReco_cfg::G4cout, GeV, training_settings::idx, cuy::ii, ResonanceBuilder::mass, SiStripPI::max, mod(), monopoles, multiSc, connectstrParser::o, HiggsValidation_cfi::particleName, proc, and transport.

89  {
90  // Add standard EM Processes
91  if (verbose > 0)
92  G4cout << "### CMSMonopolePhysics ConstructProcess()" << G4endl;
93  for (unsigned int ii=0; ii<monopoles.size(); ++ii) {
94  if (monopoles[ii]) {
95  G4Monopole* mpl = monopoles[ii];
96  G4ProcessManager *pmanager = mpl->GetProcessManager();
97  if(!pmanager) {
98  std::ostringstream o;
99  o << "Monopole without a Process Manager";
100  G4Exception("CMSMonopolePhysics::ConstructProcess()","",
101  FatalException,o.str().c_str());
102  }
103 
104  // Clear process list, for some reason G4Transportation is added
105  // somewhere, and it is not wanted (at least that was the
106  // behaviour before MT)
107  const G4int procLength = pmanager->GetProcessListLength();
108  for(G4int ip=procLength-1; ip >= 0; --ip) {
109  G4VProcess *proc = pmanager->RemoveProcess(ip);
110  if(!proc) {
111  std::ostringstream o;
112  o << "Clearing Monopole Process Manager failed for process " << ip << ", total number of processes " << procLength;
113  G4Exception("CMSMonopolePhysics::ConstructProcess()","",
114  FatalException,o.str().c_str());
115  }
116  }
117 
118  G4String particleName = mpl->GetParticleName();
119  G4double magn = mpl->MagneticCharge();
120  G4double mass = mpl->GetPDGMass();
121  if (verbose > 1)
122  G4cout << "### CMSMonopolePhysics instantiates for " << particleName
123  << " at " << mpl << " Mass " << mass/CLHEP::GeV
124  << " GeV Mag " << magn << " Process manager " << pmanager
125  << G4endl;
126 
127  // defined monopole parameters and binning
128 
129  G4double emin = mass/20000.;
130  if(emin < CLHEP::keV) emin = CLHEP::keV;
131  G4double emax = std::max(10.*CLHEP::TeV, mass*100);
132  G4int nbin = G4int(std::log10(emax/emin));
133  if (nbin < 1) nbin = 1;
134  nbin *= 10;
135 
136  G4int idx = 1;
137  if (verbose > 1)
138  G4cout << "### Magnetic charge " << magn << " and electric charge "
139  << mpl->GetPDGCharge() <<"\n # of bins in dE/dx table = "
140  << nbin << " in the range " << emin << ":" << emax << G4endl;
141 
142  if (magn == 0.0 || (!transport)) {
143  pmanager->AddProcess( new G4Transportation(verbose), -1, 0, 0);
144  } else {
145  pmanager->AddProcess( new G4MonopoleTransportation(mpl,chordFinderSetter,verbose), -1, 0, 0);
146  }
147 
148  if (mpl->GetPDGCharge() != 0.0) {
149  if (multiSc) {
150  G4hMultipleScattering* hmsc = new G4hMultipleScattering();
151  pmanager->AddProcess(hmsc, -1, idx, idx);
152  ++idx;
153  }
154  if (deltaRay) {
155  G4hIonisation* hhioni = new G4hIonisation();
156  hhioni->SetDEDXBinning(nbin);
157  hhioni->SetMinKinEnergy(emin);
158  hhioni->SetMaxKinEnergy(emax);
159  pmanager->AddProcess(hhioni, -1, idx, idx);
160  } else {
161  G4hhIonisation* hhioni = new G4hhIonisation();
162  hhioni->SetDEDXBinning(nbin);
163  hhioni->SetMinKinEnergy(emin);
164  hhioni->SetMaxKinEnergy(emax);
165  pmanager->AddProcess(hhioni, -1, idx, idx);
166  }
167  ++idx;
168  }
169  if(magn != 0.0) {
170  G4mplIonisation* mplioni = new G4mplIonisation(magn);
171  mplioni->SetDEDXBinning(nbin);
172  mplioni->SetMinKinEnergy(emin);
173  mplioni->SetMaxKinEnergy(emax);
174  if (!deltaRay) {
175  G4mplIonisationWithDeltaModel* mod =
176  new G4mplIonisationWithDeltaModel(magn,"PAI");
177  mplioni->AddEmModel(0,mod,mod);
178  }
179  pmanager->AddProcess(mplioni, -1, idx, idx);
180  ++idx;
181  }
182  pmanager->AddProcess( new G4StepLimiter(), -1, -1, idx);
183  if (verbose > 1) pmanager->DumpInfo();
184  }
185  }
186 }
const double GeV
Definition: MathUtil.h:16
TrainProcessor *const proc
Definition: MVATrainer.cc:101
std::vector< G4Monopole * > monopoles
ii
Definition: cuy.py:588
sim::ChordFinderSetter * chordFinderSetter
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4

Member Data Documentation

sim::ChordFinderSetter* CMSMonopolePhysics::chordFinderSetter
private

Definition at line 28 of file CMSMonopolePhysics.h.

Referenced by ConstructProcess().

G4bool CMSMonopolePhysics::deltaRay
private

Definition at line 30 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), and ConstructProcess().

std::vector<int> CMSMonopolePhysics::elCharges
private

Definition at line 33 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), and ConstructParticle().

G4int CMSMonopolePhysics::magCharge
private

Definition at line 29 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), and ConstructParticle().

std::vector<double> CMSMonopolePhysics::masses
private

Definition at line 32 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), and ConstructParticle().

std::vector<G4Monopole*> CMSMonopolePhysics::monopoles
private

Definition at line 34 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), ConstructParticle(), and ConstructProcess().

G4bool CMSMonopolePhysics::multiSc
private

Definition at line 30 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), and ConstructProcess().

std::vector<std::string> CMSMonopolePhysics::names
private

Definition at line 31 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), and ConstructParticle().

std::vector<int> CMSMonopolePhysics::pdgEncodings
private

Definition at line 33 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), and ConstructParticle().

G4bool CMSMonopolePhysics::transport
private

Definition at line 30 of file CMSMonopolePhysics.h.

Referenced by CMSMonopolePhysics(), and ConstructProcess().

G4int CMSMonopolePhysics::verbose
private

Definition at line 29 of file CMSMonopolePhysics.h.