13snd::analysis_tools::USPlane::USPlane(std::vector<MuFilterHit*> snd_hits,
const Configuration &configuration,
MuFilter *muon_filter_geometry,
int station,
bool use_small_sipms_sipms) : configuration_(configuration), centroid_(std::nan(
""), std::nan(
""), std::nan(
"")), centroid_error_(std::nan(
""), std::nan(
""),std::nan(
"")), station_(station)
15 for (
auto mu_hit : snd_hits)
18 int detectorID = mu_hit->GetDetectorID();
19 muon_filter_geometry->
GetPosition(detectorID, A, B);
20 for (
int i{0}; i < 16; ++i)
22 if (mu_hit->isMasked(i) || mu_hit->GetSignal(i) < -990.)
continue;
24 hit.
bar =
static_cast<int>(detectorID % 1000);
29 if (!hit.
is_large && !use_small_sipms_sipms)
32 hit.
qdc = std::nan(
"");
40 hit.
qdc = mu_hit->GetSignal(i);
55 std::vector<USHit> cleaned_hits = hits_;
57 cleaned_hits.erase(std::remove_if(cleaned_hits.begin(), cleaned_hits.end(),
59 { return (hit.qdc <= 0 || hit.is_large == false); }),
63 if (
static_cast<int>(cleaned_hits.size()) < configuration_.us_min_n_hits_for_centroid)
70 double weighted_sum_x{0.0}, weighted_sum_y{0.0}, weighted_sum_z{0.0};
71 double total_qdc_positive{0.0}, sum_qdc2_positive{0.0};
73 for (
const auto &hit : cleaned_hits)
75 weighted_sum_x += hit.x * hit.qdc;
76 weighted_sum_y += hit.y * hit.qdc;
77 weighted_sum_z += hit.z * hit.qdc;
78 total_qdc_positive += hit.qdc;
79 sum_qdc2_positive += hit.qdc*hit.qdc;
81 weighted_sum_x /= total_qdc_positive;
82 weighted_sum_y /= total_qdc_positive;
83 weighted_sum_z /= total_qdc_positive;
84 centroid_.SetXYZ(weighted_sum_x, weighted_sum_y, weighted_sum_z);
85 auto qdc_error_scaler = sqrt(sum_qdc2_positive)/total_qdc_positive;
86 centroid_error_.SetXYZ(configuration_.us_centroid_error_x*qdc_error_scaler,
87 configuration_.us_centroid_error_y*qdc_error_scaler,
88 configuration_.us_centroid_error_z*qdc_error_scaler);