ATLAS Offline Software
MmRdoToPrepDataToolMT.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
12 
13 // BS access
16 
17 using namespace MuonGM;
18 using namespace Trk;
19 using namespace Muon;
20 
21 namespace {
22 // Count hits with negative charge, which indicates bad calibration
23 std::atomic<bool> hitNegativeCharge{false};
24 std::atomic<bool> invalidLocalPos{false};
25 } // namespace
27 
29  const std::string& n,
30  const IInterface* p)
31  : base_class(t, n, p) {}
32 
34  ATH_MSG_DEBUG(" in initialize()");
35  ATH_CHECK(m_idHelperSvc.retrieve());
36  // check if the initialization of the data container is success
37  ATH_CHECK(m_mmPrepDataContainerKey.initialize());
38  ATH_CHECK(m_rdoContainerKey.initialize());
39  ATH_CHECK(m_muDetMgrKey.initialize());
40  ATH_CHECK(m_calibTool.retrieve());
41  ATH_CHECK(
42  m_prdContainerCacheKey.initialize(!m_prdContainerCacheKey.key().empty()));
43  ATH_CHECK(m_xAODKey.initialize(!m_xAODKey.empty()));
44  return StatusCode::SUCCESS;
45 }
46 
48  Muon::MMPrepDataContainer* mmPrepDataContainer,
49  xAOD::MMClusterContainer* xAODContainer,
50  const std::vector<IdentifierHash>& idsToDecode,
51  const MM_RawDataCollection* rdoColl) const {
52  ATH_MSG_DEBUG(" ***************** Start of process MM Collection");
53  const MmIdHelper& id_helper = m_idHelperSvc->mmIdHelper();
54  bool merge = m_merge;
55  // protect for large splashes
56  if (rdoColl->size() > 100)
57  merge = true;
58 
59  const IdentifierHash hash = rdoColl->identifierHash();
60 
61  // check if we actually want to decode this RDO collection
62  if (!idsToDecode.empty() and std::find(idsToDecode.begin(), idsToDecode.end(),
63  hash) == idsToDecode.end()) {
64  ATH_MSG_DEBUG("Hash ID " << hash << " not in input list, ignore");
65  return StatusCode::SUCCESS;
66  } else
67  ATH_MSG_DEBUG("Going to decode " << hash);
68 
69  // check if the collection already exists, otherwise add it
70  if (mmPrepDataContainer->indexFindPtr(hash) != nullptr) {
71 
72  ATH_MSG_DEBUG("In processCollection: collection already contained in the MM PrepData container");
73  return StatusCode::SUCCESS;
74  }
75 
76  // Get write handle for this collection
78  mmPrepDataContainer->getWriteHandle(hash);
79  // Check if collection already exists (via the cache, i.e. in online trigger
80  // mode)
81  if (lock.OnlineAndPresentInAnotherView()) {
82  ATH_MSG_DEBUG("In processCollection: collection already available in the MM PrepData container (via cache)");
83  return StatusCode::SUCCESS;
84  }
85  auto prdColl = std::make_unique<MMPrepDataCollection>(hash);
86 
87  // set the offline identifier of the collection Id
88  IdContext context = id_helper.module_context();
89  Identifier moduleId;
90  int getId = id_helper.get_id(hash, moduleId, &context);
91  if (getId != 0) {
92  ATH_MSG_ERROR("Could not convert the hash Id: " << hash
93  << " to identifier");
94  } else {
95  ATH_MSG_DEBUG(" dump moduleId " << moduleId);
96  prdColl->setIdentifier(moduleId);
97  }
98 
99  // MuonDetectorManager from the conditions store
101  m_muDetMgrKey, ctx};
102  const MuonGM::MuonDetectorManager* MuonDetMgr = DetectorManagerHandle.cptr();
103  if (!MuonDetMgr) {
105  "Null pointer to the read MuonDetectorManager conditions object");
106  return StatusCode::FAILURE;
107  }
108  // Lambda to fill xprd from prd
109  auto fillxAOD = [&id_helper, this](const MMPrepData& prd, xAOD::MMCluster& xprd) {
110  xprd.setIdentifier(prd.identify().get_compact());
111  xprd.setMeasurement(m_idHelperSvc->detElementHash(prd.identify()),
112  xAOD::MeasVector<1>{prd.localPosition().x()},
113  xAOD::MeasMatrix<1>{prd.localCovariance()(0, 0)});
114  xprd.setGasGap(id_helper.gasGap(prd.identify()));
115  xprd.setChannelNumber(id_helper.channel(prd.identify()));
116  xprd.setTime(prd.time());
117  xprd.setCharge(prd.charge());
118  xprd.setDriftDist(prd.driftDist());
119  xprd.setAngle(prd.angle());
120  xprd.setChiSqProb(prd.chisqProb());
121  xprd.setAuthor(prd.author());
122  xprd.setQuality(prd.quality());
123  xprd.setStripNumbers(prd.stripNumbers());
124  xprd.setStripTimes(prd.stripTimes());
125  xprd.setStripCharges(prd.stripCharges());
126  xprd.setStripDriftDist(prd.stripDriftDist());
127  xprd.setStripDriftErrors(prd.stripDriftErrors());
128  };
129 
130  std::vector<MMPrepData> MMprds;
131  // convert the RDO collection to a PRD collection
132  for (const MM_RawData* rdo : *rdoColl) {
133  ATH_MSG_DEBUG("Adding a new MM PrepRawData");
134 
135  const Identifier rdoId = rdo->identify();
136  if (!m_idHelperSvc->isMM(rdoId)) {
137  ATH_MSG_WARNING("given Identifier "
138  << rdoId.get_compact() << " ("
139  << id_helper.print_to_string(rdoId)
140  << ") is no MicroMega Identifier, continuing");
141  continue;
142  }
143  ATH_MSG_DEBUG(" dump rdo " << m_idHelperSvc->toString(rdoId));
144 
145  int channel = rdo->channel();
146  std::vector<Identifier> rdoList;
147  Identifier parentID = id_helper.parentID(rdoId);
148  Identifier layid = id_helper.channelID(
149  parentID, id_helper.multilayer(rdoId), id_helper.gasGap(rdoId), 1);
150  Identifier prdId =
151  id_helper.channelID(parentID, id_helper.multilayer(rdoId),
152  id_helper.gasGap(rdoId), channel);
153  ATH_MSG_DEBUG(" channel RDO " << channel << " channel from rdoID "
154  << id_helper.channel(rdoId));
155  rdoList.push_back(prdId);
156 
157  // get the local and global positions
158  const MuonGM::MMReadoutElement* detEl =
159  MuonDetMgr->getMMReadoutElement(layid);
161 
162  bool getLocalPos = detEl->stripPosition(prdId, localPos);
163  if (!getLocalPos) {
164  if (!invalidLocalPos || msgLvl(MSG::DEBUG)) {
165  ATH_MSG_WARNING("Could not get the local strip position for "
166  << m_idHelperSvc->toString(prdId));
167  invalidLocalPos = true;
168  }
169  continue;
170  }
171 
172  Amg::Vector3D globalPos{Amg::Vector3D::Zero()};
173  bool getGlobalPos = detEl->stripGlobalPosition(prdId, globalPos);
174  if (!getGlobalPos) {
175  ATH_MSG_WARNING("Could not get the global strip position for MM");
176  continue;
177  }
178  NSWCalib::CalibratedStrip calibStrip;
179  ATH_CHECK(m_calibTool->calibrateStrip(ctx, rdo, calibStrip));
180  if (calibStrip.charge < 0) {
181  if (!hitNegativeCharge || msgLvl(MSG::DEBUG)) {
182  ATH_MSG_WARNING("One MM RDO or more, such as one with pdo = "
183  << rdo->charge()
184  << " counts, corresponds to a negative charge ("
185  << calibStrip.charge << "). Skipping these RDOs");
186  hitNegativeCharge = true;
187  }
188  continue;
189  }
190 
191  Trk::LocalDirection localDir;
192  const Trk::PlaneSurface& psurf = detEl->surface(layid);
194  psurf.globalToLocal(globalPos, globalPos, lpos);
195  psurf.globalToLocalDirection(globalPos, localDir);
196 
197  ATH_MSG_DEBUG(" Surface centre x " << psurf.center().x() << " y "
198  << psurf.center().y() << " z "
199  << psurf.center().z());
200  ATH_MSG_DEBUG(" localPos x " << localPos.x() << " localPos y "
201  << localPos.y() << " lpos recalculated 0 "
202  << lpos[0] << " lpos y " << lpos[1]);
203 
204  Amg::Vector3D gdir = psurf.transform().linear() * Amg::Vector3D(0., 1., 0.);
205  ATH_MSG_DEBUG(" MM detector surface direction phi "
206  << gdir.phi() << " global radius hit " << globalPos.perp()
207  << " phi pos " << globalPos.phi() << " global z "
208  << globalPos.z());
209 
210  auto cov = Amg::MatrixX(2, 2);
211  cov.setIdentity();
212  (cov)(0, 0) = calibStrip.resTransDistDrift;
213  (cov)(1, 1) = calibStrip.resLongDistDrift;
214  localPos.x() += calibStrip.dx;
215 
216  if (!merge) {
217  // storage will be handeled by Store Gate
218  std::unique_ptr<MMPrepData> mpd = std::make_unique<MMPrepData>(
219  prdId, hash, std::move(localPos), std::move(rdoList), std::move(cov),
220  detEl, calibStrip.time, calibStrip.charge, calibStrip.distDrift);
222 
223  if (!m_xAODKey.empty()) {
224  auto xprd = xAODContainer->push_back(std::make_unique<xAOD::MMCluster>());
225  fillxAOD(*mpd, *xprd);
226  }
227 
228  prdColl->push_back(std::move(mpd));
229 
230  } else {
231  MMPrepData mpd(prdId, hash, std::move(localPos), std::move(rdoList),
232  std::move(cov), detEl, calibStrip.time, calibStrip.charge,
233  calibStrip.distDrift);
234  if (mpd.charge() < m_singleStripChargeCut)
235  continue;
236  // set the hash of the MMPrepData such that it contains the correct value
237  // in case it gets used in SimpleMMClusterBuilderTool::getClusters
238  mpd.setHashAndIndex(hash, 0);
240  MMprds.push_back(std::move(mpd));
241  }
242  }
243 
244  if (merge) {
245  std::vector<std::unique_ptr<Muon::MMPrepData>> clusters;
246 
248  ATH_CHECK(
249  m_clusterBuilderTool->getClusters(ctx, std::move(MMprds), clusters));
250 
251  for (std::unique_ptr<Muon::MMPrepData>& prdN : clusters) {
252  prdN->setHashAndIndex(prdColl->identifyHash(), prdColl->size());
253  if (!m_xAODKey.empty()) {
254  auto xprd = xAODContainer->push_back(std::make_unique<xAOD::MMCluster>());
255  fillxAOD(*prdN, *xprd);
256  }
257  prdColl->push_back(std::move(prdN));
258  }
259 
260  } // merge
261 
262  // now write the collection
263  ATH_CHECK(lock.addOrDelete(std::move(prdColl)));
264  ATH_MSG_DEBUG("PRD hash " << hash << " has been moved to container");
265 
266  return StatusCode::SUCCESS;
267 }
268 
270  const EventContext& ctx) const {
271  auto rdoContainerHandle = SG::makeHandle(m_rdoContainerKey, ctx);
272  if (rdoContainerHandle.isValid()) {
273  ATH_MSG_DEBUG("MM_getRdoContainer success");
274  return rdoContainerHandle.cptr();
275  }
276  ATH_MSG_WARNING("Retrieval of MM_RawDataContainer failed !");
277 
278  return nullptr;
279 }
280 
282  Muon::MMPrepDataContainer* mmPrepDataContainer,
283  xAOD::MMClusterContainer* xAODContainer,
284  const std::vector<IdentifierHash>& idsToDecode) const {
285  ATH_MSG_DEBUG("In processRDOContainer");
286  const MM_RawDataContainer* rdoContainer = getRdoContainer(ctx);
287  if (!rdoContainer) {
288  return;
289  }
290 
291  for (MM_RawDataContainer::const_iterator it = rdoContainer->begin();
292  it != rdoContainer->end(); ++it) {
293 
294  const auto* rdoColl = *it;
295  if (rdoColl->empty())
296  continue;
297  ATH_MSG_DEBUG("New RDO collection with " << rdoColl->size() << "MM Hits");
298 
299  if (processCollection(ctx, mmPrepDataContainer, xAODContainer, idsToDecode, rdoColl).isFailure()) {
301  "processCsm returns a bad StatusCode - keep going for new data "
302  "collections in this event");
303  }
304  }
305 }
306 
307 // methods for ROB-based decoding
309  const std::vector<IdentifierHash>& idVect) const {
310 
311  // is idVect a right thing to use here? to be reviewed maybe
312  ATH_MSG_DEBUG("Size of the RDO container to be decoded: " << idVect.size());
313 
314  Muon::MMPrepDataContainer* mmPrepDataContainer =
315  setupMM_PrepDataContainer(ctx);
316 
317  if (!mmPrepDataContainer) {
318  return StatusCode::FAILURE;
319  }
321  if (!m_xAODKey.empty()) {
322  outputContainer = SG::WriteHandle<xAOD::MMClusterContainer>(m_xAODKey, ctx);
323  }
324  auto xAODPrepDataContainer = setupxAODPrepDataContainer(outputContainer);
325 
326  processRDOContainer(ctx, mmPrepDataContainer, xAODPrepDataContainer, idVect);
327 
328  return StatusCode::SUCCESS;
329 }
330 
332  const EventContext&, const std::vector<uint32_t>&) const {
333  ATH_MSG_FATAL("ROB based decoding is not supported....");
334  return StatusCode::FAILURE;
335 }
337  const EventContext& ctx) const {
338  return setupMM_PrepDataContainer(ctx) ? StatusCode::SUCCESS
339  : StatusCode::FAILURE;
340 }
341 
344  const EventContext& ctx) const {
345 
346  SG::WriteHandle<Muon::MMPrepDataContainer> handle{m_mmPrepDataContainerKey,
347  ctx};
348  if (m_prdContainerCacheKey.key().empty()) {
349  // No external cache, just record the container
351  handle.record(std::make_unique<Muon::MMPrepDataContainer>(
353 
354  if (status.isFailure() || !handle.isValid()) {
356  "Could not record container of MicroMega PrepData Container at "
357  << m_mmPrepDataContainerKey.key());
358  return nullptr;
359  }
360  } else {
361  // use the cache to get the container
363  ctx);
364  if (!update.isValid()) {
365  ATH_MSG_FATAL("Invalid UpdateHandle " << m_prdContainerCacheKey.key());
366  return nullptr;
367  }
368  StatusCode status = handle.record(
369  std::make_unique<Muon::MMPrepDataContainer>(update.ptr()));
370  if (status.isFailure() || !handle.isValid()) {
372  "Could not record container of MM PrepData Container using cache "
373  << m_prdContainerCacheKey.key() << " - "
374  << m_mmPrepDataContainerKey.key());
375  return nullptr;
376  }
377  ATH_MSG_DEBUG("Created container using cache for "
378  << m_prdContainerCacheKey.key());
379  }
380  return handle.ptr();
381 }
382 
385  SG::WriteHandle<xAOD::MMClusterContainer>& outputContainer) const {
386 
387  if (!m_xAODKey.empty() &&
388  outputContainer
389  .record(std::make_unique<xAOD::MMClusterContainer>(),
390  std::make_unique<xAOD::MMClusterAuxContainer>())
391  .isSuccess()) {
393  "Recorded xAOD container with key: " << outputContainer.key());
394  return outputContainer.ptr();
395  }
396  return nullptr;
397 }
MuonGM::MMReadoutElement::stripPosition
virtual bool stripPosition(const Identifier &id, Amg::Vector2D &pos) const override final
strip position – local or global If the strip number is outside the range of valid strips,...
Definition: MMReadoutElement.h:209
Trk::PlaneSurface::globalToLocal
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override final
Specified for PlaneSurface: GlobalToLocal method without dynamic memory allocation - boolean checks i...
Definition: PlaneSurface.cxx:213
Muon::MuonPrepDataContainer
Template for Muon PRD containers (which are basically collections of MuonPrepDataCollections).
Definition: MuonPrepDataContainer.h:42
Muon::MmRdoToPrepDataToolMT::processCollection
StatusCode processCollection(const EventContext &ctx, Muon::MMPrepDataContainer *mmPrepDataContainer, xAOD::MMClusterContainer *xAODContainer, const std::vector< IdentifierHash > &idsToDecode, const MM_RawDataCollection *rdoColl) const
Definition: MmRdoToPrepDataToolMT.cxx:47
NSWCalib::CalibratedStrip::time
double time
Definition: INSWCalibTool.h:22
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MuonGM
Ensure that the Athena extensions are properly loaded.
Definition: GeoMuonHits.h:27
Muon::MMPrepData
Class to represent MM measurements.
Definition: MMPrepData.h:22
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
NSWCalib::CalibratedStrip::charge
double charge
Definition: INSWCalibTool.h:21
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
MuonIdHelper::get_id
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const override
Create compact id from hash id (return == 0 for OK)
Definition: MuonIdHelper.cxx:69
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
xAOD::MMCluster_v1
Definition: MMCluster_v1.h:16
NSWCalib::CalibratedStrip::distDrift
double distDrift
Definition: INSWCalibTool.h:24
IdentifiableContainerMT::getWriteHandle
IDC_WriteHandle getWriteHandle(IdentifierHash hash)
Definition: IdentifiableContainerMT.h:251
NSWCalib::CalibratedStrip::dx
double dx
Definition: INSWCalibTool.h:27
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
IMuonRawDataProviderTool.h
IdentifiableContainerMT::IDC_WriteHandle::OnlineAndPresentInAnotherView
bool OnlineAndPresentInAnotherView()
This method is to avoid calling an expensive operation in the offline case.
Definition: IdentifiableContainerMT.h:64
Muon::MmRdoToPrepDataToolMT::decode
virtual StatusCode decode(const EventContext &ctx, const std::vector< IdentifierHash > &idVect) const override
Decode method - declared in Muon::IMuonRdoToPrepDataTool.
Definition: MmRdoToPrepDataToolMT.cxx:308
skel.it
it
Definition: skel.GENtoEVGEN.py:423
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:201
NSWCalib::CalibratedStrip::resTransDistDrift
double resTransDistDrift
Definition: INSWCalibTool.h:25
MMPrepDataContainer.h
Muon::MmRdoToPrepDataToolMT::processRDOContainer
void processRDOContainer(const EventContext &ctx, Muon::MMPrepDataContainer *mmPrepDataContainer, xAOD::MMClusterContainer *xAODContainer, const std::vector< IdentifierHash > &idsToDecode) const
Definition: MmRdoToPrepDataToolMT.cxx:281
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Trk::Surface::center
const Amg::Vector3D & center() const
Returns the center position of the Surface.
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Muon::IMuonIdHelperSvc::mmIdHelper
virtual const MmIdHelper & mmIdHelper() const =0
access to CscIdHelper
NSWCalib::CalibratedStrip::resLongDistDrift
double resLongDistDrift
Definition: INSWCalibTool.h:26
MuonGM::MuonClusterReadoutElement::surface
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
Definition: MuonClusterReadoutElement.h:123
Muon::MM_RawDataCollection
Definition: MM_RawDataCollection.h:15
Muon::MM_RawDataContainer
Definition: MM_RawDataContainer.h:18
MmIdHelper::multilayer
int multilayer(const Identifier &id) const
Definition: MmIdHelper.cxx:796
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
MMReadoutElement.h
Muon::MmRdoToPrepDataToolMT::setupxAODPrepDataContainer
xAOD::MMClusterContainer * setupxAODPrepDataContainer(SG::WriteHandle< xAOD::MMClusterContainer > &outputContainer) const
Definition: MmRdoToPrepDataToolMT.cxx:384
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthMessaging::msgLvl
bool msgLvl(const MSG::Level lvl) const
Test the output level.
Definition: AthMessaging.h:151
MMClusterAuxContainer.h
Trk::PrepRawData::setHashAndIndex
void setHashAndIndex(unsigned short collHash, unsigned short objIndex)
TEMP for testing: might make some classes friends later ...
Muon::MM_RawData
Temporary class to hold the MM RDO.
Definition: MM_RawData.h:20
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonGM::MMReadoutElement::stripGlobalPosition
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
Definition: MMReadoutElement.h:282
IdentifiableContainerMT::IDC_WriteHandle
Definition: IdentifiableContainerMT.h:34
Muon::MMPrepData::Author::RDOTOPRDConverter
@ RDOTOPRDConverter
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IdentifiableContainerMT::end
const_iterator end() const
return const_iterator for end of container
Definition: IdentifiableContainerMT.h:242
MmRdoToPrepDataToolMT.h
Trk::PlaneSurface::globalToLocalDirection
void globalToLocalDirection(const Amg::Vector3D &glodir, Trk::LocalDirection &locdir) const
This method transforms the global direction to a local direction wrt the plane.
Definition: PlaneSurface.cxx:260
IdentifiableContainerMT::const_iterator
Definition: IdentifiableContainerMT.h:82
IdentifiableContainerMT::begin
const_iterator begin() const
return const_iterator for first entry
Definition: IdentifiableContainerMT.h:236
Muon::MM_RawDataCollection::identifierHash
const IdentifierHash & identifierHash() const
Definition: MM_RawDataCollection.h:23
NSWCalib::CalibratedStrip
Definition: INSWCalibTool.h:20
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
Trk::LocalDirection
represents the three-dimensional global direction with respect to a planar surface frame.
Definition: LocalDirection.h:81
xAOD::MeasVector
Eigen::Matrix< float, N, 1 > MeasVector
Abrivation of the Matrix & Covariance definitions.
Definition: MeasurementDefs.h:52
AtlasDetectorID::print_to_string
std::string print_to_string(Identifier id, const IdContext *context=0) const
or provide the printout in string form
Definition: AtlasDetectorID.cxx:655
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Muon::MmRdoToPrepDataToolMT::setupMM_PrepDataContainer
Muon::MMPrepDataContainer * setupMM_PrepDataContainer(const EventContext &ctx) const
Definition: MmRdoToPrepDataToolMT.cxx:343
Muon::IMuonIdHelperSvc::isMM
virtual bool isMM(const Identifier &id) const =0
returns whether this is a MM Identifier or not
Muon::MmRdoToPrepDataToolMT::getRdoContainer
const MM_RawDataContainer * getRdoContainer(const EventContext &ctx) const
Definition: MmRdoToPrepDataToolMT.cxx:269
MmIdHelper::parentID
Identifier parentID(const Identifier &id) const
Definition: MmIdHelper.cxx:786
NswCalibDbTimeChargeData::m_idHelperSvc
const Muon::IMuonIdHelperSvc * m_idHelperSvc
Definition: NswCalibDbTimeChargeData.h:56
Muon::MmRdoToPrepDataToolMT::MmRdoToPrepDataToolMT
MmRdoToPrepDataToolMT(const std::string &, const std::string &, const IInterface *)
Definition: MmRdoToPrepDataToolMT.cxx:28
SG::UpdateHandle
Definition: UpdateHandle.h:94
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SG::VarHandleBase::key
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:64
Muon::MmRdoToPrepDataToolMT::initialize
virtual StatusCode initialize() override
standard Athena-Algorithm method
Definition: MmRdoToPrepDataToolMT.cxx:33
MuonIdHelper::module_hash_max
size_type module_hash_max() const
the maximum hash value
Definition: MuonIdHelper.cxx:752
IdentifiableContainerMT::IDC_WriteHandle::addOrDelete
StatusCode addOrDelete(std::unique_ptr< T > ptr)
Definition: IdentifiableContainerMT.h:56
IdentifiableContainerMT::indexFindPtr
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
Definition: IdentifiableContainerMT.h:292
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
dqt_zlumi_pandas.update
update
Definition: dqt_zlumi_pandas.py:42
MmIdHelper::channel
int channel(const Identifier &id) const override
Definition: MmIdHelper.cxx:800
MmIdHelper
Definition: MmIdHelper.h:54
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
MmIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: MmIdHelper.cxx:798
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
Muon::IMuonIdHelperSvc::toString
virtual std::string toString(const Identifier &id) const =0
print all fields to string
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:49
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::PlaneSurface
Definition: PlaneSurface.h:64
MuonGM::MuonDetectorManager::getMMReadoutElement
const MMReadoutElement * getMMReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:255
DEBUG
#define DEBUG
Definition: page_access.h:11
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
MuonIdHelper::module_context
IdContext module_context() const
id for module
Definition: MuonIdHelper.cxx:735
MuonGM::MMReadoutElement
An MMReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station con...
Definition: MMReadoutElement.h:23
NswCalibDbTimeChargeData
Definition: NswCalibDbTimeChargeData.h:19
merge.status
status
Definition: merge.py:17
LocalDirection.h
xAOD::MeasMatrix
Eigen::Matrix< float, N, N > MeasMatrix
Definition: MeasurementDefs.h:54
Muon::MmRdoToPrepDataToolMT::provideEmptyContainer
virtual StatusCode provideEmptyContainer(const EventContext &ctx) const override
Definition: MmRdoToPrepDataToolMT.cxx:336
Muon::MMPrepData::setAuthor
void setAuthor(Author author)
Definition: MMPrepData.cxx:96
MuonStation.h
Muon::MMPrepData::charge
int charge() const
Returns the AD.
Definition: MMPrepData.h:227
MmIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channel) const
Definition: MmIdHelper.cxx:736
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
IdContext
class IdContext
Definition: IdContext.h:34
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
IROBDataProviderSvc.h
merge
Definition: merge.py:1
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Muon::IMuonIdHelperSvc::detElementHash
virtual IdentifierHash detElementHash(const Identifier &id) const =0
Returns the detector element hash associated to an Identifier.