All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
sbndaq::MetricProducer Class Reference
Inheritance diagram for sbndaq::MetricProducer:

Public Member Functions

 MetricProducer (fhicl::ParameterSet const &p)
 
 MetricProducer (MetricProducer const &)=delete
 
 MetricProducer (MetricProducer &&)=delete
 
MetricProduceroperator= (MetricProducer const &)=delete
 
MetricProduceroperator= (MetricProducer &&)=delete
 
void produce (art::Event &evt) override
 

Private Member Functions

void analyze_crt_fragment (artdaq::Fragment &frag)
 
void checkCAEN1730FragmentTimeStamp (const artdaq::Fragment &frag)
 
void analyzeCAEN1730Fragment (const artdaq::Fragment &frag)
 
void estimateBaseline (int i_ch)
 
void SimpleThreshAlgo (int i_ch)
 

Private Attributes

art::Persistable is_persistable_
 
int fBeamWindowStart
 
int fBeamWindowEnd
 
bool fVerbose
 
bool fcrt_metrics
 
int hitsperplane [7]
 
bool fpmt_metrics
 
double fTriggerTimeOffset
 
double fBeamWindowLength
 
uint32_t fWvfmLength
 
std::string fBaselineAlgo
 
double fInputBaseline
 
double fInputBaselineSigma
 
int fADCThreshold
 
bool fFindPulses
 
double fPEArea
 
int fRun
 
int fSubrun
 
art::EventNumber_t fEvent
 
opdet::sbndPDMapAlg pdMap
 
std::vector< unsigned int > channelList
 
bool foundBeamTrigger
 
uint32_t beamWindowStart
 
uint32_t beamWindowEnd
 
uint32_t fTriggerTime
 
bool fWvfmsFound
 
std::vector< std::vector
< uint16_t > > 
fWvfmsVec
 
std::vector
< sbnd::trigger::pmtInfo
fpmtInfoVec
 
int num_crt_frags
 
int num_pmt_frags
 

Detailed Description

Definition at line 39 of file MetricProducer_module.cc.

Constructor & Destructor Documentation

sbndaq::MetricProducer::MetricProducer ( fhicl::ParameterSet const &  p)
explicit

Definition at line 119 of file MetricProducer_module.cc.

120  : EDProducer{p},
121  is_persistable_(p.get<bool>("is_persistable", true) ? art::Persistable::Yes : art::Persistable::No),
122  fBeamWindowStart(p.get<int>("BeamWindowStart",320000)),
123  fBeamWindowEnd(p.get<int>("BeamWindowEnd",350000)),
124  fVerbose(p.get<bool>("Verbose",false)),
125  fcrt_metrics(p.get<bool>("crt_metrics",true)),
126  fpmt_metrics(p.get<bool>("pmt_metrics",true)),
127  fTriggerTimeOffset(p.get<double>("TriggerTimeOffset", 0.5)),
128  fBeamWindowLength(p.get<double>("BeamWindowLength", 1.6)),
129  fWvfmLength(p.get<uint32_t>("WvfmLength", 5120)),
130  fBaselineAlgo(p.get<std::string>("BaselineAlgo", "estimate")),
131  fInputBaseline(p.get<double>("InputBaseline", 8000)),
132  fInputBaselineSigma(p.get<double>("InputBaselineSigma", 2)),
133  fADCThreshold(p.get<double>("ADCThreshold", 7960)),
134  fFindPulses(p.get<bool>("FindPulses", false)),
135  fPEArea(p.get<double>("PEArea", 66.33))
136  {
137  // Call appropriate produces<>() functions here.
138  produces< sbndaq::CRTmetric >("", is_persistable_);
139 
140  produces< sbnd::trigger::pmtSoftwareTrigger >("", is_persistable_);
141 
143  beamWindowEnd = beamWindowStart + fBeamWindowLength*1000;
144 
145  // build PD map and channel list
146  auto subsetCondition = [](auto const& i)->bool { return i["pd_type"] == "pmt_coated" || i["pd_type"] == "pmt_uncoated"; };
147  auto pmtMap = pdMap.getCollectionFromCondition(subsetCondition);
148  for(auto const& i:pmtMap){
149  channelList.push_back(i["channel"]);
150  }
151  // Call appropriate consumes<>() for any products to be retrieved by this module.
152 }
std::vector< unsigned int > channelList
pdgs p
Definition: selectors.fcl:22
nlohmann::json getCollectionFromCondition(Func condition)
Definition: sbndPDMapAlg.hh:85
art::Persistable is_persistable_
sbndaq::MetricProducer::MetricProducer ( MetricProducer const &  )
delete
sbndaq::MetricProducer::MetricProducer ( MetricProducer &&  )
delete

