CBAlgoAngleCompat.cxx
Go to the documentation of this file.
1 #include "CBAlgoAngleCompat.h"
2 
3 #include <math.h>
4 
5 namespace cmtool {
6 
8 
9  //this just sets default values
10 
11  SetDebug(true);
12 
13  SetAngleCut(30.); // in degrees
14 
15  SetMinHits(0);
16 
17  SetAllow180Ambig(false);
18 
19  SetUseOpeningAngle(false);
20 
21  // angle_dist_histo = 0;
22 
23  // angle_dist_histo = new TH1F("angle_dist_histo","Cluster Angle Differences",100,-360,360);
24 
25  } //end constructor
26 
27  bool CBAlgoAngleCompat::Bool(const ::cluster::ClusterParamsAlg &cluster1,
28  const ::cluster::ClusterParamsAlg &cluster2)
29  {
30 
31  //if number of hits not large enough skip
32  if ( _minHits and ((cluster1.GetHitVector().size() < _minHits) or (cluster2.GetHitVector().size() < _minHits)) ) {
33  return false;
34  }
35 
36  //pretty sure we don't need conversion factors here.
37  //already in cm/cm units, degrees? need to check that
38  double angle1 = cluster1.GetParams().angle_2d;// * _time_2_cm / _wire_2_cm;
39  double angle2 = cluster2.GetParams().angle_2d;// * _time_2_cm / _wire_2_cm;
40 
41  double w_start1 = cluster1.GetParams().start_point.w;// * _wire_2_cm;
42  double t_start1 = cluster1.GetParams().start_point.t;// * _time_2_cm;
43  double w_start2 = cluster2.GetParams().start_point.w;// * _wire_2_cm;
44  double t_start2 = cluster2.GetParams().start_point.t;// * _time_2_cm;
45 
46  if (_debug){
47 
48  std::cout << "Cluster 1:" << std::endl;
49  std::cout << "\tAngle: " << angle1 << std::endl;
50  std::cout << "\tStart: ( " << w_start1 << ", " << t_start1 << " )" << std::endl;
51  std::cout << "Cluster 2:" << std::endl;
52  std::cout << "\tAngle: " << angle2 << std::endl;
53  std::cout << "\tStart: ( " << w_start2 << ", " << t_start2 << " )" << std::endl;
54 
55  }
56 
57  //for some reason angles are frequently -999.99.
58  //if either angle is this, clearly the cluster 2d angle is not well defined
59  //and this algorithm does not apply
60  if(angle1 < -998 || angle2 < -998)
61  return false;
62 
63  // if(angle_dist_histo){
64  // angle_dist_histo->Fill(angle1-angle2);
65  // }
66  // else
67  // std::cout<<"\n\n\nSOMETHING WENT HORRIBLY WRONG IN CBALGOANGLECOMPAT\n\n\n\n\n\n\n"<<std::endl;
68 
69  bool compatible = false;
70 
71  double my_cut_value = _max_allowed_2D_angle_diff;
72  //if using opening angle, have angle cutoff be the smaller of the two opening angles
74  my_cut_value = std::min(cluster1.GetParams().opening_angle, cluster2.GetParams().opening_angle);
75 
76  //if you don't care if clusters have been reconstructed backwards
78  compatible = ( abs(angle1-angle2) < my_cut_value ||
79  abs(angle1-angle2-180) < my_cut_value ||
80  abs(angle1-angle2+180) < my_cut_value );
81  else
82  compatible = ( abs(angle1-angle2) < my_cut_value );
83 
84 
85  if(_verbose) {
86  if(compatible) std::cout<<"These two clusters are compatible in angle."<<std::endl;
87  else std::cout<<"These two clusters are NOT compatible in angle."<<std::endl;
88  }
89 
90  return compatible;
91 
92  } // end Merge function
93 
94 
95 }//end namespace cmtool
virtual bool Bool(const ::cluster::ClusterParamsAlg &cluster1, const ::cluster::ClusterParamsAlg &cluster2)
Overloaded (from CBoolAlgoBase) Bool function.
void SetDebug(bool on)
Method to set debug mode.
Class def header for a class CBAlgoAngleCompat.
void SetUseOpeningAngle(bool on)
Method to set angle cut value to be based on opening angle.
T abs(T value)
void SetAllow180Ambig(bool on)
Method to set whether you allow angles to match with +/- 180 deg difference.
void SetAngleCut(double angle)
Method to set cut value in degrees for angle compatibility test.
CBAlgoAngleCompat()
Default constructor.
bool _allow_180_ambig
bool to suppress lots of output if you want
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
Definition: statistics.h:55
double _max_allowed_2D_angle_diff
hard shower-axis angle cutoff (only valid for _use_opening_angle==false)
void SetMinHits(size_t n)
Set Minimum Number of Hits to consider Cluster.
bool _verbose
Boolean to choose verbose mode. Turned on if CMergeManager/CMatchManager&#39;s verbosity level is >= kPer...
Definition: CMAlgoBase.h:102
QTextStream & endl(QTextStream &s)