ShowerEnergyAlg.cxx
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 // Class: ShowerEnergyAlg
3 // File: ShowerEnergyAlg.cxx
4 // Author: Mike Wallbank (m.wallbank@sheffield.ac.uk), November 2015
5 //
6 // Shower energy finding class
7 ////////////////////////////////////////////////////////////////////////
8 
10 
19 #include "range/v3/numeric.hpp"
20 #include "range/v3/view.hpp"
21 
22 #include <cmath>
23 
24 using lar::to_element;
25 
27  : fLinearFunctions{{{pset.get<double>("UGradient"), pset.get<double>("UIntercept")},
28  {pset.get<double>("VGradient"), pset.get<double>("VIntercept")},
29  {pset.get<double>("ZGradient"), pset.get<double>("ZIntercept")}}}
30 {}
31 
32 double
34  detinfo::DetectorPropertiesData const& detprop,
35  std::vector<art::Ptr<recob::Hit>> const& hits,
36  geo::PlaneID::PlaneID_t const plane) const
37 {
38  // Should we throw instead if the plane is not in the range [0,3)?
39  if (plane >= fLinearFunctions.size()) { return 0.; }
40 
41  auto const coeff = sampling_rate(clockData) / (detprop.ElectronLifetime() * 1e3);
42 
43  auto in_plane = [plane](auto const& hit) { return hit.WireID().Plane == plane; };
44  auto charge = [coeff](auto const& hit) {
45  return hit.Integral() * std::exp(coeff * hit.PeakTime());
46  };
47 
48  double const totalCharge =
49  ranges::accumulate(hits | ranges::views::transform(to_element) | ranges::views::filter(in_plane) |
50  ranges::views::transform(charge),
51  0.);
52 
53  return fLinearFunctions[plane].energy_from(totalCharge);
54 }
std::array< LinearFunction, 3 > const fLinearFunctions
constexpr to_element_t to_element
Definition: ToElement.h:24
double ShowerEnergy(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, std::vector< art::Ptr< recob::Hit >> const &hits, geo::PlaneID::PlaneID_t plane) const
unsigned int PlaneID_t
Type for the ID number.
Definition: geo_types.h:473
struct vector vector
ShowerEnergyAlg(fhicl::ParameterSet const &pset)
T get(std::string const &key) const
Definition: ParameterSet.h:271
Definition of data types for geometry description.
Detector simulation of raw signals on wires.
Declaration of signal hit object.
Contains all timing reference information for the detector.
static unsigned filter(unsigned char *out, const unsigned char *in, unsigned w, unsigned h, const LodePNG_InfoColor *info)
Definition: lodepng.cpp:3576
double sampling_rate(DetectorClocksData const &data)
Returns the period of the TPC readout electronics clock.