SNBackgroundRejection_module.cc
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 // \brief Remove SN background hits from a file
3 // \author Justin Vasel <justin.vasel@gmail.com>
4 // \date December 2019
5 ////////////////////////////////////////////////////////////////////////
6 
7 // STL includes
8 #include <iostream>
9 
10 // Framework includes
19 #include "fhiclcpp/ParameterSet.h"
20 
21 // NOvASoft includes
22 #include "Geometry/Geometry.h"
25 #include "NovaTimingUtilities/TimingUtilities.h"
26 #include "RawData/DAQHeader.h"
27 #include "RawData/RawTrigger.h"
28 #include "RecoBase/CellHit.h"
29 #include "RecoBase/Cluster.h"
30 #include "RecoBase/Track.h"
40 #include "DAQDataFormats/RawDataBlock.h"
41 #include "DAQDataFormats/RawEvent.h"
42 #include "RawData/FlatDAQData.h"
43 
44 // ROOT includes
45 #include "TTree.h"
46 #include "TVector3.h"
47 
48 
49 namespace sn {
50  class SNBackgroundRejection;
51 }
52 
54 public:
56 
61 
62  float FOM(std::vector<rb::CellHit> hits);
63  std::pair<uint64_t,uint64_t> MicrosliceTimeMarkers(rawdata::FlatDAQData& flat);
64  void produce(art::Event& e);
65 
66  void endJob();
67 
68 
69 private:
71 
72  std::string fRawDataLabel; ///< ART module label for raw data
73  std::string fCellHitLabel; ///< ART module label for cell hits
74  std::string fClusterLabel; ///< ART module label for clusters
75  std::string fCleanupClusterLabel; ///< ART module label for cleanup clusters
76  std::string fTrackLabel; ///< ART module label for tracks
77 
78  bool fVerbose; ///< Enable/disable verbose output
79 
80  int fNSigFinal; ///< Number of signal (MC) hits seen by job
81  int fNBkgFinal; ///< Number of background hits seen by job
82 
85 
86  bool fRemoveFirstMicroslice; ///< Enable/disable removing hits from first microslice
87 
88  bool fRemoveLowHighADC; ///< Enable/disable removing these hits
89  int fLowADCThresh; ///< Min. acceptable ADC
90  int fHighADCThresh; ///< Max. acceptable ADC
91 
92  bool fRemoveColdHotChannels; ///< Enable/disable removing these hits
93  float fColdRateThreshold; ///< Min. acceptable channel hit rate
94  float fHotRateThreshold; ///< Max. acceptable channel hit rate
95  float fRateDuration; ///< Total time (s) to accumulate statistics
96 
97  bool fRemoveFEBFlashers; ///< Enable/disable removing these hits
98  unsigned int fInstigatorQ; ///< Min. accumulated charge to be a "flash instigator"
99  unsigned int fInstigatorT; ///< Time over which fInstigatorQ charge must be accumulated
100  unsigned int fVetoQ; ///< Min. charge for a hit to be a "flash hit"
101  unsigned int fVetoT; ///< Max. time after the
102 
103  bool fRemoveTrackActivity; ///< Enable/disable removing these hits
104  int fMuonEndTimeCut; ///< Min. time difference between hit and track end to reject [ns]
105  int fMuonBodyTimeCut; ///< Min. time difference between hit and track to reject [ns]
106  int fMuonEndSphereRadius; ///< Min. distance of hit from track end to reject [cm]
107  int fMuonBodyCylinderRadius; ///< Min. distance of hit from track to reject [cm]
108 
109  bool fRemovePhysicsSlices; ///< Enable/disable removing these hits
110 
111  bool fRemoveHighEnergyActivity; ///< Enable/disable removing hits from time windows with HE activity
112  float fPeakThreshold; ///< Number standard deviations above baseline for a peak that should be vetoed
113  float fVetoWindowPadding; ///< Fraction of peak width that should added to either side of TDC veto window
114 
117 };
118 
119 
120 // ............................................................................
122 fParams(p),
123 fRawDataLabel(p.get<std::string>("RawDataLabel")),
124 fCellHitLabel(p.get<std::string>("CellHitLabel")),
125 fClusterLabel(p.get<std::string>("ClusterLabel")),
126 fCleanupClusterLabel(p.get<std::string>("CleanupClusterLabel")),
127 fTrackLabel(p.get<std::string>("TrackLabel")),
128 fNSigFinal(0),
129 fNBkgFinal(0),
131 fVetoTimeTotal(0),
132 fRemoveFirstMicroslice(p.get<bool>("RemoveFirstMicroslice")),
133 fRemoveLowHighADC(p.get<bool>("RemoveLowHighADC")),
134 fLowADCThresh(p.get<unsigned int>("LowADCThresh")),
135 fHighADCThresh(p.get<unsigned int>("HighADCThresh")),
136 fRemoveColdHotChannels(p.get<bool>("RemoveColdHotChannels")),
137 fColdRateThreshold(p.get<float>("ColdRateThreshold")),
138 fHotRateThreshold(p.get<float>("HotRateThreshold")),
139 fRateDuration(p.get<float>("RateDuration")),
140 fRemoveFEBFlashers(p.get<bool>("RemoveFEBFlashers")),
141 fInstigatorQ(p.get<unsigned int>("InstigatorQ")),
142 fInstigatorT(p.get<unsigned int>("InstigatorT")),
143 fVetoQ(p.get<unsigned int>("VetoQ")),
144 fVetoT(p.get<unsigned int>("VetoT")),
145 fRemoveTrackActivity(p.get<bool>("RemoveTrackActivity")),
146 fMuonEndTimeCut(p.get<int>("MuonEndTimeCut")),
147 fMuonBodyTimeCut(p.get<int>("MuonBodyTimeCut")),
148 fMuonEndSphereRadius(p.get<int>("MuonEndSphereRadius")),
149 fMuonBodyCylinderRadius(p.get<int>("MuonBodyCylinderRadius")),
150 fRemovePhysicsSlices(p.get<bool>("RemovePhysicsSlices")),
151 fRemoveHighEnergyActivity(p.get<bool>("RemoveHighEnergyActivity")),
152 fPeakThreshold(p.get<float>("PeakThreshold")),
153 fVetoWindowPadding(p.get<float>("VetoWindowPadding")),
155 {
156  produces<std::vector<rb::CellHit>>();
157  produces<int>();
158 }
159 
160 
161 // ............................................................................
162 float sn::SNBackgroundRejection::FOM(std::vector<rb::CellHit> hits)
163 {
164  int s = 0;
165  int b = 0;
166 
167  for (rb::CellHit hit : hits) {
168  (hit.IsMC()) ? ++s : ++b;
169  }
170 
171  return (float)s / std::sqrt(s+b);
172 }
173 
174 // ............................................................................
176 {
177  uint64_t maxTimingMarker = 0x0;
178  uint64_t minTimingMarker = 0xFFFFFFFFFFFFFFFF;
179 
180  // Unpack raw event
182  rawEvt.readData(flat.getRawBufferPointer());
183 
184  // Loop over data blocks
185  size_t nDataBlocks = rawEvt.getDataBlockNumber();
186  for (size_t idxDB=0; idxDB<nDataBlocks; ++idxDB) {
187  rawEvt.setFloatingDataBlock(idxDB);
188  daqdataformats::RawDataBlock dataBlock = (*rawEvt.getFloatingDataBlock());
189 
190  // Loop over microslices
191  size_t nMicroBlocks = dataBlock.getNumMicroBlocks();
192  for (size_t idxMB=0; idxMB<nMicroBlocks; ++idxMB) {
193  dataBlock.setFloatingMicroBlock(idxMB);
194 
195  // Extract max/min timing marker across all microslices
196  uint64_t tm = dataBlock.getFloatingMicroBlock()->getMicroSlice()->getTimingMarker()->getTime();
197  if (tm > maxTimingMarker) {
198  maxTimingMarker = tm;
199  }
200  if (tm < minTimingMarker) {
201  minTimingMarker = tm;
202  }
203  }
204  }
205 
206  return std::make_pair(minTimingMarker, maxTimingMarker);
207 }
208 
209 
210 // ............................................................................
212 {
213  std::unique_ptr<std::vector<rb::CellHit>> product_cellhits(new std::vector<rb::CellHit>);
214  std::unique_ptr<int> product_livetime(new int);
215 
216  /* Get the FlatDAQData from the event */
218  e.getByLabel(fRawDataLabel, hdlFlatDaqData);
219  rawdata::FlatDAQData flatDaqData = hdlFlatDaqData->at(0);
220 
221  /* Get the trigger information from event */
223  e.getByLabel(fRawDataLabel, hdlTrigger);
224  const rawdata::RawTrigger rawTrigger = hdlTrigger->at(0);
225  uint64_t triggerStartTime = rawTrigger.fTriggerTimingMarker_TimeStart;
226  // NOTE: 1 unit of trigger length = 500 ns = 32 TDC
227  uint32_t triggerLengthTDC = rawTrigger.fTriggerRange_TriggerLength * 32;
228 
229  /* Get RawDigits from event, put them into a vector, and sort them by time */
231  e.getByLabel(fRawDataLabel, hdlDigits);
232  std::vector<art::Ptr<rawdata::RawDigit>> digits;
233  digits.reserve(hdlDigits->size());
234  int nHitSigBefore = 0;
235  int nHitBkgBefore = 0;
236  for (unsigned int idx=0; idx<hdlDigits->size(); ++idx){
237  art::Ptr<rawdata::RawDigit> digit(hdlDigits, idx);
238  digits.push_back(digit);
239  (digit->IsMC()) ? ++nHitSigBefore : ++nHitBkgBefore;
240  }
241 
242  /* Get CellHits from event, put them into a vector, and sort them by time */
244  e.getByLabel(fCellHitLabel, hdlHits);
245  std::vector<art::Ptr<rb::CellHit>> hits;
246  hits.reserve(hdlHits->size());
247  for (unsigned int idx=0; idx<hdlHits->size(); ++idx){
248  art::Ptr<rb::CellHit> hit(hdlHits, idx);
249 
250  // Add hit to channel map
252  fChannelMask->AddHit(*hit);
253  }
254 
255  hits.push_back(hit);
256  }
257  rb::SortByTime(hits);
258 
259  /* Accumulate channel hit stats or calculate rates */
261  fChannelMask->IncrementDuration((float)rawTrigger.fTriggerRange_TriggerLength * 500e-9);
262  } else {
264  if (fVerbose) std::cout << "Masked " << fChannelMask->MaskSize() << " channels." << std::endl;
265  fChannelMask->Print();
266  }
267 
268  /* Get Clusters from event */
270  e.getByLabel(fClusterLabel, hdlClusters);
271 
272  /* Get Cleanup Clusters from event */
273  art::Handle<std::vector<rb::Cluster>> hdlCleanupClusters;
274  e.getByLabel(fCleanupClusterLabel, hdlCleanupClusters);
275  std::vector<art::Ptr<rb::Cluster>> cleanupClusters;
276  art::fill_ptr_vector(cleanupClusters, hdlCleanupClusters);
277 
278  /* Get Tracks from event, put them in a ptrVector, and sort them by time */
280  e.getByLabel(fTrackLabel, hdlTracks);
281  art::FindOneP<rb::Cluster> clusterFromTrack(hdlTracks, e, fTrackLabel);
282  std::vector<art::Ptr<rb::Track>> tracks;
283  art::fill_ptr_vector(tracks, hdlTracks);
284  rb::SortTracksByTime(tracks);
285 
286 
287  /* ..... BEGIN BACKGROUND REJECTION ..... */
288 
289  // Run each algorithm, add to the hit veto map
290  if (fVerbose) std::cout << "=========== SN BACKGROUND REMOVAL ===========" << std::endl << std::endl;
291 
292  // Initialize hit veto map & hit removal classes
293  sn::HitVetoMap* vetoMapHits = new sn::HitVetoMap();
294 
295  /* Remove first microslice */
297  if (fVerbose) std::cout << "-- FIRST (DUPLICATED) MICROSLICE ------------" << std::endl;
298  std::pair<uint64_t,uint64_t> microsliceMarkers = this->MicrosliceTimeMarkers(flatDaqData);
299  std::cout << "• uslice start time = " << microsliceMarkers.first << std::endl;
300  std::cout << "• Remove hits between times: [" << microsliceMarkers.first << ", " << microsliceMarkers.first+3200 << "]" << std::endl;
301  for (art::Ptr<rb::CellHit> hit : hits) {
302  // Add first 50us to time window veto map (duplicate microslices)
303  // NOTE: 3200 64-MHz clock ticks = 50 us
304  if (hit->TDC() + triggerStartTime > microsliceMarkers.first + 3200) break;
305  vetoMapHits->AddHit(*hit);
306  }
307 
308  if (fVerbose) std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
309  }
310 
311  /* Hot/Cold Channel Remove */
313  if (fVerbose) std::cout << "-- COLD/HOT CHANNEL HITS --------------------" << std::endl;
315  coldHotChanRemover->remove(digits);
316  if (fVerbose) {
317  if (!fChannelMask->RatesCalculated()) {
318  std::cout << "• Accumulating statistics for cold/hot channel map..." << std::endl;
319  } else {
320  std::cout << "• Found " << coldHotChanRemover->NumRemovedCold() << " cold channel hits." << std::endl;
321  std::cout << "• Found " << coldHotChanRemover->NumRemovedHot() << " hot channel hits." << std::endl;
322  }
323  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
324  }
325  delete coldHotChanRemover;
326  }
327 
328  /* FEB Flasher Remove */
329  if (fRemoveFEBFlashers) {
330  if (fVerbose) std::cout << "-- FEB FLASHERS -----------------------------" << std::endl;
332  flashRemover->remove(digits);
333  if (fVerbose) {
334  std::cout << "• Found " << flashRemover->NInstigators() << " instigators of " << flashRemover->NFlasherHits() << " flasher hits." << std::endl;
335  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
336  }
337  delete flashRemover;
338  }
339 
340  /* Low/High ADC Remove */
341  if (fRemoveLowHighADC) {
342  if (fVerbose) std::cout << "-- LOW/HIGH-ADC HITS ------------------------" << std::endl;
344  adcRemover->remove(digits);
345  if (fVerbose) {
346  std::cout << "• Found " << adcRemover->NumRemovedLow() << " low-ADC hits." << std::endl;
347  std::cout << "• Found " << adcRemover->NumRemovedHigh() << " high-ADC hits." << std::endl;
348  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
349  }
350  delete adcRemover;
351  }
352 
353  /* Track & Michel Remove */
354  if (fRemoveTrackActivity) {
355  if (fVerbose) std::cout << "-- TRACK ACTIVITY HITS ----------------------" << std::endl;
356  sn::TrackActivityRemover* trackActivityRemover = new sn::TrackActivityRemover(*vetoMapHits, fParams, fGeom, clusterFromTrack);
358  trackActivityRemover->remove(hits, hdlTracks);
359  if (fVerbose) {
360  std::cout << "• Found " << trackActivityRemover->NumRemovedMichel() << " hits associated with Michel electrons." << std::endl;
361  std::cout << "• Found " << trackActivityRemover->NumRemovedBody() << " hits near track body." << std::endl;
362  std::cout << "• Found " << trackActivityRemover->NumRemovedTrack() << " track hits." << std::endl;
363  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
364  }
365  delete trackActivityRemover;
366  }
367 
368  /* Slice Hits Remove */
369  if (fRemovePhysicsSlices) {
370  if (fVerbose) std::cout << "-- SLICE HITS ----------------------" << std::endl;
371  sn::SliceRemover* sliceRemover = new sn::SliceRemover(*vetoMapHits);
372  sliceRemover->remove(hits, cleanupClusters);
373  if (fVerbose) {
374  std::cout << "• Found " << sliceRemover->NumRemoved()
375  << " hits associated with " << cleanupClusters.size()
376  << " physics clusters." << std::endl;
377  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
378  }
379  delete sliceRemover;
380  }
381 
382  /* High-Energy Activity Remove */
383  uint32_t TDCVetoed = 0;
385  if (fVerbose) std::cout << "-- HIGH-ENERGY ACTIVITY ---------------------" << std::endl;
386  sn::HighEnergyRemover* highEnergyRemover = new sn::HighEnergyRemover(*vetoMapHits);
387  highEnergyRemover->SetPeakThreshold(fPeakThreshold);
388  highEnergyRemover->SetVetoWindowPadding(fVetoWindowPadding);
389  highEnergyRemover->remove(hits);
390  TDCVetoed = highEnergyRemover->TotalTDCVetoed();
391  if (fVerbose) {
392  std::cout << "• Found " << highEnergyRemover->NPeaks() << " peaks" << std::endl;
393  std::cout << "• Vetoed " << highEnergyRemover->TotalTDCVetoed()
394  << " / " << triggerLengthTDC << " TDC ("
395  << (float)highEnergyRemover->TotalTDCVetoed() / (float)triggerLengthTDC * 100.0
396  << "%)" << std::endl;
397  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
398  }
399  delete highEnergyRemover;
400  }
401 
402  *product_livetime = triggerLengthTDC - TDCVetoed;
403  fTriggerTimeTotal += triggerLengthTDC;
404  fVetoTimeTotal += TDCVetoed;
405 
406  int nHitSigAfter = 0;
407  int nHitBkgAfter = 0;
408 
409  // Invert hit veto map
410  for (art::Ptr<rb::CellHit> hit : hits) {
411  if (!vetoMapHits->ContainsHit(*hit)) {
412  product_cellhits->push_back(*hit);
413  (hit->IsMC()) ? ++nHitSigAfter : ++nHitBkgAfter;
414  (hit->IsMC()) ? ++fNSigFinal : ++fNBkgFinal;
415  }
416  }
417 
418  delete vetoMapHits;
419 
420  /* ..... END BACKGROUND REJECTION ..... */
421 
422 
423  if (fVerbose) {
424  std::cout << "----------------------------------------------" << std::endl;
425  std::cout << "Total hits in event: " << hits.size() << std::endl;
426  std::cout << "Hits filtered: " << hits.size() - product_cellhits->size() << std::endl;
427  std::cout << "Hits passed: " << product_cellhits->size() << std::endl;
428  std::cout << "Signal loss: " << nHitSigBefore - nHitSigAfter
429  << " (" << (float)(nHitSigBefore-nHitSigAfter)/(float)nHitSigBefore * 100.0 << "%)" << std::endl;
430  std::cout << "Bkgrnd loss: " << nHitBkgBefore - nHitBkgAfter
431  << " (" << (float)(nHitBkgBefore-nHitBkgAfter)/(float)nHitBkgBefore * 100.0 << "%)" << std::endl;
432  std::cout << "Rejection power: " << ((float)(hits.size() - product_cellhits->size()) / (float)hits.size()) * 100.0
433  << "%" << std::endl << std::endl;
434  }
435 
436  // Calculate FOM, write value and config params to TTree.
437  if (fVerbose) {
438  float fom = this->FOM(*product_cellhits);
439  std::cout << "FOM = " << fom << std::endl;
440  std::cout << "==============================================" << std::endl << std::endl;
441  }
442 
443  e.put(std::move(product_livetime));
444  e.put(std::move(product_cellhits));
445  return;
446 }
447 
449 {
450  if (fVerbose) {
451  std::cout << std::endl;
452  std::cout << "----------------------------------------------" << std::endl;
453  std::cout << "JOB-END SUMMARY" << std::endl;
454  std::cout << "----------------------------------------------" << std::endl;
455  std::cout << "Final number of sig hits: " << fNSigFinal << std::endl;
456  std::cout << "Final number of bkg hits: " << fNBkgFinal << std::endl;
458  std::cout << "Final trigger time (TDC): " << fTriggerTimeTotal << std::endl;
459  std::cout << "Final veto time (TDC): " << fVetoTimeTotal << std::endl;
460  std::cout << "Final livetime (ms): " << (fTriggerTimeTotal-fVetoTimeTotal)*15.625*1e-6 << std::endl;
461  std::cout << "Final livetime loss (%): " << ((float)fVetoTimeTotal / (float)fTriggerTimeTotal)*100 << std::endl;
462  std::cout << "----------------------------------------------" << std::endl;
463  }
464 }
465 
int fNSigFinal
Number of signal (MC) hits seen by job.
std::string fClusterLabel
ART module label for clusters.
void remove(std::vector< art::Ptr< rb::CellHit >> &hits, std::vector< art::Ptr< rb::Cluster >> &clusters)
unsigned int fVetoT
Max. time after the.
void SetVetoRegion(int muonEndTimeCut, int muonBodyTimeCut, int muonEndSphereRadius, int muonBodyCylinderRadius)
unsigned int fVetoQ
Min. charge for a hit to be a "flash hit".
int fNBkgFinal
Number of background hits seen by job.
std::string fCleanupClusterLabel
ART module label for cleanup clusters.
bool fRemoveFirstMicroslice
Enable/disable removing hits from first microslice.
const char * p
Definition: xmltok.h:285
art::ServiceHandle< geo::Geometry > fGeom
T sqrt(T number)
Definition: d0nt_math.hpp:156
void IncrementDuration(float i)
size_t Size()
Definition: HitVetoMap.cxx:55
void SetVetoWindowPadding(float val)
std::pair< Spectrum *, CheatDecomp * > make_pair(SpectrumLoaderBase &loader_data, SpectrumLoaderBase &loader_mc, HistAxis *axis, Cut *cut, const SystShifts &shift, const Var &wei)
Definition: DataMCLoad.C:336
void SortByTime(std::vector< art::Ptr< rb::CellHit > > &c)
Sort c in time order (earliest to latest).
Definition: CellHit.cxx:134
SNBackgroundRejection(fhicl::ParameterSet const &p)
DEFINE_ART_MODULE(TestTMapFile)
SNBackgroundRejection & operator=(SNBackgroundRejection const &)=delete
void * getRawBufferPointer() const
Definition: FlatDAQData.h:21
bool ContainsHit(rawdata::RawDigit h)
Definition: HitVetoMap.cxx:41
float fColdRateThreshold
Min. acceptable channel hit rate.
int fMuonEndTimeCut
Min. time difference between hit and track end to reject [ns].
bool fRemoveTrackActivity
Enable/disable removing these hits.
ProductID put(std::unique_ptr< PROD > &&product)
Definition: Event.h:102
bool fRemoveFEBFlashers
Enable/disable removing these hits.
const XML_Char * s
Definition: expat.h:262
void SetPeakThreshold(float val)
int fMuonEndSphereRadius
Min. distance of hit from track end to reject [cm].
void SortTracksByTime(std::vector< art::Ptr< rb::Track >> &t)
Sort t in time order (earliest to latest).
Definition: Track.cxx:539
void hits()
Definition: readHits.C:15
unsigned int fInstigatorT
Time over which fInstigatorQ charge must be accumulated.
float fPeakThreshold
Number standard deviations above baseline for a peak that should be vetoed.
std::pair< uint64_t, uint64_t > MicrosliceTimeMarkers(rawdata::FlatDAQData &flat)
void AddHit(rawdata::RawDigit h)
Definition: HitVetoMap.cxx:27
int fMuonBodyTimeCut
Min. time difference between hit and track to reject [ns].
void remove(art::Ptr< rawdata::RawDigit > hit)
bool IsMC() const
Definition: RawDigit.h:108
bool fVerbose
Enable/disable verbose output.
void remove(art::Ptr< rawdata::RawDigit > hit)
Remove hits from hot and cold channels.
void remove(std::vector< art::Ptr< rb::CellHit >> &hits)
OStream cout
Definition: OStream.cxx:6
float FOM(std::vector< rb::CellHit > hits)
bool fRemoveColdHotChannels
Enable/disable removing these hits.
A rawdata::RawDigit with channel information decoded.
Definition: CellHit.h:27
std::string fCellHitLabel
ART module label for cell hits.
int fMuonBodyCylinderRadius
Min. distance of hit from track to reject [cm].
float fHotRateThreshold
Max. acceptable channel hit rate.
void remove(std::vector< art::Ptr< rawdata::RawDigit >> hits)
bool getByLabel(std::string const &label, std::string const &productInstanceName, Handle< PROD > &result) const
Definition: DataViewImpl.h:344
unsigned long long fTriggerTimingMarker_TimeStart
Definition: RawTrigger.h:38
bool fRemoveHighEnergyActivity
Enable/disable removing hits from time windows with HE activity.
Definition: structs.h:12
const hit & b
Definition: hits.cxx:21
void AddHit(rawdata::RawDigit d)
bool fRemovePhysicsSlices
Enable/disable removing these hits.
float fRateDuration
Total time (s) to accumulate statistics.
unsigned int fInstigatorQ
Min. accumulated charge to be a "flash instigator".
bool fRemoveLowHighADC
Enable/disable removing these hits.
uint32_t fTriggerRange_TriggerLength
Definition: RawTrigger.h:40
void remove(std::vector< art::Ptr< rb::CellHit >> &hits, art::Handle< std::vector< rb::Track >> &hdlTracks)
void fill_ptr_vector(std::vector< Ptr< T >> &ptrs, H const &h)
Definition: Ptr.h:464
int fHighADCThresh
Max. acceptable ADC.
Float_t e
Definition: plot.C:35
std::string fTrackLabel
ART module label for tracks.
float fVetoWindowPadding
Fraction of peak width that should added to either side of TDC veto window.
Definition: fwd.h:28
Encapsulate the geometry of one entire detector (near, far, ndos)
int fLowADCThresh
Min. acceptable ADC.
std::string fRawDataLabel
ART module label for raw data.
enum BeamMode string