ElectronNeutrinoSelection
 All Classes Functions Variables Groups
EnergyHelper.h
1 
23 #ifndef ENERGYHELPER_H
24 #define ENERGYHELPER_H
25 
26 #include "HelperBase.h"
27 
28 #include "GeometryHelper.h"
29 
30 #include "lardataobj/AnalysisBase/Calorimetry.h"
31 #include "lardataobj/RecoBase/Cluster.h"
32 #include "lardataobj/RecoBase/Hit.h"
33 #include "lardataobj/RecoBase/PFParticle.h"
34 #include "lardataobj/RecoBase/Shower.h"
35 #include "lardataobj/RecoBase/Track.h"
36 
37 #include "canvas/Persistency/Common/FindManyP.h"
38 #include "canvas/Persistency/Common/FindOneP.h"
39 #include "lardata/DetectorInfoServices/DetectorPropertiesService.h"
40 #include "TPrincipal.h"
41 #include "uboone/UBXSec/Algorithms/TrackQuality.h"
42 #include "uboone/Database/TPCEnergyCalib/TPCEnergyCalibProvider.h"
43 #include "uboone/Database/TPCEnergyCalib/TPCEnergyCalibService.h"
44 #include "lardataobj/AnalysisBase/ParticleID.h"
45 #include "lardataobj/AnalysisBase/BackTrackerMatchingData.h"
46 
47 #include "uboone/ParticleID/Algorithms/uB_PlaneIDBitsetHelperFunctions.h"
48 
49 namespace lee {
50 
51 class EnergyHelper : public HelperBase {
52 public:
53  explicit EnergyHelper();
54  ~EnergyHelper() = default;
55 
61  void reconfigure(fhicl::ParameterSet const &pset);
62 
73  void dQdx(const recob::Shower *shower_obj,
74  std::vector<art::Ptr<recob::Cluster>> *clusters,
75  art::FindManyP<recob::Hit> *hits_per_cluster,
76  art::FindManyP<simb::MCParticle, anab::BackTrackerHitMatchingData> *mcps_per_hit,
77  std::vector<double> &dqdx,
78  std::vector<std::vector<double>> &dqdx_hits,
79  std::vector<double> &pitches);
80 
94  double PID(art::Ptr<anab::ParticleID> selected_pid,
95  std::string AlgName,
96  anab::kVariableType VariableType,
97  anab::kTrackDir TrackDirection,
98  int pdgCode);
99 
106  void dEdx_from_dQdx(std::vector<double> &dedx,
107  std::vector<double> dqdx);
108 
116  void PCA(std::vector<art::Ptr<recob::Cluster>> *clusters,
117  art::FindManyP<recob::Hit> *hits_per_cluster,
118  std::vector<std::vector<double>> &pca_planes);
119 
127  void get_cali(std::vector<art::Ptr<recob::SpacePoint>> *spcpnts,
128  art::FindManyP<recob::Hit> *hits_per_spcpnts,
129  std::vector<double> &cali_corr);
130 
139  void energy_from_hits(std::vector<art::Ptr<recob::Cluster>> *clusters,
140  art::FindManyP<recob::Hit> *hits_per_cluster,
141  art::FindManyP<simb::MCParticle, anab::BackTrackerHitMatchingData> *mcps_per_hit,
142  std::vector<int> &nHits,
143  std::vector<double> &pfenergy);
144 
153  void cluster_residuals(std::vector<art::Ptr<recob::Cluster>> *clusters,
154  art::FindManyP<recob::Hit> *hits_per_cluster,
155  double &mean_v,
156  double &std_v);
157 
165  void track_dQdx(std::vector<art::Ptr<anab::Calorimetry>> *calos,
166  std::vector<double> &dqdx,
167  std::vector<double> &dedx);
168 
175  void dQdx_cali(const recob::Shower *shower_obj,
176  std::vector<double> &dqdx_cali);
177 
178  bool is_hit_data(art::FindManyP<simb::MCParticle, anab::BackTrackerHitMatchingData> *mcps_per_hit,
179  size_t hit_key);
180 
181 private:
182  std::vector<double> _data_gain = {236.41, 228.83, 242.72}; // DocDB 14754
183  std::vector<double> _mc_gain = {193.05, 196.85, 196.85}; // Plane 0, plane 1, plane 2
184  std::vector<double> _gain;
185  const lariov::TPCEnergyCalibProvider &_energy_calib_provider = art::ServiceHandle<lariov::TPCEnergyCalibService>()->GetProvider();
186  const detinfo::DetectorProperties *_detprop = lar::providerFrom<detinfo::DetectorPropertiesService>();
187  double _drift = _detprop->DriftVelocity() * 1e-3;
188  double _readout_window = 4.8;
189  double _from_tick_to_ns = _readout_window / _detprop->ReadOutWindowSize() * 1e6;
190  double _wire_spacing = 0.3;
191  double _work_function = 23 / 1e6;
192  double _betap;
193  double _alpha;
194  double _recombination_factor;
195  double _dQdx_rectangle_length;
196  double _dQdx_rectangle_width;
197  bool m_isOverlaidSample;
198  GeometryHelper geo_helper;
199 };
200 } // namespace lee
201 
202 #endif
void energy_from_hits(std::vector< art::Ptr< recob::Cluster >> *clusters, art::FindManyP< recob::Hit > *hits_per_cluster, art::FindManyP< simb::MCParticle, anab::BackTrackerHitMatchingData > *mcps_per_hit, std::vector< int > &nHits, std::vector< double > &pfenergy)
Measure calorimetric energy for a reconstructed object.
Definition: EnergyHelper.cxx:113
void reconfigure(fhicl::ParameterSet const &pset)
Configure all of the parameters of this class.
Definition: EnergyHelper.cxx:13
void cluster_residuals(std::vector< art::Ptr< recob::Cluster >> *clusters, art::FindManyP< recob::Hit > *hits_per_cluster, double &mean_v, double &std_v)
Measure the spatial residuals of the hits in a reconstructed cluster along its direction.
Definition: EnergyHelper.cxx:52
void get_cali(std::vector< art::Ptr< recob::SpacePoint >> *spcpnts, art::FindManyP< recob::Hit > *hits_per_spcpnts, std::vector< double > &cali_corr)
Calibration value for the energy of a reconstructed object.
Definition: EnergyHelper.cxx:169
double PID(art::Ptr< anab::ParticleID > selected_pid, std::string AlgName, anab::kVariableType VariableType, anab::kTrackDir TrackDirection, int pdgCode)
Return the value of a specific ParticleID algorithm for a single track.
Definition: EnergyHelper.cxx:211
void dQdx_cali(const recob::Shower *shower_obj, std::vector< double > &dqdx_cali)
Calibration value for the dQ/dx of a reconstructed shower.
Definition: EnergyHelper.cxx:244
void track_dQdx(std::vector< art::Ptr< anab::Calorimetry >> *calos, std::vector< double > &dqdx, std::vector< double > &dedx)
Measure the dQ/dx and dE/dx of a track using the anab::Calorimetry information.
Definition: EnergyHelper.cxx:24
Definition: EnergyHelper.h:51
Definition: HelperBase.h:17
Definition: GeometryHelper.h:40
void dEdx_from_dQdx(std::vector< double > &dedx, std::vector< double > dqdx)
Convert dQ/dx vector into dE/dx vector (in MeV)
Definition: EnergyHelper.cxx:394
void PCA(std::vector< art::Ptr< recob::Cluster >> *clusters, art::FindManyP< recob::Hit > *hits_per_cluster, std::vector< std::vector< double >> &pca_planes)
Principal Component Analysis of reconstructed clusters.
Definition: EnergyHelper.cxx:141
void dQdx(const recob::Shower *shower_obj, std::vector< art::Ptr< recob::Cluster >> *clusters, art::FindManyP< recob::Hit > *hits_per_cluster, art::FindManyP< simb::MCParticle, anab::BackTrackerHitMatchingData > *mcps_per_hit, std::vector< double > &dqdx, std::vector< std::vector< double >> &dqdx_hits, std::vector< double > &pitches)
Measure the dQdx of a shower.
Definition: EnergyHelper.cxx:302