Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
cluster::ClusterMatchAlg Class Reference

#include <ClusterMatchAlg.h>

Classes

struct  cluster_match_info
 

Public Types

enum  MatchMethod_t {
  kRoughZ = 0, kRoughT, kSpacePoint, kSumCharge,
  kMATCH_METHOD_MAX
}
 Enum switch for various matching methods. More...
 

Public Member Functions

 ClusterMatchAlg (fhicl::ParameterSet const &pset)
 Default constructor with fhicl parameters. More...
 
void ReportConfig () const
 Method to report the current configuration. More...
 
void SetMCTruthModName (std::string name)
 Method to specify input MCTruth's module name (optional) More...
 
void FillMCInfo (const art::Event &evt)
 Internal method to fill MCTruth information when available. More...
 
void AppendClusterInfo (detinfo::DetectorPropertiesData const &det_prop, const recob::Cluster &in_cluster, const std::vector< art::Ptr< recob::Hit >> &in_hit_v)
 Method to fill cluster information to be used for matching. More...
 
void MatchThreePlanes (detinfo::DetectorClocksData const &clock_data, detinfo::DetectorPropertiesData const &det_prop)
 
void MatchTwoPlanes (detinfo::DetectorClocksData const &clock_data, detinfo::DetectorPropertiesData const &det_prop)
 Two plane version of cluster matching method. More...
 
std::vector< std::vector< unsigned int > > GetMatchedClusters () const
 Method to retrieve matched cluster combinations. The format is [wire_plane][cluster_index]. More...
 
const std::vector< std::vector< recob::SpacePoint > > & GetMatchedSpacePoints () const
 Method to retrieve matched SpacePoint for each combinations. More...
 
bool StoreSpacePoints () const
 Method to check if it is configured to store SpacePoint. More...
 
void ClearEventInfo ()
 Method to clear event-wise information. More...
 

Protected Member Functions

void ClearMatchInputInfo ()
 Method to clear input cluster information. More...
 
void ClearMatchOutputInfo ()
 Method to clear output matched cluster information. More...
 
void ClearTTreeInfo ()
 Method to clear TTree variables. More...
 
void PrepareDetParams (detinfo::DetectorPropertiesData const &clockData)
 Internal method, called only once, to fill detector-wise information. More...
 
void PrepareTTree ()
 Internal method to create output TTree for quality checking of the algorithm. More...
 
void FillHitInfo (cluster_match_info &ci, art::PtrVector< recob::Hit > &out_hit_v, const std::vector< art::Ptr< recob::Hit >> &in_hit_v)
 
void AppendClusterTreeVariables (const cluster_match_info &ci)
 Internal method to fill cluster-info tree. More...
 
bool Match_RoughZ (const cluster_match_info &ci1, const cluster_match_info &ci2, const geo::View_t v1, const geo::View_t v2) const
 
bool Match_RoughTime (const cluster_match_info &ci1, const cluster_match_info &ci2)
 Checks min/max hit timing among two clusters and make sure there is an overlap. More...
 
bool Match_SumCharge (const cluster_match_info &uc, const cluster_match_info &vc)
 
bool Match_SpacePoint (detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const size_t uindex, const size_t vindex, const size_t windex, std::vector< recob::SpacePoint > &sps_v)
 

Protected Attributes

size_t _num_sps_cut
 
double _overlay_tratio_cut
 
double _qratio_cut
 
std::vector< unsigned int > _matched_uclusters_v
 U plane matched clusters' index. More...
 
std::vector< unsigned int > _matched_vclusters_v
 V plane matched clusters' index. More...
 
std::vector< unsigned int > _matched_wclusters_v
 W plane matched clusters' index. More...
 
std::vector< std::vector< recob::SpacePoint > > _matched_sps_v
 Local SpacePoint vector container. More...
 
bool _match_methods [kMATCH_METHOD_MAX]
 Boolean list for enabled algorithms. More...
 
bool _det_params_prepared
 
bool _debug_mode
 Boolean to enable debug mode (call all enabled matching methods) More...
 
bool _store_sps
 Boolean to enable storage of SpacePoint vector. More...
 
unsigned int _tot_planes
 
double _time_offset_uplane
 
double _time_offset_vplane
 
double _time_offset_wplane
 
std::string _ModName_MCTruth
 MCTruth producer's module name. More...
 
std::vector< art::PtrVector< recob::Hit > > _uhits_v
 Local Hit pointer vector container ... U-plane. More...
 
std::vector< art::PtrVector< recob::Hit > > _vhits_v
 Local Hit pointer vector container ... V-plane. More...
 
std::vector< art::PtrVector< recob::Hit > > _whits_v
 Local Hit pointer vector container ... W-plane. More...
 
std::vector< cluster_match_info_ucluster_v
 Local cluster data container... U-plane. More...
 
std::vector< cluster_match_info_vcluster_v
 Local cluster data container... V-plane. More...
 
std::vector< cluster_match_info_wcluster_v
 Local cluster data container... W-plane. More...
 
trkf::SpacePointAlg_sps_algo
 SpacePointFinder algorithm pointer. More...
 
TTree * _match_tree
 
double _mc_E
 
double _mc_Px
 
double _mc_Py
 
double _mc_Pz
 
double _mc_Vx
 
double _mc_Vy
 
double _mc_Vz
 
int _pdgid
 
unsigned short _tot_u
 
unsigned short _tot_v
 
unsigned short _tot_w
 
unsigned short _tot_pass_qsum
 
unsigned short _tot_pass_t
 
unsigned short _tot_pass_z
 
unsigned short _tot_pass_sps
 
std::vector< uint16_t > _u_nhits_v
 
std::vector< uint16_t > _v_nhits_v
 
std::vector< uint16_t > _w_nhits_v
 
std::vector< uint16_t > _nsps
 
std::vector< double > _qratio_v
 
std::vector< double > _uv_tratio_v
 
std::vector< double > _vw_tratio_v
 
std::vector< double > _wu_tratio_v
 
bool _save_cluster_info
 
TTree * _cluster_tree
 
std::vector< uint16_t > _view_v
 
std::vector< double > _charge_v
 
std::vector< uint16_t > _nhits_v
 
std::vector< double > _tstart_min_v
 
std::vector< double > _tstart_max_v
 
std::vector< double > _tpeak_min_v
 
std::vector< double > _tpeak_max_v
 
std::vector< double > _tend_min_v
 
std::vector< double > _tend_max_v
 

Detailed Description

Definition at line 39 of file ClusterMatchAlg.h.

Member Enumeration Documentation

enum cluster::ClusterMatchAlg::MatchMethod_t

Enum switch for various matching methods.

Enumerator
kRoughZ 

Rough-Z comparison method ... see Match_RoughZ() description.

kRoughT 

Rough-Time comparison method ... see Match_RoughTime() description.

kSpacePoint 

Use SpacePoint finder algorithm ... see Match_SpacePoint() description.

kSumCharge 

Use summed charge comparison ... see Match_SumCharge() description.

kMATCH_METHOD_MAX 

Definition at line 43 of file ClusterMatchAlg.h.

43  {
44  kRoughZ = 0, ///< Rough-Z comparison method ... see Match_RoughZ() description
45  kRoughT, ///< Rough-Time comparison method ... see Match_RoughTime() description
46  kSpacePoint, ///< Use SpacePoint finder algorithm ... see Match_SpacePoint() description
47  kSumCharge, ///< Use summed charge comparison ... see Match_SumCharge() description
49  };
Use summed charge comparison ... see Match_SumCharge() description.
Use SpacePoint finder algorithm ... see Match_SpacePoint() description.
Rough-Time comparison method ... see Match_RoughTime() description.
Rough-Z comparison method ... see Match_RoughZ() description.

Constructor & Destructor Documentation

cluster::ClusterMatchAlg::ClusterMatchAlg ( fhicl::ParameterSet const &  pset)

