LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
cmtool::CBAlgoMergeTinyWithBig Class Reference

#include "CBAlgoMergeTinyWithBig.h"

Inheritance diagram for cmtool::CBAlgoMergeTinyWithBig:
cmtool::CBoolAlgoBase cmtool::CMAlgoBase

Public Member Functions

 CBAlgoMergeTinyWithBig ()
 Default constructor. More...
 
virtual ~CBAlgoMergeTinyWithBig ()
 Default destructor. More...
 
virtual bool Bool (const ::cluster::ClusterParamsAlg &cluster1, const ::cluster::ClusterParamsAlg &cluster2)
 
virtual void Report ()
 
virtual void Reset ()
 Function to reset the algorithm instance ... maybe implemented via child class. More...
 
void SetMinHitsBig (size_t nhits)
 
void SetMaxHitsBig (size_t nhits)
 
void SetMinHitsSmall (size_t nhits)
 
void SetMaxHitsSmall (size_t nhits)
 
void SetMinDistSquared (double dist)
 
void SetDebug (bool flag)
 
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

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...
 

Private Attributes

size_t _min_hits_small
 
size_t _max_hits_small
 
size_t _min_hits_big
 
size_t _max_hits_big
 
double _dist_sqrd_cut
 
bool _debug
 

Detailed Description

User implementation for CBoolAlgoBase class doxygen documentation!

This algo looks for tiny clusters and looks to merge them with big clusters. It uses code from PolyShortestDist and says if the small cluster is close(ish) to the big one, merge it.

Definition at line 31 of file CBAlgoMergeTinyWithBig.h.

Constructor & Destructor Documentation

cmtool::CBAlgoMergeTinyWithBig::CBAlgoMergeTinyWithBig ( )

Default constructor.

Definition at line 9 of file CBAlgoMergeTinyWithBig.cxx.

References SetDebug(), SetMaxHitsBig(), SetMaxHitsSmall(), SetMinDistSquared(), SetMinHitsBig(), and SetMinHitsSmall().

9  : CBoolAlgoBase()
10  //-------------------------------------------------------
11  {
12  SetMinHitsBig(50);
13  SetMaxHitsBig(99999);
14  SetMinHitsSmall(0);
15  SetMaxHitsSmall(15);
17 
18  SetDebug(false);
19  }
CBoolAlgoBase()
Default constructor.
Definition: CBoolAlgoBase.h:32
virtual cmtool::CBAlgoMergeTinyWithBig::~CBAlgoMergeTinyWithBig ( )
inlinevirtual

Default destructor.

Definition at line 39 of file CBAlgoMergeTinyWithBig.h.

References Bool(), Report(), and Reset().

39 {};

Member Function Documentation

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

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

Reimplemented from cmtool::CBoolAlgoBase.

Definition at line 29 of file CBAlgoMergeTinyWithBig.cxx.

References _debug, _dist_sqrd_cut, _max_hits_big, _max_hits_small, _min_hits_big, and _min_hits_small.

Referenced by ~CBAlgoMergeTinyWithBig().

32  {
33 
34  if(_debug)
35  std::cout<<"MergeTinyWithBig. One cluster has "
36  <<cluster1.GetNHits()<<" hits, the other has "
37  <<cluster2.GetNHits()<<" hits."<<std::endl;
38 
39 
40  bool is_1_small = false;
41  bool is_2_small = false;
42  bool is_1_big = false;
43  bool is_2_big = false;
44 
45  //if the first cluster counts as "small"
46  if(cluster1.GetNHits() > _min_hits_small &&
47  cluster1.GetNHits() < _max_hits_small)
48  is_1_small = true;
49  //if the second cluster counts as "small"
50  if(cluster2.GetNHits() > _min_hits_small &&
51  cluster2.GetNHits() < _max_hits_small)
52  is_2_small = true;
53  if(cluster1.GetNHits() > _min_hits_big &&
54  cluster1.GetNHits() < _max_hits_big)
55  is_1_big = true;
56  if(cluster2.GetNHits() > _min_hits_big &&
57  cluster2.GetNHits() < _max_hits_big)
58  is_2_big = true;
59 
60  if(_debug)
61  std::cout<<"is_1_small, is_1_big, is_2_small, is_2_big are: "
62  <<is_1_small<<", "<<is_1_big<<", "
63  <<is_2_small<<", "<<is_2_big<<std::endl;
64 
65  //if neither of the clusters is small don't merge
66  if(!is_1_small && !is_2_small)
67  return false;
68  //if neither of the clusters is big, don't merge
69  if(!is_1_big && !is_2_big)
70  return false;
71  //if both are small, don't merge
72  if(is_1_small && is_2_small)
73  return false;
74  //if both are big, don't merge
75  if(is_1_big && is_2_big)
76  return false;
77 
78  if(_debug)
79  std::cout<<"Looks like one of them is big, and one is small."<<std::endl;
80  //god this code is ugly
81 
82  //now we know which one of them is big & the other is small.
83 
84  //loop over the points on the first polygon and calculate
85  //distance to each point on the second polygon
86  //if any two points are close enough to each other,
87  //merge the two clusters
88 
89  unsigned int npoints1 = cluster1.GetParams().PolyObject.Size();
90  unsigned int npoints2 = cluster2.GetParams().PolyObject.Size();
91  //loop over points on first polygon
92  for(unsigned int i = 0; i < npoints1; ++i){
93  float pt1w = cluster1.GetParams().PolyObject.Point(i).first;
94  float pt1t = cluster1.GetParams().PolyObject.Point(i).second;
95  //loop over points on second polygon
96  for(unsigned int j = 0; j < npoints2; ++j){
97  float pt2w = cluster2.GetParams().PolyObject.Point(j).first;
98  float pt2t = cluster2.GetParams().PolyObject.Point(j).second;
99  double distsqrd = pow(pt2w-pt1w,2)+pow(pt2t-pt1t,2);
100 
101  if(_debug){
102  std::cout<<"two polygon points dist2 is "<<distsqrd<<std::endl;
103  }
104  if(distsqrd<_dist_sqrd_cut)
105  return true;
106  }
107 
108  }
109 
110  return false;
111 
112  }
Polygon2D PolyObject
Polygon Object...see Polygon2D.hh.
Definition: ClusterParams.h:22
const std::pair< float, float > & Point(unsigned int p) const
Definition: Polygon2D.cxx:135
unsigned int Size() const
Create Intersection Polygon.
Definition: Polygon2D.h:47
const cluster_params & GetParams() const
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::CBAlgoMergeTinyWithBig::Report ( )
virtual

