11 #include "cetlib_except/exception.h" 83 size_t plane = wids[0].Plane;
86 findHitCandidates(waveform.begin(),waveform.end(),roiStartTick,plane,hitCandidateVec);
98 if (std::distance(startItr,stopItr) > 4)
101 auto maxItr = std::max_element(startItr, stopItr);
103 float maxValue = *maxItr;
104 int maxTime = std::distance(startItr,maxItr);
109 auto firstItr = std::distance(startItr,maxItr) > 2 ? maxItr - 1 : startItr;
111 while(firstItr != startItr)
117 if (*firstItr < *(firstItr+1) && *firstItr <= *(firstItr-1))
break;
122 int firstTime = std::distance(startItr,firstItr);
125 findHitCandidates(startItr, firstItr + 1, roiStartTick, planeIdx, hitCandidateVec);
128 auto lastItr = std::distance(maxItr,stopItr) > 2 ? maxItr + 1 : stopItr - 1;
130 while(lastItr != stopItr - 1)
136 if (*lastItr <= *(lastItr+1) && *lastItr < *(lastItr-1))
break;
141 int lastTime = std::distance(startItr,lastItr);
144 HitCandidate hitCandidate;
145 hitCandidate.startTick = roiStartTick + firstTime;
146 hitCandidate.stopTick = roiStartTick + lastTime;
147 hitCandidate.maxTick = roiStartTick + firstTime;
148 hitCandidate.minTick = roiStartTick + lastTime;
149 hitCandidate.maxDerivative = *(startItr + firstTime);
150 hitCandidate.minDerivative = *(startItr + lastTime);
151 hitCandidate.hitCenter = roiStartTick + maxTime;
152 hitCandidate.hitSigma =
std::max(2.,
float(lastTime - firstTime) / 6.);
153 hitCandidate.hitHeight = maxValue;
155 hitCandidateVec.push_back(hitCandidate);
158 findHitCandidates(lastItr + 1, stopItr, roiStartTick + std::distance(startItr,lastItr + 1), planeIdx, hitCandidateVec);
170 if (hitCandidateVec.empty())
return;
175 int lastTick = hitCandidateVec.front().stopTick;
178 for(
const auto& hitCandidate : hitCandidateVec)
181 if (
int(hitCandidate.startTick) - lastTick > 1)
183 mergedHitsVec.emplace_back(groupedHitVec);
185 groupedHitVec.clear();
189 groupedHitVec.emplace_back(hitCandidate);
191 lastTick = hitCandidate.stopTick;
195 if (!groupedHitVec.empty()) mergedHitsVec.emplace_back(groupedHitVec);
std::vector< geo::WireID > ChannelToWire(raw::ChannelID_t const channel) const
Returns a list of wires connected to the specified TPC channel.
T get(std::string const &key) const
Description of geometry of one entire detector.
This provides an interface for tools which are tasked with finding candidate hits on input waveforms...
art framework interface to geometry description