Default constructor with fhicl parameters.

Definition at line 31 of file ClusterMatchAlg.cxx.

31  : _ModName_MCTruth("")
32  {
33  _debug_mode = pset.get<bool>("DebugMode");
34  _store_sps = pset.get<bool>("StoreSpacePoint");
35  _num_sps_cut = pset.get<size_t>("CutParam_NumSpacePoint");
36  _overlay_tratio_cut = pset.get<double>("CutParam_OverlayTimeFraction");
37  _qratio_cut = pset.get<double>("CutParam_SumChargeRatio");
38  std::vector<size_t> algo_list = pset.get<std::vector<size_t>>("MatchAlgoList");
39 
40  _sps_algo = new trkf::SpacePointAlg(pset.get<fhicl::ParameterSet>("SpacePointAlg"));
41  _match_tree = 0;
42  _cluster_tree = 0;
43  _save_cluster_info = true;
44  _det_params_prepared = false;
45 
46  for (size_t i = 0; i < (size_t)(kMATCH_METHOD_MAX); ++i)
47 
48  _match_methods[i] = false;
49 
50  for (auto const v : algo_list) {
51 
52  if (v >= (size_t)(kMATCH_METHOD_MAX))
53 
54  mf::LogError("ClusterMatchAlg") << Form("Invalid algorithm enum: %zu", v);
55 
56  else
57  _match_methods[v] = true;
58  }
59 
60  ReportConfig();
61 
63  }
trkf::SpacePointAlg * _sps_algo
SpacePointFinder algorithm pointer.
void ClearEventInfo()
Method to clear event-wise information.
bool _store_sps
Boolean to enable storage of SpacePoint vector.
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
std::string _ModName_MCTruth
MCTruth producer&#39;s module name.
bool _debug_mode
Boolean to enable debug mode (call all enabled matching methods)
bool _match_methods[kMATCH_METHOD_MAX]
Boolean list for enabled algorithms.
void ReportConfig() const
Method to report the current configuration.

Member Function Documentation

void cluster::ClusterMatchAlg::AppendClusterInfo ( detinfo::DetectorPropertiesData const &  det_prop,
const recob::Cluster in_cluster,
const std::vector< art::Ptr< recob::Hit >> &  in_hit_v 
)

Method to fill cluster information to be used for matching.

Definition at line 269 of file ClusterMatchAlg.cxx.

272  {
273  PrepareDetParams(det_prop);
274  cluster_match_info ci(in_cluster.ID());
275  ci.view = in_cluster.View();
276 
278  FillHitInfo(ci, hit_ptrv, in_hit_v);
279 
280  // Save created art::PtrVector & cluster_match_info struct object
281  switch (ci.view) {
282  case geo::kU:
283  _uhits_v.push_back(hit_ptrv);
284  _ucluster_v.push_back(ci);
286  break;
287  case geo::kV:
288  _vhits_v.push_back(hit_ptrv);
289  _vcluster_v.push_back(ci);
291  break;
292  case geo::kW:
293  _whits_v.push_back(hit_ptrv);
294  _wcluster_v.push_back(ci);
296  break;
297  default:
298  mf::LogError("ClusterMatchAlg") << Form("Found an invalid plane ID: %d", in_cluster.View());
299  }
300  }
std::vector< art::PtrVector< recob::Hit > > _vhits_v
Local Hit pointer vector container ... V-plane.
std::vector< art::PtrVector< recob::Hit > > _whits_v
Local Hit pointer vector container ... W-plane.
Planes which measure V.
Definition: geo_types.h:130
std::vector< cluster_match_info > _wcluster_v
Local cluster data container... W-plane.
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
Planes which measure U.
Definition: geo_types.h:129
std::vector< art::PtrVector< recob::Hit > > _uhits_v
Local Hit pointer vector container ... U-plane.
void AppendClusterTreeVariables(const cluster_match_info &ci)
Internal method to fill cluster-info tree.
std::vector< cluster_match_info > _vcluster_v
Local cluster data container... V-plane.
geo::View_t View() const
Returns the view for this cluster.
Definition: Cluster.h:741
ID_t ID() const
Identifier of this cluster.
Definition: Cluster.h:738
Planes which measure W (third view for Bo, MicroBooNE, etc).
Definition: geo_types.h:131
void PrepareDetParams(detinfo::DetectorPropertiesData const &clockData)
Internal method, called only once, to fill detector-wise information.
void FillHitInfo(cluster_match_info &ci, art::PtrVector< recob::Hit > &out_hit_v, const std::vector< art::Ptr< recob::Hit >> &in_hit_v)
std::vector< cluster_match_info > _ucluster_v
Local cluster data container... U-plane.
void cluster::ClusterMatchAlg::AppendClusterTreeVariables ( const cluster_match_info ci)
protected

Internal method to fill cluster-info tree.

Definition at line 346 of file ClusterMatchAlg.cxx.

347  {
348  if (_cluster_tree) {
349  _view_v.push_back(ci.view);
350  _charge_v.push_back(ci.sum_charge);
351  _nhits_v.push_back(ci.nhits);
352  _tstart_min_v.push_back(ci.start_time_min);
353  _tstart_max_v.push_back(ci.start_time_max);
354  _tpeak_min_v.push_back(ci.peak_time_min);
355  _tpeak_max_v.push_back(ci.peak_time_max);
356  _tend_min_v.push_back(ci.end_time_min);
357  _tend_max_v.push_back(ci.end_time_max);
358  }
359  }
std::vector< double > _tpeak_max_v
std::vector< double > _charge_v
std::vector< uint16_t > _nhits_v
std::vector< double > _tend_max_v
std::vector< double > _tend_min_v
std::vector< double > _tstart_max_v
std::vector< double > _tstart_min_v
std::vector< uint16_t > _view_v
std::vector< double > _tpeak_min_v
void cluster::ClusterMatchAlg::ClearEventInfo ( )

Method to clear event-wise information.

Definition at line 150 of file ClusterMatchAlg.cxx.

151  {
154  ClearTTreeInfo();
155  }
void ClearMatchInputInfo()
Method to clear input cluster information.
void ClearMatchOutputInfo()
Method to clear output matched cluster information.
void ClearTTreeInfo()
Method to clear TTree variables.
void cluster::ClusterMatchAlg::ClearMatchInputInfo ( )
protected

Method to clear input cluster information.

Definition at line 90 of file ClusterMatchAlg.cxx.

91  {
92  _ucluster_v.clear();
93  _vcluster_v.clear();
94  _wcluster_v.clear();
95 
96  _uhits_v.clear();
97  _vhits_v.clear();
98  _whits_v.clear();
99  }
std::vector< art::PtrVector< recob::Hit > > _vhits_v
Local Hit pointer vector container ... V-plane.
std::vector< art::PtrVector< recob::Hit > > _whits_v
Local Hit pointer vector container ... W-plane.
std::vector< cluster_match_info > _wcluster_v
Local cluster data container... W-plane.
std::vector< art::PtrVector< recob::Hit > > _uhits_v
Local Hit pointer vector container ... U-plane.
std::vector< cluster_match_info > _vcluster_v
Local cluster data container... V-plane.
std::vector< cluster_match_info > _ucluster_v
Local cluster data container... U-plane.
void cluster::ClusterMatchAlg::ClearMatchOutputInfo ( )
protected

Method to clear output matched cluster information.

Definition at line 102 of file ClusterMatchAlg.cxx.

103  {
104  _matched_uclusters_v.clear();
105  _matched_vclusters_v.clear();
106  _matched_wclusters_v.clear();
107  _matched_sps_v.clear();
108  }
std::vector< std::vector< recob::SpacePoint > > _matched_sps_v
Local SpacePoint vector container.
std::vector< unsigned int > _matched_uclusters_v
U plane matched clusters&#39; index.
std::vector< unsigned int > _matched_wclusters_v
W plane matched clusters&#39; index.
std::vector< unsigned int > _matched_vclusters_v
V plane matched clusters&#39; index.
void cluster::ClusterMatchAlg::ClearTTreeInfo ( )
protected

Method to clear TTree variables.

Definition at line 111 of file ClusterMatchAlg.cxx.

112  {
113 
114  _mc_E = 0;
115  _mc_Px = 0;
116  _mc_Py = 0;
117  _mc_Pz = 0;
118  _mc_Vx = 0;
119  _mc_Vy = 0;
120  _mc_Vz = 0;
121  _pdgid = 0;
122  _tot_u = 0;
123  _tot_v = 0;
124  _tot_w = 0;
125  _tot_pass_z = 0;
126  _tot_pass_t = 0;
127  _tot_pass_sps = 0;
128  _tot_pass_qsum = 0;
129  _qratio_v.clear();
130  _uv_tratio_v.clear();
131  _vw_tratio_v.clear();
132  _wu_tratio_v.clear();
133  _u_nhits_v.clear();
134  _v_nhits_v.clear();
135  _w_nhits_v.clear();
136  _nsps.clear();
137 
138  _view_v.clear();
139  _charge_v.clear();
140  _nhits_v.clear();
141  _tstart_min_v.clear();
142  _tstart_max_v.clear();
143  _tpeak_min_v.clear();
144  _tpeak_max_v.clear();
145  _tend_min_v.clear();
146  _tend_max_v.clear();
147  }
std::vector< uint16_t > _w_nhits_v
std::vector< double > _vw_tratio_v
std::vector< double > _wu_tratio_v
std::vector< double > _qratio_v
unsigned short _tot_pass_sps
std::vector< double > _tpeak_max_v
std::vector< double > _charge_v
std::vector< uint16_t > _nhits_v
std::vector< double > _tend_max_v
std::vector< double > _tend_min_v
std::vector< uint16_t > _nsps
std::vector< uint16_t > _u_nhits_v
std::vector< double > _tstart_max_v
std::vector< double > _tstart_min_v
std::vector< double > _uv_tratio_v
std::vector< uint16_t > _view_v
unsigned short _tot_pass_qsum
std::vector< uint16_t > _v_nhits_v
std::vector< double > _tpeak_min_v
void cluster::ClusterMatchAlg::FillHitInfo ( cluster_match_info ci,
art::PtrVector< recob::Hit > &  out_hit_v,
const std::vector< art::Ptr< recob::Hit >> &  in_hit_v 
)
protected

Definition at line 303 of file ClusterMatchAlg.cxx.

306  {
307 
308  out_hit_v.reserve(in_hit_v.size());
309 
310  double time_offset = 0;
311  if (ci.view == geo::kU)
312  time_offset = _time_offset_uplane;
313  else if (ci.view == geo::kV)
314  time_offset = _time_offset_vplane;
315  else if (ci.view == geo::kW)
316  time_offset = _time_offset_wplane;
317 
318  // Loop over hits in this cluster
319  for (auto const hit : in_hit_v) {
320 
321  unsigned int wire = hit->WireID().Wire;
322  double tstart = hit->PeakTimePlusRMS(-1.) - time_offset;
323  double tpeak = hit->PeakTime() - time_offset;
324  double tend = hit->PeakTimePlusRMS(+1.) - time_offset;
325 
326  ci.sum_charge += hit->Integral();
327 
328  ci.wire_max = (ci.wire_max < wire) ? wire : ci.wire_max;
329  ci.wire_min = (ci.wire_min > wire) ? wire : ci.wire_min;
330 
331  ci.start_time_max = (ci.start_time_max < tstart) ? tstart : ci.start_time_max;
332  ci.peak_time_max = (ci.peak_time_max < tpeak) ? tpeak : ci.peak_time_max;
333  ci.end_time_max = (ci.end_time_max < tend) ? tend : ci.end_time_max;
334 
335  ci.start_time_min = (ci.start_time_min > tstart) ? tstart : ci.start_time_min;
336  ci.peak_time_min = (ci.peak_time_min > tpeak) ? tpeak : ci.peak_time_min;
337  ci.end_time_min = (ci.end_time_min > tend) ? tend : ci.end_time_min;
338 
339  out_hit_v.push_back(hit);
340  }
341 
342  ci.nhits = in_hit_v.size();
343  }
void reserve(size_type n)
Definition: PtrVector.h:337
Planes which measure V.
Definition: geo_types.h:130
Planes which measure U.
Definition: geo_types.h:129
void push_back(Ptr< U > const &p)
Definition: PtrVector.h:435
Detector simulation of raw signals on wires.
Planes which measure W (third view for Bo, MicroBooNE, etc).
Definition: geo_types.h:131
void cluster::ClusterMatchAlg::FillMCInfo ( const art::Event evt)

Internal method to fill MCTruth information when available.

Definition at line 206 of file ClusterMatchAlg.cxx.