Member Function Documentation

void sbndaq::MetricProducer::analyze_crt_fragment ( artdaq::Fragment &  frag)
private

Definition at line 347 of file MetricProducer_module.cc.

348 {
349 
350 
351  sbndaq::BernCRTFragmentV2 bern_fragment(frag);
352 
353  // use fragment ID to get plane information
354  const sbndaq::BernCRTFragmentMetadataV2* md = bern_fragment.metadata();
355  //frag.sequenceID()
356  auto thisone = frag.fragmentID(); uint plane = (thisone & 0x0700) >> 8;
357  if (plane>7) {std::cout << "bad plane value " << plane << std::endl; plane=0;}
358 
359  for(unsigned int iHit = 0; iHit < md->hits_in_fragment(); iHit++) {
360  sbndaq::BernCRTHitV2 const* bevt = bern_fragment.eventdata(iHit);
361  // require that this is data and not clock reset (0xC), and that the ts1 time is valid (0x2)
362  auto thisflag = bevt->flags;
363  if (thisflag & 0x2 && !(thisflag & 0xC) ) {
364  // check ts1 for beam window
365  auto thistime=bevt->ts1;
366  if ((int)thistime>fBeamWindowStart && (int)thistime<fBeamWindowEnd) hitsperplane[plane]++;
367  //CRTMetricInfo->hitsperplane[plane]++;
368  }
369  }
370 
371 
372 
373 }//analyze crt fragments
BEGIN_PROLOG could also be cout
void sbndaq::MetricProducer::analyzeCAEN1730Fragment ( const artdaq::Fragment &  frag)
private

Definition at line 404 of file MetricProducer_module.cc.

404  {
405 
406  // access fragment ID; index of fragment out of set of 8 fragments
407  int fragId = static_cast<int>(frag.fragmentID());
408 
409  // access waveforms in fragment and save
410  const uint16_t* data_begin = reinterpret_cast<const uint16_t*>(frag.dataBeginBytes()
411  + sizeof(sbndaq::CAENV1730EventHeader));
412  const uint16_t* value_ptr = data_begin;
413  uint16_t value = 0;
414 
415  // channel offset
416  size_t nChannels = 15; // 15 pmts per fragment
417  size_t ch_offset = 0;
418 
419  // loop over channels
420  for (size_t i_ch = 0; i_ch < nChannels; ++i_ch){
421  fWvfmsVec[i_ch + nChannels*fragId].resize(fWvfmLength);
422  ch_offset = (size_t)(i_ch * fWvfmLength);
423  //--loop over waveform samples
424  for(size_t i_t = 0; i_t < fWvfmLength; ++i_t){
425  value_ptr = data_begin + ch_offset + i_t; // pointer arithmetic
426  value = *(value_ptr);
427  fWvfmsVec[i_ch + nChannels*fragId][i_t] = value;
428  } //--end loop samples
429  } //--end loop channels
430 }//analyze caen 1730 fragment
temporary value
std::vector< std::vector< uint16_t > > fWvfmsVec
void sbndaq::MetricProducer::checkCAEN1730FragmentTimeStamp ( const artdaq::Fragment &  frag)
private

Definition at line 376 of file MetricProducer_module.cc.

