LArOpenCV  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
larlite::LArImageHit Class Reference

User custom analysis class made by SHELL_USER_NAME. More...

#include <LArImageHit.h>

Inheritance diagram for larlite::LArImageHit:
larlite::LArImageClusterBase

Public Member Functions

 LArImageHit (const std::string name="LArImageHit")
 Default constructor. More...
 
virtual ~LArImageHit ()
 Default destructor. More...
 
bool initialize ()
 IMPLEMENT in LArImageClusterBase.cc! Initialization method to be called before the analysis event loop. More...
 
bool analyze (storage_manager *storage)
 IMPLEMENT in LArImageClusterBase.cc! Analyze a data event-by-event. More...
 
bool finalize ()
 IMPLEMENT in LArImageClusterBase.cc! Finalize method to be called after all events processed. More...
 
larcv::ImageClusterManageralgo_manager (size_t plane_id)
 
const std::vector
< larcv::ImageClusterManager > & 
algo_manager_set () const
 
const std::string & producer () const
 
void set_config (const std::string cfg_file)
 

Protected Member Functions

void store_clusters (storage_manager *storage)
 
void extract_image (storage_manager *storage)
 
void _Report_ () const
 
void _Configure_ (const ::fcllite::PSet &pset)
 

Protected Attributes

::larcv::ImageManager _img_mgr
 

Private Attributes

size_t _num_stored
 
double _charge_to_gray_scale
 
std::vector< size_t > _num_clusters_v
 
std::vector< size_t > _num_unclustered_hits_v
 
std::vector< size_t > _num_clustered_hits_v
 

Detailed Description

User custom analysis class made by SHELL_USER_NAME.

Definition at line 28 of file LArImageHit.h.

Constructor & Destructor Documentation

larlite::LArImageHit::LArImageHit ( const std::string  name = "LArImageHit")
inline

Default constructor.

Definition at line 33 of file LArImageHit.h.

34  : LArImageClusterBase(name)
35  , _num_stored(0)
37  , _num_clusters_v()
40  {}
virtual larlite::LArImageHit::~LArImageHit ( )
inlinevirtual

Default destructor.

Definition at line 43 of file LArImageHit.h.

43 {}

Member Function Documentation

void larlite::LArImageHit::_Configure_ ( const ::fcllite::PSet &  pset)
protectedvirtual

Implements larlite::LArImageClusterBase.

Definition at line 14 of file LArImageHit.cxx.

References _charge_to_gray_scale.

15  {
16  _charge_to_gray_scale = pset.get<double>("Q2Gray");
17  }
void larlite::LArImageHit::_Report_ ( ) const
protectedvirtual

Implements larlite::LArImageClusterBase.

Definition at line 19 of file LArImageHit.cxx.

References _num_clustered_hits_v, _num_clusters_v, _num_stored, and _num_unclustered_hits_v.

20  {
21  std::cout << " # of clusters per plane ......... ";
22  for(auto const& num : _num_clusters_v) std::cout << Form("%-6zu ",num);
23  std::cout << " ... Average (per-event) ";
24  for(size_t plane=0; plane<_num_clustered_hits_v.size(); ++plane) {
25  double nclusters = _num_clusters_v[plane];
26  std::cout << Form("%g ",nclusters / ((double)(_num_stored)));
27  }
28  std::cout << std::endl;
29 
30  std::cout << " # of clustered hits per plane ... ";
31  for(auto const& num : _num_clustered_hits_v) std::cout << Form("%-6zu ",num);
32  std::cout << " ... Fractions: ";
33  for(size_t plane=0; plane<_num_clustered_hits_v.size(); ++plane) {
34  double clustered = _num_clustered_hits_v[plane];
35  double unclustered = _num_unclustered_hits_v[plane];
36  std::cout << Form("%g%% ",clustered/(clustered+unclustered));
37  }
38  std::cout << std::endl;
39  }
larcv::ImageClusterManager & larlite::LArImageClusterBase::algo_manager ( size_t  plane_id)
inherited

Definition at line 21 of file LArImageClusterBase.cxx.

References larlite::LArImageClusterBase::_alg_mgr_v.

22  {
23  if(plane_id >= _alg_mgr_v.size()) throw ::larcv::larbys("ImageClusterManager not found (invalid plane ID)!");
24  return _alg_mgr_v[plane_id];
25  }
const std::vector< larcv::ImageClusterManager > & larlite::LArImageClusterBase::algo_manager_set ( ) const
inherited

Definition at line 18 of file LArImageClusterBase.cxx.

