LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
cmtool::CBAlgoAngleSeparate Class Reference

#include "CBAlgoAngleSeparate.h"

Inheritance diagram for cmtool::CBAlgoAngleSeparate:
cmtool::CBoolAlgoBase cmtool::CMAlgoBase

Public Member Functions

 CBAlgoAngleSeparate ()
 Default constructor. More...
 
virtual ~CBAlgoAngleSeparate ()
 Default destructor. More...
 
virtual bool Bool (const ::cluster::ClusterParamsAlg &cluster1, const ::cluster::ClusterParamsAlg &cluster2)
 
void SetDebug (bool on)
 Set Debug Mode on or off. More...
 
void SetMaxAngleSep (float angle)
 Set Max Angle Separation for separation. More...
 
void SetMinLength (float len)
 Set Minimum length for "big" cluster. More...
 
void SetMinHits (size_t n)
 SetMinimum number of hits for small cluster. More...
 
virtual void Reset ()
 Function to reset the algorithm instance ... maybe implemented via child class. More...
 
virtual void Report ()
 Function to report what's going on per merging. More...
 
virtual void EventBegin (const std::vector< cluster::ClusterParamsAlg > &)
 
virtual void EventEnd ()
 
virtual void IterationBegin (const std::vector< cluster::ClusterParamsAlg > &)
 
virtual void IterationEnd ()
 
void SetAnaFile (TFile *fout)
 Setter function for an output plot TFile pointer. More...
 
virtual void SetVerbose (bool doit=true)
 Setter function for verbosity. More...
 

Protected Attributes

bool _debug
 
float _MaxAngle
 
float _MinLen
 
size_t _minHits
 
TFile * _fout
 TFile pointer to an output file. More...
 
bool _verbose
 Boolean to choose verbose mode. Turned on if CMergeManager/CMatchManager's verbosity level is >= kPerMerging. More...
 

Detailed Description

Track Prohibit algorithm: if the angle between the direction of a cluster (end-start) and the line connecting the cluster's start point and the start point of t a second cluster is too large, then probihit merging between the two clusters. The first cluster needs to be a "good" and "large" cluster algorithm has performed

Definition at line 26 of file CBAlgoAngleSeparate.h.

Constructor & Destructor Documentation

cmtool::CBAlgoAngleSeparate::CBAlgoAngleSeparate ( )

Default constructor.

Definition at line 8 of file CBAlgoAngleSeparate.cxx.

References SetDebug(), SetMaxAngleSep(), SetMinHits(), and SetMinLength().

8  : CBoolAlgoBase()
9  //----------------------------------------
10  {
11 
12  SetDebug(false);
13  SetMaxAngleSep(20.);
14  SetMinLength(15.);
15  SetMinHits(20);
16  }
CBoolAlgoBase()
Default constructor.
Definition: CBoolAlgoBase.h:31
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.
virtual cmtool::CBAlgoAngleSeparate::~CBAlgoAngleSeparate ( )
inlinevirtual

Default destructor.

Definition at line 33 of file CBAlgoAngleSeparate.h.

References Bool().

33 {};

Member Function Documentation

bool cmtool::CBAlgoAngleSeparate::Bool ( const ::cluster::ClusterParamsAlg cluster1,
const ::cluster::ClusterParamsAlg cluster2 
)
virtual

Core function: given the ClusterParamsAlg input, return whether a cluster should be merged or not.

Reimplemented from cmtool::CBoolAlgoBase.

Definition at line 19 of file CBAlgoAngleSeparate.cxx.

References _debug, _MaxAngle, _minHits, _MinLen, cmtool::CMAlgoBase::_verbose, and util::abs().

Referenced by ~CBAlgoAngleSeparate().