376  {
377 
378  // get fragment metadata
379  sbndaq::CAENV1730Fragment bb(frag);
380  auto const* md = bb.Metadata();
381 
382  // access timestamp
383  uint32_t timestamp = md->timeStampNSec;
384 
385  // access beam signal, in ch15 of first PMT of each fragment set
386  // check entry 500 (0us), at trigger time
387  const uint16_t* data_begin = reinterpret_cast<const uint16_t*>(frag.dataBeginBytes()
388  + sizeof(sbndaq::CAENV1730EventHeader));
389  const uint16_t* value_ptr = data_begin;
390  uint16_t value = 0;
391 
392  size_t ch_offset = (size_t)(15*fWvfmLength);
393  size_t tr_offset = fTriggerTimeOffset*1e3;
394 
395  value_ptr = data_begin + ch_offset + tr_offset; // pointer arithmetic
396  value = *(value_ptr);
397 
398  if (value == 1 && timestamp >= beamWindowStart && timestamp <= beamWindowEnd) {
399  foundBeamTrigger = true;
400  fTriggerTime = timestamp;
401  }
402 }//check caen 1730 timestamp
temporary value
void sbndaq::MetricProducer::estimateBaseline ( int  i_ch)
private

Definition at line 432 of file MetricProducer_module.cc.

432  {
433  auto wvfm = fWvfmsVec[i_ch];
434  auto &pmtInfo = fpmtInfoVec[i_ch];
435  // assuming that the first 500 ns doesn't include peaks, find the mean of the ADC count as the baseline
436  std::vector<uint16_t> subset = std::vector<uint16_t>(wvfm.begin(), wvfm.begin()+250);
437  double subset_mean = (std::accumulate(subset.begin(), subset.end(), 0))/(subset.size());
438  double val = 0;
439  for (size_t i=0; i<subset.size();i++){ val += (subset[i] - subset_mean)*(subset[i] - subset_mean);}
440  double subset_stddev = sqrt(val/subset.size());
441 
442  // if the first 500 ns seem to be messy, use the last 500
443  if (subset_stddev > 3){ // make this fcl parameter?
444  val = 0; subset.clear(); subset_stddev = 0;
445  subset = std::vector<uint16_t>(wvfm.end()-500, wvfm.end());
446  subset_mean = (std::accumulate(subset.begin(), subset.end(), 0))/(subset.size());
447  for (size_t i=0; i<subset.size();i++){ val += (subset[i] - subset_mean)*(subset[i] - subset_mean);}
448  subset_stddev = sqrt(val/subset.size());
449  }
450  pmtInfo.baseline = subset_mean;
451  pmtInfo.baselineSigma = subset_stddev;
452 }//estimateBaseline
std::vector< sbnd::trigger::pmtInfo > fpmtInfoVec
std::vector< std::vector< uint16_t > > fWvfmsVec
MetricProducer& sbndaq::MetricProducer::operator= ( MetricProducer const &  )
delete
MetricProducer& sbndaq::MetricProducer::operator= ( MetricProducer &&  )
delete
void sbndaq::MetricProducer::produce ( art::Event &  evt)
override

Definition at line 155 of file MetricProducer_module.cc.

156 {
157 
158  // load event information
159  fRun = evt.run();
160  fSubrun = evt.subRun();
161  fEvent = evt.event();
162 
163  if (fVerbose) std::cout << "Processing: Run " << fRun << ", Subrun " << fSubrun << ", Event " << fEvent << std::endl;
164 
165  // object to store required trigger information in
166  std::unique_ptr<sbndaq::CRTmetric> CRTMetricInfo = std::make_unique<sbndaq::CRTmetric>();
167 
168  // object to store trigger metrics in
169  std::unique_ptr<sbnd::trigger::pmtSoftwareTrigger> pmtSoftwareTriggerMetrics = std::make_unique<sbnd::trigger::pmtSoftwareTrigger>();
170 
171  // clear variables at the beginning of the event
172  // move this to constructor??
173  for (int ip=0;ip<7;++ip) { CRTMetricInfo->hitsperplane[ip]=0; hitsperplane[ip]=0;}
174  foundBeamTrigger = false;
175  fWvfmsFound = false;
176  fWvfmsVec.clear(); fWvfmsVec.resize(15*8); // 15 pmt channels per fragment, 8 fragments per trigger
177  fpmtInfoVec.clear(); fpmtInfoVec.resize(15*8);
178 
179  // get fragment handles
180  std::vector<art::Handle<artdaq::Fragments>> fragmentHandles = evt.getMany<std::vector<artdaq::Fragment>>();
181 
182  // loop over fragment handles
183  for (auto handle : fragmentHandles) {
184  if (!handle.isValid() || handle->size() == 0) continue;
185 
186  num_crt_frags = 0;
187  num_pmt_frags = 0;
188 
189  if (handle->front().type() == artdaq::Fragment::ContainerFragmentType) {
190  // container fragment
191  for (auto cont : *handle) {
192  artdaq::ContainerFragment contf(cont);
193  if (contf.fragment_type() == sbndaq::detail::FragmentType::BERNCRTV2){
194  if (fVerbose) std::cout << " Found " << contf.block_count() << " CRT Fragments in container " << std::endl;
195  if (fcrt_metrics){
196  for (size_t ii = 0; ii < contf.block_count(); ++ii) analyze_crt_fragment(*contf[ii].get());
197  }
198  }
199  }
200  }
201  else {
202  // normal fragment
203  size_t beamFragmentIdx = -1;
204  for (auto frag : *handle){
205  beamFragmentIdx++;
206  if (frag.type()==sbndaq::detail::FragmentType::BERNCRTV2) {
207  num_crt_frags++;
209  }
210 
211 
212 
213  if (frag.type()==sbndaq::detail::FragmentType::CAENV1730) {
214  num_pmt_frags++;
215  if (fpmt_metrics){
216  // identify whether any fragments correspond to the beam spill
217  // loop over fragments, in steps of 8
218  //size_t beamFragmentIdx = 9999;
219  //for (size_t fragmentIdx = 0; fragmentIdx < handle->size(); fragmentIdx += 8) {
220  if (!foundBeamTrigger){
221  checkCAEN1730FragmentTimeStamp(frag);//handle->at(fragmentIdx));
222  if (foundBeamTrigger) {
223  //beamFragmentIdx = fragmentIdx;
224  if (fVerbose) std::cout << "Found fragment in time with beam" << std::endl;// at index: " << beamFragmentIdx << std::endl;
225  //break;
226  }
227 
228  // if set of fragment in time with beam found, process waveforms
229  if (foundBeamTrigger && beamFragmentIdx != 9999) {
230  for (size_t fragmentIdx = beamFragmentIdx; fragmentIdx < beamFragmentIdx+8; fragmentIdx++) {
231  analyzeCAEN1730Fragment(handle->at(fragmentIdx));
232  }
233  fWvfmsFound = true;
234  }
235  }
236  }//if saving pmt metrics
237  }//if is pmt frag
238 
239  }//loop over frags
240  }
241 
242  if (fVerbose) std::cout << "Found " << num_crt_frags << " BERNCRTV2 fragments" << std::endl;
243  if (fVerbose) std::cout << "Found " << num_pmt_frags << " CAEN1730 fragments" << std::endl;
244 
245  } // loop over frag handles
246 
247  if (fcrt_metrics){
248 
249  for (int i=0;i<7;++i) {CRTMetricInfo->hitsperplane[i] = hitsperplane[i];}
250 
251  if (fVerbose) {
252  std::cout << "CRT hit count during beam spill ";
253  for (int i=0;i<7;++i) std::cout << i << ": " << CRTMetricInfo->hitsperplane[i] << " " ;
254  std::cout << std::endl;
255  }
256 
257 
258  }//if save crt metrics
259 
260  if (fpmt_metrics){
261 
262  if (foundBeamTrigger && fWvfmsFound) {
263 
264  pmtSoftwareTriggerMetrics->foundBeamTrigger = true;
265  // store timestamp of trigger, relative to beam window start
266  double triggerTimeStamp = fTriggerTime - beamWindowStart;
267  pmtSoftwareTriggerMetrics->triggerTimestamp = triggerTimeStamp;
268  if (fVerbose) std::cout << "Saving trigger timestamp: " << triggerTimeStamp << " ns" << std::endl;
269 
270  double promptPE = 0;
271  double prelimPE = 0;
272 
273  int nAboveThreshold = 0;
274  // find the waveform bins that correspond to the start and end of the extended spill window (0 -> 1.8 us) within the 10 us waveform
275  // if the triggerTimeStamp < 1000, the beginning of the beam spill is *not* contained within the waveform
276  int beamStartBin = (triggerTimeStamp >= 1000)? 0 : int(500 - abs((triggerTimeStamp-1000)/2));
277  int beamEndBin = (triggerTimeStamp >= 1000)? int(500 + (fBeamWindowLength*1e3 - triggerTimeStamp)/2) : (beamStartBin + (fBeamWindowLength*1e3)/2);
278 
279  // wvfm loop to calculate metrics
280  for (int i_ch = 0; i_ch < 120; ++i_ch){
281  auto &pmtInfo = fpmtInfoVec.at(i_ch);
282  auto wvfm = fWvfmsVec[i_ch];
283 
284  // assign channel
285  pmtInfo.channel = channelList.at(i_ch);
286 
287  // calculate baseline
288  if (fBaselineAlgo == "constant"){ pmtInfo.baseline=fInputBaseline; pmtInfo.baselineSigma = fInputBaselineSigma; }
289  else if (fBaselineAlgo == "estimate") estimateBaseline(i_ch);
290 
291  // count number of PMTs above threshold
292  for (int bin = beamStartBin; bin < beamEndBin; ++bin){
293  auto adc = wvfm[bin];
294  if (adc < fADCThreshold){ nAboveThreshold++; break; }
295  }
296 
297  // quick estimate prompt and preliminary light, assuming sampling rate of 500 MHz (2 ns per bin)
298  double baseline = pmtInfo.baseline;
299  auto prompt_window = std::vector<uint16_t>(wvfm.begin()+500, wvfm.begin()+1000);
300  auto prelim_window = std::vector<uint16_t>(wvfm.begin()+beamStartBin, wvfm.begin()+500);
301  if (fFindPulses == false){
302  double ch_promptPE = (baseline-(*std::min_element(prompt_window.begin(), prompt_window.end())))/8;
303  double ch_prelimPE = (baseline-(*std::min_element(prelim_window.begin(), prelim_window.end())))/8;
304  promptPE += ch_promptPE;
305  prelimPE += ch_prelimPE;
306  }
307 
308  // pulse finder + prompt and prelim calculation with pulses
309  if (fFindPulses == true){
310  SimpleThreshAlgo(i_ch);
311  for (auto pulse : pmtInfo.pulseVec){
312  if (pulse.t_start > 500 && pulse.t_end < 550) promptPE+=pulse.pe;
313  if ((triggerTimeStamp) >= 1000){ if (pulse.t_end < 500) prelimPE+=pulse.pe; }
314  else if (triggerTimeStamp < 1000){
315  if (pulse.t_start > (500 - abs((triggerTimeStamp-1000)/2)) && pulse.t_end < 500) prelimPE+=pulse.pe;
316  }
317  }
318  }
319  } // end of wvfm loop
320 
321  pmtSoftwareTriggerMetrics->nAboveThreshold = nAboveThreshold;
322  pmtSoftwareTriggerMetrics->promptPE = promptPE;
323  pmtSoftwareTriggerMetrics->prelimPE = prelimPE;
324  if (fVerbose) std::cout << "nPMTs Above Threshold: " << nAboveThreshold << std::endl;
325  if (fVerbose) std::cout << "prompt pe: " << promptPE << std::endl;
326  if (fVerbose) std::cout << "prelim pe: " << prelimPE << std::endl;
327  }
328  else{
329  if (fVerbose) std::cout << "Beam and wvfms not found" << std::endl;
330  pmtSoftwareTriggerMetrics->foundBeamTrigger = false;
331  pmtSoftwareTriggerMetrics->triggerTimestamp = -9999;
332  pmtSoftwareTriggerMetrics->nAboveThreshold = -9999;
333  pmtSoftwareTriggerMetrics->promptPE = -9999;
334  pmtSoftwareTriggerMetrics->prelimPE = -9999;
335  }
336 
337  }//if save pmt metrics
338 
339  // add to event
340  evt.put(std::move(CRTMetricInfo));
341  evt.put(std::move(pmtSoftwareTriggerMetrics));
342 
343 }//produce
std::vector< unsigned int > channelList
unsigned int event
Definition: DataStructs.h:634
unsigned int run
Definition: DataStructs.h:635
void analyze_crt_fragment(artdaq::Fragment &frag)
std::vector< sbnd::trigger::pmtInfo > fpmtInfoVec
constexpr details::BinObj< T > bin(T value)
Returns a wrapper to print the specified data in binary format.
int hitsperplane[7]
Definition: CRTmetric.hh:13
T abs(T value)
void analyzeCAEN1730Fragment(const artdaq::Fragment &frag)
BEGIN_PROLOG baseline
void checkCAEN1730FragmentTimeStamp(const artdaq::Fragment &frag)
unsigned int subRun
Definition: DataStructs.h:636
TCEvent evt
Definition: DataStructs.cxx:8
std::vector< std::vector< uint16_t > > fWvfmsVec
BEGIN_PROLOG could also be cout
void sbndaq::MetricProducer::SimpleThreshAlgo ( int  i_ch)
private

