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
16 #include "art_root_io/TFileService.h"
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  EDProducer(p),
123  fParams(p),
124 fRawDataLabel(p.get<std::string>("RawDataLabel")),
125 fCellHitLabel(p.get<std::string>("CellHitLabel")),
126 fClusterLabel(p.get<std::string>("ClusterLabel")),
127 fCleanupClusterLabel(p.get<std::string>("CleanupClusterLabel")),
128 fTrackLabel(p.get<std::string>("TrackLabel")),
129 fNSigFinal(0),
130 fNBkgFinal(0),
132 fVetoTimeTotal(0),
133 fRemoveFirstMicroslice(p.get<bool>("RemoveFirstMicroslice")),
134 fRemoveLowHighADC(p.get<bool>("RemoveLowHighADC")),
135 fLowADCThresh(p.get<unsigned int>("LowADCThresh")),
136 fHighADCThresh(p.get<unsigned int>("HighADCThresh")),
137 fRemoveColdHotChannels(p.get<bool>("RemoveColdHotChannels")),
138 fColdRateThreshold(p.get<float>("ColdRateThreshold")),
139 fHotRateThreshold(p.get<float>("HotRateThreshold")),
140 fRateDuration(p.get<float>("RateDuration")),
141 fRemoveFEBFlashers(p.get<bool>("RemoveFEBFlashers")),
142 fInstigatorQ(p.get<unsigned int>("InstigatorQ")),
143 fInstigatorT(p.get<unsigned int>("InstigatorT")),
144 fVetoQ(p.get<unsigned int>("VetoQ")),
145 fVetoT(p.get<unsigned int>("VetoT")),
146 fRemoveTrackActivity(p.get<bool>("RemoveTrackActivity")),
147 fMuonEndTimeCut(p.get<int>("MuonEndTimeCut")),
148 fMuonBodyTimeCut(p.get<int>("MuonBodyTimeCut")),
149 fMuonEndSphereRadius(p.get<int>("MuonEndSphereRadius")),
150 fMuonBodyCylinderRadius(p.get<int>("MuonBodyCylinderRadius")),
151 fRemovePhysicsSlices(p.get<bool>("RemovePhysicsSlices")),
152 fRemoveHighEnergyActivity(p.get<bool>("RemoveHighEnergyActivity")),
153 fPeakThreshold(p.get<float>("PeakThreshold")),
154 fVetoWindowPadding(p.get<float>("VetoWindowPadding")),
156 {
157  produces<std::vector<rb::CellHit>>();
158  produces<int>();
159 }
160 
161 
162 // ............................................................................
163 float sn::SNBackgroundRejection::FOM(std::vector<rb::CellHit> hits)
164 {
165  int s = 0;
166  int b = 0;
167 
168  for (rb::CellHit hit : hits) {
169  (hit.IsMC()) ? ++s : ++b;
170  }
171 
172  return (float)s / std::sqrt(s+b);
173 }
174 
175 // ............................................................................
177 {
178  uint64_t maxTimingMarker = 0x0;
179  uint64_t minTimingMarker = 0xFFFFFFFFFFFFFFFF;
180 
181  // Unpack raw event
183  rawEvt.readData(flat.getRawBufferPointer());
184 
185  // Loop over data blocks
186  size_t nDataBlocks = rawEvt.getDataBlockNumber();
187  for (size_t idxDB=0; idxDB<nDataBlocks; ++idxDB) {
188  rawEvt.setFloatingDataBlock(idxDB);
189  daqdataformats::RawDataBlock dataBlock = (*rawEvt.getFloatingDataBlock());
190 
191  // Loop over microslices
192  size_t nMicroBlocks = dataBlock.getNumMicroBlocks();
193  for (size_t idxMB=0; idxMB<nMicroBlocks; ++idxMB) {
194  dataBlock.setFloatingMicroBlock(idxMB);
195 
196  // Extract max/min timing marker across all microslices
197  uint64_t tm = dataBlock.getFloatingMicroBlock()->getMicroSlice()->getTimingMarker()->getTime();
198  if (tm > maxTimingMarker) {
199  maxTimingMarker = tm;
200  }
201  if (tm < minTimingMarker) {
202  minTimingMarker = tm;
203  }
204  }
205  }
206 
207  return std::make_pair(minTimingMarker, maxTimingMarker);
208 }
209 
210 
211 // ............................................................................
213 {
214  std::unique_ptr<std::vector<rb::CellHit>> product_cellhits(new std::vector<rb::CellHit>);
215  std::unique_ptr<int> product_livetime(new int);
216 
217  /* Get the FlatDAQData from the event */
219  e.getByLabel(fRawDataLabel, hdlFlatDaqData);
220  rawdata::FlatDAQData flatDaqData = hdlFlatDaqData->at(0);
221 
222  /* Get the trigger information from event */
224  e.getByLabel(fRawDataLabel, hdlTrigger);
225  const rawdata::RawTrigger rawTrigger = hdlTrigger->at(0);
226  uint64_t triggerStartTime = rawTrigger.fTriggerTimingMarker_TimeStart;
227  // NOTE: 1 unit of trigger length = 500 ns = 32 TDC
228  uint32_t triggerLengthTDC = rawTrigger.fTriggerRange_TriggerLength * 32;
229 
230  /* Get RawDigits from event, put them into a vector, and sort them by time */
232  e.getByLabel(fRawDataLabel, hdlDigits);
233  std::vector<art::Ptr<rawdata::RawDigit>> digits;
234  digits.reserve(hdlDigits->size());
235  int nHitSigBefore = 0;
236  int nHitBkgBefore = 0;
237  for (unsigned int idx=0; idx<hdlDigits->size(); ++idx){
238  art::Ptr<rawdata::RawDigit> digit(hdlDigits, idx);
239  digits.push_back(digit);
240  (digit->IsMC()) ? ++nHitSigBefore : ++nHitBkgBefore;
241  }
242 
243  /* Get CellHits from event, put them into a vector, and sort them by time */
245  e.getByLabel(fCellHitLabel, hdlHits);
246  std::vector<art::Ptr<rb::CellHit>> hits;
247  hits.reserve(hdlHits->size());
248  for (unsigned int idx=0; idx<hdlHits->size(); ++idx){
249  art::Ptr<rb::CellHit> hit(hdlHits, idx);
250 
251  // Add hit to channel map
253  fChannelMask->AddHit(*hit);
254  }
255 
256  hits.push_back(hit);
257  }
258  rb::SortByTime(hits);
259 
260  /* Accumulate channel hit stats or calculate rates */
262  fChannelMask->IncrementDuration((float)rawTrigger.fTriggerRange_TriggerLength * 500e-9);
263  } else {
265  if (fVerbose) std::cout << "Masked " << fChannelMask->MaskSize() << " channels." << std::endl;
266  fChannelMask->Print();
267  }
268 
269  /* Get Clusters from event */
271  e.getByLabel(fClusterLabel, hdlClusters);
272 
273  /* Get Cleanup Clusters from event */
274  art::Handle<std::vector<rb::Cluster>> hdlCleanupClusters;
275  e.getByLabel(fCleanupClusterLabel, hdlCleanupClusters);
276  std::vector<art::Ptr<rb::Cluster>> cleanupClusters;
277  art::fill_ptr_vector(cleanupClusters, hdlCleanupClusters);
278 
279  /* Get Tracks from event, put them in a ptrVector, and sort them by time */
281  e.getByLabel(fTrackLabel, hdlTracks);
282  art::FindOneP<rb::Cluster> clusterFromTrack(hdlTracks, e, fTrackLabel);
283  std::vector<art::Ptr<rb::Track>> tracks;
284  art::fill_ptr_vector(tracks, hdlTracks);
285  rb::SortTracksByTime(tracks);
286 
287 
288  /* ..... BEGIN BACKGROUND REJECTION ..... */
289 
290  // Run each algorithm, add to the hit veto map
291  if (fVerbose) std::cout << "=========== SN BACKGROUND REMOVAL ===========" << std::endl << std::endl;
292 
293  // Initialize hit veto map & hit removal classes
294  sn::HitVetoMap* vetoMapHits = new sn::HitVetoMap();
295 
296  /* Remove first microslice */
298  if (fVerbose) std::cout << "-- FIRST (DUPLICATED) MICROSLICE ------------" << std::endl;
299  std::pair<uint64_t,uint64_t> microsliceMarkers = this->MicrosliceTimeMarkers(flatDaqData);
300  std::cout << "• uslice start time = " << microsliceMarkers.first << std::endl;
301  std::cout << "• Remove hits between times: [" << microsliceMarkers.first << ", " << microsliceMarkers.first+3200 << "]" << std::endl;
302  for (art::Ptr<rb::CellHit> hit : hits) {
303  // Add first 50us to time window veto map (duplicate microslices)
304  // NOTE: 3200 64-MHz clock ticks = 50 us
305  if (hit->TDC() + triggerStartTime > microsliceMarkers.first + 3200) break;
306  vetoMapHits->AddHit(*hit);
307  }
308 
309  if (fVerbose) std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
310  }
311 
312  /* Hot/Cold Channel Remove */
314  if (fVerbose) std::cout << "-- COLD/HOT CHANNEL HITS --------------------" << std::endl;
316  coldHotChanRemover->remove(digits);
317  if (fVerbose) {
318  if (!fChannelMask->RatesCalculated()) {
319  std::cout << "• Accumulating statistics for cold/hot channel map..." << std::endl;
320  } else {
321  std::cout << "• Found " << coldHotChanRemover->NumRemovedCold() << " cold channel hits." << std::endl;
322  std::cout << "• Found " << coldHotChanRemover->NumRemovedHot() << " hot channel hits." << std::endl;
323  }
324  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
325  }
326  delete coldHotChanRemover;
327  }
328 
329  /* FEB Flasher Remove */
330  if (fRemoveFEBFlashers) {
331  if (fVerbose) std::cout << "-- FEB FLASHERS -----------------------------" << std::endl;
333  flashRemover->remove(digits);
334  if (fVerbose) {
335  std::cout << "• Found " << flashRemover->NInstigators() << " instigators of " << flashRemover->NFlasherHits() << " flasher hits." << std::endl;
336  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
337  }
338  delete flashRemover;
339  }
340 
341  /* Low/High ADC Remove */
342  if (fRemoveLowHighADC) {
343  if (fVerbose) std::cout << "-- LOW/HIGH-ADC HITS ------------------------" << std::endl;
345  adcRemover->remove(digits);
346  if (fVerbose) {
347  std::cout << "• Found " << adcRemover->NumRemovedLow() << " low-ADC hits." << std::endl;
348  std::cout << "• Found " << adcRemover->NumRemovedHigh() << " high-ADC hits." << std::endl;
349  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
350  }
351  delete adcRemover;
352  }
353 
354  /* Track & Michel Remove */
355  if (fRemoveTrackActivity) {
356  if (fVerbose) std::cout << "-- TRACK ACTIVITY HITS ----------------------" << std::endl;
357  sn::TrackActivityRemover* trackActivityRemover = new sn::TrackActivityRemover(*vetoMapHits, fParams, fGeom, clusterFromTrack);
359  trackActivityRemover->remove(hits, hdlTracks);
360  if (fVerbose) {
361  std::cout << "• Found " << trackActivityRemover->NumRemovedMichel() << " hits associated with Michel electrons." << std::endl;
362  std::cout << "• Found " << trackActivityRemover->NumRemovedBody() << " hits near track body." << std::endl;
363  std::cout << "• Found " << trackActivityRemover->NumRemovedTrack() << " track hits." << std::endl;
364  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
365  }
366  delete trackActivityRemover;
367  }
368 
369  /* Slice Hits Remove */
370  if (fRemovePhysicsSlices) {
371  if (fVerbose) std::cout << "-- SLICE HITS ----------------------" << std::endl;
372  sn::SliceRemover* sliceRemover = new sn::SliceRemover(*vetoMapHits);
373  sliceRemover->remove(hits, cleanupClusters);
374  if (fVerbose) {
375  std::cout << "• Found " << sliceRemover->NumRemoved()
376  << " hits associated with " << cleanupClusters.size()
377  << " physics clusters." << std::endl;
378  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
379  }
380  delete sliceRemover;
381  }
382 
383  /* High-Energy Activity Remove */
384  uint32_t TDCVetoed = 0;
386  if (fVerbose) std::cout << "-- HIGH-ENERGY ACTIVITY ---------------------" << std::endl;
387  sn::HighEnergyRemover* highEnergyRemover = new sn::HighEnergyRemover(*vetoMapHits);
388  highEnergyRemover->SetPeakThreshold(fPeakThreshold);
389  highEnergyRemover->SetVetoWindowPadding(fVetoWindowPadding);
390  highEnergyRemover->remove(hits);
391  TDCVetoed = highEnergyRemover->TotalTDCVetoed();
392  if (fVerbose) {
393  std::cout << "• Found " << highEnergyRemover->NPeaks() << " peaks" << std::endl;
394  std::cout << "• Vetoed " << highEnergyRemover->TotalTDCVetoed()
395  << " / " << triggerLengthTDC << " TDC ("
396  << (float)highEnergyRemover->TotalTDCVetoed() / (float)triggerLengthTDC * 100.0
397  << "%)" << std::endl;
398  std::cout << "Veto map size: " << vetoMapHits->Size() << std::endl << std::endl;
399  }
400  delete highEnergyRemover;
401  }
402 
403  *product_livetime = triggerLengthTDC - TDCVetoed;
404  fTriggerTimeTotal += triggerLengthTDC;
405  fVetoTimeTotal += TDCVetoed;
406 
407  int nHitSigAfter = 0;
408  int nHitBkgAfter = 0;
409 
410  // Invert hit veto map
411  for (art::Ptr<rb::CellHit> hit : hits) {
412  if (!vetoMapHits->ContainsHit(*hit)) {
413  product_cellhits->push_back(*hit);
414  (hit->IsMC()) ? ++nHitSigAfter : ++nHitBkgAfter;
415  (hit->IsMC()) ? ++fNSigFinal : ++fNBkgFinal;
416  }
417  }
418 
419  delete vetoMapHits;
420 
421  /* ..... END BACKGROUND REJECTION ..... */
422 
423 
424  if (fVerbose) {
425  std::cout << "----------------------------------------------" << std::endl;
426  std::cout << "Total hits in event: " << hits.size() << std::endl;
427  std::cout << "Hits filtered: " << hits.size() - product_cellhits->size() << std::endl;
428  std::cout << "Hits passed: " << product_cellhits->size() << std::endl;
429  std::cout << "Signal loss: " << nHitSigBefore - nHitSigAfter
430  << " (" << (float)(nHitSigBefore-nHitSigAfter)/(float)nHitSigBefore * 100.0 << "%)" << std::endl;
431  std::cout << "Bkgrnd loss: " << nHitBkgBefore - nHitBkgAfter
432  << " (" << (float)(nHitBkgBefore-nHitBkgAfter)/(float)nHitBkgBefore * 100.0 << "%)" << std::endl;
433  std::cout << "Rejection power: " << ((float)(hits.size() - product_cellhits->size()) / (float)hits.size()) * 100.0
434  << "%" << std::endl << std::endl;
435  }
436 
437  // Calculate FOM, write value and config params to TTree.
438  if (fVerbose) {
439  float fom = this->FOM(*product_cellhits);
440  std::cout << "FOM = " << fom << std::endl;
441  std::cout << "==============================================" << std::endl << std::endl;
442  }
443 
444  e.put(std::move(product_livetime));
445  e.put(std::move(product_cellhits));
446  return;
447 }
448 
450 {
451  if (fVerbose) {
452  std::cout << std::endl;
453  std::cout << "----------------------------------------------" << std::endl;
454  std::cout << "JOB-END SUMMARY" << std::endl;
455  std::cout << "----------------------------------------------" << std::endl;
456  std::cout << "Final number of sig hits: " << fNSigFinal << std::endl;
457  std::cout << "Final number of bkg hits: " << fNBkgFinal << std::endl;
459  std::cout << "Final trigger time (TDC): " << fTriggerTimeTotal << std::endl;
460  std::cout << "Final veto time (TDC): " << fVetoTimeTotal << std::endl;
461  std::cout << "Final livetime (ms): " << (fTriggerTimeTotal-fVetoTimeTotal)*15.625*1e-6 << std::endl;
462  std::cout << "Final livetime loss (%): " << ((float)fVetoTimeTotal / (float)fTriggerTimeTotal)*100 << std::endl;
463  std::cout << "----------------------------------------------" << std::endl;
464  }
465 }
466 
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
EDProducer(fhicl::ParameterSet const &pset)
Definition: EDProducer.h:20
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.
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].
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
Definition: DataViewImpl.h:446
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)
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:291
int fHighADCThresh
Max. acceptable ADC.
Float_t e
Definition: plot.C:35
ProductID put(std::unique_ptr< PROD > &&edp, FullSemantic< Level::Run > const semantic)
Definition: DataViewImpl.h:730
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:29
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