Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions Common/Core/TrackSelection.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,11 @@

bool TrackSelection::FulfillsITSHitRequirements(uint8_t itsClusterMap) const
{
constexpr uint8_t bit = 1;
for (auto& itsRequirement : mRequiredITSHits) {
auto hits = std::count_if(itsRequirement.second.begin(), itsRequirement.second.end(), [&](auto&& requiredLayer) { return itsClusterMap & (bit << requiredLayer); });
if ((itsRequirement.first == -1) && (hits > 0)) {
for (const auto& [minHits, layerMask] : mRequiredITSHits) {
int hits = __builtin_popcount(itsClusterMap & layerMask);
if ((minHits == -1) && (hits > 0)) {
return false; // no hits were required in specified layers
} else if (hits < itsRequirement.first) {
} else if (hits < minHits) {
return false; // not enough hits found in specified layers
}
}
Expand Down Expand Up @@ -128,12 +127,20 @@ void TrackSelection::SetMaxDcaXYPtDep(std::function<float(float)> ptDepCut)
void TrackSelection::SetRequireHitsInITSLayers(int8_t minNRequiredHits, std::set<uint8_t> requiredLayers)
{
// layer 0 corresponds to the the innermost ITS layer
mRequiredITSHits.push_back(std::make_pair(minNRequiredHits, requiredLayers));
uint8_t mask = 0;
for (const auto& layer : requiredLayers) {
mask |= (1u << layer);
}
mRequiredITSHits.push_back(std::make_pair(minNRequiredHits, mask));
LOG(info) << "Track selection, set require hits in ITS layers: " << static_cast<int>(minNRequiredHits);
}
void TrackSelection::SetRequireNoHitsInITSLayers(std::set<uint8_t> excludedLayers)
{
mRequiredITSHits.push_back(std::make_pair(-1, excludedLayers));
uint8_t mask = 0;
for (const auto& layer : excludedLayers) {
mask |= (1u << layer);
}
mRequiredITSHits.push_back(std::make_pair(-1, mask));
LOG(info) << "Track selection, set require no hits in ITS layers";
}

Expand Down
6 changes: 3 additions & 3 deletions Common/Core/TrackSelection.h
Original file line number Diff line number Diff line change
Expand Up @@ -268,10 +268,10 @@ class TrackSelection
bool mRequireTPCRefit{false}; // require refit in TPC
bool mRequireGoldenChi2{false}; // require golden chi2 cut (Run 2 only)

// vector of ITS requirements (minNRequiredHits in specific requiredLayers)
std::vector<std::pair<int8_t, std::set<uint8_t>>> mRequiredITSHits{};
// vector of ITS requirements (minNRequiredHits, bitmask of requiredLayers)
std::vector<std::pair<int8_t, uint8_t>> mRequiredITSHits{};

ClassDefNV(TrackSelection, 1);
ClassDefNV(TrackSelection, 2);
};

#endif // COMMON_CORE_TRACKSELECTION_H_
Loading