Definition at line 454 of file MetricProducer_module.cc.

454  {
455  auto wvfm = fWvfmsVec[i_ch];
456  auto &pmtInfo = fpmtInfoVec[i_ch];
457  double baseline = pmtInfo.baseline;
458  double baseline_sigma = pmtInfo.baselineSigma;
459 
460  bool fire = false; // bool for if pulse has been detected
461  int counter = 0; // counts the bin of the waveform
462 
463  // these should be fcl parameters
464  double start_adc_thres = 5, end_adc_thres = 2;
465  double nsigma_start = 5, nsigma_end = 3;
466 
467  auto start_threshold = ( start_adc_thres > (nsigma_start * baseline_sigma) ? (baseline-start_adc_thres) : (baseline-(nsigma_start * baseline_sigma)));
468  auto end_threshold = ( end_adc_thres > (nsigma_end * baseline_sigma) ? (baseline - end_adc_thres) : (baseline - (nsigma_end * baseline_sigma)));
469 
470  std::vector<sbnd::trigger::pmtPulse> pulse_vec;
472  pulse.area = 0; pulse.peak = 0; pulse.t_start = 0; pulse.t_end = 0; pulse.t_peak = 0;
473  for (auto const &adc : wvfm){
474  if ( !fire && ((double)adc) <= start_threshold ){ // if its a new pulse
475  fire = true;
476  //vic: i move t_start back one, this helps with porch
477  pulse.t_start = counter - 1 > 0 ? counter - 1 : counter;
478  }
479 
480  if( fire && ((double)adc) > end_threshold ){ // found end of a pulse
481  fire = false;
482  //vic: i move t_start forward one, this helps with tail
483  pulse.t_end = counter < ((int)wvfm.size()) ? counter : counter - 1;
484  pulse_vec.push_back(pulse);
485  pulse.area = 0; pulse.peak = 0; pulse.t_start = 0; pulse.t_end = 0; pulse.t_peak = 0;
486  }
487 
488  if(fire){ // if we're in a pulse
489  pulse.area += (baseline-(double)adc);
490  if (pulse.peak > (baseline-(double)adc)) { // Found a new maximum
491  pulse.peak = (baseline-(double)adc);
492  pulse.t_peak = counter;
493  }
494  }
495  counter++;
496  }
497 
498  if(fire){ // Take care of a pulse that did not finish within the readout window.
499  fire = false;
500  pulse.t_end = counter - 1;
501  pulse_vec.push_back(pulse);
502  pulse.area = 0; pulse.peak = 0; pulse.t_start = 0; pulse.t_end = 0; pulse.t_peak = 0;
503  }
504 
505  pmtInfo.pulseVec = pulse_vec;
506  // calculate PE from area
507  for (auto &pulse : pmtInfo.pulseVec){pulse.pe = pulse.area/fPEArea;}
508 }//SimpleThreshAlgo
std::vector< sbnd::trigger::pmtInfo > fpmtInfoVec
auto counter(T begin, T end)
Returns an object to iterate values from begin to end in a range-for loop.
Definition: counter.h:285
BEGIN_PROLOG baseline
std::vector< std::vector< uint16_t > > fWvfmsVec

