7#include "GaudiKernel/ThreadLocalContext.h"
16#include "GeoModelKernel/throwExcept.h"
32 coll = std::make_unique<RpcPrepDataCollection>(rpdModHash);
41 coll = std::make_unique<RpcCoinDataCollection>(rpdModHash);
58 ATH_MSG_WARNING(
"Inconsistent setting of properties (solvePhiAmbiguities entails reduceCablingOverlap)");
81 return StatusCode::SUCCESS;
85 return StatusCode::SUCCESS;
88 const int modHashMax =
m_idHelperSvc->rpcIdHelper().module_hash_max();
91 if (!update.isValid()) {
93 return StatusCode::FAILURE;
95 state.
prepDataCont = std::make_unique<RpcPrepDataContainer>(update.ptr());
100 state.
prepDataCont = std::make_unique<RpcPrepDataContainer>(modHashMax);
104 state.
coinDataCont = std::make_unique<RpcCoinDataContainer>(modHashMax);
108 if (!update.isValid()) {
110 return StatusCode::FAILURE;
112 state.
coinDataCont = std::make_unique<RpcCoinDataContainer>(update.ptr());
117 return StatusCode::SUCCESS;
122 const std::vector<IdentifierHash>& idVect)
const {
123 ATH_MSG_DEBUG(
"Calling Core decode function from MT decode function (hash vector)");
129 ATH_MSG_DEBUG(
"Core decode processed in MT decode (hash vector)");
134 return StatusCode::SUCCESS;
140 const std::vector<uint32_t>& robIds)
const {
141 ATH_MSG_DEBUG(
"Calling Core decode function from MT decode function (ROB vector)");
147 ATH_MSG_DEBUG(
"Core decode processed in MT decode (ROB vector)");
152 return StatusCode::SUCCESS;
159 return StatusCode::SUCCESS;
167 ATH_CHECK(writeHandleXAOD.
record(std::make_unique<xAOD::RpcStripContainer>(),
168 std::make_unique<xAOD::RpcStripAuxContainer>()));
172 if (!collection || collection->empty()) {
178 std::vector<const RpcPrepData*> sortMe{collection->begin(), collection->end()};
187 strip->setAmbiguityFlag(prd->ambiguityFlag());
188 strip->setTimeOverThreshold(prd->timeOverThreshold());
189 strip->setTime(prd->time());
191 strip->setTriggerInfo(prd->triggerInfo());
194 strip->setMeasurement(
m_idHelperSvc->detElementHash(
id), std::move(locPos), std::move(locCov));
202 ATH_MSG_DEBUG(
"RpcPrepDataCollection already contained in IDC "
207 ATH_MSG_DEBUG(
"PRD hash " << hash <<
" has been moved to cache container");
211 if (msgLvl(MSG::DEBUG)) {
212 for (
const auto& [hash, ptr] : state.
prepDataCont->GetAllHashPtrPair()) {
213 ATH_MSG_DEBUG(
"Contents of CONTAINER in this view : " << hash);
220 return StatusCode::SUCCESS;
225 return StatusCode::SUCCESS;
230 if (!collection || collection->empty()) {
237 ATH_MSG_DEBUG(
"RpcCoinDataCollection already contained in IDC "
242 ATH_MSG_DEBUG(
"Coin hash " << hash <<
" has been moved to cache container");
245 if (msgLvl(MSG::DEBUG)) {
246 for (
const auto& [hash, ptr] : state.
coinDataCont->GetAllHashPtrPair()) {
258 return StatusCode::SUCCESS;
263 const std::vector<IdentifierHash>& idVect,
264 bool firstTimeInTheEvent)
const {
265 int sizeVectorRequested = idVect.size();
266 ATH_MSG_DEBUG(
"Decode method called for " << sizeVectorRequested <<
" offline collections");
267 if (sizeVectorRequested == 0){
272 std::vector<IdentifierHash> idVectToBeDecoded;
273 idVectToBeDecoded.reserve(idVect.size());
275 if (firstTimeInTheEvent) {
279 ATH_MSG_DEBUG(
"Whole event has already been decoded; nothing to do.");
280 return StatusCode::SUCCESS;
282 if (sizeVectorRequested == 0) {
287 if (sizeVectorRequested != 0) {
293 idVectToBeDecoded.push_back(itHashId);
296 if (idVectToBeDecoded.empty()) {
297 ATH_MSG_DEBUG(
"All requested offline collections have already been decoded; nothing to do.");
298 return StatusCode::SUCCESS;
301 <<
" offline collections have not yet been decoded and will be decoded now.");
302 ATH_MSG_VERBOSE(
"The list of offline collection hash ids to be decoded:"<<std::endl<<idVectToBeDecoded);
308 ATH_MSG_DEBUG(
"Stored empty container. Decoding RPC RDO into RPC PrepRawData is switched off");
309 return StatusCode::SUCCESS;
317 std::vector<IdentifierHash> rdoHashVec;
318 if (sizeVectorRequested != 0) {
319 ATH_MSG_DEBUG(
"Looking for pads IdHash to be decoded for the requested collection Ids");
320 ATH_CHECK(rpcCabling->giveRDO_fromPRD(idVectToBeDecoded, rdoHashVec));
327 ATH_MSG_DEBUG(
"Retrieving Rpc PAD container from the store");
329 if (!rdoContainerHandle.isValid()) {
331 return StatusCode::FAILURE;
336 if (rdoContainerHandle->numberOfCollections() == 0) {
338 ATH_MSG_DEBUG(
"Empty pad container - no rpc rdo in this event ");
339 return StatusCode::SUCCESS;
345 bool doingSecondLoopAmbigColls =
false;
347 int ipad{0}, nPrepRawData{0}, nPhiPrepRawData{0}, nEtaPrepRawData{0};
348 if (processingphiview) {
351 ATH_MSG_DEBUG(
"*** Processing "<<(processingetaview ?
"eta" :
"phi")<<
" view ");
353 if (sizeVectorRequested != 0) {
356 const RpcPad* rdoColl = rdoContainerHandle->indexFindPtr(iPadHash);
358 ATH_MSG_DEBUG(
"Requested pad with online id "<< iPadHash <<
" not found in the rdoContainerHandle.");
364 <<
", with " << rdoColl->
size() <<
" CM inside ");
366 processingphiview, nPrepRawData, idVectToBeDecoded, doingSecondLoopAmbigColls));
371 for (
const RpcPad* rdoColl : *rdoContainerHandle) {
373 if (rdoColl->empty()){
377 ATH_MSG_DEBUG(
"A new pad here n. " << ipad <<
", online id "<< rdoColl->identifyHash()
378 <<
", with " << rdoColl->size() <<
" CM inside ");
381 processingphiview, nPrepRawData, idVectToBeDecoded, doingSecondLoopAmbigColls));
385 if (processingetaview) {
386 processingetaview =
false;
387 processingphiview =
true;
388 nEtaPrepRawData = nPrepRawData;
389 ATH_MSG_DEBUG(
"*** " << nEtaPrepRawData <<
" eta PrepRawData registered");
391 processingphiview =
false;
392 nPhiPrepRawData = nPrepRawData - nEtaPrepRawData;
393 ATH_MSG_DEBUG(
"*** " << nPhiPrepRawData <<
" phi PrepRawData registered");
396 doingSecondLoopAmbigColls =
true;
397 processingetaview =
true;
399 idVectToBeDecoded.clear();
403 idVectToBeDecoded.push_back(itAmbiColl);
406 ATH_CHECK(rpcCabling->giveRDO_fromPRD(idVectToBeDecoded, rdoHashVec));
410 ATH_MSG_DEBUG(
"*** " << nPrepRawData <<
" PrepRawData registered");
416 return StatusCode::SUCCESS;
421 const std::vector<uint32_t>& robIds,
bool firstTimeInTheEvent)
const {
425 int sizeVectorRequested = robIds.size();
426 ATH_MSG_DEBUG(
"Decode method called for " << sizeVectorRequested <<
" ROBs");
428 std::vector<uint32_t> robIdsToBeDecoded{};
429 robIdsToBeDecoded.reserve(robIds.size());
431 if (firstTimeInTheEvent) {
435 ATH_MSG_DEBUG(
"Whole event has already been decoded; nothing to do.");
436 return StatusCode::SUCCESS;
441 for (uint32_t robid : robIds) {
443 robIdsToBeDecoded.push_back(robid);
447 if (robIdsToBeDecoded.empty()) {
448 ATH_MSG_DEBUG(
"All requested ROBs have already been decoded; nothing to do.");
449 return StatusCode::SUCCESS;
451 ATH_MSG_DEBUG(robIdsToBeDecoded.size()<<
" ROBs have not yet been decoded and will be decoded now.");
452 if (msgLvl(MSG::VERBOSE)) {
454 for (uint32_t robid : robIdsToBeDecoded)
462 if (state.
m_decodedRobIds.size() == rpcCabling->giveFullListOfRobIds().size())
467 ATH_MSG_DEBUG(
"Stored empty container. Decoding RPC RDO into RPC PrepRawData is switched off");
468 return StatusCode::SUCCESS;
474 ATH_MSG_DEBUG(
"Retrieving Rpc PAD container from the store");
476 if (!rdoContainerHandle.isValid()) {
478 return StatusCode::SUCCESS;
483 if (rdoContainerHandle->empty()) {
485 ATH_MSG_DEBUG(
"Empty pad container - no rpc rdo in this event ");
486 return StatusCode::SUCCESS;
491 std::vector<IdentifierHash> rdoHashVec;
492 rdoHashVec.reserve(13 * robIdsToBeDecoded.size());
493 ATH_CHECK(rpcCabling->giveRDO_fromROB(robIdsToBeDecoded, rdoHashVec));
496 bool processingetaview =
true;
497 bool processingphiview =
false;
499 processingetaview =
false;
502 int ipad{0}, nPrepRawData{0}, nPhiPrepRawData{0}, nEtaPrepRawData{0};
503 if (processingphiview){
506 ATH_MSG_DEBUG(
"*** Processing "<<(processingetaview?
"eta" :
"phi")<<
" view ");
512 const RpcPad* rdoColl = rdoContainerHandle->indexFindPtr(padHashId);
514 ATH_MSG_DEBUG(
"Requested pad with online id "<< padHashId <<
" not found in the rdoContainerHandle.");
519 <<
", with " << rdoColl->
size() <<
" CM inside ");
521 processingphiview, nPrepRawData, rdoHashVec,
false));
524 if (processingetaview) {
525 processingetaview =
false;
526 processingphiview =
true;
527 nEtaPrepRawData = nPrepRawData;
528 ATH_MSG_DEBUG(
"*** " << nEtaPrepRawData <<
" eta PrepRawData registered");
530 processingphiview =
false;
531 nPhiPrepRawData = nPrepRawData - nEtaPrepRawData;
532 ATH_MSG_DEBUG(
"*** " << nPhiPrepRawData <<
" phi PrepRawData registered");
535 ATH_MSG_DEBUG(
"*** " << nPrepRawData <<
" PrepRawData registered");
542 return StatusCode::SUCCESS;
547 bool& processingetaview,
bool& processingphiview,
int& nPrepRawData,
548 const std::vector<IdentifierHash>& idVect,
549 bool doingSecondLoopAmbigColls)
const {
554 ATH_MSG_DEBUG(
"***************** Start of processPad eta/phiview "<< processingetaview <<
"/" << processingphiview);
557 uint16_t padId = rdoColl->
onlineId();
558 uint16_t sectorId = rdoColl->
sector();
559 ATH_MSG_DEBUG(
"***************** for Pad online Id "<< padId <<
" m_logic sector ID " << sectorId);
575 bool highPtCm =
false;
577 uint16_t cmaId = coinMat->onlineId();
578 ATH_MSG_DEBUG(
"A new CM here n. "<< icm <<
" CM online ID " << cmaId<<
" with n. of hits = " << coinMat->size()
579 <<
", empty: "<<coinMat->empty());
583 }
else if (cmaId >=4) {
589 ATH_MSG_DEBUG(
" eta view = " << etaview<<
", processingetaview: "<<processingetaview
590 <<
", processingphiview: "<<processingphiview);
592 if (processingetaview && !etaview){
594 }
else if (processingphiview && etaview) {
597 if (coinMat->empty()) {
607 unsigned short overlap = 99;
615 <<
" ijk "<< rpcChan->
ijk() <<
" ch " << ( rpcChan->
ijk() < 7 ? rpcChan->
channel() : -1));
618 bool triggerHit =
false;
628 solvePhiAmb_thisHit =
false;
629 reduceCablOvl_thisHit =
false;
630 ATH_MSG_DEBUG(
"RpcFiredChannel: it's a triggerHit or a lowPt coinc. in a high pt CM \n"
631 <<
" ijk = " << rpcChan->
ijk() <<
" isHighPtCM " << highPtCm
632 <<
" thr/ovl = " <<
threshold <<
"/" << overlap);
637 std::vector<Identifier> digitVec{
m_rpcRdoDecoderTool->getOfflineData(rpcChan, sectorId, padId,
638 cmaId, time, rpcCabling.
cptr())};
641 int nMatchingEtaHits{0}, nDuplicatePhiHits{0};
642 bool unsolvedAmbiguity{
false}, notFinished{
true};
651 while (notFinished) {
653 ATH_MSG_DEBUG(
"size of the corresponding list of ID = " << digitVec.size());
654 if (digitVec.empty()) {
659 for (
const Identifier& channelId : digitVec) {
668 if (!idVect.empty() && std::find(idVect.begin(), idVect.end(), rpcHashId) == idVect.end()) {
673 bool hasAMatchingEtaHit = 0;
676 if ((oldIdTrg != parentId) || !collectionTrg) {
680 <<
" hash = " << rpcHashId);
685 }
else if ((oldId != parentId) || !collection) {
697 bool duplicate =
false;
698 if (reduceCablOvl_thisHit) {
702 if (channelId == existId &&
705 hasAMatchingEtaHit =
false;
709 float previous_time = rpc->time();
711 if (time < previous_time) {
713 ATH_MSG_DEBUG(
"time of the prd previously stored is now updated with "
714 <<
"current hit time: "<< previous_time <<
" -> " << rpc->time());
722 if (processingphiview && solvePhiAmb_thisHit && !unsolvedAmbiguity && !idHelper.
measuresPhi(existId) &&
725 hasAMatchingEtaHit =
true;
733 if (hasAMatchingEtaHit)
737 if (processingphiview && duplicate)
743 if (solvePhiAmb_thisHit && !etaview){
745 <<
" hasAMatchingEtaHit = "<< hasAMatchingEtaHit);
752 ATH_MSG_VERBOSE(
" solvePhiAmb_thisHit: "<<solvePhiAmb_thisHit<<
", processingetaview:"<<processingetaview
753 <<
", processingphiview: "<<processingphiview<<
", hasAMatchingEtaHit: "<<hasAMatchingEtaHit
754 <<
", unsolvedAmbiguity: "<< unsolvedAmbiguity);
755 if ( !solvePhiAmb_thisHit || processingetaview ||
756 (processingphiview && (hasAMatchingEtaHit || unsolvedAmbiguity))) {
757 if (unsolvedAmbiguity) {
758 if (idVect.empty()) {
763 ATH_MSG_DEBUG(
"unsolvedAmbiguity is true, adding collection with hash = "
764 << rpcHashId <<
" to ambiguous collections vector");
767 ambiguousCollections.insert(rpcHashId);
768 ATH_MSG_DEBUG(
"collection not yet processed; added to ambiguous "
769 <<
"collection vector; going to the next offline channel ID");
771 }
else if (!doingSecondLoopAmbigColls) {
772 ambiguousCollections.insert(rpcHashId);
773 ATH_MSG_DEBUG(
"collection already processed and doingSecondLoopAmbigColls=false; added to ambiguous "
774 <<
"collection vector; going to the next offline channel ID");
777 ATH_MSG_DEBUG(
"collection already processed and doingSecondLoopAmbigColls=true; trying to store data even if unsolvedAmbiguity");
787 hasAMatchingEtaHit =
false;
791 <<
"> inconsistent with the geometry of detector element <"
793 <<
"> =>>ignore this hit /// there are unmasked channels in BOG");
796 <<
"> inconsistent with the geometry of detector element <"
808 descriptor->
surface(channelId).
globalToLocal(tempGlobalPosition, tempGlobalPosition, pointLocPos);
811 std::vector<Identifier> identifierList{channelId};
817 double errPos = stripWidth / std::sqrt(12.0);
820 mat *= errPos * errPos;
823 int ambiguityFlag = 0;
824 if (solvePhiAmb_thisHit) {
825 if (processingetaview){
828 if (unsolvedAmbiguity){
829 ambiguityFlag = digitVec.size();
830 }
else if (hasAMatchingEtaHit){
831 ambiguityFlag = nMatchingEtaHits;
838 std::optional<double> StripTimeFromCool = readHandle->getStripTime(channelId);
839 if (StripTimeFromCool) {
840 time -= (*StripTimeFromCool);
847 auto newCoinData = std::make_unique<RpcCoinData>(channelId, rpcHashId,
848 std::move(pointLocPos), std::move(identifierList),
849 std::move(mat), descriptor, time,
850 ambiguityFlag, rpcChan->
ijk(),
threshold, overlap, cmaId, padId, sectorId,
854 ATH_MSG_DEBUG(
" Adding RpcCoinData @ "<< newCoinData.get() <<
" to collection "
857 newCoinData->setHashAndIndex(collectionTrg->
identifyHash(),
858 collectionTrg->
size());
859 collectionTrg->
push_back(std::move(newCoinData));
863 <<
"ambiguityFlag = " << ambiguityFlag);
865 auto newPrepData = std::make_unique<RpcPrepData>(channelId, rpcHashId,std::move(pointLocPos),
866 std::move(identifierList),
867 std::move(mat), descriptor, time, ambiguityFlag);
870 ATH_MSG_DEBUG(
" Adding digit @ "<< newPrepData.get() <<
" to collection "
873 newPrepData->setHashAndIndex(collection->
identifyHash(),
875 collection->
push_back(std::move(newPrepData));
884 ATH_MSG_VERBOSE(
"processingphiview:"<<processingphiview<<
", nMatchingEtaHits:"<<nMatchingEtaHits
885 <<
", nDuplicatePhiHits, unsolvedAmbiguity: "<<unsolvedAmbiguity<<
", solvePhiAmb_thisHit : "
886 << solvePhiAmb_thisHit);
887 if ((processingphiview && (nMatchingEtaHits == 0)) && (nDuplicatePhiHits == 0) &&
888 (!unsolvedAmbiguity) && (solvePhiAmb_thisHit)) {
889 unsolvedAmbiguity =
true;
893 ATH_MSG_DEBUG(
"No eta prepData matching any phi hit from this CM hit \n"
894 <<
"loop once again and store all phi digits potentially "
895 "generating this CM hit");
896 }
else if (unsolvedAmbiguity)
904 ATH_MSG_DEBUG(
"***************** Stop of processPad eta/phiview "
905 << processingetaview <<
"/" << processingphiview
906 <<
"***************** for Pad online Id " << padId
907 <<
" m_logic sector ID " << sectorId);
909 return StatusCode::SUCCESS;
913 State& state)
const {
916 return StatusCode::SUCCESS;
919 ATH_MSG_DEBUG(
"Retrieving Nrpc RDO container from the store");
921 if (!rdoNrpcContainerHandle.
isPresent()) {
923 <<
" container failed !");
924 return StatusCode::FAILURE;
927 if (rdoNrpcContainerHandle->empty()) {
929 ATH_MSG_DEBUG(
"Empty NRPC RDO container - no nrpc rdo in this event ");
930 return StatusCode::SUCCESS;
932 ATH_MSG_DEBUG(
"Not empty NRPC RDO container in this event ");
937 <<
" from the conditions store");
938 return StatusCode::FAILURE;
943 for (
const xAOD::NRPCRDO* nrpcrdo : *rdoNrpcContainerHandle) {
946 translateCache.
subDetector = nrpcrdo->subdetector();
947 translateCache.
boardSector = nrpcrdo->boardsector();
948 translateCache.
board = nrpcrdo->board();
949 translateCache.
channelId = nrpcrdo->channel();
951 if (!readCdo->getOfflineId(translateCache, msgStream()) ||
952 !readCdo->convert(translateCache, chanId,
false)) {
963 std::vector<Identifier> identifierList{chanId};
967 <<
" global position "
974 const double stripWidth = descriptor->
StripWidth(
977 const double errPos = stripWidth / std::sqrt(12.0);
980 mat *= errPos * errPos;
982 int ambiguityFlag = 0;
984 const float time = nrpcrdo->time();
986 const float timeoverthr = nrpcrdo->timeoverthr();
989 auto newPrepData = std::make_unique<RpcPrepData>(chanId, rpcHashId, pointLocPos, identifierList, mat,
990 descriptor, time, timeoverthr, 0, ambiguityFlag);
992 newPrepData->setHashAndIndex(collection->
identifyHash(),
994 collection->
push_back(std::move(newPrepData));
996 return StatusCode::SUCCESS;
1001 bool highPtCm,
bool& triggerHit,
1002 unsigned short&
threshold,
unsigned short& overlap,
1003 bool& toSkip)
const {
1006 if ((highPtCm && rpcChan->
ijk() < 2) || (rpcChan->
ijk() > 5)) {
1016 if (rpcChan->
ijk() == 7) {
1021 if (rpcChan->
ijk() == 6) {
1023 ATH_MSG_VERBOSE(
"This hit: ijk = " << rpcChan->
ijk() <<
"in "<<(highPtCm ?
"high" :
"low")
1024 <<
" pT CM, bcid is " << rpcChan->
bcid()<<
" time is " << rpcChan->
time()
1025 <<
" ch " << rpcChan->
channel());
1027 while (itDnext != itD_end) {
1029 ATH_MSG_VERBOSE(
"Next hit: ijk = " << rpcChanNext->
ijk() <<
"in "<<(highPtCm ?
"high" :
"low")
1030 <<
" pT CM, bcid is " << rpcChan->
bcid() <<
" time is " << rpcChanNext->
time()
1031 <<
", ch: "<<( rpcChanNext->
ijk() < 7? rpcChanNext->
channel() : -1));
1033 if (rpcChanNext->
ijk() == 7) {
1034 if (rpcChanNext->
bcid() == rpcChan->
bcid() && rpcChanNext->
time() == rpcChan->
time()) {
1035 ATH_MSG_VERBOSE(
"bdid/tick match; assigning thr/overlap = " << rpcChanNext->
thr() <<
"/" << rpcChanNext->
ovl());
1037 overlap = rpcChanNext->
ovl();
1039 ATH_MSG_WARNING(
"ijk =7 after a ijk = 6 BUT bdid/tick don't match - will not assign threshold/overlap ");
1043 if (rpcChanNext->
ijk() == 6) {
1047 ATH_MSG_WARNING(
"RPC cm hit with ijk = 6 not followed by ijk = 6 or 7 - will not assign threshold / overlap");
1058 << 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)
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 class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
StatusCode addOrDelete(std::unique_ptr< T > ptr)
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
int stationName(const Identifier &id) const
const std::string & stationNameString(const int &index) 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.
int gasGap(const Identifier &id) const override
get the hashes
Identifier parentID(const Identifier &id) const
int channel(const Identifier &id) const override
int doubletPhi(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.
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.
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.