207  {
208  if (!_ModName_MCTruth.size()) return;
209 
210  std::vector<const simb::MCTruth*> mciArray;
211 
212  try {
213 
214  evt.getView(_ModName_MCTruth, mciArray);
215  }
216  catch (art::Exception const& e) {
217 
218  if (e.categoryCode() != art::errors::ProductNotFound) throw;
219  }
220 
221  for (size_t i = 0; i < mciArray.size(); ++i) {
222 
223  if (i == 1) {
224  mf::LogWarning("ClusterMatchAlg") << " Ignoring > 2nd MCTruth in MC generator...";
225  break;
226  }
227  const simb::MCTruth* mci_ptr(mciArray.at(i));
228 
229  for (size_t j = 0; j < (size_t)(mci_ptr->NParticles()); ++j) {
230 
231  if (j == 1) {
232  mf::LogWarning("ClusterMatchAlg") << " Ignoring > 2nd MCParticle in MC generator...";
233  break;
234  }
235 
236  const simb::MCParticle part(mci_ptr->GetParticle(j));
237 
238  _pdgid = part.PdgCode();
239  _mc_E = part.E();
240  _mc_Px = part.Px();
241  _mc_Py = part.Py();
242  _mc_Pz = part.Pz();
243  _mc_Vx = part.Vx();
244  _mc_Vy = part.Vy();
245  _mc_Vz = part.Vz();
246  }
247  }
248  }
const double e
std::string _ModName_MCTruth
MCTruth producer&#39;s module name.
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
std::size_t getView(std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
Definition: DataViewImpl.h:500
Event generator information.
Definition: MCTruth.h:32
std::vector< std::vector< unsigned int > > cluster::ClusterMatchAlg::GetMatchedClusters ( ) const

Method to retrieve matched cluster combinations. The format is [wire_plane][cluster_index].

Definition at line 503 of file ClusterMatchAlg.cxx.

504  {
505  std::vector<std::vector<unsigned int>> result;
506  result.push_back(_matched_uclusters_v);
507  result.push_back(_matched_vclusters_v);
508  result.push_back(_matched_wclusters_v);
509  return result;
510  }
static QCString result
std::vector< unsigned int > _matched_uclusters_v
U plane matched clusters&#39; index.
std::vector< unsigned int > _matched_wclusters_v
W plane matched clusters&#39; index.
std::vector< unsigned int > _matched_vclusters_v
V plane matched clusters&#39; index.
const std::vector<std::vector<recob::SpacePoint> >& cluster::ClusterMatchAlg::GetMatchedSpacePoints ( ) const
inline

Method to retrieve matched SpacePoint for each combinations.

Definition at line 132 of file ClusterMatchAlg.h.

133  {
134  return _matched_sps_v;
135  };
std::vector< std::vector< recob::SpacePoint > > _matched_sps_v
Local SpacePoint vector container.
bool cluster::ClusterMatchAlg::Match_RoughTime ( const cluster_match_info ci1,
const cluster_match_info ci2 
)
protected

Checks min/max hit timing among two clusters and make sure there is an overlap.

Definition at line 377 of file ClusterMatchAlg.cxx.

378  {
379  double time_overlay = std::min(ci1.end_time_max, ci2.end_time_max) -
380  std::max(ci1.start_time_min, ci2.start_time_min);
381 
382  double overlay_tratio =
383  time_overlay /
384  (ci1.end_time_max - ci1.start_time_min + ci2.end_time_max - ci2.start_time_min) * 2.;
385 
386  if ((ci1.view == geo::kU && ci2.view == geo::kV) ||
387  (ci1.view == geo::kV && ci2.view == geo::kU))
388  _uv_tratio_v.push_back(overlay_tratio);
389  else if ((ci1.view == geo::kV && ci2.view == geo::kW) ||
390  (ci1.view == geo::kW && ci2.view == geo::kV))
391  _vw_tratio_v.push_back(overlay_tratio);
392  else if ((ci1.view == geo::kW && ci2.view == geo::kU) ||
393  (ci1.view == geo::kU && ci2.view == geo::kW))
394  _wu_tratio_v.push_back(overlay_tratio);
395 
396  return (overlay_tratio > _overlay_tratio_cut);
397  }
std::vector< double > _vw_tratio_v
Planes which measure V.
Definition: geo_types.h:130
std::vector< double > _wu_tratio_v
Planes which measure U.
Definition: geo_types.h:129
static int max(int a, int b)
std::vector< double > _uv_tratio_v
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
Definition: statistics.h:55
Planes which measure W (third view for Bo, MicroBooNE, etc).
Definition: geo_types.h:131
bool cluster::ClusterMatchAlg::Match_RoughZ ( const cluster_match_info ci1,
const cluster_match_info ci2,
const geo::View_t  v1,
const geo::View_t  v2 
) const
protected

Match clusters based on min/max Z boundary information. It checks clusters' overlap along Z spatial coordinate based on 2 input cluster information.

Definition at line 363 of file ClusterMatchAlg.cxx.

367  {
369  double y, z_min, z_max;
370  y = z_min = z_max = -1;
371  geo_h->IntersectionPoint(ci1.wire_min, ci2.wire_min, v1, v2, 0, 0, y, z_min);
372  geo_h->IntersectionPoint(ci1.wire_max, ci2.wire_max, v1, v2, 0, 0, y, z_max);
373  return (z_max > z_min);
374  }
bool IntersectionPoint(geo::WireID const &wid1, geo::WireID const &wid2, double &y, double &z) const
Returns the intersection point of two wires.
bool cluster::ClusterMatchAlg::Match_SpacePoint ( detinfo::DetectorClocksData const &  clockData,
detinfo::DetectorPropertiesData const &  detProp,
const size_t  uindex,
const size_t  vindex,
const size_t  windex,
std::vector< recob::SpacePoint > &  sps_v 
)
protected

Cluster matching using space points. This can be slow as we run SpacePointFinder algorithm per cluster pair. Three clusters (U, V, W) are considerd to "match" if there found N spacepoints using hits in them and N > min_nsps where "min_nsps" is the cut value you can set in SetNSpacePointCut() method.

Definition at line 411 of file ClusterMatchAlg.cxx.

417  {
418  bool use_wplane = _tot_planes > 2;
419 
420  if (uindex >= _ucluster_v.size() || vindex >= _vcluster_v.size() ||
421  (use_wplane && (windex >= _wcluster_v.size()))) {
422 
423  mf::LogError("ClusterMatchAlg")
424  << std::endl
425  << Form(
426  "Requested to cluster-index (U,V,W) = (%zu,%zu,%zu) where max-length is (%zu,%zu,%zu)",
427  uindex,
428  vindex,
429  windex,
430  _ucluster_v.size(),
431  _vcluster_v.size(),
432  _wcluster_v.size())
433  << std::endl;
434  return false;
435  }
436 
437  // Define a time range in which hits are used for spacepoint finding ... here "peak time" is the relevant one
438  double trange_min =
439  std::min(_ucluster_v.at(uindex).peak_time_min, _vcluster_v.at(vindex).peak_time_min);
440  if (use_wplane) trange_min = std::min(trange_min, _wcluster_v.at(windex).peak_time_min);
441 
442  double trange_max =
443  std::max(_ucluster_v.at(uindex).peak_time_max, _vcluster_v.at(vindex).peak_time_max);
444  if (use_wplane) trange_max = std::max(trange_max, _wcluster_v.at(windex).peak_time_max);
445 
446  // Space-point algorithm applies additional dT
447  trange_min -= _sps_algo->maxDT();
448  trange_max += _sps_algo->maxDT();
449 
450  // Make PtrVector<recob::Hit> for relevant Hits
451  art::PtrVector<recob::Hit> hit_group;
452  size_t max_size = _uhits_v.at(uindex).size() + _vhits_v.at(vindex).size();
453  if (use_wplane) max_size += _whits_v.at(windex).size();
454  hit_group.reserve(max_size);
455  // Loop over hits in U-plane
456  for (auto const hit : _uhits_v.at(uindex)) {
457  if (hit->PeakTime() < trange_min) continue;
458  if (hit->PeakTime() > trange_max) continue;
459  hit_group.push_back(hit);
460  }
461  // Check if any hit found in this plane
462  size_t u_nhits = hit_group.size();
463  if (!u_nhits && !_debug_mode) return false;
464  // Loop over hits in V-plane
465  for (auto const hit : _vhits_v.at(vindex)) {
466  if (hit->PeakTime() < trange_min) continue;
467  if (hit->PeakTime() > trange_max) continue;
468  hit_group.push_back(hit);
469  }
470  // Check if any hit found in this plane
471  size_t v_nhits = hit_group.size() - u_nhits;
472  if (!(v_nhits) && !_debug_mode) return false;
473 
474  // Loop over hits in W-plane
475  if (use_wplane) {
476  for (auto const hit : _whits_v.at(windex)) {
477  if (hit->PeakTime() < trange_min) continue;
478  if (hit->PeakTime() > trange_max) continue;
479  hit_group.push_back(hit);
480  }
481  }
482  // Check if any hit found in this plane
483  size_t w_nhits = hit_group.size() - u_nhits - v_nhits;
484  if (!(w_nhits) && use_wplane && !_debug_mode) return false;
485 
486  // Run SpacePoint finder algo
487  if (u_nhits && v_nhits && (!use_wplane || (w_nhits && use_wplane))) {
489  _sps_algo->makeSpacePoints(clock_data, det_prop, hit_group, sps_v);
490  }
491 
492  size_t nsps = sps_v.size();
493  _u_nhits_v.push_back(u_nhits);
494  _v_nhits_v.push_back(v_nhits);
495  if (use_wplane) _w_nhits_v.push_back(w_nhits);
496  _nsps.push_back(nsps);
497 
498  if (nsps < _num_sps_cut) return false;
499  return true;
500  }
std::vector< uint16_t > _w_nhits_v
void reserve(size_type n)
Definition: PtrVector.h:337
trkf::SpacePointAlg * _sps_algo
SpacePointFinder algorithm pointer.
std::vector< art::PtrVector< recob::Hit > > _vhits_v
Local Hit pointer vector container ... V-plane.
std::vector< art::PtrVector< recob::Hit > > _whits_v
Local Hit pointer vector container ... W-plane.
std::vector< cluster_match_info > _wcluster_v
Local cluster data container... W-plane.
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
std::vector< uint16_t > _nsps
void push_back(Ptr< U > const &p)
Definition: PtrVector.h:435
void makeSpacePoints(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const art::PtrVector< recob::Hit > &hits, std::vector< recob::SpacePoint > &spts) const
std::vector< art::PtrVector< recob::Hit > > _uhits_v
Local Hit pointer vector container ... U-plane.
double maxDT() const noexcept
Definition: SpacePointAlg.h:96
std::vector< uint16_t > _u_nhits_v
static int max(int a, int b)
std::vector< cluster_match_info > _vcluster_v
Local cluster data container... V-plane.
bool _debug_mode
Boolean to enable debug mode (call all enabled matching methods)
size_type size() const
Definition: PtrVector.h:302
Detector simulation of raw signals on wires.
void clearHitMap() const
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
Definition: statistics.h:55
std::vector< uint16_t > _v_nhits_v
QTextStream & endl(QTextStream &s)
std::vector< cluster_match_info > _ucluster_v
Local cluster data container... U-plane.
bool cluster::ClusterMatchAlg::Match_SumCharge ( const cluster_match_info uc,
const cluster_match_info vc 
)
protected

Checks min/max hit timing among three clusters and make sure there is an overlap. If _overlay_tratio_cut is set, then overlapped-time / cluster-timespan fraction is compared to the set cut value to claim a match. Checks the ratio of two clusters' summed charge. If the ratio is within 1 +/- set cut value, two clusters are considered to match.

Definition at line 400 of file ClusterMatchAlg.cxx.

401  {
402  double qratio = (uc.sum_charge) / (vc.sum_charge);
403 
404  // For quality check log
405  _qratio_v.push_back(qratio);
406 
407  return ((1 - _qratio_cut) < qratio && (qratio) < (1 + _qratio_cut));
408  }
std::vector< double > _qratio_v
void cluster::ClusterMatchAlg::MatchThreePlanes ( detinfo::DetectorClocksData const &  clock_data,
detinfo::DetectorPropertiesData const &  det_prop 
)

Method to run matching algorithms for three planes. Event info must be provided prior to this function call through FillEventInfo() function call. If the function is called more than once w/o supplying the new art::Event object, it does not perform any new matching unless a user explicitly calls ClearEventInfo() and then fill event info again though FillEventInfo().

Definition at line 622 of file ClusterMatchAlg.cxx.

624  {
625  std::ostringstream msg;
626  msg << Form("Received (U,V,W) = (%zu,%zu,%zu) clusters...",
627  _uhits_v.size(),
628  _vhits_v.size(),
629  _whits_v.size())
630  << std::endl;
631  _tot_u = _ucluster_v.size();
632  _tot_v = _vcluster_v.size();
633  _tot_w = _wcluster_v.size();
634 
635  if (!(_tot_u + _tot_v + _tot_w)) {
636 
637  mf::LogError(__PRETTY_FUNCTION__)
638  << "No input cluster info found! Aborting the function call...";
639 
640  return;
641  }
642 
643  // Clear match information
644  PrepareTTree();
646 
647  bool overlay_2d = true;
648  bool overlay_3d = true;
649  // Loop over all possible u-v-w cluster combination
650  for (size_t uci_index = 0; uci_index < _ucluster_v.size(); ++uci_index) {
651 
652  for (size_t vci_index = 0; vci_index < _vcluster_v.size(); ++vci_index) {
653 
654  // Apply cuts that can be done with U&V planes here
655  overlay_2d = true;
656 
657  // Rough z-position overlay cut
658  if (_match_methods[kRoughZ]) {
659 
660  if (Match_RoughZ(_ucluster_v.at(uci_index), _vcluster_v.at(vci_index), geo::kU, geo::kV))
661  _tot_pass_z++;
662  else if (!_debug_mode)
663  continue;
664  else
665  overlay_2d = false;
666  }
667 
668  // Sum charge cut
669  if (_match_methods[kSumCharge]) {
670 
671  if (Match_SumCharge(_ucluster_v.at(uci_index), _vcluster_v.at(vci_index)))
672  _tot_pass_qsum++;
673  else if (!_debug_mode)
674  continue;
675  else
676  overlay_2d = false;
677  }
678 
679  for (size_t wci_index = 0; wci_index < _wcluster_v.size(); ++wci_index) {
680 
681  overlay_3d = overlay_2d;
682  // Apply cuts that requires 3 planes here
683 
684  // Rough time overlap cut
685  if (_match_methods[kRoughT]) {
686 
687  bool rough_time_match =
688  Match_RoughTime(_ucluster_v.at(uci_index), _vcluster_v.at(vci_index));
689  if (!_debug_mode && !rough_time_match) continue;
690 
691  rough_time_match =
692  (Match_RoughTime(_vcluster_v.at(vci_index), _wcluster_v.at(wci_index)) &&
693  rough_time_match);
694  if (!_debug_mode && !rough_time_match) continue;
695 
696  rough_time_match =
697  (Match_RoughTime(_wcluster_v.at(wci_index), _ucluster_v.at(uci_index)) &&
698  rough_time_match);
699 
700  overlay_3d = overlay_3d && rough_time_match;
701  if (rough_time_match)
702  _tot_pass_t++;
703  else if (!_debug_mode)
704  continue;
705  }
706 
707  // SpacePoint cut
708  std::vector<recob::SpacePoint> sps_v;
710 
711  if (Match_SpacePoint(clock_data, det_prop, uci_index, vci_index, wci_index, sps_v))
712  _tot_pass_sps++;
713  else if (!_debug_mode)
714  continue;
715  else
716  overlay_3d = false;
717  }
718 
719  if (overlay_3d) {
720  _matched_uclusters_v.push_back((unsigned int)(_ucluster_v[uci_index].cluster_index));
721  _matched_vclusters_v.push_back((unsigned int)(_vcluster_v[vci_index].cluster_index));
722  _matched_wclusters_v.push_back((unsigned int)(_wcluster_v[wci_index].cluster_index));
723  if (_store_sps) _matched_sps_v.push_back(sps_v);
724  }
725  } // end of ... _wcluster_v loop
726  } // end of ... _vcluster_v loop
727  } // end of ... _ucluster_v loop
728 
729  // Report
730  msg << std::endl
731  << Form("Found %zu matched cluster pairs...", _matched_uclusters_v.size()) << std::endl;
732  for (size_t i = 0; i < _matched_uclusters_v.size(); ++i) {
733 
734  if (i == 0) msg << "Listing matched clusters (U,V,W)..." << std::endl;
735 
736  msg << Form("Pair %-2zu: (%-3d, %-3d, %-3d)",
737  i,
741  << std::endl;
742  }
743  msg << std::endl;
744  mf::LogWarning("ClusterMatchAlg") << msg.str();
745 
746  if (_match_tree) _match_tree->Fill();
747  if (_cluster_tree) _cluster_tree->Fill();
748 
750  ClearTTreeInfo();
751  }
Use summed charge comparison ... see Match_SumCharge() description.
void ClearMatchInputInfo()
Method to clear input cluster information.
std::vector< art::PtrVector< recob::Hit > > _vhits_v
Local Hit pointer vector container ... V-plane.
bool Match_RoughTime(const cluster_match_info &ci1, const cluster_match_info &ci2)
Checks min/max hit timing among two clusters and make sure there is an overlap.
void msg(const char *fmt,...)
Definition: message.cpp:107
std::vector< art::PtrVector< recob::Hit > > _whits_v
Local Hit pointer vector container ... W-plane.
Planes which measure V.
Definition: geo_types.h:130
bool Match_SpacePoint(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const size_t uindex, const size_t vindex, const size_t windex, std::vector< recob::SpacePoint > &sps_v)
void ClearMatchOutputInfo()
Method to clear output matched cluster information.
bool _store_sps
Boolean to enable storage of SpacePoint vector.
bool Match_RoughZ(const cluster_match_info &ci1, const cluster_match_info &ci2, const geo::View_t v1, const geo::View_t v2) const
Use SpacePoint finder algorithm ... see Match_SpacePoint() description.
std::vector< cluster_match_info > _wcluster_v
Local cluster data container... W-plane.
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
unsigned short _tot_pass_sps
Planes which measure U.
Definition: geo_types.h:129
void PrepareTTree()
Internal method to create output TTree for quality checking of the algorithm.
Rough-Time comparison method ... see Match_RoughTime() description.
std::vector< art::PtrVector< recob::Hit > > _uhits_v
Local Hit pointer vector container ... U-plane.
std::vector< cluster_match_info > _vcluster_v
Local cluster data container... V-plane.
bool _debug_mode
Boolean to enable debug mode (call all enabled matching methods)
void ClearTTreeInfo()
Method to clear TTree variables.
bool Match_SumCharge(const cluster_match_info &uc, const cluster_match_info &vc)
unsigned short _tot_pass_qsum
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
std::vector< std::vector< recob::SpacePoint > > _matched_sps_v
Local SpacePoint vector container.
std::vector< unsigned int > _matched_uclusters_v
U plane matched clusters&#39; index.
bool _match_methods[kMATCH_METHOD_MAX]
Boolean list for enabled algorithms.
std::vector< unsigned int > _matched_wclusters_v
W plane matched clusters&#39; index.
std::vector< unsigned int > _matched_vclusters_v
V plane matched clusters&#39; index.
Rough-Z comparison method ... see Match_RoughZ() description.
QTextStream & endl(QTextStream &s)
std::vector< cluster_match_info > _ucluster_v
Local cluster data container... U-plane.
void cluster::ClusterMatchAlg::MatchTwoPlanes ( detinfo::DetectorClocksData const &  clock_data,
detinfo::DetectorPropertiesData const &  det_prop 
)

Two plane version of cluster matching method.

Clear TTree variables

Definition at line 513 of file ClusterMatchAlg.cxx.

515  {
516  std::ostringstream msg;
517  msg << Form("Received (U,V,W) = (%zu,%zu,%zu) clusters...",
518  _uhits_v.size(),
519  _vhits_v.size(),
520  _whits_v.size())
521  << std::endl;
522  _tot_u = _ucluster_v.size();
523  _tot_v = _vcluster_v.size();
524  _tot_w = _wcluster_v.size();
525 
526  if (!(_tot_u + _tot_v + _tot_w)) {
527 
528  mf::LogError(__PRETTY_FUNCTION__)
529  << "No input cluster info found! Aborting the function call...";
530 
531  return;
532  }
533 
534  // Initialization
535  PrepareTTree();
537 
538  bool overlay_2d = false;
539  for (size_t uci_index = 0; uci_index < _ucluster_v.size(); ++uci_index) {
540 
541  for (size_t vci_index = 0; vci_index < _vcluster_v.size(); ++vci_index) {
542 
543  overlay_2d = true;
544 
545  // Apply cuts
546  // Rough z-position overlay cut
547  if (_match_methods[kRoughZ]) {
548 
549  if (Match_RoughZ(_ucluster_v.at(uci_index), _vcluster_v.at(vci_index), geo::kU, geo::kV))
550  _tot_pass_z++;
551  else if (!_debug_mode)
552  continue;
553  else
554  overlay_2d = false;
555  }
556 
557  // Sum charge cut
558  if (_match_methods[kSumCharge]) {
559 
560  if (Match_SumCharge(_ucluster_v.at(uci_index), _vcluster_v.at(vci_index)))
561  _tot_pass_qsum++;
562  else if (!_debug_mode)
563  continue;
564  else
565  overlay_2d = false;
566  }
567 
568  // Rough time overlap cut
569  if (_match_methods[kRoughT]) {
570 
571  if (Match_RoughTime(_ucluster_v.at(uci_index), _vcluster_v.at(vci_index)))
572  _tot_pass_t++;
573  else if (!_debug_mode)
574  continue;
575  else
576  overlay_2d = false;
577  }
578 
579  // SpacePoint cut
580  std::vector<recob::SpacePoint> sps_v;
582 
583  if (Match_SpacePoint(clockData, detProp, uci_index, vci_index, 0, sps_v))
584  _tot_pass_sps++;
585  else if (!_debug_mode)
586  continue;
587  else
588  overlay_2d = false;
589  }
590 
591  if (overlay_2d) {
592  _matched_uclusters_v.push_back((unsigned int)(_ucluster_v[uci_index].cluster_index));
593  _matched_vclusters_v.push_back((unsigned int)(_vcluster_v[vci_index].cluster_index));
594  if (_store_sps) _matched_sps_v.push_back(sps_v);
595  }
596  } // end of ... _vcluster_v loop
597  } // end of ... _ucluster_v loop
598 
599  // Report
600  msg << std::endl
601  << Form("Found %zu matched cluster pairs...", _matched_uclusters_v.size()) << std::endl;
602  for (size_t i = 0; i < _matched_uclusters_v.size(); ++i) {
603 
604  if (i == 0) msg << "Listing matched clusters (U,V)..." << std::endl;
605 
606  msg << Form("Pair %-2zu: (%-3d, %-3d)", i, _matched_uclusters_v[i], _matched_vclusters_v[i])
607  << std::endl;
608  }
609  msg << std::endl;
610  mf::LogWarning("ClusterMatchAlg") << msg.str();
611 
612  if (_match_tree) _match_tree->Fill();
613  if (_cluster_tree) _cluster_tree->Fill();
614 
615  // Clear input event data holders
617  /// Clear TTree variables
618  ClearTTreeInfo();
619  }
Use summed charge comparison ... see Match_SumCharge() description.
void ClearMatchInputInfo()
Method to clear input cluster information.
std::vector< art::PtrVector< recob::Hit > > _vhits_v
Local Hit pointer vector container ... V-plane.
bool Match_RoughTime(const cluster_match_info &ci1, const cluster_match_info &ci2)
Checks min/max hit timing among two clusters and make sure there is an overlap.
void msg(const char *fmt,...)
Definition: message.cpp:107
std::vector< art::PtrVector< recob::Hit > > _whits_v
Local Hit pointer vector container ... W-plane.
Planes which measure V.
Definition: geo_types.h:130
bool Match_SpacePoint(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const size_t uindex, const size_t vindex, const size_t windex, std::vector< recob::SpacePoint > &sps_v)
void ClearMatchOutputInfo()
Method to clear output matched cluster information.
bool _store_sps
Boolean to enable storage of SpacePoint vector.
bool Match_RoughZ(const cluster_match_info &ci1, const cluster_match_info &ci2, const geo::View_t v1, const geo::View_t v2) const
Use SpacePoint finder algorithm ... see Match_SpacePoint() description.
std::vector< cluster_match_info > _wcluster_v
Local cluster data container... W-plane.
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
unsigned short _tot_pass_sps
Planes which measure U.
Definition: geo_types.h:129
void PrepareTTree()
Internal method to create output TTree for quality checking of the algorithm.
Rough-Time comparison method ... see Match_RoughTime() description.
std::vector< art::PtrVector< recob::Hit > > _uhits_v
Local Hit pointer vector container ... U-plane.
std::vector< cluster_match_info > _vcluster_v
Local cluster data container... V-plane.
bool _debug_mode
Boolean to enable debug mode (call all enabled matching methods)
void ClearTTreeInfo()
Method to clear TTree variables.
bool Match_SumCharge(const cluster_match_info &uc, const cluster_match_info &vc)
unsigned short _tot_pass_qsum
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
std::vector< std::vector< recob::SpacePoint > > _matched_sps_v
Local SpacePoint vector container.
std::vector< unsigned int > _matched_uclusters_v
U plane matched clusters&#39; index.
bool _match_methods[kMATCH_METHOD_MAX]
Boolean list for enabled algorithms.
std::vector< unsigned int > _matched_vclusters_v
V plane matched clusters&#39; index.
Rough-Z comparison method ... see Match_RoughZ() description.
QTextStream & endl(QTextStream &s)
std::vector< cluster_match_info > _ucluster_v
Local cluster data container... U-plane.
void cluster::ClusterMatchAlg::PrepareDetParams ( detinfo::DetectorPropertiesData const &  clockData)
protected

Internal method, called only once, to fill detector-wise information.

Definition at line 251 of file ClusterMatchAlg.cxx.

252  {
253  if (!_det_params_prepared) {
254  // Total number of planes
256  _tot_planes = geo->Nplanes();
257 
258  // Ask DetectorPrperties about time-offset among different wire planes ... used to correct timing
259  // difference among different wire planes in the following loop.
260  _time_offset_uplane = det_prop.GetXTicksOffset(geo::kU, 0, 0);
261  _time_offset_vplane = det_prop.GetXTicksOffset(geo::kV, 0, 0);
263  if (_tot_planes > 2) _time_offset_wplane = det_prop.GetXTicksOffset(geo::kW, 0, 0);
264  _det_params_prepared = true;
265  }
266  }
Planes which measure V.
Definition: geo_types.h:130
Planes which measure U.
Definition: geo_types.h:129
unsigned int Nplanes(unsigned int tpc=0, unsigned int cstat=0) const
Returns the total number of wire planes in the specified TPC.
Planes which measure W (third view for Bo, MicroBooNE, etc).
Definition: geo_types.h:131
LArSoft geometry interface.
Definition: ChannelGeo.h:16
void cluster::ClusterMatchAlg::PrepareTTree ( )
protected

Internal method to create output TTree for quality checking of the algorithm.

