30 coll = std::make_unique<RpcPrepDataCollection>(rpdModHash);
39 coll = std::make_unique<RpcCoinDataCollection>(rpdModHash);
56 ATH_MSG_WARNING(
"Inconsistent setting of properties (solvePhiAmbiguities entails reduceCablingOverlap)");
78 return StatusCode::SUCCESS;
82 return StatusCode::SUCCESS;
85 const int modHashMax =
m_idHelperSvc->rpcIdHelper().module_hash_max();
88 if (!update.isValid()) {
90 return StatusCode::FAILURE;
92 state.
prepDataCont = std::make_unique<RpcPrepDataContainer>(update.ptr());
97 state.
prepDataCont = std::make_unique<RpcPrepDataContainer>(modHashMax);
101 state.
coinDataCont = std::make_unique<RpcCoinDataContainer>(modHashMax);
105 if (!update.isValid()) {
107 return StatusCode::FAILURE;
109 state.
coinDataCont = std::make_unique<RpcCoinDataContainer>(update.ptr());
114 return StatusCode::SUCCESS;
119 const std::vector<IdentifierHash>& idVect)
const {
120 ATH_MSG_DEBUG(
"Calling Core decode function from MT decode function (hash vector)");
126 ATH_MSG_DEBUG(
"Core decode processed in MT decode (hash vector)");
131 return StatusCode::SUCCESS;
137 const std::vector<uint32_t>& robIds)
const {
138 ATH_MSG_DEBUG(
"Calling Core decode function from MT decode function (ROB vector)");
144 ATH_MSG_DEBUG(
"Core decode processed in MT decode (ROB vector)");
149 return StatusCode::SUCCESS;
156 return StatusCode::SUCCESS;
162 if (!collection || collection->empty()) {
168 if (
lock.alreadyPresent()) {
169 ATH_MSG_DEBUG(
"RpcPrepDataCollection already contained in IDC "
174 ATH_MSG_DEBUG(
"PRD hash " << hash <<
" has been moved to cache container");
178 if (msgLvl(MSG::DEBUG)) {
179 for (
const auto [hash, ptr] : state.
prepDataCont->GetAllHashPtrPair()) {
180 ATH_MSG_DEBUG(
"Contents of CONTAINER in this view : " << hash);
187 return StatusCode::SUCCESS;
192 return StatusCode::SUCCESS;
197 if (!collection || collection->empty()) {
203 if (
lock.alreadyPresent()) {
204 ATH_MSG_DEBUG(
"RpcCoinDataCollection already contained in IDC "
209 ATH_MSG_DEBUG(
"Coin hash " << hash <<
" has been moved to cache container");
212 if (msgLvl(MSG::DEBUG)) {
213 for (
const auto [hash, ptr] : state.
coinDataCont->GetAllHashPtrPair()) {
225 return StatusCode::SUCCESS;
230 const std::vector<IdentifierHash>& idVect,
231 bool firstTimeInTheEvent)
const {
232 int sizeVectorRequested = idVect.size();
233 ATH_MSG_DEBUG(
"Decode method called for " << sizeVectorRequested <<
" offline collections");
234 if (sizeVectorRequested == 0){
239 std::vector<IdentifierHash> idVectToBeDecoded;
240 idVectToBeDecoded.reserve(idVect.size());
242 if (firstTimeInTheEvent) {
246 ATH_MSG_DEBUG(
"Whole event has already been decoded; nothing to do.");
247 return StatusCode::SUCCESS;
249 if (sizeVectorRequested == 0) {
254 if (sizeVectorRequested != 0) {
260 idVectToBeDecoded.push_back(itHashId);
263 if (idVectToBeDecoded.empty()) {
264 ATH_MSG_DEBUG(
"All requested offline collections have already been decoded; nothing to do.");
265 return StatusCode::SUCCESS;
268 <<
" offline collections have not yet been decoded and will be decoded now.");
269 ATH_MSG_VERBOSE(
"The list of offline collection hash ids to be decoded:"<<std::endl<<idVectToBeDecoded);
275 ATH_MSG_DEBUG(
"Stored empty container. Decoding RPC RDO into RPC PrepRawData is switched off");
276 return StatusCode::SUCCESS;
284 std::vector<IdentifierHash> rdoHashVec;
285 if (sizeVectorRequested != 0) {
286 ATH_MSG_DEBUG(
"Looking for pads IdHash to be decoded for the requested collection Ids");
287 ATH_CHECK(rpcCabling->giveRDO_fromPRD(idVectToBeDecoded, rdoHashVec));
291 ATH_MSG_DEBUG(
"Retrieving Rpc PAD container from the store");
293 if (!rdoContainerHandle.isValid()) {
295 return StatusCode::FAILURE;
300 if (rdoContainerHandle->numberOfCollections() == 0) {
302 ATH_MSG_DEBUG(
"Empty pad container - no rpc rdo in this event ");
303 return StatusCode::SUCCESS;
309 bool doingSecondLoopAmbigColls =
false;
311 int ipad{0}, nPrepRawData{0}, nPhiPrepRawData{0}, nEtaPrepRawData{0};
312 if (processingphiview) {
315 ATH_MSG_DEBUG(
"*** Processing "<<(processingetaview ?
"eta" :
"phi")<<
" view ");
317 if (sizeVectorRequested != 0) {
320 const RpcPad* rdoColl = rdoContainerHandle->indexFindPtr(iPadHash);
322 ATH_MSG_DEBUG(
"Requested pad with online id "<< iPadHash <<
" not found in the rdoContainerHandle.");
328 <<
", with " << rdoColl->
size() <<
" CM inside ");
330 processingphiview, nPrepRawData, idVectToBeDecoded, doingSecondLoopAmbigColls));
335 for (
const RpcPad* rdoColl : *rdoContainerHandle) {
337 if (rdoColl->empty()){
341 ATH_MSG_DEBUG(
"A new pad here n. " << ipad <<
", online id "<< rdoColl->identifyHash()
342 <<
", with " << rdoColl->size() <<
" CM inside ");
345 processingphiview, nPrepRawData, idVectToBeDecoded, doingSecondLoopAmbigColls));
349 if (processingetaview) {
350 processingetaview =
false;
351 processingphiview =
true;
352 nEtaPrepRawData = nPrepRawData;
353 ATH_MSG_DEBUG(
"*** " << nEtaPrepRawData <<
" eta PrepRawData registered");
355 processingphiview =
false;
356 nPhiPrepRawData = nPrepRawData - nEtaPrepRawData;
357 ATH_MSG_DEBUG(
"*** " << nPhiPrepRawData <<
" phi PrepRawData registered");
360 doingSecondLoopAmbigColls =
true;
361 processingetaview =
true;
363 idVectToBeDecoded.clear();
367 idVectToBeDecoded.push_back(itAmbiColl);
370 ATH_CHECK(rpcCabling->giveRDO_fromPRD(idVectToBeDecoded, rdoHashVec));
374 ATH_MSG_DEBUG(
"*** " << nPrepRawData <<
" PrepRawData registered");
380 return StatusCode::SUCCESS;
385 const std::vector<uint32_t>& robIds,
bool firstTimeInTheEvent)
const {
389 int sizeVectorRequested = robIds.size();
390 ATH_MSG_DEBUG(
"Decode method called for " << sizeVectorRequested <<
" ROBs");
392 std::vector<uint32_t> robIdsToBeDecoded{};
393 robIdsToBeDecoded.reserve(robIds.size());
395 if (firstTimeInTheEvent) {
399 ATH_MSG_DEBUG(
"Whole event has already been decoded; nothing to do.");
400 return StatusCode::SUCCESS;
405 for (uint32_t robid : robIds) {
407 robIdsToBeDecoded.push_back(robid);
411 if (robIdsToBeDecoded.empty()) {
412 ATH_MSG_DEBUG(
"All requested ROBs have already been decoded; nothing to do.");
413 return StatusCode::SUCCESS;
415 ATH_MSG_DEBUG(robIdsToBeDecoded.size()<<
" ROBs have not yet been decoded and will be decoded now.");
416 if (msgLvl(MSG::VERBOSE)) {
418 for (uint32_t robid : robIdsToBeDecoded)
426 if (state.
m_decodedRobIds.size() == rpcCabling->giveFullListOfRobIds().size())
431 ATH_MSG_DEBUG(
"Stored empty container. Decoding RPC RDO into RPC PrepRawData is switched off");
432 return StatusCode::SUCCESS;
438 ATH_MSG_DEBUG(
"Retrieving Rpc PAD container from the store");
440 if (!rdoContainerHandle.isValid()) {
442 return StatusCode::SUCCESS;
447 if (rdoContainerHandle->empty()) {
449 ATH_MSG_DEBUG(
"Empty pad container - no rpc rdo in this event ");
450 return StatusCode::SUCCESS;
455 std::vector<IdentifierHash> rdoHashVec;
456 rdoHashVec.reserve(13 * robIdsToBeDecoded.size());
457 ATH_CHECK(rpcCabling->giveRDO_fromROB(robIdsToBeDecoded, rdoHashVec));
460 bool processingetaview =
true;
461 bool processingphiview =
false;
463 processingetaview =
false;
466 int ipad{0}, nPrepRawData{0}, nPhiPrepRawData{0}, nEtaPrepRawData{0};
467 if (processingphiview){
470 ATH_MSG_DEBUG(
"*** Processing "<<(processingetaview?
"eta" :
"phi")<<
" view ");
476 const RpcPad* rdoColl = rdoContainerHandle->indexFindPtr(padHashId);
478 ATH_MSG_DEBUG(
"Requested pad with online id "<< padHashId <<
" not found in the rdoContainerHandle.");
483 <<
", with " << rdoColl->
size() <<
" CM inside ");
485 processingphiview, nPrepRawData, rdoHashVec,
false));
488 if (processingetaview) {
489 processingetaview =
false;
490 processingphiview =
true;
491 nEtaPrepRawData = nPrepRawData;
492 ATH_MSG_DEBUG(
"*** " << nEtaPrepRawData <<
" eta PrepRawData registered");
494 processingphiview =
false;
495 nPhiPrepRawData = nPrepRawData - nEtaPrepRawData;
496 ATH_MSG_DEBUG(
"*** " << nPhiPrepRawData <<
" phi PrepRawData registered");
499 ATH_MSG_DEBUG(
"*** " << nPrepRawData <<
" PrepRawData registered");
506 return StatusCode::SUCCESS;
511 bool& processingetaview,
bool& processingphiview,
int& nPrepRawData,
512 const std::vector<IdentifierHash>& idVect,
513 bool doingSecondLoopAmbigColls)
const {
518 ATH_MSG_DEBUG(
"***************** Start of processPad eta/phiview "<< processingetaview <<
"/" << processingphiview);
521 uint16_t padId = rdoColl->
onlineId();
522 uint16_t sectorId = rdoColl->
sector();
523 ATH_MSG_DEBUG(
"***************** for Pad online Id "<< padId <<
" m_logic sector ID " << sectorId);
539 bool highPtCm =
false;
541 uint16_t cmaId = coinMat->onlineId();
542 ATH_MSG_DEBUG(
"A new CM here n. "<< icm <<
" CM online ID " << cmaId<<
" with n. of hits = " << coinMat->size()
543 <<
", empty: "<<coinMat->empty());
547 }
else if (cmaId >=4) {
553 ATH_MSG_DEBUG(
" eta view = " << etaview<<
", processingetaview: "<<processingetaview
554 <<
", processingphiview: "<<processingphiview);
556 if (processingetaview && !etaview){
558 }
else if (processingphiview && etaview) {
561 if (coinMat->empty()) {
571 unsigned short overlap = 99;
579 <<
" ijk "<< rpcChan->
ijk() <<
" ch " << ( rpcChan->
ijk() < 7 ? rpcChan->
channel() : -1));
582 bool triggerHit =
false;
592 solvePhiAmb_thisHit =
false;
593 reduceCablOvl_thisHit =
false;
594 ATH_MSG_DEBUG(
"RpcFiredChannel: it's a triggerHit or a lowPt coinc. in a high pt CM \n"
595 <<
" ijk = " << rpcChan->
ijk() <<
" isHighPtCM " << highPtCm
596 <<
" thr/ovl = " <<
threshold <<
"/" << overlap);
601 std::vector<Identifier> digitVec{
m_rpcRdoDecoderTool->getOfflineData(rpcChan, sectorId, padId,
602 cmaId, time, rpcCabling.
cptr())};
605 int nMatchingEtaHits{0}, nDuplicatePhiHits{0};
606 bool unsolvedAmbiguity{
false}, notFinished{
true};
615 while (notFinished) {
617 ATH_MSG_DEBUG(
"size of the corresponding list of ID = " << digitVec.size());
618 if (digitVec.empty()) {
623 for (
const Identifier& channelId : digitVec) {
632 if (!idVect.empty() && std::find(idVect.begin(), idVect.end(), rpcHashId) == idVect.end()) {
637 bool hasAMatchingEtaHit = 0;
640 if ((oldIdTrg != parentId) || !collectionTrg) {
644 <<
" hash = " << rpcHashId);
649 }
else if ((oldId != parentId) || !collection) {
661 bool duplicate =
false;
662 if (reduceCablOvl_thisHit) {
666 if (channelId == existId &&
669 hasAMatchingEtaHit =
false;
673 float previous_time = rpc->time();
675 if (time < previous_time) {
677 ATH_MSG_DEBUG(
"time of the prd previously stored is now updated with "
678 <<
"current hit time: "<< previous_time <<
" -> " << rpc->time());
686 if (processingphiview && solvePhiAmb_thisHit && !unsolvedAmbiguity && !idHelper.
measuresPhi(existId) &&
689 hasAMatchingEtaHit =
true;
697 if (hasAMatchingEtaHit)
701 if (processingphiview && duplicate)
707 if (solvePhiAmb_thisHit && !etaview){
709 <<
" hasAMatchingEtaHit = "<< hasAMatchingEtaHit);
716 ATH_MSG_VERBOSE(
" solvePhiAmb_thisHit: "<<solvePhiAmb_thisHit<<
", processingetaview:"<<processingetaview
717 <<
", processingphiview: "<<processingphiview<<
", hasAMatchingEtaHit: "<<hasAMatchingEtaHit
718 <<
", unsolvedAmbiguity: "<< unsolvedAmbiguity);
719 if ( !solvePhiAmb_thisHit || processingetaview ||
720 (processingphiview && (hasAMatchingEtaHit || unsolvedAmbiguity))) {
721 if (unsolvedAmbiguity) {
722 if (idVect.empty()) {
727 ATH_MSG_DEBUG(
"unsolvedAmbiguity is true, adding collection with hash = "
728 << rpcHashId <<
" to ambiguous collections vector");
731 ambiguousCollections.insert(rpcHashId);
732 ATH_MSG_DEBUG(
"collection not yet processed; added to ambiguous "
733 <<
"collection vector; going to the next offline channel ID");
735 }
else if (!doingSecondLoopAmbigColls) {
736 ambiguousCollections.insert(rpcHashId);
737 ATH_MSG_DEBUG(
"collection already processed and doingSecondLoopAmbigColls=false; added to ambiguous "
738 <<
"collection vector; going to the next offline channel ID");
741 ATH_MSG_DEBUG(
"collection already processed and doingSecondLoopAmbigColls=true; trying to store data even if unsolvedAmbiguity");
751 hasAMatchingEtaHit =
false;
755 <<
"> inconsistent with the geometry of detector element <"
757 <<
"> =>>ignore this hit /// there are unmasked channels in BOG");
760 <<
"> inconsistent with the geometry of detector element <"
772 descriptor->
surface(channelId).
globalToLocal(tempGlobalPosition, tempGlobalPosition, pointLocPos);
775 std::vector<Identifier> identifierList{channelId};
781 double errPos = stripWidth / std::sqrt(12.0);
784 mat *= errPos * errPos;
787 int ambiguityFlag = 0;
788 if (solvePhiAmb_thisHit) {
789 if (processingetaview){
792 if (unsolvedAmbiguity){
793 ambiguityFlag = digitVec.size();
794 }
else if (hasAMatchingEtaHit){
795 ambiguityFlag = nMatchingEtaHits;
802 std::optional<double> StripTimeFromCool = readHandle->getStripTime(channelId);
803 if (StripTimeFromCool) {
804 time -= (*StripTimeFromCool);
811 auto newCoinData = std::make_unique<RpcCoinData>(channelId, rpcHashId,
812 std::move(pointLocPos), std::move(identifierList),
813 std::move(mat), descriptor, time,
814 ambiguityFlag, rpcChan->
ijk(),
threshold, overlap, cmaId, padId, sectorId,
818 ATH_MSG_DEBUG(
" Adding RpcCoinData @ "<< newCoinData.get() <<
" to collection "
821 newCoinData->setHashAndIndex(collectionTrg->
identifyHash(),
822 collectionTrg->
size());
823 collectionTrg->
push_back(std::move(newCoinData));
827 <<
"ambiguityFlag = " << ambiguityFlag);
829 auto newPrepData = std::make_unique<RpcPrepData>(channelId, rpcHashId,std::move(pointLocPos),
830 std::move(identifierList),
831 std::move(mat), descriptor, time, ambiguityFlag);
834 ATH_MSG_DEBUG(
" Adding digit @ "<< newPrepData.get() <<
" to collection "
837 newPrepData->setHashAndIndex(collection->
identifyHash(),
839 collection->
push_back(std::move(newPrepData));
848 ATH_MSG_VERBOSE(
"processingphiview:"<<processingphiview<<
", nMatchingEtaHits:"<<nMatchingEtaHits
849 <<
", nDuplicatePhiHits, unsolvedAmbiguity: "<<unsolvedAmbiguity<<
", solvePhiAmb_thisHit : "
850 << solvePhiAmb_thisHit);
851 if ((processingphiview && (nMatchingEtaHits == 0)) && (nDuplicatePhiHits == 0) &&
852 (!unsolvedAmbiguity) && (solvePhiAmb_thisHit)) {
853 unsolvedAmbiguity =
true;
857 ATH_MSG_DEBUG(
"No eta prepData matching any phi hit from this CM hit \n"
858 <<
"loop once again and store all phi digits potentially "
859 "generating this CM hit");
860 }
else if (unsolvedAmbiguity)
868 ATH_MSG_DEBUG(
"***************** Stop of processPad eta/phiview "
869 << processingetaview <<
"/" << processingphiview
870 <<
"***************** for Pad online Id " << padId
871 <<
" m_logic sector ID " << sectorId);
873 return StatusCode::SUCCESS;
877 State& state)
const {
880 return StatusCode::SUCCESS;
883 ATH_MSG_DEBUG(
"Retrieving Nrpc RDO container from the store");
885 if (!rdoNrpcContainerHandle.
isPresent()) {
887 <<
" container failed !");
888 return StatusCode::FAILURE;
891 if (rdoNrpcContainerHandle->empty()) {
893 ATH_MSG_DEBUG(
"Empty NRPC RDO container - no nrpc rdo in this event ");
894 return StatusCode::SUCCESS;
896 ATH_MSG_DEBUG(
"Not empty NRPC RDO container in this event ");
901 <<
" from the conditions store");
902 return StatusCode::FAILURE;
907 for (
const xAOD::NRPCRDO* nrpcrdo : *rdoNrpcContainerHandle) {
910 translateCache.
subDetector = nrpcrdo->subdetector();
911 translateCache.
boardSector = nrpcrdo->boardsector();
912 translateCache.
board = nrpcrdo->board();
913 translateCache.
channelId = nrpcrdo->channel();
915 if (!readCdo->getOfflineId(translateCache, msgStream()) ||
916 !readCdo->convert(translateCache, chanId,
false)) {
927 std::vector<Identifier> identifierList{chanId};
931 <<
" global position "
938 const double stripWidth = descriptor->
StripWidth(
941 const double errPos = stripWidth / std::sqrt(12.0);
944 mat *= errPos * errPos;
946 int ambiguityFlag = 0;
948 const float time = nrpcrdo->time();
950 const float timeoverthr = nrpcrdo->timeoverthr();
953 auto newPrepData = std::make_unique<RpcPrepData>(chanId, rpcHashId, pointLocPos, identifierList, mat,
954 descriptor, time, timeoverthr, 0, ambiguityFlag);
956 newPrepData->setHashAndIndex(collection->
identifyHash(),
958 collection->
push_back(std::move(newPrepData));
960 return StatusCode::SUCCESS;
965 bool highPtCm,
bool& triggerHit,
966 unsigned short&
threshold,
unsigned short& overlap,
967 bool& toSkip)
const {
970 if ((highPtCm && rpcChan->
ijk() < 2) || (rpcChan->
ijk() > 5)) {
980 if (rpcChan->
ijk() == 7) {
985 if (rpcChan->
ijk() == 6) {
987 ATH_MSG_VERBOSE(
"This hit: ijk = " << rpcChan->
ijk() <<
"in "<<(highPtCm ?
"high" :
"low")
988 <<
" pT CM, bcid is " << rpcChan->
bcid()<<
" time is " << rpcChan->
time()
989 <<
" ch " << rpcChan->
channel());
991 while (itDnext != itD_end) {
993 ATH_MSG_VERBOSE(
"Next hit: ijk = " << rpcChanNext->
ijk() <<
"in "<<(highPtCm ?
"high" :
"low")
994 <<
" pT CM, bcid is " << rpcChan->
bcid() <<
" time is " << rpcChanNext->
time()
995 <<
", ch: "<<( rpcChanNext->
ijk() < 7? rpcChanNext->
channel() : -1));
997 if (rpcChanNext->
ijk() == 7) {
998 if (rpcChanNext->
bcid() == rpcChan->
bcid() && rpcChanNext->
time() == rpcChan->
time()) {
999 ATH_MSG_VERBOSE(
"bdid/tick match; assigning thr/overlap = " << rpcChanNext->
thr() <<
"/" << rpcChanNext->
ovl());
1001 overlap = rpcChanNext->
ovl();
1003 ATH_MSG_WARNING(
"ijk =7 after a ijk = 6 BUT bdid/tick don't match - will not assign threshold/overlap ");
1007 if (rpcChanNext->
ijk() == 6) {
1011 ATH_MSG_WARNING(
"RPC cm hit with ijk = 6 not followed by ijk = 6 or 7 - will not assign threshold / overlap");
1022 << rpcChan->
ijk() <<
" threshold / overlap = " <<
threshold
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
DataModel_detail::const_iterator< DataVector > const_iterator
value_type push_back(value_type pElem)
size_type size() const noexcept
Returns the number of elements in the collection.
This is a "hash" representation of an Identifier.
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
Identifier identify() const override final
Returns the ATLAS Identifier of the MuonReadOutElement.
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
Amg::Vector3D stripPos(const Identifier &id) const
double StripWidth(bool measphi) const
returns the strip width for the phi or eta plane
virtual bool containsId(const Identifier &id) const override
function to be used to check whether a given Identifier is contained in the readout element
const std::string & stationNameString(const Identifier &id) const
int stationName(const Identifier &id) const
Interface for Helper service that creates muon Identifiers and can be used to print Identifiers.
IdentifierHash identifyHash() const
Identifier identify() const
virtual Identifier identify() const override final
virtual IdentifierHash identifyHash() const override final
Class to represent RPC measurements.
Identifier parentID(const Identifier &id) const
bool measuresPhi(const Identifier &id) const override
IdentifierHash identifyHash() const
Returns the OFFLINE identifier hash for this collection.
const_pointer_type cptr()
bool isPresent() const
Is the referenced object present in SG?
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
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...
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the Athena extensions are properly loaded.
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
MuonCoinDataCollection< RpcCoinData > RpcCoinDataCollection
MuonPrepDataCollection< RpcPrepData > RpcPrepDataCollection
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Ensure that the ATLAS eigen extensions are properly loaded.
NRPCRDO_v1 NRPCRDO
Define the version of the NRPC RDO class.
Helper struct that is parsed to the cabling map to translate between the offline & online Identifiers...
uint8_t channelId
Online board channel number.
int16_t & board
Unique identifier of the tdc chip.
int16_t & boardSector
Unique Identifier of the Rpc chamber from an online perspective.
int16_t & subDetector
Identifier of the subdetector region in the readout BA / BC etc.