ATLAS Offline Software
Loading...
Searching...
No Matches
L0Muon::TgcL0Floating::OverlapClassification Class Reference

Tag nearby candidates from distinct chamber paths. More...

#include <TgcL0OverlapClassification.h>

Collaboration diagram for L0Muon::TgcL0Floating::OverlapClassification:

Public Member Functions

 OverlapClassification (OverlapClassificationConfig config=OverlapClassificationConfig{})
void classify (TgcL0CandidateContainer &candidates, OverlapClassificationStatistics &statistics) const

Private Attributes

OverlapClassificationConfig m_config {}

Detailed Description

Tag nearby candidates from distinct chamber paths.

No candidate is removed or ranked. The tags provide event-local provenance for a later overlap-removal stage, after pT and Inner-Coincidence information are available.

Definition at line 34 of file TgcL0OverlapClassification.h.

Constructor & Destructor Documentation

◆ OverlapClassification()

L0Muon::TgcL0Floating::OverlapClassification::OverlapClassification ( OverlapClassificationConfig config = OverlapClassificationConfig{})
explicit

Definition at line 98 of file TgcL0OverlapClassification.cxx.

99 : m_config(config) {}

Member Function Documentation

◆ classify()

void L0Muon::TgcL0Floating::OverlapClassification::classify ( TgcL0CandidateContainer & candidates,
OverlapClassificationStatistics & statistics ) const

Definition at line 101 of file TgcL0OverlapClassification.cxx.

103 {
104 statistics = OverlapClassificationStatistics{};
105 for (TgcL0Candidate& candidate : candidates) {
106 candidate.overlapGroupId = 0U;
107 candidate.overlapMultiplicity = 1U;
108 candidate.inChamberOverlap = false;
109 }
110 if (candidates.size() < 2U) return;
111
112 DisjointSet groups(candidates.size());
113 for (std::size_t first = 0U; first < candidates.size(); ++first) {
114 for (std::size_t second = first + 1U; second < candidates.size(); ++second) {
115 if (isOverlapPair(candidates[first], candidates[second], m_config)) {
116 groups.join(first, second);
117 }
118 }
119 }
120
121 std::vector<std::size_t> roots(candidates.size());
122 std::vector<std::size_t> multiplicities(candidates.size(), 0U);
123 for (std::size_t index = 0U; index < candidates.size(); ++index) {
124 roots[index] = groups.find(index);
125 ++multiplicities[roots[index]];
126 }
127
128 std::vector<std::uint16_t> groupIds(candidates.size(), 0U);
129 std::uint16_t nextGroupId{1U};
130 for (std::size_t index = 0U; index < candidates.size(); ++index) {
131 const std::size_t root = roots[index];
132 if (multiplicities[root] < 2U) continue;
133 if (groupIds[root] == 0U) {
134 groupIds[root] = nextGroupId++;
135 ++statistics.nGroups;
136 statistics.maxMultiplicity =
137 std::max(statistics.maxMultiplicity, multiplicities[root]);
138 }
139 TgcL0Candidate& candidate = candidates[index];
140 candidate.overlapGroupId = groupIds[root];
141 candidate.overlapMultiplicity = static_cast<std::uint8_t>(
142 std::min<std::size_t>(multiplicities[root], 0xffU));
143 candidate.inChamberOverlap = true;
144 ++statistics.nCandidates;
145 }
146}
std::vector< int > multiplicities(const std::string &chain)
bool first
Definition DeMoScan.py:534
str index
Definition DeMoScan.py:362

Member Data Documentation

◆ m_config

OverlapClassificationConfig L0Muon::TgcL0Floating::OverlapClassification::m_config {}
private

Definition at line 43 of file TgcL0OverlapClassification.h.

43{};

The documentation for this class was generated from the following files: