LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
btutil::MCMatchAlg Class Reference

#include "MCMatchAlg.h"

Public Member Functions

 MCMatchAlg ()
 Default constructor. More...
 
virtual ~MCMatchAlg ()
 Default destructor. More...
 
bool BuildMap (detinfo::DetectorClocksData const &clockData, const std::vector< unsigned int > &g4_trackid_v, const std::vector< sim::SimChannel > &simch_v, const std::vector< std::vector< art::Ptr< recob::Hit >>> &cluster_v)
 Constructs needed information for Reco=>MC matching. More...
 
bool BuildMap (detinfo::DetectorClocksData const &clockData, const std::vector< std::vector< unsigned int >> &g4_trackid_v, const std::vector< sim::SimChannel > &simch_v, const std::vector< std::vector< art::Ptr< recob::Hit >>> &cluster_v)
 Constructs needed information for Reco=>MC matching. More...
 
const std::vector< int > & BestClusters (const size_t mcshower_index) const
 
double ClusterCorrectness (const size_t cluster_index, const size_t mcshower_index) const
 
std::pair< size_t, double > ShowerCorrectness (const std::vector< unsigned int > cluster_indices) const
 
std::pair< double, double > ClusterEP (const size_t cluster_index, const size_t mcshower_index) const
 For a specified cluster, compute cluster efficiency and purity in terms of specified MC object. More...
 
std::pair< double, double > BestClusterEP (const size_t mcshower_index, const size_t plane_id) const
 
const MCBTAlgBTAlg () const
 BTAlgo getter. More...
 

Protected Member Functions

bool BuildMap (detinfo::DetectorClocksData const &clockData, const std::vector< std::vector< art::Ptr< recob::Hit >>> &cluster_v)
 

Protected Attributes

MCBTAlg fBTAlgo
 MCBTAlg instance. More...
 
std::vector< size_t > _view_to_plane
 
std::vector< std::vector< double > > _summed_mcq
 
std::vector< std::vector< double > > _cluster_mcq_v
 
std::vector< unsigned char > _cluster_plane_id
 
std::vector< std::vector< int > > _bmatch_id
 

Detailed Description

User defined class MCMatchAlg ... these comments are used to generate doxygen documentation!

Definition at line 36 of file MCMatchAlg.h.

Constructor & Destructor Documentation

btutil::MCMatchAlg::MCMatchAlg ( )

Default constructor.

Definition at line 16 of file MCMatchAlg.cxx.

References _view_to_plane.

17  {
18  _view_to_plane.clear();
19  }
std::vector< size_t > _view_to_plane
Definition: MCMatchAlg.h:101
virtual btutil::MCMatchAlg::~MCMatchAlg ( )
inlinevirtual

Default destructor.

Definition at line 43 of file MCMatchAlg.h.

References lar::dump::vector().

43 {};

Member Function Documentation

std::pair< double, double > btutil::MCMatchAlg::BestClusterEP ( const size_t  mcshower_index,
const size_t  plane_id 
) const

For a specified MC object, compute the best-matched cluster's efficiency and purity from the specified plane ID. Internally this function calls BestClusters() to find the best cluster on each plane, then calls ClusterEP() to retrieve the efficiency and purity.

Definition at line 229 of file MCMatchAlg.cxx.

References BestClusters(), and ClusterEP().

231  {
232 
233  auto c_index_v = BestClusters(mc_index);
234 
235  if (c_index_v.size() <= plane_id)
236  throw MCBTException(Form(
237  "Plane ID %zu exceeds # of planes recorded in data (%zu)...", plane_id, c_index_v.size()));
238 
239  std::pair<double, double> result(0, 0);
240 
241  if (c_index_v[plane_id] < 0) return result;
242 
243  return ClusterEP(c_index_v[plane_id], mc_index);
244  }
std::pair< double, double > ClusterEP(const size_t cluster_index, const size_t mcshower_index) const
For a specified cluster, compute cluster efficiency and purity in terms of specified MC object...
Definition: MCMatchAlg.cxx:187
const std::vector< int > & BestClusters(const size_t mcshower_index) const
Definition: MCMatchAlg.cxx:218
const std::vector< int > & btutil::MCMatchAlg::BestClusters ( const size_t  mcshower_index) const

