LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
OpFlashAlg.h
Go to the documentation of this file.
1 // -*- mode: c++; c-basic-offset: 2; -*-
2 #ifndef OPFLASHALG_H
3 #define OPFLASHALG_H
4 
15 namespace detinfo {
16  class DetectorClocksData;
17 }
18 
19 #include <functional>
20 #include <map>
21 #include <vector>
22 
23 namespace opdet {
24 
25  void RunFlashFinder(std::vector<recob::OpHit> const&,
26  std::vector<recob::OpFlash>&,
27  std::vector<std::vector<int>>&,
28  double,
29  geo::GeometryCore const&,
30  geo::WireReadoutGeom const&,
31  float,
32  float,
34  float);
35 
36  unsigned int GetAccumIndex(double PeakTime, double MinTime, double BinWidth, double BinOffset);
37 
38  void FillAccumulator(unsigned int const& AccumIndex,
39  unsigned int const& HitIndex,
40  double PE,
41  float FlashThreshold,
42  std::vector<double>& Binned,
43  std::vector<std::vector<int>>& Contributors,
44  std::vector<int>& FlashesInAccumulator);
45 
46  void AssignHitsToFlash(std::vector<int> const&,
47  std::vector<int> const&,
48  std::vector<double> const&,
49  std::vector<double> const&,
50  std::vector<std::vector<int>> const&,
51  std::vector<std::vector<int>> const&,
52  std::vector<recob::OpHit> const&,
53  std::vector<std::vector<int>>&,
54  float);
55 
57  std::vector<int> const& FlashesInAccumulator,
58  std::vector<double> const& BinnedPE,
59  int const& Accumulator,
60  std::map<double, std::map<int, std::vector<int>>, std::greater<double>>& FlashesBySize);
61 
62  void FillHitsThisFlash(std::vector<std::vector<int>> const& Contributors,
63  int const& Bin,
64  std::vector<int> const& HitClaimedByFlash,
65  std::vector<int>& HitsThisFlash);
66 
67  void ClaimHits(std::vector<recob::OpHit> const& HitVector,
68  std::vector<int> const& HitsThisFlash,
69  float FlashThreshold,
70  std::vector<std::vector<int>>& HitsPerFlash,
71  std::vector<int>& HitClaimedByFlash);
72 
73  void RefineHitsInFlash(std::vector<int> const& HitsThisFlash,
74  std::vector<recob::OpHit> const& HitVector,
75  std::vector<std::vector<int>>& RefinedHitsPerFlash,
76  float WidthTolerance,
77  float FlashThreshold);
78 
79  void FindSeedHit(std::map<double, std::vector<int>, std::greater<double>> const& HitsBySize,
80  std::vector<bool>& HitsUsed,
81  std::vector<recob::OpHit> const& HitVector,
82  std::vector<int>& HitsThisRefinedFlash,
83  double& PEAccumulated,
84  double& FlashMaxTime,
85  double& FlashMinTime);
86 
87  void AddHitToFlash(int const& HitID,
88  std::vector<bool>& HitsUsed,
89  recob::OpHit const& currentHit,
90  double WidthTolerance,
91  std::vector<int>& HitsThisRefinedFlash,
92  double& PEAccumulated,
93  double& FlashMaxTime,
94  double& FlashMinTime);
95 
96  void CheckAndStoreFlash(std::vector<std::vector<int>>& RefinedHitsPerFlash,
97  std::vector<int> const& HitsThisRefinedFlash,
98  double PEAccumulated,
99  float FlashThreshold,
100  std::vector<bool>& HitsUsed);
101 
102  void ConstructFlash(std::vector<int> const& HitsPerFlashVec,
103  std::vector<recob::OpHit> const& HitVector,
104  std::vector<recob::OpFlash>& FlashVector,
105  geo::GeometryCore const& geom,
106  geo::WireReadoutGeom const& wireReadoutGeom,
107  detinfo::DetectorClocksData const& data,
108  float TrigCoinc);
109 
110  void AddHitContribution(recob::OpHit const& currentHit,
111  double& MaxTime,
112  double& MinTime,
113  double& AveTime,
114  double& FastToTotal,
115  double& AveAbsTime,
116  double& TotalPE,
117  std::vector<double>& PEs);
118 
119  void GetHitGeometryInfo(recob::OpHit const& currentHit,
120  geo::GeometryCore const& geom,
121  geo::WireReadoutGeom const& wireReadoutGeom,
122  std::vector<double>& sumw,
123  std::vector<double>& sumw2,
124  double& sumy,
125  double& sumy2,
126  double& sumz,
127  double& sumz2);
128 
129  void RemoveLateLight(std::vector<recob::OpFlash>&, std::vector<std::vector<int>>&);
130 
131  double GetLikelihoodLateLight(double iPE,
132  double iTime,
133  double iWidth,
134  double jPE,
135  double jTime,
136  double jWidth);
137 
138  void MarkFlashesForRemoval(std::vector<recob::OpFlash> const& FlashVector,
139  size_t BeginFlash,
140  std::vector<bool>& MarkedForRemoval);
141 
142  void RemoveFlashesFromVectors(std::vector<bool> const& MarkedForRemoval,
143  std::vector<recob::OpFlash>& FlashVector,
144  size_t BeginFlash,
145  std::vector<std::vector<int>>& RefinedHitsPerFlash);
146 
147  template <typename T, typename Compare>
148  std::vector<int> sort_permutation(std::vector<T> const& vec, int offset, Compare compare);
149 
150  template <typename T>
151  void apply_permutation(std::vector<T>& vec, std::vector<int> const& p);
152 
153 } // End opdet namespace
154 
155 #endif
void FillHitsThisFlash(std::vector< std::vector< int >> const &Contributors, int const &Bin, std::vector< int > const &HitClaimedByFlash, std::vector< int > &HitsThisFlash)
Definition: OpFlashAlg.cxx:208
void CheckAndStoreFlash(std::vector< std::vector< int >> &RefinedHitsPerFlash, std::vector< int > const &HitsThisRefinedFlash, double const PEAccumulated, float const FlashThreshold, std::vector< bool > &HitsUsed)
Definition: OpFlashAlg.cxx:348
void AddHitContribution(recob::OpHit const &currentHit, double &MaxTime, double &MinTime, double &AveTime, double &FastToTotal, double &AveAbsTime, double &TotalPE, std::vector< double > &PEs)
Definition: OpFlashAlg.cxx:443
void RunFlashFinder(std::vector< recob::OpHit > const &HitVector, std::vector< recob::OpFlash > &FlashVector, std::vector< std::vector< int >> &AssocList, double const BinWidth, geo::GeometryCore const &geom, geo::WireReadoutGeom const &wireReadoutGeom, float const FlashThreshold, float const WidthTolerance, detinfo::DetectorClocksData const &ClocksData, float const TrigCoinc)
Definition: OpFlashAlg.cxx:61
void apply_permutation(std::vector< T > &vec, std::vector< int > const &p)
Definition: OpFlashAlg.cxx:684
void AssignHitsToFlash(std::vector< int > const &FlashesInAccumulator1, std::vector< int > const &FlashesInAccumulator2, std::vector< double > const &Binned1, std::vector< double > const &Binned2, std::vector< std::vector< int >> const &Contributors1, std::vector< std::vector< int >> const &Contributors2, std::vector< recob::OpHit > const &HitVector, std::vector< std::vector< int >> &HitsPerFlash, float const FlashThreshold)
Definition: OpFlashAlg.cxx:242
void FindSeedHit(std::map< double, std::vector< int >, std::greater< double >> const &HitsBySize, std::vector< bool > &HitsUsed, std::vector< recob::OpHit > const &HitVector, std::vector< int > &HitsThisRefinedFlash, double &PEAccumulated, double &FlashMaxTime, double &FlashMinTime)
Definition: OpFlashAlg.cxx:292
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:289
void MarkFlashesForRemoval(std::vector< recob::OpFlash > const &FlashVector, size_t const BeginFlash, std::vector< bool > &MarkedForRemoval)
Definition: OpFlashAlg.cxx:607
void ClaimHits(std::vector< recob::OpHit > const &HitVector, std::vector< int > const &HitsThisFlash, float const FlashThreshold, std::vector< std::vector< int >> &HitsPerFlash, std::vector< int > &HitClaimedByFlash)
Definition: OpFlashAlg.cxx:220
std::function< bool(T const &, T const &)> Compare
Definition: fwd.h:22
Interface for a class providing readout channel mapping to geometry.
std::vector< int > sort_permutation(std::vector< T > const &vec, int offset, Compare compare)
Definition: OpFlashAlg.cxx:672
void FillFlashesBySizeMap(std::vector< int > const &FlashesInAccumulator, std::vector< double > const &BinnedPE, int const &Accumulator, std::map< double, std::map< int, std::vector< int >>, std::greater< double >> &FlashesBySize)
Definition: OpFlashAlg.cxx:197
void RemoveLateLight(std::vector< recob::OpFlash > &FlashVector, std::vector< std::vector< int >> &RefinedHitsPerFlash)
Definition: OpFlashAlg.cxx:647
General LArSoft Utilities.
Description of the physical geometry of one entire detector.
Definition: GeometryCore.h:91
void GetHitGeometryInfo(recob::OpHit const &currentHit, geo::GeometryCore const &geom, geo::WireReadoutGeom const &wireReadoutGeom, std::vector< double > &sumw, std::vector< double > &sumw2, double &sumy, double &sumy2, double &sumz, double &sumz2)
Definition: OpFlashAlg.cxx:469
void AddHitToFlash(int const &HitID, std::vector< bool > &HitsUsed, recob::OpHit const &currentHit, double const WidthTolerance, std::vector< int > &HitsThisRefinedFlash, double &PEAccumulated, double &FlashMaxTime, double &FlashMinTime)
Definition: OpFlashAlg.cxx:321
std::vector< art::Ptr< recob::Hit > > HitVector
void RefineHitsInFlash(std::vector< int > const &HitsThisFlash, std::vector< recob::OpHit > const &HitVector, std::vector< std::vector< int >> &RefinedHitsPerFlash, float const WidthTolerance, float const FlashThreshold)
Definition: OpFlashAlg.cxx:372
Contains all timing reference information for the detector.
unsigned int GetAccumIndex(double const PeakTime, double const MinTime, double const BinWidth, double const BinOffset)
Definition: OpFlashAlg.cxx:169
void ConstructFlash(std::vector< int > const &HitsPerFlashVec, std::vector< recob::OpHit > const &HitVector, std::vector< recob::OpFlash > &FlashVector, geo::GeometryCore const &geom, geo::WireReadoutGeom const &wireReadoutGeom, detinfo::DetectorClocksData const &ClocksData, float const TrigCoinc)
Definition: OpFlashAlg.cxx:509
void RemoveFlashesFromVectors(std::vector< bool > const &MarkedForRemoval, std::vector< recob::OpFlash > &FlashVector, size_t const BeginFlash, std::vector< std::vector< int >> &RefinedHitsPerFlash)
Definition: OpFlashAlg.cxx:634
void FillAccumulator(unsigned int const &AccumIndex, unsigned int const &HitIndex, double const PE, float const FlashThreshold, std::vector< double > &Binned, std::vector< std::vector< int >> &Contributors, std::vector< int > &FlashesInAccumulator)
Definition: OpFlashAlg.cxx:178
double GetLikelihoodLateLight(double const iPE, double const iTime, double const iWidth, double const jPE, double const jTime, double const jWidth)
Definition: OpFlashAlg.cxx:590