22  {
23 
24  double angle1 = cluster1.GetParams().angle_2d;
25  double angle2 = cluster2.GetParams().angle_2d;
26 
27  double w_start1 = cluster1.GetParams().start_point.w;
28  double t_start1 = cluster1.GetParams().start_point.t;
29  double w_start2 = cluster2.GetParams().start_point.w;
30  double t_start2 = cluster2.GetParams().start_point.t;
31 
32  double len1 = cluster1.GetParams().length;
33  double len2 = cluster2.GetParams().length;
34 
35  size_t hits1 = cluster1.GetHitVector().size();
36  size_t hits2 = cluster1.GetHitVector().size();
37 
38  //if either cluster has less than _minHits don't even try...
39  if ((hits1 < _minHits) or (hits2 < _minHits) or (angle1 < -360) or (angle2 < -360))
40  return false;
41 
42  if (_debug) {
43  std::cout << "Cluster 1:" << std::endl;
44  std::cout << "\tStart: ( " << w_start1 << ", " << t_start1 << " )" << std::endl;
45  std::cout << "\tAngle: " << angle1 << std::endl;
46  std::cout << "\tLength: " << len1 << std::endl;
47  std::cout << "\tN Hits: " << hits1 << std::endl;
48 
49  std::cout << "Cluster 2:" << std::endl;
50  std::cout << "\tStart: ( " << w_start2 << ", " << t_start2 << " )" << std::endl;
51  std::cout << "\tAngle: " << angle2 << std::endl;
52  std::cout << "\tLength: " << len2 << std::endl;
53  std::cout << "\tN Hits: " << hits2 << std::endl;
54  }
55 
56  //cluster 1 needs to be long enough (i.e. good) and cluster 2 must have minimum number of hits
57  double angle;
58  double separation;
59 
60  //first calculate angle of line in 2D plane connectng the two start points
61  if ((t_start2 - t_start1) == 0)
62  angle = 0.;
63  else {
64  double slope = (t_start2 - t_start1) / (w_start2 - w_start1);
65  angle = atan(slope) * 180. / 3.14;
66  }
67 
68  separation = abs(angle - angle1);
69  if (_debug) {
70  std::cout << "Angle S1--S2: " << angle << std::endl;
71  std::cout << "Angle1--S2: " << separation << std::endl;
72  }
73  if ((((separation > _MaxAngle) and (separation < 180 - _MaxAngle)) or
74  ((separation > 180 + _MaxAngle) and (separation < 360 - _MaxAngle))) and
75  (hits2 > _minHits) and (len1 > _MinLen)) {
76  if (_verbose) { std::cout << "Separate! cluster 1 BIG" << std::endl << std::endl; }
77  return true;
78  }
79 
80  //now change direction of angle so that it points from cluster 2 (big) to cluster 1 (small)
81  angle += 180.;
82  angle = (int)(angle) % 360;
83  separation = abs(angle - angle2);
84  if (_debug) {
85  std::cout << "Angle S2--S1: " << angle << std::endl;
86  std::cout << "Angle2--S1: " << separation << std::endl;
87  }
88  if ((((separation > _MaxAngle) and (separation < 180 - _MaxAngle)) or
89  ((separation > 180 + _MaxAngle) and (separation < 360 - _MaxAngle))) and
90  (hits1 > _minHits) and (len2 > _MinLen)) {
91  if (_verbose) { std::cout << "Separate! cluster 2 BIG" << std::endl << std::endl; }
92  return true;
93  }
94 
95  if (_debug) { std::cout << std::endl; }
96  return false;
97  }
constexpr auto abs(T v)
Returns the absolute value of the argument.
const cluster_params & GetParams() const
double t
Definition: PxUtils.h:10
const std::vector< util::PxHit > & GetHitVector() const
util::PxPoint start_point
start point
Definition: ClusterParams.h:23
double angle_2d
Angle of axis in wire/hit view.
Definition: ClusterParams.h:39
double w
Definition: PxUtils.h:9
bool _verbose
Boolean to choose verbose mode. Turned on if CMergeManager/CMatchManager&#39;s verbosity level is >= kPer...
Definition: CMAlgoBase.h:82
virtual void cmtool::CMAlgoBase::EventBegin ( const std::vector< cluster::ClusterParamsAlg > &  )
inlinevirtualinherited

Optional function: called at the beginning of 1st iteration. This is called per event.

Reimplemented in cmtool::CPAlgoArray, cmtool::CBAlgoArray, and cmtool::CBAlgoPolyShortestDist.

Definition at line 45 of file CMAlgoBase.h.

Referenced by cmtool::CMergeManager::EventBegin().

45 {}
virtual void cmtool::CMAlgoBase::EventEnd ( )
inlinevirtualinherited

Optional function: called at the end of event ... after the last merging iteration is over.

Reimplemented in cmtool::CPAlgoArray, and cmtool::CBAlgoArray.

Definition at line 50 of file CMAlgoBase.h.

Referenced by cmtool::CMatchManager::EventEnd(), and cmtool::CMergeManager::EventEnd().

50 {}
virtual void cmtool::CMAlgoBase::IterationBegin ( const std::vector< cluster::ClusterParamsAlg > &  )
inlinevirtualinherited

Optional function: called at the beggining of each iteration over all pairs of clusters. This provides all clusters' information in case the algorithm need them. Note this is called per iteration which may be more than once per event.

Reimplemented in cmtool::CPAlgoArray, and cmtool::CBAlgoArray.

