LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
CBAlgoAngleCompat.cxx
Go to the documentation of this file.
2 
3 #include <cmath>
4 
5 namespace cmtool {
6 
8  {
9 
10  //this just sets default values
11 
12  SetDebug(true);
13 
14  SetAngleCut(30.); // in degrees
15 
16  SetMinHits(0);
17 
18  SetAllow180Ambig(false);
19 
20  SetUseOpeningAngle(false);
21 
22  // angle_dist_histo = 0;
23 
24  // angle_dist_histo = new TH1F("angle_dist_histo","Cluster Angle Differences",100,-360,360);
25 
26  } //end constructor
27 
28  bool CBAlgoAngleCompat::Bool(const ::cluster::ClusterParamsAlg& cluster1,
29  const ::cluster::ClusterParamsAlg& cluster2)
30  {
31 
32  //if number of hits not large enough skip
33  if (_minHits and ((cluster1.GetHitVector().size() < _minHits) or
34  (cluster2.GetHitVector().size() < _minHits))) {
35  return false;
36  }
37 
38  //pretty sure we don't need conversion factors here.
39  //already in cm/cm units, degrees? need to check that
40  double angle1 = cluster1.GetParams().angle_2d; // * _time_2_cm / _wire_2_cm;
41  double angle2 = cluster2.GetParams().angle_2d; // * _time_2_cm / _wire_2_cm;
42 
43  double w_start1 = cluster1.GetParams().start_point.w; // * _wire_2_cm;
44  double t_start1 = cluster1.GetParams().start_point.t; // * _time_2_cm;
45  double w_start2 = cluster2.GetParams().start_point.w; // * _wire_2_cm;
46  double t_start2 = cluster2.GetParams().start_point.t; // * _time_2_cm;
47 
48  if (_debug) {
49 
50  std::cout << "Cluster 1:" << std::endl;
51  std::cout << "\tAngle: " << angle1 << std::endl;
52  std::cout << "\tStart: ( " << w_start1 << ", " << t_start1 << " )" << std::endl;
53  std::cout << "Cluster 2:" << std::endl;
54  std::cout << "\tAngle: " << angle2 << std::endl;
55  std::cout << "\tStart: ( " << w_start2 << ", " << t_start2 << " )" << std::endl;
56  }
57 
58  //for some reason angles are frequently -999.99.
59  //if either angle is this, clearly the cluster 2d angle is not well defined
60  //and this algorithm does not apply
61  if (angle1 < -998 || angle2 < -998) 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 =
75  std::min(cluster1.GetParams().opening_angle, cluster2.GetParams().opening_angle);
76 
77  //if you don't care if clusters have been reconstructed backwards
78  if (_allow_180_ambig)
79  compatible =
80  (abs(angle1 - angle2) < my_cut_value || abs(angle1 - angle2 - 180) < my_cut_value ||
81  abs(angle1 - angle2 + 180) < my_cut_value);
82  else
83  compatible = (abs(angle1 - angle2) < my_cut_value);
84 
85  if (_verbose) {
86  if (compatible)
87  std::cout << "These two clusters are compatible in angle." << std::endl;
88  else
89  std::cout << "These two clusters are NOT compatible in angle." << std::endl;
90  }
91 
92  return compatible;
93 
94  } // end Merge function
95 
96 } //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.
constexpr auto abs(T v)
Returns the absolute value of the argument.
Class def header for a class CBAlgoAngleCompat.
void SetUseOpeningAngle(bool on)
Method to set angle cut value to be based on opening angle.
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
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:82