CMS 3D CMS Logo

MuonSensitiveDetector.cc
Go to the documentation of this file.
9 
13 
19 
23 
26 
27 #include "G4VProcess.hh"
28 #include "G4EventManager.hh"
29 #include "G4SystemOfUnits.hh"
30 #include "G4Step.hh"
31 #include "G4StepPoint.hh"
32 #include "G4Track.hh"
33 
35 
36 #include <iostream>
37 
38 //#define EDM_ML_DEBUG
39 
41  const edm::EventSetup& es,
42  const SensitiveDetectorCatalog& clg,
43  edm::ParameterSet const& p,
44  const SimTrackManager* manager)
45  : SensitiveTkDetector(name, es, clg, p),
46  thePV(nullptr),
47  theHit(nullptr),
48  theDetUnitId(0),
49  newDetUnitId(0),
50  theTrackID(0),
51  theManager(manager) {
52  edm::ParameterSet m_MuonSD = p.getParameter<edm::ParameterSet>("MuonSD");
53  ePersistentCutGeV = m_MuonSD.getParameter<double>("EnergyThresholdForPersistency") / CLHEP::GeV; //Default 1. GeV
54  allMuonsPersistent = m_MuonSD.getParameter<bool>("AllMuonsPersistent");
55  printHits = m_MuonSD.getParameter<bool>("PrintHits");
56 
57  //
58  // Here simply create 1 MuonSlaveSD for the moment
59  //
60 #ifdef EDM_ML_DEBUG
61  edm::LogVerbatim("MuonSim") << "create MuonSubDetector " << name;
62 #endif
64 
65  //The constants take time to calculate and are needed by many helpers
67  es.get<IdealGeometryRecord>().get(mdc);
68  if (!mdc.isValid())
69  throw cms::Exception("MuonSensitiveDetector") << "Cannot find MuonGeometryConstants\n";
71  G4String sdet = "unknown";
72  if (detector->isEndcap()) {
74  sdet = "Endcap";
75  } else if (detector->isRPC()) {
77  sdet = "RPC";
78  } else if (detector->isGEM()) {
80  sdet = "GEM";
81  } else if (detector->isME0()) {
83  sdet = "ME0";
84  } else {
86  }
90 
91  if (printHits) {
92  thePrinter = new SimHitPrinter("HitPositionOSCAR.dat");
93  }
94 
95  edm::LogVerbatim("MuonSensitiveDetector")
96  << " of type " << sdet << " <" << GetName() << "> EnergyThresholdForPersistency(GeV) "
97  << ePersistentCutGeV / CLHEP::GeV << " allMuonsPersistent: " << allMuonsPersistent;
98 
100 }
101 
103  delete g4numbering;
104  delete numbering;
105  delete slaveMuon;
106  delete theRotation;
107  delete detector;
109 }
110 
112  clearHits();
113  //----- Initialize variables to check if two steps belong to same hit
114  thePV = nullptr;
115  theDetUnitId = 0;
116  theTrackID = 0;
117 }
118 
120 #ifdef EDM_ML_DEBUG
121  edm::LogVerbatim("MuonSim") << "MuonSensitiveDetector::clearHits";
122 #endif
124 }
125 
126 bool MuonSensitiveDetector::ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) {
127 #ifdef EDM_ML_DEBUG
128  edm::LogVerbatim("MuonSim") << " MuonSensitiveDetector::ProcessHits " << InitialStepPosition(aStep, WorldCoordinates);
129 #endif
130 
131  if (aStep->GetTotalEnergyDeposit() > 0.) {
132  newDetUnitId = setDetUnitId(aStep);
133 
134  if (newHit(aStep)) {
135  saveHit();
136  createHit(aStep);
137  } else {
138  updateHit(aStep);
139  }
140  thePV = aStep->GetPreStepPoint()->GetPhysicalVolume();
141  theTrackID = aStep->GetTrack()->GetTrackID();
143  }
144  return true;
145 }
146 
147 uint32_t MuonSensitiveDetector::setDetUnitId(const G4Step* aStep) {
149 
150 #ifdef EDM_ML_DEBUG
151  std::stringstream MuonBaseNumber;
152  MuonBaseNumber << "MuonNumbering :: number of levels = " << num.getLevels() << std::endl;
153  MuonBaseNumber << "Level \t SuperNo \t BaseNo" << std::endl;
154  for (int level = 1; level <= num.getLevels(); level++) {
155  MuonBaseNumber << level << " \t " << num.getSuperNo(level) << " \t " << num.getBaseNo(level) << std::endl;
156  }
157  std::string MuonBaseNumbr = MuonBaseNumber.str();
158 
159  edm::LogVerbatim("MuonSim") << "MuonSensitiveDetector::setDetUnitId :: " << MuonBaseNumbr;
160  edm::LogVerbatim("MuonSim") << "MuonSensitiveDetector::setDetUnitId :: MuonDetUnitId = "
162 #endif
164 }
165 
166 bool MuonSensitiveDetector::newHit(const G4Step* aStep) {
167  return (!theHit || (aStep->GetTrack()->GetTrackID() != theTrackID) ||
168  (aStep->GetPreStepPoint()->GetPhysicalVolume() != thePV) || newDetUnitId != theDetUnitId);
169 }
170 
171 void MuonSensitiveDetector::createHit(const G4Step* aStep) {
172  Local3DPoint theEntryPoint;
173  Local3DPoint theExitPoint;
174 
175  if (detector->isBarrel()) {
176  // 1 levels up
177  theEntryPoint = cmsUnits(theRotation->transformPoint(InitialStepPositionVsParent(aStep, 1), aStep));
178  theExitPoint = cmsUnits(theRotation->transformPoint(FinalStepPositionVsParent(aStep, 1), aStep));
179  } else if (detector->isEndcap()) {
180  // save local z at current level
181  theEntryPoint = theRotation->transformPoint(InitialStepPosition(aStep, LocalCoordinates), aStep);
182  theExitPoint = theRotation->transformPoint(FinalStepPosition(aStep, LocalCoordinates), aStep);
183  float zentry = theEntryPoint.z();
184  float zexit = theExitPoint.z();
185  // 4 levels up
188  // reset local z from z wrt deep-parent volume to z wrt low-level volume
189  theEntryPoint = cmsUnits(Local3DPoint(tempEntry.x(), tempEntry.y(), zentry));
190  theExitPoint = cmsUnits(Local3DPoint(tempExit.x(), tempExit.y(), zexit));
191  } else {
192  theEntryPoint = cmsUnits(theRotation->transformPoint(InitialStepPosition(aStep, LocalCoordinates), aStep));
193  theExitPoint = cmsUnits(theRotation->transformPoint(FinalStepPosition(aStep, LocalCoordinates), aStep));
194  }
195 
196  const G4Track* theTrack = aStep->GetTrack();
197  const G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
198 
199  float thePabs = preStepPoint->GetMomentum().mag() / CLHEP::GeV;
200  float theTof = preStepPoint->GetGlobalTime() / CLHEP::nanosecond;
201  float theEnergyLoss = aStep->GetTotalEnergyDeposit() / CLHEP::GeV;
202  int theParticleType = G4TrackToParticleID::particleID(theTrack);
203 
205  thePV = preStepPoint->GetPhysicalVolume();
206  theTrackID = theTrack->GetTrackID();
207 
208  // convert momentum direction it to local frame
209  const G4ThreeVector& gmd = preStepPoint->GetMomentumDirection();
210  G4ThreeVector lmd = static_cast<const G4TouchableHistory*>(preStepPoint->GetTouchable())
211  ->GetHistory()
212  ->GetTopTransform()
213  .TransformAxis(gmd);
215  lnmd = theRotation->transformPoint(lnmd, aStep);
216  float theThetaAtEntry = lnmd.theta();
217  float thePhiAtEntry = lnmd.phi();
218 
219  theHit = new UpdatablePSimHit(theEntryPoint,
220  theExitPoint,
221  thePabs,
222  theTof,
223  theEnergyLoss,
224  theParticleType,
225  theDetUnitId,
226  theTrackID,
227  theThetaAtEntry,
228  thePhiAtEntry,
229  theG4ProcessTypeEnumerator->processId(theTrack->GetCreatorProcess()));
230 
231  // Make track persistent
232  int thePID = std::abs(theTrack->GetDefinition()->GetPDGEncoding());
233  //---VI - in parameters cut in energy is declared but applied to momentum
234  if (thePabs > ePersistentCutGeV || (thePID == 13 && allMuonsPersistent)) {
236  info->storeTrack(true);
237  }
238 
239 #ifdef EDM_ML_DEBUG
240  edm::LogVerbatim("MuonSim") << "=== NEW Muon hit for " << GetName() << " Edep(GeV)= " << theEnergyLoss << " "
241  << thePV->GetLogicalVolume()->GetName();
242  const G4VProcess* p = aStep->GetPostStepPoint()->GetProcessDefinedStep();
243  const G4VProcess* p2 = aStep->GetPreStepPoint()->GetProcessDefinedStep();
244  G4String sss = "";
245  if (p)
246  sss += " POST PROCESS: " + p->GetProcessName();
247  if (p2)
248  sss += "; PRE PROCESS: " + p2->GetProcessName();
249  if (!sss.empty())
250  edm::LogVerbatim("MuonSim") << sss;
251  edm::LogVerbatim("MuonSim") << " theta= " << theThetaAtEntry << " phi= " << thePhiAtEntry << " Pabs(GeV/c) "
252  << thePabs << " Eloss(GeV)= " << theEnergyLoss << " Tof(ns)= " << theTof
253  << " trackID= " << theTrackID << " detID= " << theDetUnitId << "\n Local: entry "
254  << theEntryPoint << " exit " << theExitPoint << " delta "
255  << (theExitPoint - theEntryPoint) << "\n Global: entry "
256  << aStep->GetPreStepPoint()->GetPosition() << " exit "
257  << aStep->GetPostStepPoint()->GetPosition();
258 #endif
259 }
260 
261 void MuonSensitiveDetector::updateHit(const G4Step* aStep) {
262  Local3DPoint theExitPoint;
263 
264  if (detector->isBarrel()) {
265  theExitPoint = cmsUnits(theRotation->transformPoint(FinalStepPositionVsParent(aStep, 1), aStep));
266  } else if (detector->isEndcap()) {
267  // save local z at current level
268  theExitPoint = theRotation->transformPoint(FinalStepPosition(aStep, LocalCoordinates), aStep);
269  float zexit = theExitPoint.z();
270  Local3DPoint tempExitPoint = theRotation->transformPoint(FinalStepPositionVsParent(aStep, 4), aStep);
271  theExitPoint = cmsUnits(Local3DPoint(tempExitPoint.x(), tempExitPoint.y(), zexit));
272  } else {
273  theExitPoint = cmsUnits(theRotation->transformPoint(FinalStepPosition(aStep, LocalCoordinates), aStep));
274  }
275 
276  float theEnergyLoss = aStep->GetTotalEnergyDeposit() / CLHEP::GeV;
277 
278  theHit->updateExitPoint(theExitPoint);
279  theHit->addEnergyLoss(theEnergyLoss);
280 
281 #ifdef EDM_ML_DEBUG
282  edm::LogVerbatim("MuonSim") << "=== NEW Update muon hit for " << GetName() << " Edep(GeV)= " << theEnergyLoss << " "
283  << thePV->GetLogicalVolume()->GetName();
284  const G4VProcess* p = aStep->GetPostStepPoint()->GetProcessDefinedStep();
285  const G4VProcess* p2 = aStep->GetPreStepPoint()->GetProcessDefinedStep();
286  G4String sss = "";
287  if (p)
288  sss += " POST PROCESS: " + p->GetProcessName();
289  if (p2)
290  sss += "; PRE PROCESS: " + p2->GetProcessName();
291  if (!sss.empty())
292  edm::LogVerbatim("MuonSim") << sss;
293  edm::LogVerbatim("MuonSim") << " delEloss(GeV)= " << theEnergyLoss
294  << " Tof(ns)= " << aStep->GetPreStepPoint()->GetGlobalTime() / CLHEP::nanosecond
295  << " trackID= " << theTrackID << " detID= " << theDetUnitId << " exit " << theExitPoint;
296 #endif
297 }
298 
300  if (theHit) {
301  if (printHits) {
305  }
306  // hit is included into hit collection
308  delete theHit;
309  theHit = nullptr;
310  }
311 }
312 
313 void MuonSensitiveDetector::EndOfEvent(G4HCofThisEvent*) { saveHit(); }
314 
316  if (slaveMuon->name() == hname) {
317  cc = slaveMuon->hits();
318  }
319 }
320 
321 Local3DPoint MuonSensitiveDetector::InitialStepPositionVsParent(const G4Step* currentStep, G4int levelsUp) {
322  const G4StepPoint* preStepPoint = currentStep->GetPreStepPoint();
323  const G4ThreeVector& globalCoordinates = preStepPoint->GetPosition();
324 
325  const G4TouchableHistory* theTouchable = (const G4TouchableHistory*)(preStepPoint->GetTouchable());
326 
327  G4int depth = theTouchable->GetHistory()->GetDepth();
328  G4ThreeVector localCoordinates =
329  theTouchable->GetHistory()->GetTransform(depth - levelsUp).TransformPoint(globalCoordinates);
330 
331  return ConvertToLocal3DPoint(localCoordinates);
332 }
333 
334 Local3DPoint MuonSensitiveDetector::FinalStepPositionVsParent(const G4Step* currentStep, G4int levelsUp) {
335  const G4StepPoint* postStepPoint = currentStep->GetPostStepPoint();
336  const G4StepPoint* preStepPoint = currentStep->GetPreStepPoint();
337  const G4ThreeVector& globalCoordinates = postStepPoint->GetPosition();
338 
339  const G4TouchableHistory* theTouchable = (const G4TouchableHistory*)(preStepPoint->GetTouchable());
340 
341  G4int depth = theTouchable->GetHistory()->GetDepth();
342  G4ThreeVector localCoordinates =
343  theTouchable->GetHistory()->GetTransform(depth - levelsUp).TransformPoint(globalCoordinates);
344 
345  return ConvertToLocal3DPoint(localCoordinates);
346 }
personalPlayback.level
level
Definition: personalPlayback.py:22
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
MuonSensitiveDetector::MuonSensitiveDetector
MuonSensitiveDetector(const std::string &, const edm::EventSetup &, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
Definition: MuonSensitiveDetector.cc:40
G4ProcessTypeEnumerator::processId
unsigned int processId(const G4VProcess *p) const
Definition: G4ProcessTypeEnumerator.h:11
MuonSensitiveDetector::theDetUnitId
uint32_t theDetUnitId
Definition: MuonSensitiveDetector.h:80
MuonGeometryConstants
Definition: MuonGeometryConstants.h:20
MuonDDDConstants.h
MuonSubDetector
Definition: MuonSubDetector.h:19
SimTrackManager
Definition: SimTrackManager.h:35
MuonSensitiveDetector::slaveMuon
MuonSlaveSD * slaveMuon
Definition: MuonSensitiveDetector.h:59
MuonSensitiveDetector::newHit
bool newHit(const G4Step *)
Definition: MuonSensitiveDetector.cc:166
mps_fire.i
i
Definition: mps_fire.py:355
SimHitPrinter::startNewSimHit
void startNewSimHit(std::string)
Definition: SimHitPrinter.cc:31
MuonSensitiveDetector::theHit
UpdatablePSimHit * theHit
Definition: MuonSensitiveDetector.h:79
MuonG4Numbering.h
MuonSensitiveDetector::theTrackID
int theTrackID
Definition: MuonSensitiveDetector.h:82
MessageLogger.h
MuonSlaveSD
Definition: MuonSlaveSD.h:26
MuonEndcapFrameRotation.h
MuonSensitiveDetector::InitialStepPositionVsParent
Local3DPoint InitialStepPositionVsParent(const G4Step *currentStep, G4int levelsUp)
Definition: MuonSensitiveDetector.cc:321
MuonSensitiveDetector::newDetUnitId
uint32_t newDetUnitId
Definition: MuonSensitiveDetector.h:81
ESHandle.h
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
MuonSensitiveDetector::ePersistentCutGeV
float ePersistentCutGeV
Definition: MuonSensitiveDetector.h:88
SensitiveTkDetector
Definition: SensitiveTkDetector.h:8
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
PV3DBase::theta
Geom::Theta< T > theta() const
Definition: PV3DBase.h:72
MuonGeometryConstants.h
MuonSensitiveDetector::clearHits
void clearHits() override
Definition: MuonSensitiveDetector.cc:119
SimHitPrinter::printId
void printId(int) const
Definition: SimHitPrinter.cc:51
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:152
MuonSubDetector::name
std::string name()
Definition: MuonSubDetector.cc:31
constants
PSimHit::entryPoint
Local3DPoint entryPoint() const
Entry point in the local Det frame.
Definition: PSimHit.h:43
G4ProcessTypeEnumerator
Definition: G4ProcessTypeEnumerator.h:6
G4TrackToParticleID::particleID
static int particleID(const G4Track *)
Definition: G4TrackToParticleID.cc:7
MuonRPCFrameRotation
Definition: MuonRPCFrameRotation.h:21
MuonSensitiveDetector::thePV
const G4VPhysicalVolume * thePV
Definition: MuonSensitiveDetector.h:78
MuonG4Numbering
Definition: MuonG4Numbering.h:25
MuonSensitiveDetector::thePrinter
SimHitPrinter * thePrinter
Definition: MuonSensitiveDetector.h:85
PSimHit::detUnitId
unsigned int detUnitId() const
Definition: PSimHit.h:97
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
MuonEndcapFrameRotation
Definition: MuonEndcapFrameRotation.h:18
MuonFrameRotation::transformPoint
virtual Local3DPoint transformPoint(const Local3DPoint &, const G4Step *) const
Definition: MuonFrameRotation.cc:4
MuonSensitiveDetector::FinalStepPositionVsParent
Local3DPoint FinalStepPositionVsParent(const G4Step *currentStep, G4int levelsUp)
Definition: MuonSensitiveDetector.cc:334
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
PSimHit::exitPoint
Local3DPoint exitPoint() const
Exit point in the local Det frame.
Definition: PSimHit.h:46
MuonSensitiveDetector::numbering
MuonSimHitNumberingScheme * numbering
Definition: MuonSensitiveDetector.h:60
G4ProcessTypeEnumerator.h
edm::ESHandle
Definition: DTSurvey.h:22
MuonSubDetector.h
p2
double p2[4]
Definition: TauolaWrapper.h:90
MuonSensitiveDetector::detector
MuonSubDetector * detector
Definition: MuonSensitiveDetector.h:61
MuonSensitiveDetector::EndOfEvent
void EndOfEvent(G4HCofThisEvent *) override
Definition: MuonSensitiveDetector.cc:313
SensitiveDetectorCatalog
Definition: SensitiveDetectorCatalog.h:10
MuonSensitiveDetector::fillHits
void fillHits(edm::PSimHitContainer &, const std::string &) override
Definition: MuonSensitiveDetector.cc:315
MuonSubDetector::isBarrel
bool isBarrel()
Definition: MuonSubDetector.cc:21
Point3DBase< float, LocalTag >
SensitiveDetector::FinalStepPosition
Local3DPoint FinalStepPosition(const G4Step *step, coordinates) const
Definition: SensitiveDetector.cc:70
LEDCalibrationChannels.depth
depth
Definition: LEDCalibrationChannels.py:65
MuonSensitiveDetector::~MuonSensitiveDetector
~MuonSensitiveDetector() override
Definition: MuonSensitiveDetector.cc:102
MuonME0FrameRotation
Definition: MuonME0FrameRotation.h:22
SensitiveDetector::InitialStepPosition
Local3DPoint InitialStepPosition(const G4Step *step, coordinates) const
Definition: SensitiveDetector.cc:58
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
UpdatablePSimHit::updateExitPoint
void updateExitPoint(const Local3DPoint &exit)
Definition: UpdatablePSimHit.h:28
TrackingSlaveSD::Initialize
virtual void Initialize()
Definition: TrackingSlaveSD.cc:17
MuonSensitiveDetector::update
void update(const BeginOfEvent *) override
This routine will be called when the appropriate signal arrives.
Definition: MuonSensitiveDetector.cc:111
edm::ParameterSet
Definition: ParameterSet.h:36
TrackingSlaveSD::processHits
virtual bool processHits(const PSimHit &)
Definition: TrackingSlaveSD.cc:52
UpdatablePSimHit
Definition: UpdatablePSimHit.h:12
MuonSubDetector::isME0
bool isME0()
Definition: MuonSubDetector.cc:29
GeV
const double GeV
Definition: MathUtil.h:16
UpdatablePSimHit::addEnergyLoss
void addEnergyLoss(float eloss)
Definition: UpdatablePSimHit.h:34
MuonSensitiveDetector::updateHit
void updateHit(const G4Step *)
Definition: MuonSensitiveDetector.cc:261
MuonBaseNumber.h
SimHitPrinter::printLocal
void printLocal(LocalPoint, LocalPoint) const
Definition: SimHitPrinter.cc:81
MuonSubDetector::isEndcap
bool isEndcap()
Definition: MuonSubDetector.cc:23
MuonSensitiveDetector::allMuonsPersistent
bool allMuonsPersistent
Definition: MuonSensitiveDetector.h:89
MuonSubDetector::isRPC
bool isRPC()
Definition: MuonSubDetector.cc:25
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
SensitiveDetector::ConvertToLocal3DPoint
Local3DPoint ConvertToLocal3DPoint(const G4ThreeVector &point) const
Definition: SensitiveDetector.h:56
TrackInformation
Definition: TrackInformation.h:8
SensitiveDetector::LocalCoordinates
Definition: SensitiveDetector.h:48
edm::LogVerbatim
Definition: MessageLogger.h:297
UpdatablePSimHit.h
BeginOfEvent
Definition: BeginOfEvent.h:6
IdealGeometryRecord.h
edm::EventSetup
Definition: EventSetup.h:57
MuonSensitiveDetector.h
TrackInformation.h
get
#define get
cc
edm::ESHandleBase::isValid
bool isValid() const
Definition: ESHandle.h:44
MuonG4Numbering::PhysicalVolumeToBaseNumber
MuonBaseNumber PhysicalVolumeToBaseNumber(const G4Step *aStep)
Definition: MuonG4Numbering.cc:43
EgammaValidation_cff.num
num
Definition: EgammaValidation_cff.py:34
MuonSensitiveDetector::theRotation
MuonFrameRotation * theRotation
Definition: MuonSensitiveDetector.h:62
PV3DBase::mag
T mag() const
Definition: PV3DBase.h:64
MuonBaseNumber
Definition: MuonBaseNumber.h:21
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
SimHitPrinter.h
SensitiveDetector::cmsTrackInformation
TrackInformation * cmsTrackInformation(const G4Track *aTrack)
Definition: SensitiveDetector.cc:96
G4TrackToParticleID.h
MuonSubDetector::isGEM
bool isGEM()
Definition: MuonSubDetector.cc:27
MuonSensitiveDetector::saveHit
void saveHit()
Definition: MuonSensitiveDetector.cc:299
MuonSensitiveDetector::printHits
bool printHits
Definition: MuonSensitiveDetector.h:84
MuonSensitiveDetector::ProcessHits
G4bool ProcessHits(G4Step *, G4TouchableHistory *) override
Definition: MuonSensitiveDetector.cc:126
SensitiveDetector::WorldCoordinates
Definition: SensitiveDetector.h:48
MuonSimHitNumberingScheme
Definition: MuonSimHitNumberingScheme.h:19
MuonFrameRotation
Definition: MuonFrameRotation.h:17
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EventSetup.h
MuonSimHitNumberingScheme.h
MuonGEMFrameRotation
Definition: MuonGEMFrameRotation.h:20
TrackingSlaveSD::name
std::string name() const
Definition: TrackingSlaveSD.h:21
cms::Exception
Definition: Exception.h:70
MuonSimHitNumberingScheme::baseNumberToUnitNumber
int baseNumberToUnitNumber(const MuonBaseNumber &) override
Definition: MuonSimHitNumberingScheme.cc:28
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TrackingSlaveSD::hits
std::vector< PSimHit > & hits()
Definition: TrackingSlaveSD.h:22
MuonSensitiveDetector::cmsUnits
Local3DPoint cmsUnits(const Local3DPoint &v)
Definition: MuonSensitiveDetector.h:57
SimHitPrinter
Definition: SimHitPrinter.h:23
edm::PSimHitContainer
std::vector< PSimHit > PSimHitContainer
Definition: PSimHitContainer.h:11
MuonSensitiveDetector::theManager
const SimTrackManager * theManager
Definition: MuonSensitiveDetector.h:93
MuonSensitiveDetector::g4numbering
MuonG4Numbering * g4numbering
Definition: MuonSensitiveDetector.h:63
MuonGEMFrameRotation.h
MuonSensitiveDetector::setDetUnitId
uint32_t setDetUnitId(const G4Step *) override
Definition: MuonSensitiveDetector.cc:147
GlobalPoint.h
MuonRPCFrameRotation.h
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
MuonME0FrameRotation.h
MuonSensitiveDetector::createHit
void createHit(const G4Step *)
Definition: MuonSensitiveDetector.cc:171
IdealGeometryRecord
Definition: IdealGeometryRecord.h:27
MuonSlaveSD.h
Local3DPoint
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9
MuonSensitiveDetector::theG4ProcessTypeEnumerator
G4ProcessTypeEnumerator * theG4ProcessTypeEnumerator
Definition: MuonSensitiveDetector.h:91