For a specified MC object (via index in MCShower/MCTrack), returns best-matched clusters represented by an index number of clusters. The return vector length is same as

of planes, and "-1" if there is no cluster found on the corresponding plane.

Definition at line 218 of file MCMatchAlg.cxx.

References _bmatch_id.

Referenced by BestClusterEP().

219  {
220  if (!_bmatch_id.size()) throw MCBTException("Preparation not done yet!");
221 
222  if (mc_index >= _bmatch_id.size())
223  throw MCBTException(
224  Form("Input MC object index (%zu) out of range (%zu)!", mc_index, _bmatch_id.size()));
225 
226  return _bmatch_id[mc_index];
227  }
std::vector< std::vector< int > > _bmatch_id
Definition: MCMatchAlg.h:107
const MCBTAlg& btutil::MCMatchAlg::BTAlg ( ) const
inline

BTAlgo getter.

Definition at line 92 of file MCMatchAlg.h.

References lar::dump::vector().

Referenced by ShowerQuality::analyze().

92 { return fBTAlgo; }
MCBTAlg fBTAlgo
MCBTAlg instance.
Definition: MCMatchAlg.h:99
bool btutil::MCMatchAlg::BuildMap ( detinfo::DetectorClocksData const &  clockData,
const std::vector< unsigned int > &  g4_trackid_v,
const std::vector< sim::SimChannel > &  simch_v,
const std::vector< std::vector< art::Ptr< recob::Hit >>> &  cluster_v 
)

Constructs needed information for Reco=>MC matching.

Definition at line 21 of file MCMatchAlg.cxx.

References fBTAlgo, and btutil::MCBTAlg::Reset().

Referenced by ShowerQuality::analyze(), and BuildMap().

25  {
26  fBTAlgo.Reset(g4_trackid_v, simch_v);
27 
28  return BuildMap(clockData, cluster_v);
29  }
void Reset(const std::vector< unsigned int > &g4_trackid_v, const std::vector< sim::SimChannel > &simch_v)
Definition: MCBTAlg.cxx:22
bool BuildMap(detinfo::DetectorClocksData const &clockData, const std::vector< unsigned int > &g4_trackid_v, const std::vector< sim::SimChannel > &simch_v, const std::vector< std::vector< art::Ptr< recob::Hit >>> &cluster_v)
Constructs needed information for Reco=>MC matching.
Definition: MCMatchAlg.cxx:21
MCBTAlg fBTAlgo
MCBTAlg instance.
Definition: MCMatchAlg.h:99
bool btutil::MCMatchAlg::BuildMap ( detinfo::DetectorClocksData const &  clockData,
const std::vector< std::vector< unsigned int >> &  g4_trackid_v,
const std::vector< sim::SimChannel > &  simch_v,
const std::vector< std::vector< art::Ptr< recob::Hit >>> &  cluster_v 
)

Constructs needed information for Reco=>MC matching.

Definition at line 31 of file MCMatchAlg.cxx.

References BuildMap(), fBTAlgo, and btutil::MCBTAlg::Reset().

