37 return StatusCode::FAILURE;
44 using enum xAOD::Muon::TrackParticleType;
46 if (mu->primaryTrackParticle() == mu->trackParticle(InnerDetectorTrackParticle))
continue;
48 if (mu->primaryTrackParticle() == mu->trackParticle(MuonSpectrometerTrackParticle))
continue;
50 const std::vector<std::vector<unsigned int>>& chIds = acc_alignEffectChId(*ptp);
51 const std::vector<float>& alignEffSDT = acc_alligSigmaDeltaTrans(*ptp);
55 const uint8_t nTotPrec = prec;
56 uint8_t nBadPrec{0}, nBadBar{0}, nBadSmall{0}, nBadLarge{0}, nGoodBar{0}, nGoodLarge{0}, nGoodSmall{0};
59 std::unordered_map<ChIndex, int> chamberQual{};
61 for (
unsigned int i = 0; i < chIds.size(); ++i) {
63 for (
unsigned int j = 0; j < chIds[i].size(); ++j) {
64 const auto currInd =
static_cast<ChIndex>(chIds[i][j]);
65 const int quality = alignEffSDT[i] >= 0.5 ? badQualityFlag : goodQualityFlag;
66 if ((chamberQual.count(currInd) && chIds[i].size() > 1) || !chamberQual.count(currInd)) {
69 chamberQual[currInd] = quality;
73 for (
const auto& [chamber, quality] : chamberQual) {
74 const bool is_barrel =
isBarrel(chamber);
75 const bool is_small =
isSmall(chamber);
76 if (quality == badQualityFlag) {
80 nBadLarge+= !is_small;
83 nGoodLarge+= !is_small;
84 nGoodSmall+= is_small;
87 const uint8_t nGoodPrec = nTotPrec - nBadPrec;
88 const uint8_t nBadEnd = nBadPrec - nBadBar;
89 const uint8_t nGoodEnd = nGoodPrec - nGoodBar;
90 const bool countHits = (nGoodSmall == nGoodLarge) || (nBadSmall == nBadLarge);
92 uint8_t
isSmall = (nGoodPrec >= nBadPrec&& nGoodSmall > nGoodLarge) || (nGoodPrec < nBadPrec&& nBadSmall > nBadLarge);
93 const uint8_t isEnd = (nGoodPrec >= nBadPrec&& nGoodEnd > nGoodBar) || (nGoodPrec < nBadPrec && nBadEnd >nBadBar );
101 mu->summaryValue(sumval,sum);
104 const int nSmallHits = std::accumulate(small_sectors.begin(), small_sectors.end(),0 ,accumulator);
105 const int nLargeHits = std::accumulate(large_sectors.begin(), large_sectors.end(),0 ,accumulator);
106 isSmall = (nSmallHits > nLargeHits);
108 acc_precLayers(*mu) = nGoodPrec;
109 acc_isSmallGood(*mu) =
isSmall;
110 acc_isEndcapGood(*mu) = isEnd;
112 return StatusCode::SUCCESS;