21 return StatusCode::SUCCESS;
34 if (measurements->empty()){
35 return StatusCode::SUCCESS;
42 decorHandle(*prdViewer.at(0)) =
LinkType{};
45 if ((simHitViewer.size() == 0 ||
m_idHelperSvc->detElementHash(simHitViewer.at(0)->identify()) > viewHash) &&
46 !simHitViewer.loadView(chambId)) {
49 }
else if (
m_idHelperSvc->detElementHash(simHitViewer.at(0)->identify()) < viewHash \
51 return m_idHelperSvc->detElementHash(hit->identify()) == viewHash;
55 ATH_MSG_VERBOSE(
"Container size "<<simHits->size()<<
" viewer size: "<<simHitViewer.size()<<
" view hash: "<<viewHash);
56 std::unordered_set<Identifier> prds{};
60 switch (measurement->type()) {
68 if (matching_itr != simHitViewer.end()) {
69 bestSimHit =(*matching_itr);
76 const int ml = mmIdHelper.multilayer(mmHit->identify());
77 for (
const uint16_t strip : mmHit->stripNumbers()) {
78 prds.insert(mmIdHelper.channelID(mmHit->identify(), ml, mmHit->gasGap(), strip));
84 if (matching_itr != simHitViewer.end()) {
85 bestSimHit =(*matching_itr);
98 if (measurement->numDimensions() == 1) {
99 locPos = measurement->localPosition<1>().
x() * Amg::Vector3D::UnitX();
101 locPos.block<2,1>(0,0) = xAOD::toEigen(measurement->localPosition<2>());
105 if (gasGapId !=
m_idHelperSvc->gasGapId(simHit->identify())) {
114 if (measurement->numDimensions() == 1) {
115 dist = std::abs(prdPos.x() - simHit->localPosition().x())
116 / std::sqrt(measurement->localCovariance<1>()(0,0));
118 const Amg::Vector2D diff = (prdPos - xAOD::toEigen(simHit->localPosition())).block<2,1>(0,0);
119 dist = std::sqrt(
diff.dot(xAOD::toEigen(measurement->localCovariance<2>()).inverse() *
diff));
121 if (dist < closestDistance) {
122 closestDistance = dist;
129 return StatusCode::FAILURE;
135 decorHandle(*measurement) =
LinkType{*simHits, bestSimHit->
index()};
138 }
while (prdViewer.next());
140 return StatusCode::SUCCESS;