Public Member Functions | Private Attributes | List of all members
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)
 
- Public Member Functions inherited from cmtool::CBoolAlgoBase
 CBoolAlgoBase ()
 Default constructor. More...
 
virtual ~CBoolAlgoBase ()
 Default destructor. More...
 
- Public Member Functions inherited from cmtool::CMAlgoBase
 CMAlgoBase ()
 
virtual ~CMAlgoBase ()=default
 
virtual void EventBegin (const std::vector< cluster::ClusterParamsAlg > &)
 
virtual void EventEnd ()
 
virtual void IterationBegin (const std::vector< cluster::ClusterParamsAlg > &)
 
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...
 

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
 

Additional Inherited Members

- Protected Attributes inherited from cmtool::CMAlgoBase
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

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 8 of file CBAlgoMergeTinyWithBig.cxx.

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

Default destructor.

Definition at line 39 of file CBAlgoMergeTinyWithBig.h.

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 28 of file CBAlgoMergeTinyWithBig.cxx.

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

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

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

Reimplemented from cmtool::CMAlgoBase.

Definition at line 21 of file CBAlgoMergeTinyWithBig.cxx.

23  {
24 
25  }
void cmtool::CBAlgoMergeTinyWithBig::SetDebug ( bool  flag)
inline

Definition at line 98 of file CBAlgoMergeTinyWithBig.h.

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

Definition at line 90 of file CBAlgoMergeTinyWithBig.h.

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

Definition at line 94 of file CBAlgoMergeTinyWithBig.h.

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

Definition at line 96 of file CBAlgoMergeTinyWithBig.h.

96 { _dist_sqrd_cut = dist; }
constexpr double dist(const TReal *x, const TReal *y, const unsigned int dimension)
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.

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

Definition at line 92 of file CBAlgoMergeTinyWithBig.h.

Member Data Documentation

bool cmtool::CBAlgoMergeTinyWithBig::_debug
private

Definition at line 106 of file CBAlgoMergeTinyWithBig.h.

double cmtool::CBAlgoMergeTinyWithBig::_dist_sqrd_cut
private

Definition at line 104 of file CBAlgoMergeTinyWithBig.h.

size_t cmtool::CBAlgoMergeTinyWithBig::_max_hits_big
private

Definition at line 102 of file CBAlgoMergeTinyWithBig.h.

size_t cmtool::CBAlgoMergeTinyWithBig::_max_hits_small
private

Definition at line 102 of file CBAlgoMergeTinyWithBig.h.

size_t cmtool::CBAlgoMergeTinyWithBig::_min_hits_big
private

Definition at line 102 of file CBAlgoMergeTinyWithBig.h.

size_t cmtool::CBAlgoMergeTinyWithBig::_min_hits_small
private

Definition at line 102 of file CBAlgoMergeTinyWithBig.h.


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