110{
112 srcEdges.clear();
113 dstEdges.clear();
114
115 std::vector<size_t> validIdx;
116 validIdx.reserve(nodes.size());
117 for (size_t i = 0; i < nodes.size(); ++i) {
118 if (nodes[i].layers >= minLayers) validIdx.push_back(i);
119 }
120
121 if (validIdx.size() < 2) {
122 if (!nodes.empty()) {
123 srcEdges.push_back(0);
124 dstEdges.push_back(0);
125 }
126 return;
127 }
128
130
131 for (
size_t a = 0;
a < validIdx.size(); ++
a) {
132 const size_t i = validIdx[
a];
133 const auto& ni = nodes[
i];
134 for (
size_t b =
a + 1;
b < validIdx.size(); ++
b) {
135 const size_t j = validIdx[
b];
136 const auto& nj = nodes[
j];
137
138 const double dx =
static_cast<double>(ni.x) -
static_cast<double>(nj.x);
139 const double dy =
static_cast<double>(ni.y) -
static_cast<double>(nj.y);
140 const double dz = static_cast<double>(ni.z) - static_cast<double>(nj.z);
141
142 const double distXY = Acts::fastHypot(dx, dy);
143 const int secDiffLin = std::abs(ni.sector - nj.sector) % static_cast<int>(secMax);
144 const int d_sec = std::min(secDiffLin, static_cast<int>(secMax) - secDiffLin);
145 const int d_ch = std::abs(ni.chamber - nj.chamber);
146
148 (d_ch > 0) &&
149 (d_sec <= maxSectorDelta) &&
150 (distXY < maxDistXY) &&
151 (std::abs(dz) < maxAbsDz) &&
152 (d_ch <= maxChamberDelta);
153
154 if (mask) {
155 srcEdges.push_back(static_cast<int64_t>(i));
156 dstEdges.push_back(static_cast<int64_t>(j));
157 srcEdges.push_back(static_cast<int64_t>(j));
158 dstEdges.push_back(static_cast<int64_t>(i));
159 }
160 }
161 }
162
163 if (srcEdges.empty() && !nodes.empty()) {
164 srcEdges.push_back(0);
165 dstEdges.push_back(0);
166 }
167}
constexpr unsigned numberOfSectors()
return total number of sectors
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)