Member Data Documentation

uint32_t sbndaq::MetricProducer::beamWindowEnd
private

Definition at line 95 of file MetricProducer_module.cc.

uint32_t sbndaq::MetricProducer::beamWindowStart
private

Definition at line 94 of file MetricProducer_module.cc.

std::vector<unsigned int> sbndaq::MetricProducer::channelList
private

Definition at line 89 of file MetricProducer_module.cc.

int sbndaq::MetricProducer::fADCThreshold
private

Definition at line 79 of file MetricProducer_module.cc.

std::string sbndaq::MetricProducer::fBaselineAlgo
private

Definition at line 76 of file MetricProducer_module.cc.

int sbndaq::MetricProducer::fBeamWindowEnd
private

Definition at line 61 of file MetricProducer_module.cc.

double sbndaq::MetricProducer::fBeamWindowLength
private

Definition at line 73 of file MetricProducer_module.cc.

int sbndaq::MetricProducer::fBeamWindowStart
private

Definition at line 60 of file MetricProducer_module.cc.

bool sbndaq::MetricProducer::fcrt_metrics
private

Definition at line 63 of file MetricProducer_module.cc.

art::EventNumber_t sbndaq::MetricProducer::fEvent
private

Definition at line 85 of file MetricProducer_module.cc.

