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