|
27 | 27 |
|
28 | 28 | bool TrackSelection::FulfillsITSHitRequirements(uint8_t itsClusterMap) const |
29 | 29 | { |
30 | | - constexpr uint8_t bit = 1; |
31 | | - for (auto& itsRequirement : mRequiredITSHits) { |
32 | | - auto hits = std::count_if(itsRequirement.second.begin(), itsRequirement.second.end(), [&](auto&& requiredLayer) { return itsClusterMap & (bit << requiredLayer); }); |
33 | | - if ((itsRequirement.first == -1) && (hits > 0)) { |
| 30 | + for (const auto& [minHits, layerMask] : mRequiredITSHits) { |
| 31 | + int hits = __builtin_popcount(itsClusterMap & layerMask); |
| 32 | + if ((minHits == -1) && (hits > 0)) { |
34 | 33 | return false; // no hits were required in specified layers |
35 | | - } else if (hits < itsRequirement.first) { |
| 34 | + } else if (hits < minHits) { |
36 | 35 | return false; // not enough hits found in specified layers |
37 | 36 | } |
38 | 37 | } |
@@ -128,12 +127,20 @@ void TrackSelection::SetMaxDcaXYPtDep(std::function<float(float)> ptDepCut) |
128 | 127 | void TrackSelection::SetRequireHitsInITSLayers(int8_t minNRequiredHits, std::set<uint8_t> requiredLayers) |
129 | 128 | { |
130 | 129 | // layer 0 corresponds to the the innermost ITS layer |
131 | | - mRequiredITSHits.push_back(std::make_pair(minNRequiredHits, requiredLayers)); |
| 130 | + uint8_t mask = 0; |
| 131 | + for (const auto& layer : requiredLayers) { |
| 132 | + mask |= (1u << layer); |
| 133 | + } |
| 134 | + mRequiredITSHits.push_back(std::make_pair(minNRequiredHits, mask)); |
132 | 135 | LOG(info) << "Track selection, set require hits in ITS layers: " << static_cast<int>(minNRequiredHits); |
133 | 136 | } |
134 | 137 | void TrackSelection::SetRequireNoHitsInITSLayers(std::set<uint8_t> excludedLayers) |
135 | 138 | { |
136 | | - mRequiredITSHits.push_back(std::make_pair(-1, excludedLayers)); |
| 139 | + uint8_t mask = 0; |
| 140 | + for (const auto& layer : excludedLayers) { |
| 141 | + mask |= (1u << layer); |
| 142 | + } |
| 143 | + mRequiredITSHits.push_back(std::make_pair(-1, mask)); |
137 | 144 | LOG(info) << "Track selection, set require no hits in ITS layers"; |
138 | 145 | } |
139 | 146 |
|
|
0 commit comments