1 #ifndef __LARLITE_LARIMAGEWIRE_CXX__
2 #define __LARLITE_LARIMAGEWIRE_CXX__
5 #include "LArUtil/Geometry.h"
6 #include "DataFormat/wire.h"
16 static bool warn_once =
false;
18 print(
msg::kWARNING,__FUNCTION__,
"Cluster storage is not implemented...");
25 auto const& geom = ::larutil::Geometry::GetME();
26 const size_t nplanes = geom->Nplanes();
28 auto ev_wire = storage->get_data<event_wire>(
producer());
30 if(!ev_wire)
throw DataFormatException(
"Could not locate Wire data product!");
32 std::vector< std::pair<size_t,size_t> > wire_range_v(nplanes,std::pair<size_t,size_t>(1e12,0));
33 std::vector< std::pair<size_t,size_t> > tick_range_v(nplanes,std::pair<size_t,size_t>(1e12,0));
35 for(
auto const& wire_data : *ev_wire) {
37 auto const& wid = geom->ChannelToWireID(wire_data.Channel());
39 auto& wire_range = wire_range_v[wid.Plane];
40 if(wire_range.first > wid.Wire) wire_range.first = wid.Wire;
41 if(wire_range.second < wid.Wire) wire_range.second = wid.Wire;
43 auto& tick_range = tick_range_v[wid.Plane];
45 auto const& roi_v = wire_data.SignalROI();
47 for(
auto const& roi : roi_v.get_ranges()) {
48 size_t start_tick = roi.begin_index();
49 size_t last_tick = start_tick + roi.size() - 1;
50 if(tick_range.first > start_tick) tick_range.first = start_tick;
51 if(tick_range.second < last_tick) tick_range.second = last_tick;
55 for(
size_t plane=0; plane<nplanes; ++plane) {
56 auto const& wire_range = wire_range_v[plane];
57 auto const& tick_range = tick_range_v[plane];
58 size_t nticks = tick_range.second - tick_range.first + 2;
59 size_t nwires = wire_range.second - wire_range.first + 2;
60 ::larcv::ImageMeta meta((
double)nwires,(
double)nticks,nwires,nticks,wire_range.first,tick_range.first);
62 if(!nticks || !nwires)
68 for(
auto const& wire_data : *ev_wire) {
70 auto const& wid = geom->ChannelToWireID(wire_data.Channel());
74 auto const& roi_v = wire_data.SignalROI();
76 auto const& wire_range = wire_range_v[wid.Plane];
77 auto const& tick_range = tick_range_v[wid.Plane];
79 for(
auto const& roi : roi_v.get_ranges()) {
80 size_t start_tick = roi.begin_index();
81 for(
size_t adc_index=0; adc_index < roi.size(); ++adc_index) {
82 size_t x = wid.Wire - wire_range.first;
83 size_t y = start_tick + adc_index - tick_range.first;
85 q += (double)(mat.at<
unsigned char>(x,y));
88 mat.at<
unsigned char>(x,y) = (
unsigned char)((int)q);