35 {
36
37
40
41 const Muon::RpcCablingMap*
cablingMap{
nullptr};
43
44 const std::unordered_set<IdentifierHash> hashToSelect(idVect.begin(), idVect.end());
45 using RdoPairs = std::array<const xAOD::NRPCRDO*, 2>;
46 std::map<Identifier, RdoPairs, Muon::IdentifierByDetElSorter> sortedRdos{Muon::IdentifierByDetElSorter{
m_idHelperSvc.get()}};
48
50 cabling.subDetector = rdo->subdetector();
51 cabling.boardSector = rdo->boardsector();
53 cabling.channelId = rdo->channel();
54
55
56 if (!
cablingMap->getOfflineId(cabling, msgStream())){
57 return StatusCode::FAILURE;
58 }
62 return StatusCode::FAILURE;
63 }
64 if (hashToSelect.size() && !hashToSelect.count(
m_idHelperSvc->moduleHash(offId))) {
66 continue;
67 }
69 const bool stripSide =
cabling.stripSide();
70 sortedRdos[
offId][stripSide] = rdo;
71 }
72
75
77
80 const Identifier&
offId){
81
82 const MuonGMR4::RpcReadoutElement* reElement =
m_detMgr->getRpcReadoutElement(offId);
83 outputMeas->setIdentifierHash(
m_idHelperSvc->detElementHash(offId));
84 outputMeas->setReadoutElement(reElement);
85 outputMeas->setIdentifier(
offId.get_compact());
86 outputMeas->setDoubletPhi(idHelper.
doubletPhi(offId));
87 outputMeas->setGasGap(idHelper.
gasGap(offId));
88 outputMeas->setChannelNumber(idHelper.
channel(offId));
89 outputMeas->setTimeOverThreshold(rdo->timeoverthr());
91 outputMeas->setTime(rdo->time());
93 };
94
97 for (const auto& [offId, rdoPairs] : sortedRdos) {
98 const MuonGMR4::RpcReadoutElement* reElement =
m_detMgr->getRpcReadoutElement(offId);
100
102
103 CheckVector2D stripPos = design.
center(idHelper.
channel(offId));
104 if (!stripPos) {
106 continue;
107 }
108 const double stripLocX = (*stripPos).x();
109 const double stripCovX = std::pow(design.
stripPitch(), 2) / std::sqrt(12.);
110
112 xAOD::RpcStrip2D* measurement = strip2DHandle->push_back(std::make_unique<xAOD::RpcStrip2D>());
113
116
117 lPos[0] = stripLocX;
119 lCov(0,0) = stripCovX;
123
124 setMeasValues(measurement, rdoPairs[0], offId);
126 continue;
127 }
128
132 lPos[0] = stripLocX;
133 lCov(0,0) = stripCovX;
134
137 strip->setMeasurement<1>(0, lPos, lCov);
138 setMeasValues(
strip, rdoPairs[0] ? rdoPairs[0] : rdoPairs[1], offId);
139 }
140
143 return StatusCode::SUCCESS;
144
145 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
IdentifierHash measurementHash(const Identifier &measId) const override final
Constructs the identifier hash from the full measurement Identifier.
const StripLayerPtr & sensorLayout(const IdentifierHash &measHash) const
Access to the StripLayer associated to a given measurement Hash.
CheckVector2D center(int stripNumb) const
Returns the bisector of the strip (Global numbering scheme).
std::optional< Amg::Vector2D > CheckVector2D
double stripPitch() const
Distance between two adjacent strips.
int gasGap(const Identifier &id) const override
get the hashes
int channel(const Identifier &id) const override
int doubletPhi(const Identifier &id) const
bool measuresPhi(const Identifier &id) const override
StatusCode record(const SG::WriteHandleKey< Cont_t > &key, const EventContext &ctx)
Record the container to store gate using the passed write handle key.
void setMeasurement(const DetectorIDHashType idHash, MeasVector< N > locPos, MeasMatrix< N > locCov)
Sets IdentifierHash, local position and local covariance of the measurement.
time(flags, cells_name, *args, **kw)
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
Eigen::Matrix< float, N, N > MeasMatrix
NRPCRDO_v1 NRPCRDO
Define the version of the NRPC RDO class.
Eigen::Matrix< float, N, 1 > MeasVector
Abrivation of the Matrix & Covariance definitions.
NRPCRDOContainer_v1 NRPCRDOContainer
Define the version of the NRPC RDO container.
RpcMeasurement_v1 RpcMeasurement