Program Listing for File ChooseMaxLArFlowHit.cxx¶
↰ Return to documentation for file (larflow/Reco/ChooseMaxLArFlowHit.cxx
)
#include "ChooseMaxLArFlowHit.h"
namespace larflow {
namespace reco {
void ChooseMaxLArFlowHit::process( larcv::IOManager& iolcv,
larlite::storage_manager& ioll )
{
larcv::EventImage2D* ev_adc
= (larcv::EventImage2D*)iolcv.get_data( larcv::kProductImage2D, "wire" );
auto const& adc_v = ev_adc->Image2DArray();
larlite::event_larflow3dhit* ev_hit
= (larlite::event_larflow3dhit*)ioll.get_data( larlite::data::kLArFlow3DHit, _input_larflow3dhit_treename );
LARCV_INFO() << "Number of input hits: " << ev_hit->size() << std::endl;
// output container
larlite::event_larflow3dhit* evout_hit
= (larlite::event_larflow3dhit*)ioll.get_data( larlite::data::kLArFlow3DHit, _output_larflow3dhit_treename );
// track if used
std::vector<int> used_v(ev_hit->size(),0);
for ( size_t plane=0; plane<adc_v.size(); plane++ ) {
_make_pixelmap( *ev_hit, adc_v, plane, used_v );
LARCV_INFO() << "Source plane[" << plane << "] size of map: " << _srcpixel_to_spacepoint_m.size() << std::endl;
// select hits
for ( auto it=_srcpixel_to_spacepoint_m.begin(); it!=_srcpixel_to_spacepoint_m.end(); it++ ) {
float maxscore = 0;
int maxhit = -1;
for ( size_t ii=0; ii<it->second.size(); ii++ ) {
auto const& hit = ev_hit->at( it->second[ii] );
if ( maxhit<0 || maxscore<hit.track_score ) {
maxhit = it->second[ii];
maxscore = hit.track_score;
}
}
if ( maxhit>=0 && used_v[maxhit]==0 ) {
evout_hit->push_back( ev_hit->at(maxhit) );
used_v[maxhit] = 1;
}
}
}//end of loop over plane
}
void ChooseMaxLArFlowHit::_make_pixelmap( const larlite::event_larflow3dhit& hit_v,
const std::vector<larcv::Image2D>& img_v,
const int source_plane,
std::vector<int>& idx_used_v )
{
_srcpixel_to_spacepoint_m.clear();
// collect pixel to larflow hits
for ( size_t idx=0; idx<hit_v.size(); idx++ ) {
if ( idx_used_v[idx]==1 ) continue;
Pixel_t pix;
pix.plane = source_plane;
pix.row = img_v[pix.plane].meta().row( hit_v[idx].tick );
pix.col = hit_v[idx].targetwire[pix.plane];
auto it=_srcpixel_to_spacepoint_m.find( pix );
if ( it==_srcpixel_to_spacepoint_m.end() ) {
_srcpixel_to_spacepoint_m[ pix ] = std::vector<int>();
it=_srcpixel_to_spacepoint_m.find( pix );
}
it->second.push_back( idx );
}
}
}
}