35  {
36 
37  fBTAlgo.Reset(g4_trackid_v, simch_v);
38 
39  return BuildMap(clockData, cluster_v);
40  }
void Reset(const std::vector< unsigned int > &g4_trackid_v, const std::vector< sim::SimChannel > &simch_v)
Definition: MCBTAlg.cxx:22
bool BuildMap(detinfo::DetectorClocksData const &clockData, const std::vector< unsigned int > &g4_trackid_v, const std::vector< sim::SimChannel > &simch_v, const std::vector< std::vector< art::Ptr< recob::Hit >>> &cluster_v)
Constructs needed information for Reco=>MC matching.
Definition: MCMatchAlg.cxx:21
MCBTAlg fBTAlgo
MCBTAlg instance.
Definition: MCMatchAlg.h:99
bool btutil::MCMatchAlg::BuildMap ( detinfo::DetectorClocksData const &  clockData,
const std::vector< std::vector< art::Ptr< recob::Hit >>> &  cluster_v 
)
protected

Definition at line 42 of file MCMatchAlg.cxx.

References _bmatch_id, _cluster_mcq_v, _cluster_plane_id, _summed_mcq, btutil::WireRange_t::ch, btutil::WireRange_t::end, fBTAlgo, Get, btutil::MCBTAlg::MCQ(), btutil::MCBTAlg::NumParts(), and btutil::WireRange_t::start.

44  {
45  size_t num_mcobj = fBTAlgo.NumParts();
46  size_t num_cluster = cluster_v.size();
47 
48  auto const& wireReadoutGeom = art::ServiceHandle<geo::WireReadout>()->Get();
49 
50  //
51  // Perform back-tracking
52  //
53  // (1) Load cluster/hit data product
54  // (2) Loop over all clusters and find charge fraction to each MC object
55  // (3) For each MC object, find a cluster per plane with the highest charge
56 
57  // Loop over clusters & get charge fraction per MC object
58  _summed_mcq.clear();
59  _cluster_mcq_v.clear();
60  _cluster_plane_id.clear();
61 
62  _summed_mcq.resize(num_mcobj + 1, std::vector<double>(wireReadoutGeom.Nplanes(), 0));
63  _cluster_mcq_v.reserve(num_cluster);
64  _cluster_plane_id.reserve(num_cluster);
65 
66  for (auto const& hit_v : cluster_v) {
67 
68  size_t plane = wireReadoutGeom.Nplanes();
69 
70  // Create hit list
71  std::vector<WireRange_t> wr_v;
72  wr_v.reserve(hit_v.size());
73 
74  for (auto const& h : hit_v) {
75 
76  WireRange_t wr;
77  wr.ch = h->Channel();
78  wr.start = h->StartTick();
79  wr.end = h->EndTick();
80  wr_v.push_back(wr);
81  if (plane == wireReadoutGeom.Nplanes()) plane = h->WireID().Plane;
82  }
83 
84  _cluster_plane_id.push_back(plane);
85 
86  auto mcq_v = fBTAlgo.MCQ(clockData, wr_v);
87 
88  for (size_t i = 0; i < mcq_v.size(); ++i)
89 
90  _summed_mcq[i][plane] += mcq_v[i];
91 
92  _cluster_mcq_v.push_back(mcq_v);
93  }
94 
95  //
96  // Find the best matched pair (and its charge) per MC object
97  //
98  _bmatch_id.clear();
99  _bmatch_id.resize(num_mcobj, std::vector<int>(wireReadoutGeom.Nplanes(), -1));
100 
101  std::vector<std::vector<double>> bmatch_mcq(num_mcobj,
102  std::vector<double>(wireReadoutGeom.Nplanes(), 0));
103 
104  for (size_t mc_index = 0; mc_index < num_mcobj; ++mc_index) {
105 
106  for (size_t cluster_index = 0; cluster_index < num_cluster; ++cluster_index) {
107 
108  auto plane = _cluster_plane_id.at(cluster_index);
109 
110  double q = _cluster_mcq_v[cluster_index][mc_index];
111 
112  if (bmatch_mcq[mc_index][plane] < q) {
113 
114  bmatch_mcq[mc_index][plane] = q;
115  _bmatch_id[mc_index][plane] = cluster_index;
116  }
117  }
118  }
119 
120  return true;
121  }
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
Definition: AddMC.C:8
std::vector< std::vector< double > > _summed_mcq
Definition: MCMatchAlg.h:103
std::vector< unsigned char > _cluster_plane_id
Definition: MCMatchAlg.h:106
std::vector< std::vector< double > > _cluster_mcq_v
Definition: MCMatchAlg.h:104
MCBTAlg fBTAlgo
MCBTAlg instance.
Definition: MCMatchAlg.h:99
std::vector< double > MCQ(detinfo::DetectorClocksData const &clockData, const WireRange_t &hit) const
Definition: MCBTAlg.cxx:97
size_t NumParts() const
Definition: MCBTAlg.h:115
std::vector< std::vector< int > > _bmatch_id
Definition: MCMatchAlg.h:107
double btutil::MCMatchAlg::ClusterCorrectness ( const size_t  cluster_index,
const size_t  mcshower_index 
) const

