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