Definition at line 57 of file CMAlgoBase.h.

Referenced by cmtool::CMatchManager::EventBegin(), cmtool::CMatchManager::IterationBegin(), and cmtool::CMergeManager::IterationBegin().

57 {}
virtual void cmtool::CMAlgoBase::IterationEnd ( )
inlinevirtualinherited

Optional function: called at the end of each iteration over all pairs of clusters.

Reimplemented in cmtool::CPAlgoArray, and cmtool::CBAlgoArray.

Definition at line 62 of file CMAlgoBase.h.

Referenced by cmtool::CMatchManager::IterationEnd(), and cmtool::CMergeManager::IterationEnd().

62 {}
void cmtool::CBAlgoAngleSeparate::Report ( )
virtual

Function to report what's going on per merging.

Reimplemented from cmtool::CMAlgoBase.

Definition at line 100 of file CBAlgoAngleSeparate.cxx.

Referenced by Reset().

102  {}
virtual void cmtool::CBAlgoAngleSeparate::Reset ( )
inlinevirtual

Function to reset the algorithm instance ... maybe implemented via child class.

Reimplemented from cmtool::CMAlgoBase.

Definition at line 55 of file CBAlgoAngleSeparate.h.

References Report().

55 {}
void cmtool::CMAlgoBase::SetAnaFile ( TFile *  fout)
inlineinherited

Setter function for an output plot TFile pointer.

Definition at line 72 of file CMAlgoBase.h.

References cmtool::CMAlgoBase::_fout.

Referenced by cmtool::CMergeManager::EventBegin().

72 { _fout = fout; }
TFile * _fout
TFile pointer to an output file.
Definition: CMAlgoBase.h:79
void cmtool::CBAlgoAngleSeparate::SetDebug ( bool  on)
inline

Set Debug Mode on or off.

Definition at line 43 of file CBAlgoAngleSeparate.h.

References _debug.

Referenced by CBAlgoAngleSeparate().

void cmtool::CBAlgoAngleSeparate::SetMaxAngleSep ( float  angle)
inline

Set Max Angle Separation for separation.

Definition at line 46 of file CBAlgoAngleSeparate.h.

References _MaxAngle.

Referenced by CBAlgoAngleSeparate().

void cmtool::CBAlgoAngleSeparate::SetMinHits ( size_t  n)
inline

SetMinimum number of hits for small cluster.

Definition at line 52 of file CBAlgoAngleSeparate.h.

References _minHits, and n.

Referenced by CBAlgoAngleSeparate().

52 { _minHits = n; }
Char_t n[5]
void cmtool::CBAlgoAngleSeparate::SetMinLength ( float  len)
inline

Set Minimum length for "big" cluster.

Definition at line 49 of file CBAlgoAngleSeparate.h.

References _MinLen.

Referenced by CBAlgoAngleSeparate().

virtual void cmtool::CMAlgoBase::SetVerbose ( bool  doit = true)
inlinevirtualinherited

Setter function for verbosity.

Reimplemented in cmtool::CBAlgoArray, and cmtool::CFAlgoTimeOverlap.

Definition at line 75 of file CMAlgoBase.h.

References cmtool::CMAlgoBase::_verbose.

Referenced by cmtool::CMatchManager::EventBegin(), and cmtool::CMergeManager::EventBegin().

75 { _verbose = doit; }
bool _verbose
Boolean to choose verbose mode. Turned on if CMergeManager/CMatchManager&#39;s verbosity level is >= kPer...
Definition: CMAlgoBase.h:82

Member Data Documentation

bool cmtool::CBAlgoAngleSeparate::_debug
protected

Definition at line 61 of file CBAlgoAngleSeparate.h.

Referenced by Bool(), and SetDebug().

TFile* cmtool::CMAlgoBase::_fout
protectedinherited

TFile pointer to an output file.

Definition at line 79 of file CMAlgoBase.h.

Referenced by cmtool::CMAlgoBase::CMAlgoBase(), and cmtool::CMAlgoBase::SetAnaFile().

float cmtool::CBAlgoAngleSeparate::_MaxAngle
protected

Definition at line 62 of file CBAlgoAngleSeparate.h.

Referenced by Bool(), and SetMaxAngleSep().

size_t cmtool::CBAlgoAngleSeparate::_minHits
protected

Definition at line 64 of file CBAlgoAngleSeparate.h.

Referenced by Bool(), and SetMinHits().

float cmtool::CBAlgoAngleSeparate::_MinLen
protected

Definition at line 63 of file CBAlgoAngleSeparate.h.

Referenced by Bool(), and SetMinLength().


The documentation for this class was generated from the following files: