CFAlgoShowerCompat.cxx
Go to the documentation of this file.
1 #include "CFAlgoShowerCompat.h"
2 #include "TTree.h"
3 
4 namespace cmtool {
5 
6  //-------------------------------------------------------
8  //-------------------------------------------------------
9  {
10 
11  _fout_hax = 0;
12  _ana_tree = 0;
13 
14  if (!_fout_hax) _fout_hax = new TFile("fout_hax.root", "RECREATE");
15 
16  if (!_ana_tree) {
17  _ana_tree = new TTree("ana_tree", "ana_tree");
18  _ana_tree->Branch("o_ang_avg", &_o_ang_avg, "o_ang_avg/D");
19  _ana_tree->Branch("o_ang_rms", &_o_ang_rms, "o_ang_rms/D");
20  _ana_tree->Branch("o_ang_wt_avg", &_o_ang_wt_avg, "o_ang_wt_avg/D");
21  _ana_tree->Branch("o_ang_wt_rms", &_o_ang_wt_rms, "o_ang_wt_rms/D");
22  _ana_tree->Branch("max_trackness", &_max_trackness, "max_trackness/D");
23  _ana_tree->Branch("max_len_over_width", &_max_len_over_width, "max_len_over_width/D");
24  _ana_tree->Branch("min_oa_over_len", &_min_oa_over_len, "min_oa_over_len/D");
25  _ana_tree->Branch(
26  "max_poly_perim_over_A", &_max_poly_perim_over_A, "max_poly_perim_over_A/D");
27  _ana_tree->Branch("min_modhitdens", &_min_modhitdens, "min_modhitdens/D");
28  }
29  }
30 
31  //-----------------------------
32  void
34  //-----------------------------
35  {}
36 
37  //----------------------------------------------------------------------------------------------
38  float
40  const std::vector<const cluster::ClusterParamsAlg*>& clusters)
41  //----------------------------------------------------------------------------------------------
42  {
43  _o_ang_avg = 0;
44  _o_ang_rms = 0;
45  _o_ang_wt_avg = 0;
46  _o_ang_wt_rms = 0;
47  _max_trackness = -9999.;
48  _max_len_over_width = -9999.;
49  _min_oa_over_len = 9999.;
50  _max_poly_perim_over_A = -9999.;
51  _min_modhitdens = 9999.;
52 
53  //Take the smallest and largest opening angles of clusters in this
54  //permutation and average them
55  double min_OA = 99999.;
56  double max_OA = -99999.;
57  double min_OA_wt = 99999.;
58  double max_OA_wt = -99999.;
59  for (auto const& c : clusters) {
60  // PrintClusterInfo(*c);
61  double this_OA = c->GetParams().opening_angle;
62  if (this_OA > max_OA) max_OA = this_OA;
63  if (this_OA < min_OA) min_OA = this_OA;
64  double this_OA_wt = c->GetParams().opening_angle_charge_wgt;
65  if (this_OA_wt > max_OA) max_OA_wt = this_OA_wt;
66  if (this_OA_wt < min_OA) min_OA_wt = this_OA_wt;
67  double this_trackness = c->GetParams().trackness;
68  if (this_trackness > _max_trackness) _max_trackness = this_trackness;
69  double this_L_over_W = c->GetParams().length / c->GetParams().width;
70  if (this_L_over_W > _max_len_over_width) _max_len_over_width = this_L_over_W;
71  double this_OA_over_L = this_OA / c->GetParams().length;
72  if (this_OA_over_L < _min_oa_over_len) _min_oa_over_len = this_OA_over_L;
73  double this_poly_perim_over_A =
74  c->GetParams().PolyObject.Perimeter() / c->GetParams().PolyObject.Area();
75  if (this_poly_perim_over_A > _max_poly_perim_over_A)
76  _max_poly_perim_over_A = this_poly_perim_over_A;
77  double this_modhitdens = c->GetParams().modified_hit_density;
78  if (this_modhitdens < _min_modhitdens) _min_modhitdens = this_modhitdens;
79  }
80 
81  _o_ang_avg = (min_OA + max_OA) / 2;
82  _o_ang_rms = pow((pow(min_OA, 2) + pow(max_OA, 2)) / 2, 0.5);
83  _o_ang_wt_avg = (min_OA_wt + max_OA_wt) / 2;
84  _o_ang_wt_rms = pow((pow(min_OA_wt, 2) + pow(max_OA_wt, 2)) / 2, 0.5);
85 
86  _ana_tree->Fill();
87 
88  bool accept_match = true;
89  //Reject match if it is very track-like
90  if (_min_oa_over_len < 0.0007) accept_match = false;
91  if (_o_ang_avg * _o_ang_rms < 0.01) accept_match = false;
92  if (_max_len_over_width > 20) accept_match = false;
93 
94  return accept_match ? 1 : -1;
95  }
96 
97  //------------------------------
98  void
100  //------------------------------
101  {}
102 
103  void
105  {
106  std::cout << " This cluster's info is as follows:" << std::endl;
107  std::cout << " Opening Angle: " << c.GetParams().opening_angle << std::endl;
108  // std::cout<<" Opening Angle Charge Weight: "<<c.GetParams().opening_angle_charge_wgt<<std::endl;
109  }
110 }
This algo only matches clusters if they are not track-like. This is implemented in an algo because it...
float Float(util::GeometryUtilities const &, const std::vector< const cluster::ClusterParamsAlg * > &clusters) override
constexpr T pow(T x)
Definition: pow.h:72
const cluster_params & GetParams() const
void Reset() override
Function to reset the algorithm instance, called together with manager&#39;s Reset()
void PrintClusterInfo(const cluster::ClusterParamsAlg &c)
double opening_angle
Width of angular distubtion wrt vertx.
Definition: ClusterParams.h:41
CFAlgoShowerCompat()
Default constructor.
QTextStream & endl(QTextStream &s)