LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
CBAlgoAngleSeparate.cxx
Go to the documentation of this file.
1 #ifndef RECOTOOL_CBALGOANGLESEPARATE_CXX
2 #define RECOTOOL_CBALGOANGLESEPARATE_CXX
3 
4 #include "CBAlgoAngleSeparate.h"
5 
6 namespace cmtool {
7 
8  //----------------------------------------
10  //----------------------------------------
11  {
12 
13  SetDebug(false);
14  SetMaxAngleSep(20.);
15  SetMinLength(15.);
16  SetMinHits(20);
17 
18  }
19 
20  //--------------------------------------------------------
21  bool CBAlgoAngleSeparate::Bool(const ::cluster::ClusterParamsAlg &cluster1,
22  const ::cluster::ClusterParamsAlg &cluster2)
23  //--------------------------------------------------------
24  {
25 
26  double angle1 = cluster1.GetParams().angle_2d;
27  double angle2 = cluster2.GetParams().angle_2d;
28 
29  double w_start1 = cluster1.GetParams().start_point.w;
30  double t_start1 = cluster1.GetParams().start_point.t;
31  double w_start2 = cluster2.GetParams().start_point.w;
32  double t_start2 = cluster2.GetParams().start_point.t;
33 
34  double len1 = cluster1.GetParams().length;
35  double len2 = cluster2.GetParams().length;
36 
37  size_t hits1 = cluster1.GetHitVector().size();
38  size_t hits2 = cluster1.GetHitVector().size();
39 
40  //if either cluster has less than _minHits don't even try...
41  if ( (hits1 < _minHits) or (hits2 < _minHits)
42  or (angle1 < -360) or (angle2 < -360) )
43  return false;
44 
45  if (_debug){
46  std::cout << "Cluster 1:" << std::endl;
47  std::cout << "\tStart: ( " << w_start1 << ", " << t_start1 << " )" << std::endl;
48  std::cout << "\tAngle: " << angle1 << std::endl;
49  std::cout << "\tLength: " << len1 << std::endl;
50  std::cout << "\tN Hits: " << hits1 << std::endl;
51 
52  std::cout << "Cluster 2:" << std::endl;
53  std::cout << "\tStart: ( " << w_start2 << ", " << t_start2 << " )" << std::endl;
54  std::cout << "\tAngle: " << angle2 << std::endl;
55  std::cout << "\tLength: " << len2 << std::endl;
56  std::cout << "\tN Hits: " << hits2 << std::endl;
57  }
58 
59  //cluster 1 needs to be long enough (i.e. good) and cluster 2 must have minimum number of hits
60  double angle;
61  double separation;
62 
63  //first calculate angle of line in 2D plane connectng the two start points
64  if ( (t_start2-t_start1) == 0 )
65  angle = 0.;
66  else {
67  double slope = (t_start2-t_start1)/(w_start2-w_start1);
68  angle = atan(slope)*180./3.14;
69  }
70 
71  separation = abs(angle-angle1);
72  if (_debug){
73  std::cout << "Angle S1--S2: " << angle << std::endl;
74  std::cout << "Angle1--S2: " << separation << std::endl;
75  }
76  if ( ( ( (separation > _MaxAngle) and (separation < 180-_MaxAngle) ) or
77  ( (separation > 180+_MaxAngle) and (separation< 360-_MaxAngle) ) )
78  and (hits2 > _minHits)
79  and (len1 > _MinLen) ){
80  if (_verbose) { std::cout << "Separate! cluster 1 BIG" << std::endl << std::endl; }
81  return true;
82  }
83 
84  //now change direction of angle so that it points from cluster 2 (big) to cluster 1 (small)
85  angle += 180.;
86  angle = (int)(angle) % 360;
87  separation = abs(angle-angle2);
88  if (_debug){
89  std::cout << "Angle S2--S1: " << angle << std::endl;
90  std::cout << "Angle2--S1: " << separation << std::endl;
91  }
92  if ( ( ( (separation > _MaxAngle) and (separation < 180-_MaxAngle) ) or
93  ( (separation > 180+_MaxAngle) and (separation< 360-_MaxAngle) ) )
94  and (hits1 > _minHits)
95  and (len2 > _MinLen) ){
96  if (_verbose) { std::cout << "Separate! cluster 2 BIG" << std::endl << std::endl; }
97  return true;
98  }
99 
100  if (_debug) { std::cout << std::endl; }
101  return false;
102  }
103 
104 
105  //-----------------------
107  //-----------------------
108  {
109 
110  }
111 
112 }
113 
114 #endif
virtual void Report()
Function to report what&#39;s going on per merging.
virtual bool Bool(const ::cluster::ClusterParamsAlg &cluster1, const ::cluster::ClusterParamsAlg &cluster2)
CBAlgoAngleSeparate()
Default constructor.
void SetMaxAngleSep(float angle)
Set Max Angle Separation for separation.
void SetMinLength(float len)
Set Minimum length for "big" cluster.
void SetDebug(bool on)
Set Debug Mode on or off.
void SetMinHits(size_t n)
SetMinimum number of hits for small cluster.
bool _verbose
Boolean to choose verbose mode. Turned on if CMergeManager/CMatchManager&#39;s verbosity level is >= kPer...
Definition: CMAlgoBase.h:88