All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CBAlgoAngleAlign.cxx
Go to the documentation of this file.
2 
3 #include <cmath>
4 
5 namespace cmtool {
6 
8 
9  //this just sets default values
10  SetDebug(true);
11  SetAngleCut(10.); // in degrees
12  SetAllow180Ambig(false);
13  SetMinNHits(30);
14 
15 
16  } //end constructor
17 
18  bool CBAlgoAngleAlign::Bool(const ::cluster::ClusterParamsAlg &cluster1,
19  const ::cluster::ClusterParamsAlg &cluster2)
20  {
21 
22  double angle1 = cluster1.GetParams().angle_2d;
23  double angle2 = cluster2.GetParams().angle_2d;
24  size_t hits1 = cluster1.GetHitVector().size();
25  size_t hits2 = cluster2.GetHitVector().size();
26 
27  //if don't make hit cut return aflse
28  if ( (hits1 < _MinNHits) or (hits2 < _MinNHits) )
29  return false;
30 
31  if (_debug){
32  std::cout << "Cluster1:" << std::endl;
33  std::cout << "\tAngle: " << angle1 << std::endl;
34  std::cout << "\t Start: (" << cluster1.GetParams().start_point.w << ", " << cluster1.GetParams().start_point.t << ")" << std::endl;
35  std::cout << "Cluster2:" << std::endl;
36  std::cout << "\tAngle: " << angle2 << std::endl;
37  std::cout << "\t Start: (" << cluster2.GetParams().start_point.w << ", " << cluster2.GetParams().start_point.t << ")" << std::endl;
38  std::cout << std::endl;
39 
40  }
41 
42  //for some reason angles are frequently -999.99.
43  //if either angle is this, clearly the cluster 2d angle is not well defined
44  //and this algorithm does not apply
45  if(angle1 < -998 || angle2 < -998)
46  return false;
47 
48  bool compatible = false;
49 
50  //if you don't care if clusters have been reconstructed backwards
52  compatible = ( abs(angle1-angle2) < _MaxAngleSep ||
53  abs(angle1-angle2-180) < _MaxAngleSep ||
54  abs(angle1-angle2+180) < _MaxAngleSep );
55  else
56  compatible = ( abs(angle1-angle2) < _MaxAngleSep );
57 
58 
59  if(_verbose) {
60  if(compatible) std::cout<<"These two clusters are compatible in angle."<<std::endl;
61  }
62 
63  return compatible;
64 
65  } // end Merge function
66 
67 
68 }//end namespace cmtool
void SetAngleCut(double angle)
Method to set cut value in degrees for angle compatibility test.
bool _allow_180_ambig
minimum number of hits for cluster to be considered
void SetDebug(bool on)
Method to set debug mode.
double _MaxAngleSep
hard shower-axis angle cutoff (only valid for _use_opening_angle==false)
void SetAllow180Ambig(bool on)
Method to set whether you allow angles to match with +/- 180 deg difference.
T abs(T value)
CBAlgoAngleAlign()
Default constructor.
virtual bool Bool(const ::cluster::ClusterParamsAlg &cluster1, const ::cluster::ClusterParamsAlg &cluster2)
Overloaded (from CBoolAlgoBase) Bool function.
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
Class def header for a class CBAlgoAngleAlign.