LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
cmtool::CBAlgoCenterOfMassSmall Class Reference

#include "CBAlgoCenterOfMassSmall.h"

Inheritance diagram for cmtool::CBAlgoCenterOfMassSmall:
cmtool::CBoolAlgoBase cmtool::CMAlgoBase

Public Member Functions

 CBAlgoCenterOfMassSmall ()
 Default constructor. More...
 
virtual ~CBAlgoCenterOfMassSmall ()
 Default destructor. More...
 
virtual bool Bool (const ::cluster::ClusterParamsAlg &cluster1, const ::cluster::ClusterParamsAlg &cluster2)
 
virtual void Reset ()
 Function to reset the algorithm instance ... maybe implemented via child class. More...
 
virtual void Report ()
 Function to report what's going on per merging iteration. More...
 
void SetDebug (bool on)
 Function to set Debug mode of output. More...
 
void SetMaxHitsSmallClus (size_t n)
 Function to set Max hits for small clsuters. More...
 
void SetMaxDistance (double d)
 Function to set Max Distance for COM to be from start-end. More...
 
void SetMaxCOMDistance (double d)
 Function to set Max Distance between COMs. More...
 
void UseCOMInPoly (bool on)
 Use COM in Poly algo to decide merging. More...
 
void UseCOMClose (bool on)
 Use COM in Poly algo to decide merging. More...
 
void UseCOMNearClus (bool on)
 Use COM in Poly algo to decide merging. More...
 
void SetLengthReach (double frac)
 Set Length Reach: How for out the cone extends as percent of cluster length. More...
 
double ShortestDistanceSquared (double point_x, double point_y, double start_x, double start_y, double end_x, double end_y) const
 
virtual void EventBegin (const std::vector< cluster::ClusterParamsAlg > &clusters)
 
virtual void EventEnd ()
 
virtual void IterationBegin (const std::vector< cluster::ClusterParamsAlg > &clusters)
 
virtual void IterationEnd ()
 
void SetAnaFile (TFile *fout)
 Setter function for an output plot TFile pointer. More...
 
virtual void SetVerbose (bool doit=true)
 Setter function for verbosity. More...
 

Protected Attributes

bool _debug
 
size_t _maxHits
 
double _MaxDist
 
double _MaxCOMDistSquared
 
double _lengthReach
 
bool _COMinPolyAlg
 How four out - as percent of cluster length - cone will extend from start point. More...
 
bool _COMsClose
 
bool _COMNearClus
 
TFile * _fout
 TFile pointer to an output file. More...
 
bool _verbose
 Boolean to choose verbose mode. Turned on if CMergeManager/CMatchManager's verbosity level is >= kPerMerging. More...
 

Detailed Description

Designed mainly for small clusters (< 10 hits): Find Cluster's center of mass weighing by Q Then see if COM is in polygon/cone of a big cluster If so -> merge

Definition at line 29 of file CBAlgoCenterOfMassSmall.h.

Constructor & Destructor Documentation

cmtool::CBAlgoCenterOfMassSmall::CBAlgoCenterOfMassSmall ( )

Default constructor.

Definition at line 9 of file CBAlgoCenterOfMassSmall.cxx.

References SetDebug(), SetMaxCOMDistance(), SetMaxDistance(), SetMaxHitsSmallClus(), UseCOMClose(), UseCOMInPoly(), and UseCOMNearClus().

9  : CBoolAlgoBase()
10  //----------------------------------------
11  {
12 
13  SetDebug(false);
15  SetMaxDistance(20.);
16  SetMaxCOMDistance(25.);
17  UseCOMInPoly(true);
18  UseCOMClose(true);
19  UseCOMNearClus(true);
20 
21  }
void SetMaxCOMDistance(double d)
Function to set Max Distance between COMs.
CBoolAlgoBase()
Default constructor.
Definition: CBoolAlgoBase.h:32
void UseCOMClose(bool on)
Use COM in Poly algo to decide merging.
void SetMaxDistance(double d)
Function to set Max Distance for COM to be from start-end.
void UseCOMInPoly(bool on)
Use COM in Poly algo to decide merging.
void SetDebug(bool on)
Function to set Debug mode of output.
void UseCOMNearClus(bool on)
Use COM in Poly algo to decide merging.
void SetMaxHitsSmallClus(size_t n)
Function to set Max hits for small clsuters.
virtual cmtool::CBAlgoCenterOfMassSmall::~CBAlgoCenterOfMassSmall ( )
inlinevirtual

