All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FlashPredict.hh
Go to the documentation of this file.
1 #ifndef SBN_FLASHMATCH_FLASHPREDICT_HH
2 #define SBN_FLASHMATCH_FLASHPREDICT_HH
3 
4 #include "art/Framework/Core/EDProducer.h"
5 #include "art/Framework/Core/ModuleMacros.h"
6 #include "art/Framework/Principal/Event.h"
7 #include "art/Framework/Principal/Handle.h"
8 #include "art/Framework/Principal/Run.h"
9 #include "art/Framework/Principal/SubRun.h"
10 #include "art/Persistency/Common/PtrMaker.h"
11 #include "art/Utilities/make_tool.h"
12 #include "art_root_io/TFileService.h"
13 
14 #include "canvas/Persistency/Common/Ptr.h"
15 #include "canvas/Persistency/Common/PtrVector.h"
16 #include "canvas/Persistency/Common/Assns.h"
17 #include "canvas/Persistency/Common/FindManyP.h"
18 #include "canvas/Persistency/Provenance/ProductID.h"
19 #include "canvas/Utilities/InputTag.h"
20 
21 #include "fhiclcpp/ParameterSet.h"
22 #include "messagefacility/MessageLogger/MessageLogger.h"
23 
30 // #include "lardataobj/RecoBase/Track.h"
36 // #include "lardataobj/RecoBase/OpFlash.h"
39 #include "nusimdata/SimulationBase/MCParticle.h"
40 
41 #include "TTree.h"
42 #include "TF1.h"
43 #include "TFile.h"
44 #include "TH1.h"
45 #include "TH2.h"
46 
48 #include "sbncode/OpDet/PDMapAlg.h"
50 
51 #include "nusimdata/SimulationBase/MCParticle.h"
52 #include "nusimdata/SimulationBase/MCTruth.h"
53 
54 #include <algorithm>
55 #include <iterator>
56 #include <limits>
57 #include <list>
58 #include <memory>
59 #include <set>
60 #include <string>
61 #include <tuple>
62 
63 class FlashPredict;
64 class FlashPredict : public art::EDProducer {
65 
66 
67 public:
68  explicit FlashPredict(fhicl::ParameterSet const& p);
69  // The compiler-generated destructor is fine for non-base
70  // classes without bare pointers or other resource use.
71  // Plugins should not be copied or assigned.
72  FlashPredict(FlashPredict const&) = delete;
73  FlashPredict(FlashPredict&&) = delete;
74  FlashPredict& operator=(FlashPredict const&) = delete;
75  FlashPredict& operator=(FlashPredict&&) = delete;
76  // Required functions.
77  void produce(art::Event& evt) override;
78  // Selected optional functions.
79  void beginJob() override;
80  void endJob() override;
81 
82  struct ChargeDigest {
83  size_t pId;
84  int pfpPDGC;
85  art::Ptr<recob::PFParticle> pfp_ptr;
87  std::set<unsigned> tpcWithHits;
88  double mcT0 = -9999;
89  ChargeDigest() = default;
90  ChargeDigest(const size_t pId_, const int pfpPDGC_,
91  const art::Ptr<recob::PFParticle>& pfp_ptr_,
92  const flashmatch::QCluster_t& qClusters_,
93  const std::set<unsigned>& tpcWithHits_) :
94  pId(pId_), pfpPDGC(pfpPDGC_), pfp_ptr(pfp_ptr_),
95  qClusters(qClusters_), tpcWithHits(tpcWithHits_)
96  {}
97  ChargeDigest(const size_t pId_, const int pfpPDGC_,
98  const art::Ptr<recob::PFParticle>& pfp_ptr_,
99  const flashmatch::QCluster_t& qClusters_,
100  const std::set<unsigned>& tpcWithHits_,
101  const double mcT0_) :
102  pId(pId_), pfpPDGC(pfpPDGC_), pfp_ptr(pfp_ptr_),
103  qClusters(qClusters_), tpcWithHits(tpcWithHits_), mcT0(mcT0_)
104  {}
105  };
106  using ChargeDigestMap = std::map<double, ChargeDigest, std::greater<double>>;
107 
108  using OpHitIt = std::vector<recob::OpHit>::iterator;
109  struct SimpleFlash {
112  double maxpeak_time;
113  SimpleFlash(unsigned flashId_, unsigned ophsInVolume_,
114  OpHitIt opH_beg_, OpHitIt opH_end_,
115  double maxpeak_time_) :
116  flashId(flashId_), ophsInVolume(ophsInVolume_),
117  opH_beg(opH_beg_), opH_end(opH_end_),
118  maxpeak_time(maxpeak_time_)
119  {}
120  };
121 
122  struct ChargeMetrics {
123  double x, x_gl, y, z, q;
124  bool metric_ok;
125  ChargeMetrics(double x_, double x_gl_, double y_, double z_,
126  double q_, bool metric_ok_) :
127  x(x_), x_gl(x_gl_), y(y_), z(z_), q(q_), metric_ok(metric_ok_)
128  {}
129  // faulty charges constructor
131  std::string dumpMetrics() const
132  {
133  std::ostringstream stream;
134  stream
135  << " x: " << x << "\n"
136  << " x_gl: " << x_gl << "\n"
137  << " y: " << y << "\n"
138  << " z: " << z << "\n"
139  << " q: " << q << "\n"
140  << " metric_ok: " << metric_ok << "\n";
141  return stream.str();
142  }
143  };
144 
145  struct FlashMetrics {
146  double x, x_gl, y, yb, z, zb;
147  double rr, pe, unpe, ratio, time;
149  double y_skew, z_skew;
150  bool metric_ok;
151  FlashMetrics(double x_, double x_gl_, double y_, double yb_, double z_, double zb_,
152  double rr_, double pe_, double unpe_, double ratio_, double time_,
153  double h_x_, double h_xerr_, double h_xrr_, double h_xratio_,
154  double y_skew_, double z_skew_,
155  bool metric_ok_) :
156  x(x_), x_gl(x_gl_), y(y_), yb(yb_), z(z_), zb(zb_),
157  rr(rr_), pe(pe_), unpe(unpe_), ratio(ratio_), time(time_),
158  h_x(h_x_), h_xerr(h_xerr_), h_xrr(h_xrr_), h_xratio(h_xratio_),
159  y_skew(y_skew_), z_skew(z_skew_),
160  metric_ok(metric_ok_)
161  {}
162  // faulty flashes constructor
164  x(0.), x_gl(0.), y(0.), yb(0.), z(0.), zb(0.),
165  rr(0.), pe(0.), unpe(0.), ratio(0.), time(0.),
166  h_x(0.), h_xerr(0.), h_xrr(0.), h_xratio(0.),
167  y_skew(0.), z_skew(0.),
168  metric_ok(false) {}
169  std::string dumpMetrics() const
170  {
171  std::ostringstream stream;
172  stream
173  << " x: " << x << "\n"
174  << " x_gl: " << x_gl << "\n"
175  << " y: " << y << "\n"
176  << " yb: " << yb << "\n"
177  << " z: " << z << "\n"
178  << " zb: " << zb << "\n"
179  << " rr: " << rr << "\n"
180  << " pe: " << pe << "\n"
181  << " unpe: " << unpe << "\n"
182  << " ratio: " << ratio << "\n"
183  << " time: " << time << "\n"
184  << " h_x: " << h_x << "\n"
185  << " h_xerr: " << h_xerr << "\n"
186  << " h_xrr: " << h_xrr << "\n"
187  << " h_xratio:" << h_xratio << "\n"
188  << " y_skew: " << y_skew << "\n"
189  << " z_skew: " << z_skew << "\n"
190  << " metric_ok: " << std::boolalpha << metric_ok << "\n";
191  return stream.str();
192  }
193  };
194 
195 
196 private:
197  // aliases for the objects that are stored
202 
203  // Declare member data here.
204  // ::flashmatch::FlashMatchManager m_flashMatchManager; ///< The flash match manager
205  // art::InputTag fFlashProducer;
206  void initTree(void);
207  void loadMetrics(void);
208  double cheatMCT0(const std::vector<art::Ptr<recob::Hit>>& hits,
209  const std::vector<art::Ptr<simb::MCParticle>>& mcParticles);
211  const flashmatch::QCluster_t& qClusters) const;
212  FlashMetrics computeFlashMetrics(const SimpleFlash& simpleFlash) const;
213  Score computeScore(const ChargeMetrics& charge,
214  const FlashMetrics& flash,
215  const std::set<unsigned>& tpcWithHits,
216  const int pdgc) const;
217  std::tuple<double, double, double, double> hypoFlashX_fits(
218  double flash_rr, double flash_ratio) const;
219  std::tuple<double, double, double, double> hypoFlashX_H2(
220  double flash_rr, double flash_ratio) const;
221  std::tuple<double, double> xEstimateAndRMS(
222  double metric_value, const TH2D* metric_h2) const;
224  const art::Event& evt,
225  const art::ValidHandle<std::vector<recob::PFParticle>>& pfps_h);
226  void addDaughters(const std::unordered_map<size_t, size_t>& pfpMap,
227  const art::Ptr<recob::PFParticle>& pfp_ptr,
228  const art::ValidHandle<std::vector<recob::PFParticle>>& pfps_h,
229  std::vector<art::Ptr<recob::PFParticle>>& pfp_v) const;
230  unsigned trueNus(art::Event& evt) const;
231  void updateChargeMetrics(const ChargeMetrics& chargeMetrics);
232  void updateFlashMetrics(const FlashMetrics& flashMetrics);
233  void updateScore(const Score& score);
234  inline double scoreTerm(const double m, const double n,
235  const double mean, const double spread) const;
236  inline double scoreTerm(const double m,
237  const double mean, const double spread) const;
238  inline bool pfpNeutrinoOnEvent(
239  const art::ValidHandle<std::vector<recob::PFParticle>>& pfps_h) const;
241  std::vector<recob::OpHit>& opHits,
242  const art::Handle<std::vector<recob::OpHit>>& ophit_h) const;
243  std::vector<SimpleFlash> makeSimpleFlashes(//SBND overload
244  std::vector<recob::OpHit>& opHits,
245  std::vector<recob::OpHit>& opHitsRght,
246  std::vector<recob::OpHit>& opHitsLeft) const;
247  std::vector<SimpleFlash> makeSimpleFlashes(//ICARUS overload
248  std::vector<recob::OpHit>& opHits) const;
249  bool createOpHitsTimeHist(//SBND overload
250  const std::vector<recob::OpHit>& opHits,
251  std::vector<recob::OpHit>& opHitsRght,
252  std::vector<recob::OpHit>& opHitsLeft,
253  std::unique_ptr<TH1D>& opHitsTimeHist,
254  std::unique_ptr<TH1D>& opHitsTimeHistRght,
255  std::unique_ptr<TH1D>& opHitsTimeHistLeft) const;
256  unsigned createOpHitsTimeHist(//ICARUS overload
257  const std::vector<recob::OpHit>& opHits,
258  std::unique_ptr<TH1D>& opHitsTimeHist) const;
259  bool findSimpleFlashes(
260  std::vector<SimpleFlash>& simpleFlashes,
261  std::vector<recob::OpHit>& opHits,
262  const unsigned ophsInVolume,
263  std::unique_ptr<TH1D>& opHitsTimeHist) const;
264  inline std::string detectorName(const std::string detName) const;
265  bool isPDInCryo(const int pdChannel) const;
266  bool isSBNDPDRelevant(const int pdChannel,
267  const std::set<unsigned>& tpcWithHits) const;
268  unsigned sbndPDinTPC(const int pdChannel) const;
269  unsigned icarusPDinTPC(const int pdChannel) const;
270  double wallXWithMaxPE(const OpHitIt opH_beg,
271  const OpHitIt opH_end) const;
272  std::list<double> wiresXGl() const;
273  double driftDistance() const;
274  double flashXGl(const double hypo_x, const double flash_x) const;
275  double foldXGl(const double x_gl) const;
276  unsigned driftVolume(const double x) const;
277  template <typename Stream>
278  void printBookKeeping(Stream&& out);
279  void updateBookKeeping();
280  template <typename Stream>
281  void printMetrics(const std::string metric,
282  const ChargeMetrics& charge,
283  const FlashMetrics& flash,
284  const int pdgc,
285  const std::set<unsigned>& tpcWithHits,
286  const double term,
287  Stream&& out) const;
288 
289  const art::InputTag fPandoraProducer, fSpacePointProducer,
290  fOpHitProducer, fOpHitARAProducer;//, fCaloProducer, fTrackProducer;
292  const double fTickPeriod;
294  const double fFlashStart, fFlashEnd;
295  const unsigned fTimeBins;
296  const bool fSelectNeutrino;
298  const bool fForceConcurrence;
299  const bool fUseUncoatedPMT, fUseOppVolMetric;//, fUseCalo;
300  const bool fUseARAPUCAS;
301  const bool fStoreTrueNus;
302  const bool fStoreCheatMCT0;
303  const std::string fInputFilename;
307  const unsigned fMaxFlashes;
308  const double fMinOpHPE, fMinFlashPE;
309  const art::ServiceHandle<geo::Geometry> fGeometry;
310  const std::string fDetector; // SBND or ICARUS
311  const bool fSBND, fICARUS;
312  const std::unique_ptr<opdet::PDMapAlg> fPDMapAlgPtr;
313  const size_t fNTPC;
314  const int fCryostat; // =0 or =1 to match ICARUS reco chain selection
315  // geo::CryostatID fCryostat; // TODO: use this type instead
316  const std::unique_ptr<geo::CryostatGeo> fGeoCryo;
317  const std::list<double> fWiresX_gl;
318  const double fDriftDistance;
319  const int fXBins;
320  const double fXBinWidth;
321  const std::string fRR_TF1_fit, fRatio_TF1_fit;
322  const unsigned fYBins,fZBins;
323  const double fYLow, fYHigh, fZLow, fZHigh;
324  const double fYBiasSlope, fZBiasSlope;
325  unsigned fDriftVolumes;
327  const unsigned fOpDetNormalizer;
328  const double fTermThreshold;
329 
330  static constexpr unsigned kRght = 0;
331  static constexpr unsigned kLeft = 1;
332 
333  static constexpr unsigned kActivityInRght = 100;
334  static constexpr unsigned kActivityInLeft = 200;
335  static constexpr unsigned kActivityInBoth = 300;
336 
337  // root stuff
339  struct Fits {
340  double min, max;
341  std::unique_ptr<TF1> f;
342  };
343  TH2D* fRRH2; TH2D* fRatioH2;
344  static constexpr unsigned kMinEntriesInProjection = 100;
345  std::array<Fits, 3> fRRFits;
346  std::array<Fits, 3> fRatioFits;
347  const std::array<std::string, 3> kSuffixes{"l", "h", "m"};// low, high, medium
348  static constexpr double kEps = 1e-4;
349 
350  // Tree variables
356  _y_skew, _z_skew;
358  unsigned _evt, _run, _sub;
359  unsigned _slices = -1; unsigned _true_nus = -1;
360  double _mcT0 = -9999.;
361 
362  std::vector<double> fdYMeans, fdZMeans, fRRMeans, fRatioMeans;
364 
365  static constexpr bool kNoScr = false;
366  static constexpr double kNoScrTime = -9999.;
367  static constexpr double kNoScrQ = -9999.;
368  static constexpr double kNoScrPE = -9999.;
369  static constexpr int kQNoOpHScr = -1;
370  static constexpr int kNoChrgScr = -2;
371  static constexpr int k0VUVPEScr = -3;
372  static constexpr int kNotANuScr = -4;
373  static constexpr int kNoOpHInEvt = -11;
374  static constexpr int kNoPFPInEvt = -12;
375  static constexpr int kNoSlcInEvt = -13;
376  struct BookKeeping {
380 
384  };
386 };
387 
388 
389 #endif //SBN_FLASHMATCH_FLASHPREDICT_HH
const bool fForceConcurrence
const double fZHigh
const bool fSBND
static constexpr int kNoPFPInEvt
double _charge_q
double cheatMCT0(const std::vector< art::Ptr< recob::Hit >> &hits, const std::vector< art::Ptr< simb::MCParticle >> &mcParticles)
std::vector< double > fdZMeans
std::vector< double > fRRSpreads
const int fXBins
ChargeDigest(const size_t pId_, const int pfpPDGC_, const art::Ptr< recob::PFParticle > &pfp_ptr_, const flashmatch::QCluster_t &qClusters_, const std::set< unsigned > &tpcWithHits_)
Definition: FlashPredict.hh:90
double _charge_x_gl
detinfo::DetectorClocksData const fClockData
const double fMinSliceQ
double foldXGl(const double x_gl) const
static constexpr unsigned kActivityInRght
flashmatch::QCluster_t qClusters
Definition: FlashPredict.hh:86
static constexpr int kNotANuScr
static constexpr unsigned kRght
void printMetrics(const std::string metric, const ChargeMetrics &charge, const FlashMetrics &flash, const int pdgc, const std::set< unsigned > &tpcWithHits, const double term, Stream &&out) const
const std::string fDetector
double _flash_time
unsigned _sub
bool isPDInCryo(const int pdChannel) const
process_name opflash particleana ie x
double _flash_zb
const double fBeamWindowStart
double _charge_y
bool isSBNDPDRelevant(const int pdChannel, const std::set< unsigned > &tpcWithHits) const
unsigned driftVolume(const double x) const
const double fTermThreshold
Declaration of signal hit object.
const art::ServiceHandle< geo::Geometry > fGeometry
const std::array< std::string, 3 > kSuffixes
void updateChargeMetrics(const ChargeMetrics &chargeMetrics)
pdgs p
Definition: selectors.fcl:22
static constexpr unsigned kLeft
BEGIN_PROLOG or score(default)}sbnd_crttrackmatchingalg_crID
static constexpr int kNoChrgScr
void copyOpHitsInBeamWindow(std::vector< recob::OpHit > &opHits, const art::Handle< std::vector< recob::OpHit >> &ophit_h) const
const art::InputTag fOpHitARAProducer
const art::InputTag fPandoraProducer
const bool fICARUS
static constexpr unsigned kActivityInBoth
Score computeScore(const ChargeMetrics &charge, const FlashMetrics &flash, const std::set< unsigned > &tpcWithHits, const int pdgc) const
std::string detectorName(const std::string detName) const
FlashPredict & operator=(FlashPredict const &)=delete
double _charge_x
bool pfpNeutrinoOnEvent(const art::ValidHandle< std::vector< recob::PFParticle >> &pfps_h) const
static constexpr double kNoScrQ
double _scr_ratio
const bool fMakeTree
tuple m
now if test mode generate materials, CRT shell, world, gdml header else just generate CRT shell for u...
std::string dumpMetrics() const
std::vector< double > fRatioMeans
const double fZLow
const double fXBinWidth
BookKeeping bk
const double fZBiasSlope
SimpleFlash(unsigned flashId_, unsigned ophsInVolume_, OpHitIt opH_beg_, OpHitIt opH_end_, double maxpeak_time_)
double _hypo_x_err
ChargeMetrics(double x_, double x_gl_, double y_, double z_, double q_, bool metric_ok_)
std::tuple< double, double > xEstimateAndRMS(double metric_value, const TH2D *metric_h2) const
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:265
Access the description of detector geometry.
const double fYHigh
static constexpr int kQNoOpHScr
const std::list< double > fWiresX_gl
const double fBeamWindowEnd
const bool fUseARAPUCAS
unsigned trueNus(art::Event &evt) const
This is the interface class for a tool to handle PD mapping in SBN detectors, used for flash matching...
const double fMinParticleQ
Utilities for matching a recob::Hit or vector of recob::Hit to the ID of the most significantly contr...
void printBookKeeping(Stream &&out)
std::vector< double > fdYMeans
double _flash_pe
double _flash_unpe
const bool fUseUncoatedPMT
double _flash_x_gl
const std::string fInputFilename
static constexpr int kNoSlcInEvt
std::string dumpMetrics() const
std::tuple< double, double, double, double > hypoFlashX_fits(double flash_rr, double flash_ratio) const
TTree * _flashmatch_nuslice_tree
const double fMinHitQ
std::array< Fits, 3 > fRRFits
const double fYBiasSlope
unsigned icarusPDinTPC(const int pdChannel) const
const std::string fRR_TF1_fit
const unsigned fTimeBins
const double fTickPeriod
Collection of charge deposition 3D point (cluster)
void loadMetrics(void)
unsigned _evt
static constexpr double kEps
unsigned fTPCPerDriftVolume
double driftDistance() const
static constexpr double kNoScrTime
std::tuple< double, double, double, double > hypoFlashX_H2(double flash_rr, double flash_ratio) const
const double fMinOpHPE
ChargeDigestMap makeChargeDigest(const art::Event &evt, const art::ValidHandle< std::vector< recob::PFParticle >> &pfps_h)
double scoreTerm(const double m, const double n, const double mean, const double spread) const
std::vector< SimpleFlash > makeSimpleFlashes(std::vector< recob::OpHit > &opHits, std::vector< recob::OpHit > &opHitsRght, std::vector< recob::OpHit > &opHitsLeft) const
ChargeDigest(const size_t pId_, const int pfpPDGC_, const art::Ptr< recob::PFParticle > &pfp_ptr_, const flashmatch::QCluster_t &qClusters_, const std::set< unsigned > &tpcWithHits_, const double mcT0_)
Definition: FlashPredict.hh:97
std::vector< double > fdZSpreads
bool findSimpleFlashes(std::vector< SimpleFlash > &simpleFlashes, std::vector< recob::OpHit > &opHits, const unsigned ophsInVolume, std::unique_ptr< TH1D > &opHitsTimeHist) const
const unsigned fYBins
FlashPredict(fhicl::ParameterSet const &p)
void produce(art::Event &evt) override
Encapsulate the geometry of a wire.
std::list< double > wiresXGl() const
const double fFlashEnd
double wallXWithMaxPE(const OpHitIt opH_beg, const OpHitIt opH_end) const
const bool fSelectNeutrino
static constexpr unsigned kActivityInLeft
double _flash_ratio
const double fMinSpacePointQ
ChargeMetrics computeChargeMetrics(const flashmatch::QCluster_t &qClusters) const
const double fDriftDistance
void updateFlashMetrics(const FlashMetrics &flashMetrics)
double mean(const std::vector< short > &wf, size_t start, size_t nsample)
Definition: UtilFunc.cxx:13
std::array< Fits, 3 > fRatioFits
void updateScore(const Score &score)
bool createOpHitsTimeHist(const std::vector< recob::OpHit > &opHits, std::vector< recob::OpHit > &opHitsRght, std::vector< recob::OpHit > &opHitsLeft, std::unique_ptr< TH1D > &opHitsTimeHist, std::unique_ptr< TH1D > &opHitsTimeHistRght, std::unique_ptr< TH1D > &opHitsTimeHistLeft) const
unsigned fDriftVolumes
std::unique_ptr< TF1 > f
const double fFlashStart
std::vector< double > fRRMeans
const art::InputTag fSpacePointProducer
const double fMinFlashPE
const double fYLow
static constexpr bool kNoScr
Contains all timing reference information for the detector.
double _hypo_x_rr
void beginJob() override
std::map< double, ChargeDigest, std::greater< double >> ChargeDigestMap
static constexpr double kNoScrPE
const double fChargeToNPhotonsTrack
std::vector< double > fdYSpreads
const art::InputTag fOpHitProducer
do i e
unsigned _slices
const unsigned fOpDetNormalizer
const bool fOnlyCollectionWires
const std::string fRatio_TF1_fit
FlashMetrics computeFlashMetrics(const SimpleFlash &simpleFlash) const
double flashXGl(const double hypo_x, const double flash_x) const
void endJob() override
std::vector< double > fRatioSpreads
std::set< unsigned > tpcWithHits
Definition: FlashPredict.hh:87
const bool fStoreTrueNus
const unsigned fZBins
const bool fStoreCheatMCT0
std::vector< recob::OpHit >::iterator OpHitIt
static constexpr int kNoOpHInEvt
static constexpr unsigned kMinEntriesInProjection
TCEvent evt
Definition: DataStructs.cxx:8
const std::unique_ptr< opdet::PDMapAlg > fPDMapAlgPtr
const size_t fNTPC
static constexpr int k0VUVPEScr
const bool fNoAvailableMetrics
art::Ptr< recob::PFParticle > pfp_ptr
Definition: FlashPredict.hh:85
void addDaughters(const std::unordered_map< size_t, size_t > &pfpMap, const art::Ptr< recob::PFParticle > &pfp_ptr, const art::ValidHandle< std::vector< recob::PFParticle >> &pfps_h, std::vector< art::Ptr< recob::PFParticle >> &pfp_v) const
const std::unique_ptr< geo::CryostatGeo > fGeoCryo
double _flash_rr
const bool fUseOppVolMetric
helper function for LArPandoraInterface producer module
double _charge_z
double _hypo_x_ratio
unsigned sbndPDinTPC(const int pdChannel) const
art framework interface to geometry description
bnb BNB Stream
unsigned _true_nus
const double fChargeToNPhotonsShower
unsigned _run
double _flash_yb
const unsigned fMaxFlashes
const int fCryostat
FlashMetrics(double x_, double x_gl_, double y_, double yb_, double z_, double zb_, double rr_, double pe_, double unpe_, double ratio_, double time_, double h_x_, double h_xerr_, double h_xrr_, double h_xratio_, double y_skew_, double z_skew_, bool metric_ok_)