Definition at line 158 of file ClusterMatchAlg.cxx.

159  {
160  if (!_match_tree) {
162  _match_tree = fileService->make<TTree>("match_tree", "");
163  _match_tree->Branch("mc_E", &_mc_E, "mc_E/D");
164  _match_tree->Branch("mc_Px", &_mc_Px, "mc_Px/D");
165  _match_tree->Branch("mc_Py", &_mc_Py, "mc_Py/D");
166  _match_tree->Branch("mc_Pz", &_mc_Pz, "mc_Pz/D");
167  _match_tree->Branch("mc_Vx", &_mc_Vx, "mc_Vx/D");
168  _match_tree->Branch("mc_Vy", &_mc_Vy, "mc_Vy/D");
169  _match_tree->Branch("mc_Vz", &_mc_Vz, "mc_Vz/D");
170 
171  _match_tree->Branch("pdgid", &_pdgid, "pdgid/I");
172  _match_tree->Branch("tot_u", &_tot_u, "tot_u/s");
173  _match_tree->Branch("tot_v", &_tot_v, "tot_v/s");
174  _match_tree->Branch("tot_w", &_tot_w, "tot_w/s");
175  _match_tree->Branch("tot_pass_t", &_tot_pass_t, "tot_pass_t/s");
176  _match_tree->Branch("tot_pass_z", &_tot_pass_z, "tot_pass_z/s");
177  _match_tree->Branch("tot_pass_sps", &_tot_pass_sps, "tot_pass_sps/s");
178  _match_tree->Branch("tot_pass_qsum", &_tot_pass_qsum, "tot_pass_qsum/s");
179 
180  _match_tree->Branch("uv_tratio_v", "std::vector<double>", &_uv_tratio_v);
181  _match_tree->Branch("vw_tratio_v", "std::vector<double>", &_vw_tratio_v);
182  _match_tree->Branch("wu_tratio_v", "std::vector<double>", &_wu_tratio_v);
183 
184  _match_tree->Branch("qratio_v", "std::vector<double>", &_qratio_v);
185  _match_tree->Branch("u_nhits_v", "std::vector<UShort_t>", &_u_nhits_v);
186  _match_tree->Branch("v_nhits_v", "std::vector<UShort_t>", &_v_nhits_v);
187  _match_tree->Branch("w_nhits_v", "std::vector<UShort_t>", &_w_nhits_v);
188  _match_tree->Branch("nsps", "std::vector<UShort_t>", &_nsps);
189  }
192  _cluster_tree = fileService->make<TTree>("cluster_tree", "");
193  _cluster_tree->Branch("view_v", "std::vector<uint16_t>", &_view_v);
194  _cluster_tree->Branch("charge_v", "std::vector<double>", &_charge_v);
195  _cluster_tree->Branch("nhits_v", "std::vector<uint16_t>", &_nhits_v);
196  _cluster_tree->Branch("tstart_min_v", "std::vector<double>", &_tstart_min_v);
197  _cluster_tree->Branch("tstart_max_v", "std::vector<double>", &_tstart_max_v);
198  _cluster_tree->Branch("tpeak_min_v", "std::vector<double>", &_tpeak_min_v);
199  _cluster_tree->Branch("tpeak_max_v", "std::vector<double>", &_tpeak_max_v);
200  _cluster_tree->Branch("tend_min_v", "std::vector<double>", &_tend_min_v);
201  _cluster_tree->Branch("tend_max_v", "std::vector<double>", &_tend_max_v);
202  }
203  }
std::vector< uint16_t > _w_nhits_v
std::vector< double > _vw_tratio_v
std::vector< double > _wu_tratio_v
std::vector< double > _qratio_v
unsigned short _tot_pass_sps
std::vector< double > _tpeak_max_v
std::vector< double > _charge_v
std::vector< uint16_t > _nhits_v
std::vector< double > _tend_max_v
std::vector< double > _tend_min_v
std::vector< uint16_t > _nsps
std::vector< uint16_t > _u_nhits_v
std::vector< double > _tstart_max_v
std::vector< double > _tstart_min_v
std::vector< double > _uv_tratio_v
std::vector< uint16_t > _view_v
unsigned short _tot_pass_qsum
std::vector< uint16_t > _v_nhits_v
std::vector< double > _tpeak_min_v
void cluster::ClusterMatchAlg::ReportConfig ( ) const