Default destructor.

Definition at line 37 of file CBAlgoCenterOfMassSmall.h.

References Bool().

37 {};

Member Function Documentation

bool cmtool::CBAlgoCenterOfMassSmall::Bool ( const ::cluster::ClusterParamsAlg cluster1,
const ::cluster::ClusterParamsAlg cluster2 
)
virtual

Core function: given the ClusterParamsAlg input, return whether a cluster should be merged or not.

Reimplemented from cmtool::CBoolAlgoBase.

Definition at line 24 of file CBAlgoCenterOfMassSmall.cxx.

References _COMinPolyAlg, _COMNearClus, _COMsClose, _debug, _MaxCOMDistSquared, _MaxDist, _maxHits, cmtool::CMAlgoBase::_verbose, Polygon2D::PointInside(), and ShortestDistanceSquared().

Referenced by ~CBAlgoCenterOfMassSmall().

27  {
28 
29  int Nhits1 = 0;
30  int Nhits2 = 0;
31 
32  //Both clusters should have less hits than some threshold
33  if ( (cluster1.GetHitVector().size() > _maxHits) or (cluster2.GetHitVector().size() > _maxHits) )
34  return false;
35 
36  //Define COM values on w & t
37  double COM_t_1 = 0;
38  double COM_w_1 = 0;
39  double Q_1 = 0;
40  double start_w_1;
41  double start_t_1;
42  double end_w_1;
43  double end_t_1;
44  Polygon2D poly1;
45  double COM_t_2 = 0;
46  double COM_w_2 = 0;
47  double Q_2 = 0;
48  double start_w_2;
49  double start_t_2;
50  double end_w_2;
51  double end_t_2;
52  Polygon2D poly2;
53 
54  //Get Hit vector for cluster 1
55  //std::vector<util::PxHit> hits1;
56  std::vector<util::PxHit> hits1;
57  hits1 = cluster1.GetHitVector();
58  Nhits1 = hits1.size();
59  poly1 = cluster1.GetParams().PolyObject;
60  start_w_1 = cluster1.GetParams().start_point.w;
61  start_t_1 = cluster1.GetParams().start_point.t;
62  end_w_1 = cluster1.GetParams().end_point.w;
63  end_t_1 = cluster1.GetParams().end_point.t;
64  //Get Hit vector for cluster 2
65  //std::vector<util::PxHit> hits2;
66  std::vector<util::PxHit> hits2;
67  hits2 = cluster2.GetHitVector();
68  Nhits2 = hits2.size();
69  poly2 = cluster2.GetParams().PolyObject;
70  start_w_2 = cluster2.GetParams().start_point.w;
71  start_t_2 = cluster2.GetParams().start_point.t;
72  end_w_2 = cluster2.GetParams().end_point.w;
73  end_t_2 = cluster2.GetParams().end_point.t;
74 
75  //Find COM for cluster 1
76  for (auto& hit: hits1){
77  COM_t_1 += hit.t * hit.charge;
78  COM_w_1 += hit.w * hit.charge;
79  Q_1 += hit.charge;
80  }
81  COM_t_1 /= Q_1;
82  COM_w_1 /= Q_1;
83 
84  //Find COM for cluster 2
85  for (auto& hit: hits2){
86  COM_t_2 += hit.t * hit.charge;
87  COM_w_2 += hit.w * hit.charge;
88  Q_2 += hit.charge;
89  }
90  COM_t_2 /= Q_2;
91  COM_w_2 /= Q_2;
92 
93  if (_debug) {
94  std::cout << "Cluster 1: " << std::endl;
95  std::cout << "N Hits: " << Nhits1 << std::endl;
96  std::cout << "COM: (w,t) -> (" << COM_w_1 << ", " << COM_t_1 << ")" << std::endl;
97  std::cout << "Cluster 2: " << std::endl;
98  std::cout << "N Hits: " << Nhits2 << std::endl;
99  std::cout << "COM: (w,t) -> (" << COM_w_2 << ", " << COM_t_2 << ")" << std::endl;
100  std::cout << std::endl;
101  }
102 
103  //Get COM
104  std::pair<float,float> COM_1;
105  COM_1 = std::make_pair( COM_w_1, COM_t_1 );
106  std::pair<float,float> COM_2;
107  COM_2 = std::make_pair( COM_w_2, COM_t_2 );
108 
109  //look for polygon overlap
110  if ( ( ( poly2.PointInside(COM_1) ) and _COMinPolyAlg ) or
111  ( ( poly1.PointInside(COM_2) ) and _COMinPolyAlg ) ){
112  if (_verbose) { std::cout << "Polygon Overlap -> Merge!" << std::endl << std::endl;}
113  return true;
114  }
115 
116  //look for COM of 1 close to COM of 2
117  double distCOMs = ( COM_w_1-COM_w_2 )*( COM_w_1-COM_w_2 ) +
118  ( COM_t_1-COM_t_2 )*( COM_t_1-COM_t_2 );
119  if ( _COMsClose and ( distCOMs < _MaxCOMDistSquared ) ){
120  if (_verbose) { std::cout << "COMs close to each other -> Merge!" << std::endl << std::endl;}
121  return true;
122  }
123 
124  //look for COM close to start-end of other cluster
125  if ( _COMNearClus and
126  ( ( ShortestDistanceSquared( COM_w_1, COM_t_1, start_w_2, start_t_2, end_w_2, end_t_2 ) < _MaxDist ) or
127  ( ShortestDistanceSquared( COM_w_2, COM_t_2, start_w_1, start_t_1, end_w_1, end_t_1 ) < _MaxDist ) ) ) {
128  if (_verbose) { std::cout << "COM close to start-end -> Merge!" << std::endl; }
129  return true;
130  }
131 
132  return false;
133  }
bool _COMinPolyAlg
How four out - as percent of cluster length - cone will extend from start point.
Polygon2D PolyObject
Polygon Object...see Polygon2D.hh.
Definition: ClusterParams.h:22
double ShortestDistanceSquared(double point_x, double point_y, double start_x, double start_y, double end_x, double end_y) const
const cluster_params & GetParams() const
double t
Definition: PxUtils.h:11
const std::vector< util::PxHit > & GetHitVector() const
util::PxPoint start_point
start point
Definition: ClusterParams.h:24
Detector simulation of raw signals on wires.
double w
Definition: PxUtils.h:10
util::PxPoint end_point
end point
Definition: ClusterParams.h:25
bool PointInside(const std::pair< float, float > &point) const
Definition: Polygon2D.cxx:249
bool _verbose
Boolean to choose verbose mode. Turned on if CMergeManager/CMatchManager&#39;s verbosity level is >= kPer...
Definition: CMAlgoBase.h:88
virtual void cmtool::CMAlgoBase::EventBegin ( const std::vector< cluster::ClusterParamsAlg > &  clusters)
inlinevirtualinherited

