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