References larlite::LArImageClusterBase::_alg_mgr_v.

Referenced by store_clusters().

19  { return _alg_mgr_v; }
bool larlite::LArImageClusterBase::analyze ( storage_manager *  storage)
inherited

IMPLEMENT in LArImageClusterBase.cc! Analyze a data event-by-event.

Definition at line 52 of file LArImageClusterBase.cxx.

References larlite::LArImageClusterBase::_alg_mgr_v, larlite::LArImageClusterBase::_img_mgr, larlite::LArImageClusterBase::_orig_img_mgr, larlite::LArImageClusterBase::_process_count, larlite::LArImageClusterBase::_process_time_analyze, larlite::LArImageClusterBase::_process_time_cluster_storage, larlite::LArImageClusterBase::_process_time_image_extraction, larlite::LArImageClusterBase::_store_original_img, larcv::ImageManager::clear(), larlite::LArImageClusterBase::extract_image(), larcv::ImageManager::img_at(), larcv::ImageManager::meta_at(), larcv::ImageManager::push_back(), larcv::ImageManager::size(), larcv::Watch::Start(), larlite::LArImageClusterBase::store_clusters(), and larcv::Watch::WallTime().

52  {
53 
54  _img_mgr.clear();
56 
57  ::larcv::Watch watch_all, watch_one;
58  watch_all.Start();
59  watch_one.Start();
60  this->extract_image(storage);
62 
64  for(size_t plane=0; plane<_img_mgr.size(); ++plane) {
65  ::cv::Mat img;
66  _img_mgr.img_at(plane).copyTo(img);
68  }
69  }
70 
71  if(_img_mgr.size() != _alg_mgr_v.size()) throw ::larcv::larbys("# of imaged created != # of planes!");
72 
73  for(size_t plane = 0; plane < _alg_mgr_v.size(); ++plane) {
74 
75  auto& alg_mgr = _alg_mgr_v[plane];
76  auto const& img = _img_mgr.img_at(plane);
77  auto const& meta = _img_mgr.meta_at(plane);
78  if(!meta.num_pixel_row() || !meta.num_pixel_column()) continue;
79 
80  alg_mgr.Process(img,meta);
81 
82  }
83 
84  watch_one.Start();
85  this->store_clusters(storage);
87 
88  _process_time_analyze += watch_all.WallTime();
89 
91 
92  return true;
93  }
void larlite::LArImageHit::extract_image ( storage_manager *  storage)
protectedvirtual

Implements larlite::LArImageClusterBase.

Definition at line 114 of file LArImageHit.cxx.

References _charge_to_gray_scale, larlite::LArImageClusterBase::_img_mgr, larcv::ImageManager::img_at(), larlite::LArImageClusterBase::producer(), and larcv::ImageManager::push_back().