For a specified cluster, compute the correctness for the specified MC object

Definition at line 123 of file MCMatchAlg.cxx.

References _bmatch_id, _cluster_mcq_v, and _cluster_plane_id.

Referenced by ShowerCorrectness().

124  {
125 
126  if (!_bmatch_id.size()) throw MCBTException("Preparation not done yet!");
127 
128  if (cluster_index >= _cluster_mcq_v.size())
129  throw MCBTException(Form(
130  "Input cluster index (%zu) out of range (%zu)!", cluster_index, _cluster_mcq_v.size()));
131 
132  if (mc_index >= _bmatch_id.size())
133  throw MCBTException(
134  Form("Input MC object index (%zu) out of range (%zu)!", mc_index, _bmatch_id.size()));
135 
136  auto plane = _cluster_plane_id.at(cluster_index);
137 
138  auto best_cluster_index = _bmatch_id.at(mc_index).at(plane);
139 
140  if (best_cluster_index < 0) return -1;
141 
142  return _cluster_mcq_v.at(cluster_index).at(mc_index) /
143  _cluster_mcq_v.at(best_cluster_index).at(mc_index);
144  }
std::vector< unsigned char > _cluster_plane_id
Definition: MCMatchAlg.h:106
std::vector< std::vector< double > > _cluster_mcq_v
Definition: MCMatchAlg.h:104
std::vector< std::vector< int > > _bmatch_id
Definition: MCMatchAlg.h:107
std::pair< double, double > btutil::MCMatchAlg::ClusterEP ( const size_t  cluster_index,
const size_t  mcshower_index 
) const

For a specified cluster, compute cluster efficiency and purity in terms of specified MC object.

Definition at line 187 of file MCMatchAlg.cxx.

References _bmatch_id, _cluster_mcq_v, _cluster_plane_id, and _summed_mcq.

Referenced by ShowerQuality::analyze(), and BestClusterEP().

189  {
190  if (!_bmatch_id.size()) throw MCBTException("Preparation not done yet!");
191 
192  if (cluster_index >= _cluster_mcq_v.size())
193  throw MCBTException(Form(
194  "Input cluster index (%zu) out of range (%zu)!", cluster_index, _cluster_mcq_v.size()));
195 
196  if (mc_index >= _bmatch_id.size())
197  throw MCBTException(
198  Form("Input MC object index (%zu) out of range (%zu)!", mc_index, _bmatch_id.size()));
199 
200  // efficiency = this cluster's mcq for specified mc obj / total mcq by this mcshower in all clusters
201  // purity = this cluster's mcq for this mcshower / total mcq from all mc obj in this cluster
202 
203  std::pair<double, double> result;
204 
205  auto plane = _cluster_plane_id[cluster_index];
206 
207  result.first = _cluster_mcq_v[cluster_index][mc_index] / _summed_mcq[mc_index][plane];
208 
209  double cluster_mcq_total = 0;
210  for (auto const& q : _cluster_mcq_v[cluster_index])
211  cluster_mcq_total += q;
212 
213  result.second = _cluster_mcq_v[cluster_index][mc_index] / cluster_mcq_total;
214 
215  return result;
216  }
std::vector< std::vector< double > > _summed_mcq
Definition: MCMatchAlg.h:103
std::vector< unsigned char > _cluster_plane_id
Definition: MCMatchAlg.h:106
std::vector< std::vector< double > > _cluster_mcq_v
Definition: MCMatchAlg.h:104
std::vector< std::vector< int > > _bmatch_id
Definition: MCMatchAlg.h:107
std::pair< size_t, double > btutil::MCMatchAlg::ShowerCorrectness ( const std::vector< unsigned int >  cluster_indices) const

