96 if (morphedWaveforms.size() != constInputImage.size()) morphedWaveforms.resize(constInputImage.size(),icarus_signal_processing::VectorFloat(constInputImage[0].
size()));
98 for(
auto& morph : morphedWaveforms)
std::fill(morph.begin(),morph.end(),0.);
104 icarus_signal_processing::WaveformTools<float> waveformTools;
106 for(
size_t waveIdx = 0; waveIdx < inputImage.size(); waveIdx++) waveformTools.triangleSmooth(constInputImage[waveIdx],inputImage[waveIdx]);
126 for(
size_t waveIdx = 0; waveIdx < morphedWaveforms.size(); waveIdx++)
129 VectorFloat& morphedWave = morphedWaveforms[waveIdx];
132 float median =
getMedian(morphedWave, morphedWave.size());
134 for(
auto& val : morphedWave) val -= median;
142 if (selVals.size() != morphedWave.size()) selVals.resize(morphedWave.size());
144 std::fill(selVals.begin(),selVals.end(),
false);
148 for(
size_t idx = 0; idx < morphedWave.size(); idx++)
150 if (morphedWave[idx] > threshold)
160 size_t maxIdx = 0.75 * rmsVec.size();
162 std::nth_element(rmsVec.begin(), rmsVec.begin() + maxIdx, rmsVec.end());
164 float rms = std::sqrt(std::inner_product(rmsVec.begin(), rmsVec.begin() + maxIdx, rmsVec.begin(), 0.) / float(maxIdx));
165 float minVal = *std::min_element(morphedWave.begin(),morphedWave.end());
166 float maxVal = *std::max_element(morphedWave.begin(),morphedWave.end());
std::size_t size(FixedBins< T, C > const &) noexcept
void fill(const art::PtrVector< recob::Hit > &hits, int only_plane)
PlaneID_t Plane
Index of the plane within its TPC.