Optional function: called at the beginning of 1st iteration. This is called per event.

Reimplemented in cmtool::CFAlgoArray, cmtool::CPAlgoArray, cmtool::CBAlgoArray, and cmtool::CBAlgoPolyShortestDist.

Definition at line 45 of file CMAlgoBase.h.

Referenced by cmtool::CMergeManager::EventBegin().

46  { if(clusters.size()) return; }
virtual void cmtool::CMAlgoBase::EventEnd ( )
inlinevirtualinherited

Optional function: called at the end of event ... after the last merging iteration is over.

Reimplemented in cmtool::CFAlgoArray, cmtool::CPAlgoArray, and cmtool::CBAlgoArray.

Definition at line 51 of file CMAlgoBase.h.

Referenced by cmtool::CMatchManager::EventEnd(), and cmtool::CMergeManager::EventEnd().

52  {return;}
virtual void cmtool::CMAlgoBase::IterationBegin ( const std::vector< cluster::ClusterParamsAlg > &  clusters)
inlinevirtualinherited

Optional function: called at the beggining of each iteration over all pairs of clusters. This provides all clusters' information in case the algorithm need them. Note this is called per iteration which may be more than once per event.

Reimplemented in cmtool::CFAlgoArray, cmtool::CPAlgoArray, and cmtool::CBAlgoArray.

Definition at line 59 of file CMAlgoBase.h.

Referenced by cmtool::CMatchManager::EventBegin(), cmtool::CMatchManager::IterationBegin(), and cmtool::CMergeManager::IterationBegin().

60  { if(clusters.size()) return;}
virtual void cmtool::CMAlgoBase::IterationEnd ( )
inlinevirtualinherited

Optional function: called at the end of each iteration over all pairs of clusters.

Reimplemented in cmtool::CFAlgoArray, cmtool::CPAlgoArray, and cmtool::CBAlgoArray.

