CMS 3D CMS Logo

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

#include <MonopoleSteppingAction.h>

Inheritance diagram for MonopoleSteppingAction:
SimWatcher Observer< const BeginOfJob * > Observer< const BeginOfRun * > Observer< const BeginOfTrack * > Observer< const G4Step * >

Public Member Functions

 MonopoleSteppingAction (edm::ParameterSet const &p)
 
void update (const BeginOfJob *) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfRun *) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfTrack *) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const G4Step *) override
 This routine will be called when the appropriate signal arrives. More...
 
 ~MonopoleSteppingAction () override
 
- Public Member Functions inherited from SimWatcher
 SimWatcher ()
 
virtual ~SimWatcher ()
 
- Public Member Functions inherited from Observer< const BeginOfJob * >
 Observer ()
 
void slotForUpdate (const BeginOfJob * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfRun * >
 Observer ()
 
void slotForUpdate (const BeginOfRun * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfTrack * >
 Observer ()
 
void slotForUpdate (const BeginOfTrack * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const G4Step * >
 Observer ()
 
void slotForUpdate (const G4Step * iT)
 
virtual ~Observer ()
 

Private Attributes

bool actOnTrack
 
double bZ
 
double cInMByS
 
double cMevToJ
 
double cMeVToKgMByS
 
double dirxStart
 
double diryStart
 
double dirzStart
 
double eStart
 
double magCharge
 
bool mode
 
std::vector< int > pdgCode
 
double pxStart
 
double pyStart
 
double pzStart
 

Additional Inherited Members

Detailed Description

Definition at line 15 of file MonopoleSteppingAction.h.

Constructor & Destructor Documentation

MonopoleSteppingAction::MonopoleSteppingAction ( edm::ParameterSet const &  p)

Definition at line 23 of file MonopoleSteppingAction.cc.

References edm::ParameterSet::getUntrackedParameter(), and mode.

23  : actOnTrack(false), bZ(0) {
24  mode = p.getUntrackedParameter<bool>("ChangeFromFirstStep", true);
25  edm::LogInfo("SimG4CoreWatcher") << "MonopoleSeppingAction set mode for"
26  << " start at first step to " << mode;
27 }
MonopoleSteppingAction::~MonopoleSteppingAction ( )
override

Definition at line 29 of file MonopoleSteppingAction.cc.

29 {}

Member Function Documentation

void MonopoleSteppingAction::update ( const BeginOfJob )
overridevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfJob * >.

Definition at line 31 of file MonopoleSteppingAction.cc.

References Calorimetry_cff::bField, bZ, edm::EventSetup::get(), MagneticField::inTesla(), AlCaHLTBitMon_ParallelJobs::p, x, y, and z.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

31  {
32  const edm::EventSetup *iSetup = (*job)();
34  iSetup->get<IdealMagneticFieldRecord>().get(bFieldH);
35  const MagneticField *bField = bFieldH.product();
36  const GlobalPoint p(0, 0, 0);
37  bZ = (bField->inTesla(p)).z();
38  edm::LogInfo("SimG4CoreWatcher") << "Magnetic Field (X): " << (bField->inTesla(p)).x()
39  << " Y: " << (bField->inTesla(p)).y() << " Z: " << bZ;
40 }
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
T get() const
Definition: EventSetup.h:73
void MonopoleSteppingAction::update ( const BeginOfRun )
overridevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfRun * >.

Definition at line 42 of file MonopoleSteppingAction.cc.

References cInMByS, cMevToJ, cMeVToKgMByS, e_SI, cuy::ii, magCharge, HiggsValidation_cfi::particleName, pdgCode, edm::second(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

42  {
43  G4ParticleTable *partTable = G4ParticleTable::GetParticleTable();
44  magCharge = CLHEP::e_SI / CLHEP::fine_structure_const * 0.5;
45  for (int ii = 0; ii < partTable->size(); ii++) {
46  G4ParticleDefinition *particle = partTable->GetParticle(ii);
47  std::string particleName = (particle->GetParticleName()).substr(0, 8);
48  if (strcmp(particleName.c_str(), "Monopole") == 0) {
49  magCharge = CLHEP::e_SI * ((Monopole *)(particle))->MagneticCharge();
50  pdgCode.push_back(particle->GetPDGEncoding());
51  }
52  }
53  edm::LogInfo("SimG4CoreWatcher") << "MonopoleSeppingAction Finds " << pdgCode.size() << " candidates";
54  for (unsigned int ii = 0; ii < pdgCode.size(); ++ii) {
55  edm::LogInfo("SimG4CoreWatcher") << "PDG Code[" << ii << "] = " << pdgCode[ii];
56  }
57  cMevToJ = CLHEP::e_SI / CLHEP::eV;
58  cMeVToKgMByS = CLHEP::e_SI * CLHEP::meter / (CLHEP::eV * CLHEP::c_light * CLHEP::second);
59  cInMByS = CLHEP::c_light * CLHEP::second / CLHEP::meter;
60  edm::LogInfo("SimG4CoreWatcher") << "MonopoleSeppingAction Constants:"
61  << " MevToJoules = " << cMevToJ << ", MevToKgm/s = " << cMeVToKgMByS
62  << ", c in m/s = " << cInMByS << ", mag. charge = " << magCharge;
63 }
U second(std::pair< T, U > const &p)
#define e_SI
ii
Definition: cuy.py:590
void MonopoleSteppingAction::update ( const BeginOfTrack )
overridevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfTrack * >.

Definition at line 65 of file MonopoleSteppingAction.cc.

References actOnTrack, KineDebug3::count(), dirxStart, diryStart, dirzStart, eStart, GeV, LogDebug, pdgCode, pxStart, pyStart, and pzStart.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

65  {
66  actOnTrack = false;
67  if (!pdgCode.empty()) {
68  const G4Track *aTrack = (*trk)();
69  int code = aTrack->GetDefinition()->GetPDGEncoding();
70  if (std::count(pdgCode.begin(), pdgCode.end(), code) > 0) {
71  actOnTrack = true;
72  eStart = aTrack->GetTotalEnergy();
73  pxStart = aTrack->GetMomentum().x();
74  pyStart = aTrack->GetMomentum().y();
75  pzStart = aTrack->GetMomentum().z();
76  dirxStart = aTrack->GetMomentumDirection().x();
77  diryStart = aTrack->GetMomentumDirection().y();
78  dirzStart = aTrack->GetMomentumDirection().z();
79  LogDebug("SimG4CoreWatcher") << "MonopoleSeppingAction Track " << code << " Flag " << actOnTrack
80  << " (px,py,pz,E) = (" << pxStart / GeV << ", " << pyStart / GeV << ", "
81  << pzStart / GeV << ", " << eStart / GeV << ")";
82  }
83  }
84 }
#define LogDebug(id)
const double GeV
Definition: MathUtil.h:16
void MonopoleSteppingAction::update ( const G4Step *  )
overridevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const G4Step * >.

Definition at line 86 of file MonopoleSteppingAction.cc.

References actOnTrack, bZ, cInMByS, cMevToJ, cMeVToKgMByS, dirxStart, diryStart, eStart, EgHLTOffHistBins_cfi::et, LogDebug, visualization-live-secondInstance_cfg::m, magCharge, mode, PVValHelper::pT, HLT_2018_cff::pT1, pxStart, pyStart, pzStart, edm::second(), mathSSE::sqrt(), beampixel_dqm_sourceclient-live_cfg::xStep, beampixel_dqm_sourceclient-live_cfg::yStep, and beampixel_dqm_sourceclient-live_cfg::zStep.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

86  {
87  if (actOnTrack) {
88  double eT, pT, pZ, tStep;
89  G4Track *aTrack = aStep->GetTrack();
90  G4ThreeVector initialPosition(0, 0, 0);
91  if (mode) {
92  tStep = aTrack->GetGlobalTime();
95  pZ = pzStart;
96  } else {
97  const G4ThreeVector &dirStep = aTrack->GetMomentumDirection();
98  double lStep = aTrack->GetStepLength();
99  double xStep = aTrack->GetPosition().x() - lStep * dirStep.x();
100  double yStep = aTrack->GetPosition().y() - lStep * dirStep.y();
101  double zStep = aTrack->GetPosition().z() - lStep * dirStep.z();
102  double vStep = aTrack->GetVelocity();
103  initialPosition = G4ThreeVector(xStep, yStep, zStep);
104  tStep = (vStep > 0. ? (lStep / vStep) : 0.);
105  double eStep = aTrack->GetTotalEnergy();
106  eT = eStep * dirStep.perp();
107  pT = aTrack->GetMomentum().perp();
108  pZ = aTrack->GetMomentum().z();
109  }
110  LogDebug("SimG4CoreWatcher") << "MonopoleSeppingAction: tStep " << tStep << " eT " << eT << " pT " << pT << " pZ "
111  << pZ;
112  double eT1 = eT * cMevToJ;
113  double pT1 = pT * cMeVToKgMByS;
114  double pZ1 = pZ * cMeVToKgMByS;
115  double ts1 = tStep / CLHEP::second;
116  double eT2 = (eT1 > 0. ? (1. / eT1) : 0.);
117  double fac0 = magCharge * bZ * cInMByS;
118  double fac2 = pZ1 * cInMByS * eT2;
119  double fac1 = fac0 * cInMByS * ts1 * eT2 + fac2;
120  double fact1 = (eT1 / fac0) * (std::sqrt(1 + fac1 * fac1) - std::sqrt(1 + fac2 * fac2));
121  double fact2 = (pT1 / (magCharge * bZ) * (asinh(fac1) - asinh(fac2)));
122  LogDebug("SimG4CoreWatcher") << "MonopoleSeppingAction: Factor eT = " << eT << " " << eT1 << " " << eT2
123  << ", pT = " << pT << " " << pT1 << ", pZ = " << pZ << " " << pZ1
124  << ", time = " << tStep << " " << ts1 << ", Factors " << fac0 << " " << fac1 << " "
125  << fac2 << ", Final ones " << fact1 << " " << fact2;
126  G4ThreeVector ez(0, 0, 1), et(std::sqrt(0.5), std::sqrt(0.5), 0);
127  G4ThreeVector displacement = (fact1 * ez + fact2 * et) * CLHEP::m;
128 
129  LogDebug("SimG4CoreWatcher") << "MonopoleSeppingAction: Initial " << initialPosition << " Displacement "
130  << displacement << " Final " << (initialPosition + displacement);
131  aTrack->SetPosition(initialPosition + displacement);
132  }
133 }
#define LogDebug(id)
U second(std::pair< T, U > const &p)
T sqrt(T t)
Definition: SSEVec.h:19

Member Data Documentation

bool MonopoleSteppingAction::actOnTrack
private

Definition at line 29 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::bZ
private

Definition at line 33 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::cInMByS
private

Definition at line 33 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::cMevToJ
private

Definition at line 33 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::cMeVToKgMByS
private

Definition at line 33 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::dirxStart
private

Definition at line 32 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::diryStart
private

Definition at line 32 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::dirzStart
private

Definition at line 32 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::eStart
private

Definition at line 31 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::magCharge
private

Definition at line 33 of file MonopoleSteppingAction.h.

Referenced by update().

bool MonopoleSteppingAction::mode
private

Definition at line 29 of file MonopoleSteppingAction.h.

Referenced by MonopoleSteppingAction(), and update().

std::vector<int> MonopoleSteppingAction::pdgCode
private

Definition at line 30 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::pxStart
private

Definition at line 31 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::pyStart
private

Definition at line 31 of file MonopoleSteppingAction.h.

Referenced by update().

double MonopoleSteppingAction::pzStart
private

Definition at line 31 of file MonopoleSteppingAction.h.

Referenced by update().