ATLAS Offline Software
Loading...
Searching...
No Matches
MuonDetectorManager.icc
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef MUONREADOUTGEOMETRY_MUONDETECTORMANAGER_ICC
5#define MUONREADOUTGEOMETRY_MUONDETECTORMANAGER_ICC
6
7#include <MuonReadoutGeometryR4/MdtReadoutElement.h>
8#include <MuonReadoutGeometryR4/TgcReadoutElement.h>
9#include <MuonReadoutGeometryR4/RpcReadoutElement.h>
10#include <MuonReadoutGeometryR4/sTgcReadoutElement.h>
11#include <MuonReadoutGeometryR4/MmReadoutElement.h>
12
13#define WRITE_GETTERS(ELE_TYPE, GETTER_FUNC, STORAGE_VEC, ATTR) \
14 inline ATTR ELE_TYPE* MuonDetectorManager::GETTER_FUNC(const Identifier& id) ATTR { \
15 ATTR ELE_TYPE* reEle = GETTER_FUNC(m_idHelperSvc->detElementHash(id)); \
16 if (!reEle) { \
17 ATH_MSG_WARNING(#GETTER_FUNC << ": Failed to retrieve " \
18 <<m_idHelperSvc->toStringDetEl(id) << " hash: " \
19 << m_idHelperSvc->detElementHash(id) \
20 << " storage vec size: " << STORAGE_VEC.size()); \
21 } \
22 return reEle; \
23 } \
24 inline ATTR ELE_TYPE* MuonDetectorManager::GETTER_FUNC(const IdentifierHash& hash) ATTR { \
25 const size_t idx = static_cast<size_t>(hash); \
26 return idx < STORAGE_VEC.size() ? STORAGE_VEC[idx].get() : nullptr; \
27 }
28#define ADD_DETECTOR(ELE_TYPE, STORAGE_VEC) \
29 WRITE_GETTERS(ELE_TYPE, get##ELE_TYPE, STORAGE_VEC, ) \
30 WRITE_GETTERS(ELE_TYPE, get##ELE_TYPE, STORAGE_VEC, const)
31
32namespace MuonGMR4 {
33ADD_DETECTOR(MdtReadoutElement, m_mdtEles);
34ADD_DETECTOR(TgcReadoutElement, m_tgcEles);
35ADD_DETECTOR(RpcReadoutElement, m_rpcEles);
36ADD_DETECTOR(MmReadoutElement, m_mmEles);
37ADD_DETECTOR(sTgcReadoutElement, m_sTgcEles);
38}
39#undef ELEMENT_GETTERSETTER
40#undef ADD_DETECTOR
41#endif