115  {
116 
117  auto const& geom = ::larutil::Geometry::GetME();
118  const size_t nplanes = geom->Nplanes();
119 
120  auto ev_hit = storage->get_data<event_hit>(producer());
121 
122  if(ev_hit==nullptr) throw DataFormatException("Could not locate hit data product!");
123 
124  std::vector< std::pair<size_t,size_t> > wire_range_v(nplanes,std::pair<size_t,size_t>(1e12,0));
125  std::vector< std::pair<size_t,size_t> > tick_range_v(nplanes,std::pair<size_t,size_t>(1e12,0));
126 
127  for(auto const& h : *ev_hit) {
128 
129  auto const& wid = h.WireID();
130 
131  auto& wire_range = wire_range_v[wid.Plane];
132  if(wire_range.first > wid.Wire) wire_range.first = wid.Wire;
133  if(wire_range.second < wid.Wire) wire_range.second = wid.Wire;
134 
135  auto& tick_range = tick_range_v[wid.Plane];
136  size_t peak_time = (size_t)(h.PeakTime());
137  if(tick_range.first > peak_time ) tick_range.first = ( bool(peak_time) ? peak_time - 1 : 0 );
138  if(tick_range.second < (peak_time+1)) tick_range.second = peak_time+1;
139  }
140 
141  for(size_t plane=0; plane<nplanes; ++plane) {
142  auto const& wire_range = wire_range_v[plane];
143  auto const& tick_range = tick_range_v[plane];
144  size_t nticks = tick_range.second - tick_range.first + 2;
145  size_t nwires = wire_range.second - wire_range.first + 2;
146  ::larcv::ImageMeta meta((double)nwires,(double)nticks,nwires,nticks,wire_range.first,tick_range.first);
147 
148  //if(!nticks || !nwires)
149  //_img_mgr.push_back(cv::Mat(),meta);
150  //else
151  //_img_mgr.push_back(::cv::Mat(nwires, nticks, CV_32FC1, cvScalar(0.)),meta);
152  _img_mgr.push_back(::cv::Mat(nwires, nticks, CV_8UC1, cvScalar(0.)),meta);
153  //_img_mgr->emplace_back(std::move(mat));
154  /*
155  std::cout << "Creating ... " << wire_range.first << " => " << wire_range.second << " ... " << nwires
156  << " : " << tick_range.first << " => " << tick_range.second << " ... " << nticks
157  << " @ " << plane << std::endl;
158  for(size_t x=0; x<nwires; ++x)
159  for(size_t y=0; y<nticks; ++y) mat.at<unsigned char>(x,y) = (unsigned char)5;
160  */
161  //mat.at<unsigned char>(0,0) = (unsigned char)5;
162  }
163 
164  for(auto const& h : *ev_hit) {
165 
166  auto const& wid = h.WireID();
167 
168  if(wid.Plane >= wire_range_v.size()) continue;
169 
170  auto& mat = _img_mgr.img_at(wid.Plane);
171 
172  //continue;
173  auto const& wire_range = wire_range_v[wid.Plane];
174  auto const& tick_range = tick_range_v[wid.Plane];
175 
176  size_t nticks = tick_range.second - tick_range.first + 2;
177  size_t nwires = wire_range.second - wire_range.first + 2;
178 
179  size_t y = (size_t)(h.PeakTime()+0.5) - tick_range.first;
180  size_t x = wid.Wire - wire_range.first;
181 
182  if(y>=nticks || x>=nwires) throw std::exception();
183 
184  //std::cout<<"Inserting " << x << " " << y << " @ " << wid.Plane << std::endl;
185  double charge = h.Integral() / _charge_to_gray_scale;
186  charge += (double)(mat.at<unsigned char>(x,y));
187 
188  if(charge>=255.) charge=255.;
189  if(charge<0.) charge=0.;
190 
191  mat.at<unsigned char>(x,y) = (unsigned char)((int)charge);
192  }
193 
194  }
bool larlite::LArImageClusterBase::finalize ( )
inherited

IMPLEMENT in LArImageClusterBase.cc! Finalize method to be called after all events processed.

Definition at line 113 of file LArImageClusterBase.cxx.

References larlite::LArImageClusterBase::_alg_mgr_v, and larlite::LArImageClusterBase::Report().

113  {
114 
115  Report();
116  for(size_t plane=0; plane < _alg_mgr_v.size(); ++plane) {
117  std::cout << " \033[95mImageClusterManager\033[00m @ Plane " << plane << std::endl;
118  _alg_mgr_v[plane].Report();
119  std::cout << std::endl;
120  }
121  return true;
122  }
bool larlite::LArImageClusterBase::initialize ( )
inherited

IMPLEMENT in LArImageClusterBase.cc! Initialization method to be called before the analysis event loop.

Definition at line 27 of file LArImageClusterBase.cxx.

References larlite::LArImageClusterBase::_alg_mgr_v, larlite::LArImageClusterBase::_config_file, larlite::LArImageClusterBase::_Configure_(), larlite::LArImageClusterBase::_process_count, larlite::LArImageClusterBase::_process_time_analyze, larlite::LArImageClusterBase::_process_time_cluster_storage, larlite::LArImageClusterBase::_process_time_image_extraction, larlite::LArImageClusterBase::_producer, larlite::LArImageClusterBase::_profile, and larlite::LArImageClusterBase::_store_original_img.

27  {
28 
29  ::fcllite::ConfigManager cfg_mgr(_name);
30 
31  cfg_mgr.AddCfgFile(_config_file);
32 
33  auto const& main_cfg = cfg_mgr.Config().get_pset(_name);
34 
35  _profile = main_cfg.get<bool>("Profile");
36  _producer = main_cfg.get<std::string>("Producer");
37  _store_original_img = main_cfg.get<bool>("StoreOriginalImage");
38  _process_count = 0;
42 
43  this->_Configure_(main_cfg);
44 
45  if(_producer.empty()) throw ::larcv::larbys("No producer specified...");
46 
47  for(auto& mgr : _alg_mgr_v) mgr.Configure(cfg_mgr.Config().get_pset(mgr.Name()));
48 
49  return true;
50  }
const std::string& larlite::LArImageClusterBase::producer ( ) const
inlineinherited
void larlite::LArImageClusterBase::set_config ( const std::string  cfg_file)
inlineinherited