bool sbndaq::MetricProducer::fFindPulses
private

Definition at line 80 of file MetricProducer_module.cc.

double sbndaq::MetricProducer::fInputBaseline
private

Definition at line 77 of file MetricProducer_module.cc.

double sbndaq::MetricProducer::fInputBaselineSigma
private

Definition at line 78 of file MetricProducer_module.cc.

bool sbndaq::MetricProducer::foundBeamTrigger
private

Definition at line 93 of file MetricProducer_module.cc.

double sbndaq::MetricProducer::fPEArea
private

Definition at line 81 of file MetricProducer_module.cc.

bool sbndaq::MetricProducer::fpmt_metrics
private

Definition at line 71 of file MetricProducer_module.cc.

std::vector<sbnd::trigger::pmtInfo> sbndaq::MetricProducer::fpmtInfoVec
private

Definition at line 103 of file MetricProducer_module.cc.

int sbndaq::MetricProducer::fRun
private

Definition at line 84 of file MetricProducer_module.cc.

int sbndaq::MetricProducer::fSubrun
private

Definition at line 84 of file MetricProducer_module.cc.

uint32_t sbndaq::MetricProducer::fTriggerTime
private

Definition at line 98 of file MetricProducer_module.cc.

double sbndaq::MetricProducer::fTriggerTimeOffset
private

Definition at line 72 of file MetricProducer_module.cc.

bool sbndaq::MetricProducer::fVerbose
private

Definition at line 62 of file MetricProducer_module.cc.

uint32_t sbndaq::MetricProducer::fWvfmLength
private

Definition at line 74 of file MetricProducer_module.cc.

bool sbndaq::MetricProducer::fWvfmsFound
private

Definition at line 99 of file MetricProducer_module.cc.

std::vector<std::vector<uint16_t> > sbndaq::MetricProducer::fWvfmsVec
private

Definition at line 100 of file MetricProducer_module.cc.

int sbndaq::MetricProducer::hitsperplane[7]
private

Definition at line 66 of file MetricProducer_module.cc.

art::Persistable sbndaq::MetricProducer::is_persistable_
private

Definition at line 59 of file MetricProducer_module.cc.

int sbndaq::MetricProducer::num_crt_frags
private

Definition at line 106 of file MetricProducer_module.cc.

int sbndaq::MetricProducer::num_pmt_frags
private

Definition at line 107 of file MetricProducer_module.cc.

opdet::sbndPDMapAlg sbndaq::MetricProducer::pdMap
private

Definition at line 88 of file MetricProducer_module.cc.


The documentation for this class was generated from the following file: