LArOpenCV  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
LArImageClusterBase.cxx
Go to the documentation of this file.
1 #ifndef LARLITE_LARIMAGECLUSTERBASE_CXX
2 #define LARLITE_LARIMAGECLUSTERBASE_CXX
3 
4 #include "LArImageClusterBase.h"
5 #include "LArUtil/Geometry.h"
6 #include "FhiclLite/ConfigManager.h"
7 namespace larlite {
8 
9  LArImageClusterBase::LArImageClusterBase(const std::string name) : ana_base()
10  {
11  _name=name;
12  _fout=0;
13  _producer="";
14  _alg_mgr_v.resize( ::larutil::Geometry::GetME()->Nplanes() );
15  _store_original_img=false;
16  }
17 
18  const std::vector<larcv::ImageClusterManager>& LArImageClusterBase::algo_manager_set() const
19  { return _alg_mgr_v; }
20 
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  }
26 
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  }
51 
52  bool LArImageClusterBase::analyze(storage_manager* storage) {
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  }
94 
96 
97  if(_profile) {
98  std::cout << std::endl
99  << " =================== " << _name << " (analysis unit) Time Report ======================" << std::endl
100  << " # analyze() call ........ " << _process_count << std::endl
101  << " \033[95mAnalyze time\033[00m ............ Total " << _process_time_analyze
102  << " [s] ... Average " << _process_time_analyze / _process_count << " [s]" << std::endl
103  << " \033[95mImage extraction time\033[00m ... Total " << _process_time_image_extraction
104  << " [s] ... Average " << _process_time_image_extraction / _process_count << " [s]" << std::endl
105  << " \033[95mCluster storage time\033[00m .... Total " << _process_time_cluster_storage
106  << " [s] ... Average " << _process_time_cluster_storage / _process_count << " [s]" << std::endl
107  << std::endl;
108  this->_Report_();
109  std::cout << std::endl;
110  }
111  }
112 
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  }
123 
124 }
125 #endif