ATLAS Offline Software
Loading...
Searching...
No Matches
L1Muon::L1TGC::FloatingOverlapClassification Class Reference

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

#include <FloatingOverlapClassification.h>

Collaboration diagram for L1Muon::L1TGC::FloatingOverlapClassification:

Public Member Functions

 FloatingOverlapClassification (FloatingOverlapClassificationConfig config=FloatingOverlapClassificationConfig{})
void classify (TgcSLCandidateContainer &candidates, FloatingOverlapClassificationStatistics &statistics) const

Private Attributes

FloatingOverlapClassificationConfig 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 33 of file FloatingOverlapClassification.h.

Constructor & Destructor Documentation

◆ FloatingOverlapClassification()

L1Muon::L1TGC::FloatingOverlapClassification::FloatingOverlapClassification ( FloatingOverlapClassificationConfig config = FloatingOverlapClassificationConfig{})
explicit

Definition at line 97 of file FloatingOverlapClassification.cxx.

98 : m_config(config) {}

Member Function Documentation

◆ classify()

void L1Muon::L1TGC::FloatingOverlapClassification::classify ( TgcSLCandidateContainer & candidates,
FloatingOverlapClassificationStatistics & statistics ) const

Definition at line 100 of file FloatingOverlapClassification.cxx.

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

FloatingOverlapClassificationConfig L1Muon::L1TGC::FloatingOverlapClassification::m_config {}
private

Definition at line 42 of file FloatingOverlapClassification.h.

42{};

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