23 #ifndef ENERGYHELPER_H
24 #define ENERGYHELPER_H
26 #include "HelperBase.h"
28 #include "GeometryHelper.h"
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"
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"
47 #include "uboone/ParticleID/Algorithms/uB_PlaneIDBitsetHelperFunctions.h"
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);
94 double PID(art::Ptr<anab::ParticleID> selected_pid,
96 anab::kVariableType VariableType,
97 anab::kTrackDir TrackDirection,
107 std::vector<double> dqdx);
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);
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);
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);
154 art::FindManyP<recob::Hit> *hits_per_cluster,
165 void track_dQdx(std::vector<art::Ptr<anab::Calorimetry>> *calos,
166 std::vector<double> &dqdx,
167 std::vector<double> &dedx);
175 void dQdx_cali(
const recob::Shower *shower_obj,
176 std::vector<double> &dqdx_cali);
178 bool is_hit_data(art::FindManyP<simb::MCParticle, anab::BackTrackerHitMatchingData> *mcps_per_hit,
182 std::vector<double> _data_gain = {236.41, 228.83, 242.72};
183 std::vector<double> _mc_gain = {193.05, 196.85, 196.85};
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;
194 double _recombination_factor;
195 double _dQdx_rectangle_length;
196 double _dQdx_rectangle_width;
197 bool m_isOverlaidSample;
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