Optional function: called after each Merge() function call by CMergeManager IFF CMergeManager is run with verbosity level kPerMerging. Maybe useful for debugging.

Reimplemented from cmtool::CMAlgoBase.

Definition at line 115 of file CBAlgoMergeTinyWithBig.cxx.

Referenced by ~CBAlgoMergeTinyWithBig().

117  {
118 
119  }
void cmtool::CBAlgoMergeTinyWithBig::Reset ( )
virtual

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

Reimplemented from cmtool::CMAlgoBase.

Definition at line 22 of file CBAlgoMergeTinyWithBig.cxx.

Referenced by ~CBAlgoMergeTinyWithBig().

24  {
25 
26  }
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::CBAlgoMergeTinyWithBig::SetDebug ( bool  flag)
inline

Definition at line 98 of file CBAlgoMergeTinyWithBig.h.

References _debug.

Referenced by CBAlgoMergeTinyWithBig().

void cmtool::CBAlgoMergeTinyWithBig::SetMaxHitsBig ( size_t  nhits)
inline

Definition at line 90 of file CBAlgoMergeTinyWithBig.h.

References _max_hits_big.

Referenced by CBAlgoMergeTinyWithBig().

void cmtool::CBAlgoMergeTinyWithBig::SetMaxHitsSmall ( size_t  nhits)
inline

Definition at line 94 of file CBAlgoMergeTinyWithBig.h.

References _max_hits_small.

Referenced by CBAlgoMergeTinyWithBig().

void cmtool::CBAlgoMergeTinyWithBig::SetMinDistSquared ( double  dist)
inline

Definition at line 96 of file CBAlgoMergeTinyWithBig.h.

References _dist_sqrd_cut.

Referenced by CBAlgoMergeTinyWithBig().

void cmtool::CBAlgoMergeTinyWithBig::SetMinHitsBig ( size_t  nhits)
inline

Optional function: called at the beginning of 1st iteration. This is called per event. Optional function: called at the end of event ... after the last merging iteration is over. 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. Optional function: called at the end of each iteration over all pairs of clusters.

Definition at line 88 of file CBAlgoMergeTinyWithBig.h.

References _min_hits_big.

Referenced by CBAlgoMergeTinyWithBig().

void cmtool::CBAlgoMergeTinyWithBig::SetMinHitsSmall ( size_t  nhits)
inline

Definition at line 92 of file CBAlgoMergeTinyWithBig.h.

References _min_hits_small.

Referenced by CBAlgoMergeTinyWithBig().

virtual void cmtool::CMAlgoBase::SetVerbose ( bool  doit = true)
inlinevirtualinherited

Member Data Documentation

bool cmtool::CBAlgoMergeTinyWithBig::_debug
private

Definition at line 106 of file CBAlgoMergeTinyWithBig.h.

Referenced by Bool(), and SetDebug().

double cmtool::CBAlgoMergeTinyWithBig::_dist_sqrd_cut
private

Definition at line 104 of file CBAlgoMergeTinyWithBig.h.

Referenced by Bool(), and SetMinDistSquared().

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().

size_t cmtool::CBAlgoMergeTinyWithBig::_max_hits_big
private

Definition at line 102 of file CBAlgoMergeTinyWithBig.h.

Referenced by Bool(), and SetMaxHitsBig().

size_t cmtool::CBAlgoMergeTinyWithBig::_max_hits_small
private

Definition at line 102 of file CBAlgoMergeTinyWithBig.h.

Referenced by Bool(), and SetMaxHitsSmall().

size_t cmtool::CBAlgoMergeTinyWithBig::_min_hits_big
private

Definition at line 102 of file CBAlgoMergeTinyWithBig.h.

Referenced by Bool(), and SetMinHitsBig().

size_t cmtool::CBAlgoMergeTinyWithBig::_min_hits_small
private

Definition at line 102 of file CBAlgoMergeTinyWithBig.h.

Referenced by Bool(), and SetMinHitsSmall().


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