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