LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
CMManagerBase.cxx
Go to the documentation of this file.
1 #ifndef RECOTOOL_CMMANAGERBASE_CXX
2 #define RECOTOOL_CMMANAGERBASE_CXX
3 
4 #include "CMManagerBase.h"
5 
6 namespace cmtool {
7 
9  {
10  _fout = 0;
12  _priority_algo = nullptr;
13  _min_nhits = 0;
14  _merge_till_converge = false;
15  Reset();
16  _time_report=false;
17  }
18 
20  {
21  _planes.clear();
22  _in_clusters.clear();
24  }
25 
26  void CMManagerBase::SetClusters(const std::vector<std::vector<util::PxHit> > &clusters)
27  {
28 
29  TStopwatch localWatch;
30 
31  // Reset
32  this->Reset();
33 
34  // Clear & fill cluster info
35 
36  _in_clusters.clear();
37 
38  _in_clusters.reserve(clusters.size());
39 
41  tmp_alg.SetMinNHits(_min_nhits);
42  tmp_alg.SetVerbose(false);
43 
44  for(auto const &c : clusters) {
45 
46  _in_clusters.push_back(tmp_alg);
47  (*_in_clusters.rbegin()).Initialize();
48 
49  if((*_in_clusters.rbegin()).SetHits(c) < 3) continue;
50  (*_in_clusters.rbegin()).DisableFANN();
51  //(*_in_clusters.rbegin()).FillParams(true,true,true,true,true,false);
52  (*_in_clusters.rbegin()).FillParams(false,false,false,false,false,false);
53  (*_in_clusters.rbegin()).FillPolygon();
54 
55  }
56 
57  if(_time_report) {
58  std::cout << Form(" CMManagerBase Time Report: SetClusters (CPAN computation) = %g [s]",
59  localWatch.RealTime())
60  << " ... details below." << std::endl;
61 
62  for(auto const& c : _in_clusters)
63 
64  c.TimeReport(std::cout);
65 
66  }
67 
68  }
69 
70  void CMManagerBase::SetClusters(const std::vector<cluster::ClusterParamsAlg> &clusters)
71  {
72  TStopwatch localWatch;
73 
74  localWatch.Start();
75 
76  _in_clusters = clusters;
77 
78  if(_time_report) std::cout << Form(" CMManagerBase Time Report: SetClusters (copy) = %g [s]",
79  localWatch.RealTime())
80  << std::endl;
81  }
82 
84  {
85 
86  if(!(_in_clusters.size()))
87 
88  return;
89 
90  TStopwatch localWatch;
91 
92  localWatch.Start();
93 
94  EventBegin();
95 
96  if(_time_report) std::cout << Form(" CMManagerBase Time Report: EventBegin = %g [s]",
97  localWatch.RealTime())
98  << std::endl;
99 
100  bool keep_going = true;
101 
102  while(keep_going) {
103 
104  localWatch.Start();
105 
106  IterationBegin();
107 
108  if(_time_report) std::cout << Form(" CMManagerBase Time Report: IterationBegin = %g [s]",
109  localWatch.RealTime())
110  << std::endl;
111 
112  localWatch.Start();
113 
114  keep_going = IterationProcess();
115 
116  if(_time_report) std::cout << Form(" CMManagerBase Time Report: IterationProcess = %g [s]",
117  localWatch.RealTime())
118  << std::endl;
119  localWatch.Start();
120 
121  IterationEnd();
122 
123  if(_time_report) std::cout << Form(" CMManagerBase Time Report: IterationEnd = %g [s]",
124  localWatch.RealTime())
125  << std::endl;
126 
127  if(!_merge_till_converge) {
128 
130 
131  std::cout << "\033[93m Iterative approach = OFF ... exiting from iteration loop. \033[00m" << std::endl;
132 
133  break;
134  }
135  }
136 
137  localWatch.Start();
138 
139  EventEnd();
140 
141  if(_time_report) std::cout << Form(" CMManagerBase Time Report: EventEnd = %g [s]",
142  localWatch.RealTime())
143  << std::endl;
144 
145  }
146 
147  void CMManagerBase::ComputePriority(const std::vector<cluster::ClusterParamsAlg> &clusters) {
148 
149  TStopwatch localWatch;
150  localWatch.Start();
151 
152  _priority.clear();
153  _planes.clear();
154 
155  if(!clusters.size()) return;
156 
157  // Priority is computed cluster-by-cluster. In case of two clusters having the same priority
158  // value the one with lower cluster index gets the priority. Also, clusters with priority < 0
159  // are not logged (assumed not to be used)
160 
161  for(size_t i=0; i<clusters.size(); ++i) {
162 
163  size_t c_index = clusters.size() - i - 1;
164 
165  float priority = clusters.at(c_index).GetNHits();
166 
167  if(_priority_algo) {
168 
169  priority = _priority_algo->Priority(clusters.at(c_index));
170 
171  }
172 
173  if(priority>0) {
174 
175  _priority.insert(std::make_pair(priority,c_index));
176 
177  if( _planes.find(clusters.at(c_index).Plane()) == _planes.end() )
178 
179  _planes.insert(clusters.at(c_index).Plane());
180 
181  }
182 
183  }
184 
185  if(_time_report) std::cout << Form(" CMManagerBase Time Report: ComputePriority = %g [s]",
186  localWatch.RealTime())
187  << std::endl;
188 
189  }
190 
191 
192 }
193 
194 #endif
Somewhat verbose (cout per merging iteration)
Definition: CMManagerBase.h:38
bool _time_report
Timing verbosity flag.
bool _merge_till_converge
Iteration loop switch.
TFile * _fout
Output analysis plot TFile.
void Initialize()
Definition: errprop.cc:101
void SetClusters(const std::vector< std::vector< util::PxHit > > &clusters)
A simple method to add a cluster.
std::multimap< float, size_t > _priority
Priority record.
void ComputePriority(const std::vector< cluster::ClusterParamsAlg > &clusters)
Function to compute priority.
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:265
virtual void EventBegin()
FMWK function called @ beginning of Process()
Definition: CMManagerBase.h:94
virtual void Reset()
Function to reset the algorithm instance called within CMergeManager/CMatchManager&#39;s Reset() ...
Definition: CMAlgoBase.h:40
void Process()
A method to execute the main action, to be called per event.
virtual void IterationEnd()
FMWK function called @ end of iterative loop inside Process()
CMMSGLevel_t _debug_mode
Debug mode switch.
virtual void IterationBegin()
FMWK function called @ beginning of iterative loop inside Process()
Definition: CMManagerBase.h:97
virtual bool IterationProcess()=0
FMWK function called @ iterative loop inside Process()
void SetMinNHits(size_t nhit)
virtual float Priority(const cluster::ClusterParamsAlg &cluster)
unsigned int _min_nhits
Minimum number of hits: the limit set for ClusterParamsAlg.
std::vector< cluster::ClusterParamsAlg > _in_clusters
Input clusters.
::cmtool::CPriorityAlgoBase * _priority_algo
Priority algorithm.
std::set< UChar_t > _planes
A holder for # of unique planes in the clusters, computed in ComputePriority() function.
Class def header for a class CMManagerBase.
void SetVerbose(bool yes=true)
virtual void EventEnd()
FMWK function called @ end of Process()
CMManagerBase()
Default constructor.
void Reset()
Method to reset itself.