Definition at line 65 of file CMAlgoBase.h.

Referenced by cmtool::CMatchManager::IterationEnd(), and cmtool::CMergeManager::IterationEnd().

66  {return; }
void cmtool::CBAlgoCenterOfMassSmall::Report ( )
virtual

Function to report what's going on per merging iteration.

Reimplemented from cmtool::CMAlgoBase.

Definition at line 136 of file CBAlgoCenterOfMassSmall.cxx.

Referenced by Reset().

138  {
139 
140  }
virtual void cmtool::CBAlgoCenterOfMassSmall::Reset ( )
inlinevirtual

Function to reset the algorithm instance ... maybe implemented via child class.

Reimplemented from cmtool::CMAlgoBase.

Definition at line 47 of file CBAlgoCenterOfMassSmall.h.

References Report().

47 {}
void cmtool::CMAlgoBase::SetAnaFile ( TFile *  fout)
inlineinherited

Setter function for an output plot TFile pointer.

Definition at line 77 of file CMAlgoBase.h.

References cmtool::CMAlgoBase::_fout.

Referenced by cmtool::CMergeManager::EventBegin().

77 { _fout = fout; }
TFile * _fout
TFile pointer to an output file.
Definition: CMAlgoBase.h:85
void cmtool::CBAlgoCenterOfMassSmall::SetDebug ( bool  on)
inline

Function to set Debug mode of output.

Definition at line 53 of file CBAlgoCenterOfMassSmall.h.

References _debug.

Referenced by CBAlgoCenterOfMassSmall().

void cmtool::CBAlgoCenterOfMassSmall::SetLengthReach ( double  frac)
inline

Set Length Reach: How for out the cone extends as percent of cluster length.

Definition at line 74 of file CBAlgoCenterOfMassSmall.h.

References _lengthReach, and ShortestDistanceSquared().

void cmtool::CBAlgoCenterOfMassSmall::SetMaxCOMDistance ( double  d)
inline

Function to set Max Distance between COMs.

Definition at line 62 of file CBAlgoCenterOfMassSmall.h.

References _MaxCOMDistSquared, and d.

Referenced by CBAlgoCenterOfMassSmall().

62 { _MaxCOMDistSquared = d; }
Float_t d
Definition: plot.C:237
void cmtool::CBAlgoCenterOfMassSmall::SetMaxDistance ( double  d)
inline

Function to set Max Distance for COM to be from start-end.

Definition at line 59 of file CBAlgoCenterOfMassSmall.h.

References _MaxDist, and d.

Referenced by CBAlgoCenterOfMassSmall().

59 { _MaxDist = d; }
Float_t d
Definition: plot.C:237
void cmtool::CBAlgoCenterOfMassSmall::SetMaxHitsSmallClus ( size_t  n)
inline

Function to set Max hits for small clsuters.

Definition at line 56 of file CBAlgoCenterOfMassSmall.h.

References _maxHits, and n.

Referenced by CBAlgoCenterOfMassSmall().

virtual void cmtool::CMAlgoBase::SetVerbose ( bool  doit = true)
inlinevirtualinherited
double cmtool::CBAlgoCenterOfMassSmall::ShortestDistanceSquared ( double  point_x,
double  point_y,
double  start_x,
double  start_y,
double  end_x,
double  end_y 
) const

Definition at line 142 of file CBAlgoCenterOfMassSmall.cxx.

References cmtool::CMAlgoBase::_verbose.

Referenced by Bool(), and SetLengthReach().

