29void StripFitProcessor::onProcessStart() {
30 using namespace tracking::digitization;
32 pulse_shape_ = PulseShape::make(std::string(PULSE_SHAPE_NAME),
33 PEAKING_TIME_NS, SECOND_TIME_CONST_NS);
35 fitter_ = std::make_unique<tracking::digitization::StripPulseFitter>(
36 *pulse_shape_, T0_OFFSET_NS, SAMPLING_INTERVAL_NS,
37 static_cast<double>(ADC_PEDESTAL), NOISE_SIGMA_ADC, t_scan_min_ns_,
38 t_scan_max_ns_, t_scan_step_ns_);
40 ldmx_log(info) <<
"StripFitProcessor configured:" <<
" shape="
41 << PULSE_SHAPE_NAME <<
" tp=" << PEAKING_TIME_NS <<
" ns"
42 <<
" pedestal=" << ADC_PEDESTAL <<
" ADC"
43 <<
" noise_σ=" << NOISE_SIGMA_ADC <<
" ADC" <<
" T scan ["
44 << t_scan_min_ns_ <<
", " << t_scan_max_ns_ <<
"] ns"
45 <<
" step=" << t_scan_step_ns_ <<
" ns";
49 const auto& raw_hits =
52 std::vector<ldmx::FittedSiStripHit> fitted_hits;
53 fitted_hits.reserve(raw_hits.size());
55 ldmx_log(debug) <<
"Fitting " << raw_hits.size() <<
" SimSiStripHits";
57 for (
const auto& raw : raw_hits) {
58 const auto result = fitter_->fit(raw.getSamples());
60 if (!result.converged) {
61 ldmx_log(trace) <<
"Fit did not converge for layer=" << raw.getLayerID()
62 <<
" strip=" << raw.getStripID() <<
" — skipping";
66 if (max_chi2_ndf_ > 0.0 && result.ndf > 0) {
67 const double reduced_chi2 = result.chi2 / result.ndf;
68 if (reduced_chi2 > max_chi2_ndf_) {
69 ldmx_log(trace) <<
"χ²/ndf=" << reduced_chi2
70 <<
" exceeds cut=" << max_chi2_ndf_ <<
" — skipping";
75 fitted_hits.emplace_back(
76 raw.getLayerID(), raw.getStripID(),
77 static_cast<float>(result.amplitude),
static_cast<float>(result.t0),
78 static_cast<float>(result.chi2), result.ndf, raw.getTrackID(),
79 raw.getPdgID(), raw.getSimHitID(), raw.getEdep(),
80 tracking::digitization::NOISE_SIGMA_ADC);
82 ldmx_log(trace) <<
"Fitted: layer=" << raw.getLayerID()
83 <<
" strip=" << raw.getStripID()
84 <<
" amp=" << result.amplitude <<
" t0=" << result.t0
85 <<
" ns" <<
" chi2/ndf=" << result.chi2 <<
"/"
89 ldmx_log(debug) <<
"Produced " << fitted_hits.size() <<
" FittedSiStripHits";
91 event.add(out_collection_, fitted_hits);