Method to report the current configuration.

Definition at line 66 of file ClusterMatchAlg.cxx.

67  {
68  std::ostringstream msg;
69  msg << std::endl
70  << " ClusterMatchAlg Configuration: " << std::endl
71  << "---------------------------------------------" << std::endl;
72  msg << " Debug Mode ... " << (_debug_mode ? "enabled!" : "disabled!") << std::endl;
73  msg << " RoughZ ....... " << (_match_methods[kRoughZ] ? "enabled!" : "disabled!") << std::endl;
74  msg << " RoughT ....... " << (_match_methods[kRoughT] ? "enabled!" : "disabled!") << std::endl;
75  msg << " SpacePoint ... " << (_match_methods[kSpacePoint] ? "enabled!" : "disabled!")
76  << std::endl;
77  msg << " SumCharge .... " << (_match_methods[kSumCharge] ? "enabled!" : "disabled!")
78  << std::endl;
79  msg << std::endl;
80  msg << " Overlay-Time Fraction Cut : " << _overlay_tratio_cut << std::endl
81  << " Charge-Ratio Diff. Cut : " << _qratio_cut << std::endl
82  << " Minimum # of SpacePoint : " << _num_sps_cut << std::endl
83  << std::endl;
84  msg << "---------------------------------------------" << std::endl;
85 
86  mf::LogWarning("ClusterMatchAlg") << msg.str();
87  }
Use summed charge comparison ... see Match_SumCharge() description.
void msg(const char *fmt,...)
Definition: message.cpp:107
Use SpacePoint finder algorithm ... see Match_SpacePoint() description.
Rough-Time comparison method ... see Match_RoughTime() description.
bool _debug_mode
Boolean to enable debug mode (call all enabled matching methods)
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
bool _match_methods[kMATCH_METHOD_MAX]
Boolean list for enabled algorithms.
Rough-Z comparison method ... see Match_RoughZ() description.
QTextStream & endl(QTextStream &s)
void cluster::ClusterMatchAlg::SetMCTruthModName ( std::string  name)
inline

Method to specify input MCTruth's module name (optional)

Definition at line 100 of file ClusterMatchAlg.h.

