Program Listing for File sparseflow2hits.cxx¶
↰ Return to documentation for file (larflow/FlowContourMatch/test/sparseflow2hits.cxx
)
#include <iostream>
#include <string>
// ROOT
#include "TApplication.h"
// larcv
#include "larcv/core/Base/larcv_logger.h"
#include "larcv/core/DataFormat/IOManager.h"
#include "larcv/core/DataFormat/EventSparseImage.h"
#include "larcv/core/DataFormat/EventImage2D.h"
// larlite
#include "DataFormat/larflow3dhit.h"
#include "DataFormat/storage_manager.h"
// larflow
#include "larflow/FlowContourMatch/FlowContourMatch.h"
int main( int nargs, char** argv ) {
std::cout << "================================" << std::endl;
std::cout << "sparseflow2hits" << std::endl;
std::cout << "--------------------------------" << std::endl;
TApplication app("app",&nargs,argv);
larcv::logger log("sparseflow2hits");
std::string cropcfg = "ubcrop.cfg";
larcv::IOManager io_fullview(larcv::IOManager::kREAD,"FullView",larcv::IOManager::kTickBackward);
io_fullview.add_in_file( "larcvtruth-Run000002-SubRun002000.root" );
io_fullview.initialize();
larcv::IOManager io_sparse(larcv::IOManager::kREAD,"SparseInput");
io_sparse.add_in_file( "test_larflow_sparseout.root" );
io_sparse.initialize();
larlite::storage_manager out_larlite(larlite::storage_manager::kWRITE );
out_larlite.set_out_filename( "output_sparse_larflowhits.root" );
out_larlite.open();
int nentries = io_sparse.get_n_entries();
log.send(larcv::msg::kINFO) << "Number of entries: " << nentries << std::endl;
nentries = 1;
for ( size_t i=0; i<nentries; i++ ) {
io_sparse.read_entry(i);
io_fullview.read_entry(i);
// whole images
larcv::EventImage2D* ev_wire
= (larcv::EventImage2D*)io_fullview.get_data(larcv::kProductImage2D,"wiremc");
auto const& adc_v = ev_wire->Image2DArray();
// truth whole images
larcv::EventImage2D* ev_trueflow
= (larcv::EventImage2D*)io_fullview.get_data(larcv::kProductImage2D,"larflow");
auto const& trueflow_v = ev_trueflow->Image2DArray();
// event chstatus
larcv::EventChStatus* ev_status
= (larcv::EventChStatus*)io_fullview.get_data(larcv::kProductChStatus,"wiremc");
// output of sparse dualflow deploy
larcv::EventSparseImage* ev_crop_dualflow
= (larcv::EventSparseImage*)io_sparse.get_data(larcv::kProductSparseImage,"cropdualflow");
auto const& dualflow_v = ev_crop_dualflow->SparseImageArray();
log.send(larcv::msg::kINFO) << "ENTRY[" << i << "] num dualflow crops: " << dualflow_v.size() << std::endl;
log.send(larcv::msg::kINFO) << "Make Reco Flow Hits" << std::endl;
// RECO FLOW HITS
std::vector<larlite::larflow3dhit> flowhit
= larflow::makeFlowHitsFromSparseCrops( adc_v,
dualflow_v,
10.0,
cropcfg, larcv::msg::kNORMAL,
true );
log.send(larcv::msg::kINFO) << "Make True Flow Hits" << std::endl;
// TRUTH FLOW HITS
std::vector<larlite::larflow3dhit> trueflow
= larflow::makeTrueFlowHitsFromWholeImage( adc_v,
*ev_status,
trueflow_v,
10.0,
"ubcroptrueflow.cfg" );
// OUTPUT
log.send(larcv::msg::kINFO) << "Save the output." << std::endl;
larlite::event_larflow3dhit* ev_hitout
= (larlite::event_larflow3dhit*)out_larlite.get_data(larlite::data::kLArFlow3DHit,"flowhits");
int idx = 0;
for ( auto& hit : flowhit ) {
hit.idxhit = idx;
ev_hitout->emplace_back( std::move(hit) );
idx++;
}
larlite::event_larflow3dhit* ev_truthout
= (larlite::event_larflow3dhit*)out_larlite.get_data(larlite::data::kLArFlow3DHit,"trueflowhits");
idx = 0;
for ( auto& hit : trueflow ) {
hit.idxhit = idx;
ev_truthout->emplace_back( std::move(hit) );
idx++;
}
out_larlite.set_id( ev_wire->run(), ev_wire->subrun(), ev_wire->event() );
out_larlite.next_event(true);
}
out_larlite.close();
return 0;
}