Similar to ClusterCorrectness() function except this one computes the correctness for multiple clusters. It is meant to compute the correctness for a cluster combination that is matched across plane to represent one 3D reco object. The return is a pair of best-matched MC object and correctness.

Definition at line 146 of file MCMatchAlg.cxx.

References _bmatch_id, _cluster_mcq_v, and ClusterCorrectness().

Referenced by ShowerQuality::analyze().

148  {
149 
150  if (!_bmatch_id.size()) throw MCBTException("Preparation not done yet!");
151 
152  if (cluster_indices.size() > _cluster_mcq_v.size())
153  throw MCBTException(
154  Form("Input cluster indices length (%zu) > # of registered clusters (%zu)!",
155  cluster_indices.size(),
156  _cluster_mcq_v.size()));
157 
158  if (!cluster_indices.size()) throw MCBTException("Input cluster indices empty!");
159 
160  // Compute efficiency per MC
161  std::vector<double> match_eff(_bmatch_id.size(), 1);
162 
163  for (auto const& cluster_index : cluster_indices) {
164 
165  for (size_t mc_index = 0; mc_index < _bmatch_id.size(); ++mc_index) {
166 
167  double correctness = ClusterCorrectness(cluster_index, mc_index);
168 
169  if (correctness >= 0) match_eff.at(mc_index) *= correctness;
170  }
171  }
172 
173  std::pair<size_t, double> result(0, -1);
174 
175  // Find the best qratio
176  for (size_t mc_index = 0; mc_index < match_eff.size(); ++mc_index) {
177 
178  if (match_eff.at(mc_index) < result.second) continue;
179 
180  result.second = match_eff.at(mc_index);
181 
182  result.first = mc_index;
183  }
184  return result;
185  }
std::vector< std::vector< double > > _cluster_mcq_v
Definition: MCMatchAlg.h:104
double ClusterCorrectness(const size_t cluster_index, const size_t mcshower_index) const
Definition: MCMatchAlg.cxx:123
std::vector< std::vector< int > > _bmatch_id
Definition: MCMatchAlg.h:107

Member Data Documentation

std::vector<std::vector<int> > btutil::MCMatchAlg::_bmatch_id
protected
std::vector<std::vector<double> > btutil::MCMatchAlg::_cluster_mcq_v
protected

Definition at line 104 of file MCMatchAlg.h.

Referenced by BuildMap(), ClusterCorrectness(), ClusterEP(), and ShowerCorrectness().

std::vector<unsigned char> btutil::MCMatchAlg::_cluster_plane_id
protected

Definition at line 106 of file MCMatchAlg.h.

Referenced by BuildMap(), ClusterCorrectness(), and ClusterEP().

std::vector<std::vector<double> > btutil::MCMatchAlg::_summed_mcq
protected

Definition at line 103 of file MCMatchAlg.h.

Referenced by BuildMap(), and ClusterEP().

std::vector<size_t> btutil::MCMatchAlg::_view_to_plane
protected

Definition at line 101 of file MCMatchAlg.h.

Referenced by MCMatchAlg().

MCBTAlg btutil::MCMatchAlg::fBTAlgo
protected

MCBTAlg instance.

Definition at line 99 of file MCMatchAlg.h.

Referenced by BuildMap().


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