101  {
103  }
static QCString name
Definition: declinfo.cpp:673
std::string _ModName_MCTruth
MCTruth producer&#39;s module name.
bool cluster::ClusterMatchAlg::StoreSpacePoints ( ) const
inline

Method to check if it is configured to store SpacePoint.

Definition at line 139 of file ClusterMatchAlg.h.

140  {
141  return _store_sps;
142  }
bool _store_sps
Boolean to enable storage of SpacePoint vector.

Member Data Documentation

std::vector<double> cluster::ClusterMatchAlg::_charge_v
protected

Definition at line 289 of file ClusterMatchAlg.h.

TTree* cluster::ClusterMatchAlg::_cluster_tree
protected

Definition at line 287 of file ClusterMatchAlg.h.

bool cluster::ClusterMatchAlg::_debug_mode
protected

Boolean to enable debug mode (call all enabled matching methods)

Definition at line 232 of file ClusterMatchAlg.h.

bool cluster::ClusterMatchAlg::_det_params_prepared
protected

Definition at line 231 of file ClusterMatchAlg.h.

bool cluster::ClusterMatchAlg::_match_methods[kMATCH_METHOD_MAX]
protected

Boolean list for enabled algorithms.

Definition at line 230 of file ClusterMatchAlg.h.

TTree* cluster::ClusterMatchAlg::_match_tree
protected

Definition at line 257 of file ClusterMatchAlg.h.

std::vector<std::vector<recob::SpacePoint> > cluster::ClusterMatchAlg::_matched_sps_v
protected

Local SpacePoint vector container.

Definition at line 225 of file ClusterMatchAlg.h.

std::vector<unsigned int> cluster::ClusterMatchAlg::_matched_uclusters_v
protected

U plane matched clusters' index.

Definition at line 221 of file ClusterMatchAlg.h.

std::vector<unsigned int> cluster::ClusterMatchAlg::_matched_vclusters_v
protected

V plane matched clusters' index.

Definition at line 222 of file ClusterMatchAlg.h.

std::vector<unsigned int> cluster::ClusterMatchAlg::_matched_wclusters_v
protected

W plane matched clusters' index.

Definition at line 223 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_mc_E
protected

Definition at line 259 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_mc_Px
protected

Definition at line 260 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_mc_Py
protected

Definition at line 261 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_mc_Pz
protected

Definition at line 262 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_mc_Vx
protected

Definition at line 263 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_mc_Vy
protected

Definition at line 264 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_mc_Vz
protected

Definition at line 265 of file ClusterMatchAlg.h.

std::string cluster::ClusterMatchAlg::_ModName_MCTruth
protected

MCTruth producer's module name.

Definition at line 239 of file ClusterMatchAlg.h.

std::vector<uint16_t> cluster::ClusterMatchAlg::_nhits_v
protected

Definition at line 290 of file ClusterMatchAlg.h.

std::vector<uint16_t> cluster::ClusterMatchAlg::_nsps
protected

Definition at line 279 of file ClusterMatchAlg.h.

size_t cluster::ClusterMatchAlg::_num_sps_cut
protected

Number of SpacePoint used to cut in Match_SpacePoint method

Definition at line 211 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_overlay_tratio_cut
protected

Minimum overlayed time fraction among two clusters used in Match_RoughTime method

Definition at line 213 of file ClusterMatchAlg.h.

int cluster::ClusterMatchAlg::_pdgid
protected

Definition at line 266 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_qratio_cut
protected

Maximum difference among clusters' charge sum used in Match_SumCharge method

Definition at line 215 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_qratio_v
protected

Definition at line 280 of file ClusterMatchAlg.h.

bool cluster::ClusterMatchAlg::_save_cluster_info
protected

Definition at line 286 of file ClusterMatchAlg.h.

trkf::SpacePointAlg* cluster::ClusterMatchAlg::_sps_algo
protected

SpacePointFinder algorithm pointer.

Definition at line 252 of file ClusterMatchAlg.h.

bool cluster::ClusterMatchAlg::_store_sps
protected

Boolean to enable storage of SpacePoint vector.

Definition at line 233 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_tend_max_v
protected

Definition at line 296 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_tend_min_v
protected

Definition at line 295 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_time_offset_uplane
protected

Definition at line 235 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_time_offset_vplane
protected

Definition at line 236 of file ClusterMatchAlg.h.

double cluster::ClusterMatchAlg::_time_offset_wplane
protected

Definition at line 237 of file ClusterMatchAlg.h.

unsigned short cluster::ClusterMatchAlg::_tot_pass_qsum
protected

Definition at line 270 of file ClusterMatchAlg.h.

unsigned short cluster::ClusterMatchAlg::_tot_pass_sps
protected

Definition at line 273 of file ClusterMatchAlg.h.

unsigned short cluster::ClusterMatchAlg::_tot_pass_t
protected

Definition at line 271 of file ClusterMatchAlg.h.

unsigned short cluster::ClusterMatchAlg::_tot_pass_z
protected

Definition at line 272 of file ClusterMatchAlg.h.

unsigned int cluster::ClusterMatchAlg::_tot_planes
protected

Definition at line 234 of file ClusterMatchAlg.h.

unsigned short cluster::ClusterMatchAlg::_tot_u
protected

Definition at line 267 of file ClusterMatchAlg.h.

unsigned short cluster::ClusterMatchAlg::_tot_v
protected

Definition at line 268 of file ClusterMatchAlg.h.

unsigned short cluster::ClusterMatchAlg::_tot_w
protected

Definition at line 269 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_tpeak_max_v
protected

Definition at line 294 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_tpeak_min_v
protected

Definition at line 293 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_tstart_max_v
protected

Definition at line 292 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_tstart_min_v
protected

Definition at line 291 of file ClusterMatchAlg.h.

std::vector<uint16_t> cluster::ClusterMatchAlg::_u_nhits_v
protected

Definition at line 276 of file ClusterMatchAlg.h.

std::vector<cluster_match_info> cluster::ClusterMatchAlg::_ucluster_v
protected

Local cluster data container... U-plane.

Definition at line 248 of file ClusterMatchAlg.h.

std::vector<art::PtrVector<recob::Hit> > cluster::ClusterMatchAlg::_uhits_v
protected

Local Hit pointer vector container ... U-plane.

Definition at line 242 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_uv_tratio_v
protected

Definition at line 281 of file ClusterMatchAlg.h.

std::vector<uint16_t> cluster::ClusterMatchAlg::_v_nhits_v
protected

Definition at line 277 of file ClusterMatchAlg.h.

std::vector<cluster_match_info> cluster::ClusterMatchAlg::_vcluster_v
protected

Local cluster data container... V-plane.

Definition at line 249 of file ClusterMatchAlg.h.

std::vector<art::PtrVector<recob::Hit> > cluster::ClusterMatchAlg::_vhits_v
protected

Local Hit pointer vector container ... V-plane.

Definition at line 244 of file ClusterMatchAlg.h.

std::vector<uint16_t> cluster::ClusterMatchAlg::_view_v
protected

Definition at line 288 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_vw_tratio_v
protected

Definition at line 282 of file ClusterMatchAlg.h.

std::vector<uint16_t> cluster::ClusterMatchAlg::_w_nhits_v
protected

Definition at line 278 of file ClusterMatchAlg.h.

std::vector<cluster_match_info> cluster::ClusterMatchAlg::_wcluster_v
protected

Local cluster data container... W-plane.

Definition at line 250 of file ClusterMatchAlg.h.

std::vector<art::PtrVector<recob::Hit> > cluster::ClusterMatchAlg::_whits_v
protected

Local Hit pointer vector container ... W-plane.

Definition at line 246 of file ClusterMatchAlg.h.

std::vector<double> cluster::ClusterMatchAlg::_wu_tratio_v
protected

Definition at line 283 of file ClusterMatchAlg.h.


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