144  {
145 
146  //This code finds the shortest distance between a point and a line segment.
147  //code based off sample from
148  //http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment
149  //note to self: rewrite this with TVector2 and compare time differences...
150  //TVector2 code might be more understandable
151 
152  double distance_squared = -1;
153 
154  // Line segment: from ("V") = (start_x, start_y) to ("W")=(end_x, end_y)
155  double length_squared = pow((end_x - start_x), 2) + pow((end_y - start_y), 2);
156 
157  // Treat the case start & end point overlaps
158  if(length_squared < 0.1) {
159  if(_verbose){
160  std::cout << std::endl;
161  std::cout << Form(" Provided very short line segment: (%g,%g) => (%g,%g)",
162  start_x,start_y,end_x,end_y) << std::endl;
163  std::cout << " Likely this means one of two clusters have start & end point identical." << std::endl;
164  std::cout << " Check the cluster output!" << std::endl;
165  std::cout << std::endl;
166  std::cout << Form(" At this time, the algorithm uses a point (%g,%g)",start_x,start_y) << std::endl;
167  std::cout << " to represent this cluster's location." << std::endl;
168  std::cout << std::endl;
169  }
170 
171  return (pow((point_x - start_x),2) + pow((point_y - start_y),2));
172  }
173 
174  //Find shortest distance between point ("P")=(point_x,point_y) to this line segment
175  double t = ( (point_x - start_x)*(end_x - start_x) + (point_y - start_y)*(end_y - start_y) ) / length_squared;
176 
177  if(t<0.0) distance_squared = pow((point_x - start_x), 2) + pow((point_y - start_y), 2);
178 
179  else if (t>1.0) distance_squared = pow((point_x - end_x), 2) + pow(point_y - end_y, 2);
180 
181  else distance_squared = pow((point_x - (start_x + t*(end_x - start_x))), 2) + pow((point_y - (start_y + t*(end_y - start_y))),2);
182 
183  return distance_squared;
184 
185  }//end ShortestDistanceSquared function
bool _verbose
Boolean to choose verbose mode. Turned on if CMergeManager/CMatchManager&#39;s verbosity level is >= kPer...
Definition: CMAlgoBase.h:88
void cmtool::CBAlgoCenterOfMassSmall::UseCOMClose ( bool  on)
inline

Use COM in Poly algo to decide merging.

Definition at line 68 of file CBAlgoCenterOfMassSmall.h.

References _COMsClose.

Referenced by CBAlgoCenterOfMassSmall().

void cmtool::CBAlgoCenterOfMassSmall::UseCOMInPoly ( bool  on)
inline

Use COM in Poly algo to decide merging.

Definition at line 65 of file CBAlgoCenterOfMassSmall.h.

References _COMinPolyAlg.

Referenced by CBAlgoCenterOfMassSmall().

65 { _COMinPolyAlg = on; }
bool _COMinPolyAlg
How four out - as percent of cluster length - cone will extend from start point.
void cmtool::CBAlgoCenterOfMassSmall::UseCOMNearClus ( bool  on)
inline

Use COM in Poly algo to decide merging.

Definition at line 71 of file CBAlgoCenterOfMassSmall.h.

References _COMNearClus.

Referenced by CBAlgoCenterOfMassSmall().

Member Data Documentation

bool cmtool::CBAlgoCenterOfMassSmall::_COMinPolyAlg
protected

How four out - as percent of cluster length - cone will extend from start point.

Definition at line 88 of file CBAlgoCenterOfMassSmall.h.

Referenced by Bool(), and UseCOMInPoly().

bool cmtool::CBAlgoCenterOfMassSmall::_COMNearClus
protected

Definition at line 90 of file CBAlgoCenterOfMassSmall.h.

Referenced by Bool(), and UseCOMNearClus().

bool cmtool::CBAlgoCenterOfMassSmall::_COMsClose
protected

Definition at line 89 of file CBAlgoCenterOfMassSmall.h.

Referenced by Bool(), and UseCOMClose().

bool cmtool::CBAlgoCenterOfMassSmall::_debug
protected

Definition at line 83 of file CBAlgoCenterOfMassSmall.h.

Referenced by Bool(), and SetDebug().

TFile* cmtool::CMAlgoBase::_fout
protectedinherited

TFile pointer to an output file.

Definition at line 85 of file CMAlgoBase.h.

Referenced by cmtool::CMAlgoBase::CMAlgoBase(), and cmtool::CMAlgoBase::SetAnaFile().

double cmtool::CBAlgoCenterOfMassSmall::_lengthReach
protected

Definition at line 87 of file CBAlgoCenterOfMassSmall.h.

Referenced by SetLengthReach().

double cmtool::CBAlgoCenterOfMassSmall::_MaxCOMDistSquared
protected

Definition at line 86 of file CBAlgoCenterOfMassSmall.h.

Referenced by Bool(), and SetMaxCOMDistance().

double cmtool::CBAlgoCenterOfMassSmall::_MaxDist
protected

Definition at line 85 of file CBAlgoCenterOfMassSmall.h.

Referenced by Bool(), and SetMaxDistance().

size_t cmtool::CBAlgoCenterOfMassSmall::_maxHits
protected

Definition at line 84 of file CBAlgoCenterOfMassSmall.h.

Referenced by Bool(), and SetMaxHitsSmallClus().


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