30 for (
const auto &hit_i : hits) {
33 slow = hit_i->getShift() +
m_slopeXlow * hit_i->getPitchOverZ();
34 shigh = hit_i->getShift() +
m_slopeXhigh * hit_i->getPitchOverZ();
36 else if (hit_i->isU()) {
37 slow = hit_i->getShift() +
m_slopeUlow * hit_i->getPitchOverZ();
38 shigh = hit_i->getShift() +
m_slopeUhigh * hit_i->getPitchOverZ();
41 slow = hit_i->getShift() +
m_slopeVlow * hit_i->getPitchOverZ();
42 shigh = hit_i->getShift() +
m_slopeVhigh * hit_i->getPitchOverZ();
45 const double val = hit_i->getRZSlope();
46 bool has_hit = (val > 0.) ? (val > slow && val < shigh) : (val > shigh && val < slow);
47 if (!has_hit)
continue;
49 const int pl = hit_i->getPlane();
50 if (std::ranges::any_of(
m_road_hits, [&pl](
const auto &hit) {
return (hit.getPlane() == pl); }))
continue;
125 std::vector<double> ys, zs;
128 ys.push_back(hit.getR());
129 zs.push_back(hit.getZ());
133 double avg_z = std::accumulate(zs.begin(), zs.end(), 0.0)/(double)zs.size();
134 double sum_sq_z = std::inner_product(zs.begin(), zs.end(), zs.begin(), 0.0);
135 for (
unsigned int i = 0; i < ys.size(); i++)
mxl += ys[i]*( (zs[i]-avg_z) / (sum_sq_z - zs.size()*std::pow(avg_z,2)) );
MMT_Road(const char sector, const int roadSize, const int UpX, const int DownX, const int UpUV, const int DownUV, const int xthr, const int uvthr, const int iroadx, const int iroadu=-1, const int iroadv=-1)