Definition at line 60 of file LArImageClusterBase.h.

References larlite::LArImageClusterBase::_config_file.

60 {_config_file=cfg_file;}
void larlite::LArImageHit::store_clusters ( storage_manager *  storage)
protectedvirtual

Implements larlite::LArImageClusterBase.

Definition at line 41 of file LArImageHit.cxx.

References _num_clustered_hits_v, _num_clusters_v, _num_stored, _num_unclustered_hits_v, larlite::LArImageClusterBase::algo_manager_set(), larcv::kINVALID_CLUSTER_ID, and larlite::LArImageClusterBase::producer().

42  {
43  ++_num_stored;
44 
45  auto geom = ::larutil::Geometry::GetME();
46  if(_num_clusters_v.empty()){
47  _num_clusters_v.resize(geom->Nplanes(),0);
48  _num_clustered_hits_v.resize(geom->Nplanes(),0);
49  _num_unclustered_hits_v.resize(geom->Nplanes(),0);
50  }
51 
52  auto ev_hit = storage->get_data<event_hit>(producer());
53 
54  if(!ev_hit) throw DataFormatException("Could not locate hit data product!");
55 
56  auto const& alg_mgr_v = algo_manager_set();
57 
58  std::vector<size_t> nclusters_v(alg_mgr_v.size(),0);
59  size_t nclusters_total=0;
60  for(size_t plane=0; plane<alg_mgr_v.size(); ++plane) {
61  nclusters_v[plane] = alg_mgr_v[plane].Clusters().size();
62  _num_clusters_v[plane] += nclusters_v[plane];
63  nclusters_total += nclusters_v[plane];
64  }
65 
66  AssSet_t ass_set;
67  ass_set.resize(nclusters_total);
68  for(auto& ass_unit : ass_set) ass_unit.reserve(100);
69 
70  for(size_t hindex=0; hindex<ev_hit->size(); ++hindex) {
71 
72  auto const& h = (*ev_hit)[hindex];
73 
74  auto const& wid = h.WireID();
75 
76  auto const& alg_mgr = alg_mgr_v[wid.Plane];
77 
78  auto const& cid = alg_mgr.ClusterID(wid.Wire,h.PeakTime());
79 
80  if(cid == ::larcv::kINVALID_CLUSTER_ID) {
81  _num_unclustered_hits_v[wid.Plane] += 1;
82  continue;
83  }
84 
85  _num_clustered_hits_v[wid.Plane] += 1;
86 
87  size_t cindex = cid;
88  for(size_t plane=0; plane<wid.Plane; ++plane) cindex += nclusters_v[plane];
89 
90  ass_set[cindex].push_back(hindex);
91  }
92 
93  auto ev_cluster = storage->get_data<event_cluster>("ImageClusterHit");
94  auto ev_ass = storage->get_data<event_ass>("ImageClusterHit");
95  if(ev_cluster) {
96  ev_cluster->reserve(nclusters_total);
97  for(size_t plane=0; plane<nclusters_v.size(); ++plane) {
98 
99  for(size_t cid=0; cid<nclusters_v[plane]; ++cid) {
100 
101  ::larlite::cluster c;
102  c.set_view(geom->PlaneToView(plane));
103  c.set_planeID(geo::PlaneID(0,0,plane));
104  c.set_id(ev_cluster->size());
105 
106  ev_cluster->push_back(c);
107  }
108  }
109  }
110  if(ev_ass)
111  ev_ass->set_association(ev_cluster->id(),ev_ass->id(),ass_set);
112  }

Member Data Documentation

double larlite::LArImageHit::_charge_to_gray_scale
private

Definition at line 57 of file LArImageHit.h.

Referenced by _Configure_(), and extract_image().

::larcv::ImageManager larlite::LArImageClusterBase::_img_mgr
protectedinherited
std::vector<size_t> larlite::LArImageHit::_num_clustered_hits_v
private

Definition at line 60 of file LArImageHit.h.

Referenced by _Report_(), and store_clusters().

std::vector<size_t> larlite::LArImageHit::_num_clusters_v
private

Definition at line 58 of file LArImageHit.h.

Referenced by _Report_(), and store_clusters().

size_t larlite::LArImageHit::_num_stored
private

Definition at line 56 of file LArImageHit.h.

Referenced by _Report_(), and store_clusters().

std::vector<size_t> larlite::LArImageHit::_num_unclustered_hits_v
private

Definition at line 59 of file LArImageHit.h.

Referenced by _Report_(), and store_clusters().


The documentation for this class was generated from the following files: