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

Classes

class  multiThreadFragmentProcessing
 

Public Types

using RawDigitCollection = std::vector< raw::RawDigit >
 
using RawDigitCollectionPtr = std::unique_ptr< RawDigitCollection >
 
using ConcurrentRawDigitCol = tbb::concurrent_vector< raw::RawDigit >
 

Public Member Functions

 DaqDecoderICARUSTPC (fhicl::ParameterSet const &pset, art::ProcessingFrame const &frame)
 
virtual ~DaqDecoderICARUSTPC ()
 Destructor. More...
 
virtual void configure (fhicl::ParameterSet const &pset)
 
virtual void produce (art::Event &e, art::ProcessingFrame const &frame)
 
virtual void beginJob (art::ProcessingFrame const &frame)
 Begin job method. More...
 
virtual void endJob (art::ProcessingFrame const &frame)
 End job method. More...
 
void processSingleFragment (size_t, detinfo::DetectorClocksData const &clockData, art::Handle< artdaq::Fragments >, ConcurrentRawDigitCol &, ConcurrentRawDigitCol &, ConcurrentRawDigitCol &) const
 

Private Member Functions

void saveRawDigits (const icarus_signal_processing::ArrayFloat &, const icarus_signal_processing::VectorFloat &, const icarus_signal_processing::VectorFloat &, const icarus_signal_processing::VectorInt &, ConcurrentRawDigitCol &) const
 

Private Attributes

std::vector< std::unique_ptr
< IDecoderFilter > > 
fDecoderToolVec
 Decoder tools. More...
 
std::vector< art::InputTag > fFragmentsLabelVec
 The input artdaq fragment label vector (for more than one) More...
 
bool fOutputRawWaveform
 Should we output pedestal corrected (not noise filtered)? More...
 
bool fOutputCorrection
 Should we output the coherent noise correction vectors? More...
 
std::string fOutputRawWavePath
 Path to assign to the output if asked for. More...
 
std::string fOutputCoherentPath
 Path to assign to the output if asked for. More...
 
unsigned int fPlaneToSimulate
 Use to get fragment offset. More...
 
float fSigmaForTruncation
 This determines the point at which we truncate bins for the RMS calc. More...
 
int fNumEvent
 Number of events seen. More...
 
size_t fFragmentOffset
 The fragment offset to set channel numbering. More...
 
geo::GeometryCore const * fGeometry
 pointer to Geometry service More...
 

Detailed Description

Definition at line 57 of file DaqDecoderICARUSTPC_module.cc.

Member Typedef Documentation

Definition at line 74 of file DaqDecoderICARUSTPC_module.cc.

Definition at line 72 of file DaqDecoderICARUSTPC_module.cc.

Definition at line 73 of file DaqDecoderICARUSTPC_module.cc.

Constructor & Destructor Documentation

daq::DaqDecoderICARUSTPC::DaqDecoderICARUSTPC ( fhicl::ParameterSet const &  pset,
art::ProcessingFrame const &  frame 
)
explicit

Constructor.

Arguments:

pset - Fcl parameters.

Definition at line 151 of file DaqDecoderICARUSTPC_module.cc.

151  :
152  art::ReplicatedProducer(pset, frame),
153  fNumEvent(0)
154 {
155  fGeometry = lar::providerFrom<geo::Geometry>();
156 
157  configure(pset);
158 
159  // Check the concurrency
160  int max_concurrency = tbb::this_task_arena::max_concurrency();
161 
162  mf::LogDebug("DaqDecoderICARUSTPC") << " ==> concurrency: " << max_concurrency << std::endl;
163 
164  // Recover the vector of fhicl parameters for the ROI tools
165  const fhicl::ParameterSet& decoderToolParams = pset.get<fhicl::ParameterSet>("DecoderTool");
166 
167  fDecoderToolVec.resize(max_concurrency);
168 
169  for(auto& decoderTool : fDecoderToolVec)
170  {
171  // Get instance of tool
172  decoderTool = art::make_tool<IDecoderFilter>(decoderToolParams);
173  }
174 
175  // Compute the fragment offset from the channel number for the desired plane
176  // Get a base channel number for the plane we want
177  mf::LogDebug("DaqDecoderICARUSTPC") << "ICARUS has " << fGeometry->Nchannels() << " in total with " << fGeometry->Views().size() << " views" << std::endl;
178 
179  geo::WireID wireID(0, 0, fPlaneToSimulate, 0);
180 
181  mf::LogDebug("DaqDecoderICARUSTPC") << "WireID: " << wireID << std::endl;
182 
184 
185  mf::LogDebug("DaqDecoderICARUSTPC") << "From geo, first WireID: " << firstWireID << std::endl;
186 
187  raw::ChannelID_t channel = fGeometry->PlaneWireToChannel(wireID);
188 
189  mf::LogDebug("DaqDecoderICARUSTPC") << "Channel: " << channel << std::endl;
190 
191  for(size_t thePlane = 0; thePlane < 3; thePlane++)
192  {
193  geo::WireID tempWireID(0, 0, thePlane, 0);
194  geo::PlaneID tempPlaneID = tempWireID.planeID();
195 
196  mf::LogDebug("DaqDecoderICARUSTPC") << "thePlane: " << thePlane << ", WireID: " << tempWireID << ", channel: " <<
197  fGeometry->PlaneWireToChannel(tempWireID) << ", view: " << fGeometry->View(tempPlaneID) << std::endl;
198  }
199 
200  fFragmentOffset = channel / 576;
201 
202  // Set up our "produces"
203  // Note that we can have multiple instances input to the module
204  // Our convention will be to create a similar number of outputs with the same instance names
205  for(const auto& fragmentLabel : fFragmentsLabelVec)
206  {
207  produces<std::vector<raw::RawDigit>>(fragmentLabel.instance());
208 
209  if (fOutputRawWaveform)
210  produces<std::vector<raw::RawDigit>>(fragmentLabel.instance() + fOutputRawWavePath);
211 
212  if (fOutputCorrection)
213  produces<std::vector<raw::RawDigit>>(fragmentLabel.instance() + fOutputCoherentPath);
214  }
215 
216  // Report.
217  mf::LogInfo("DaqDecoderICARUSTPC") << "DaqDecoderICARUSTPC configured\n";
218 }
virtual void configure(fhicl::ParameterSet const &pset)
std::vector< std::unique_ptr< IDecoderFilter > > fDecoderToolVec
Decoder tools.
bool fOutputCorrection
Should we output the coherent noise correction vectors?
std::set< geo::View_t > const & Views() const
Returns a list of possible views in the detector.
The data type to uniquely identify a Plane.
Definition: geo_types.h:472
std::string fOutputCoherentPath
Path to assign to the output if asked for.
int fNumEvent
Number of events seen.
bool fOutputRawWaveform
Should we output pedestal corrected (not noise filtered)?
unsigned int fPlaneToSimulate
Use to get fragment offset.
unsigned int Nchannels() const
Returns the number of TPC readout channels in the detector.
geo::GeometryCore const * fGeometry
pointer to Geometry service
size_t fFragmentOffset
The fragment offset to set channel numbering.
View_t View(geo::PlaneID const &pid) const
Returns the view (wire orientation) on the channels of specified TPC plane.
raw::ChannelID_t PlaneWireToChannel(WireID const &wireid) const
Returns the ID of the TPC channel connected to the specified wire.
geo::WireID GetBeginWireID(geo::CryostatID const &id) const
Returns the ID of the first wire in the specified cryostat.
std::vector< art::InputTag > fFragmentsLabelVec
The input artdaq fragment label vector (for more than one)
unsigned int ChannelID_t
Type representing the ID of a readout channel.
Definition: RawTypes.h:28
std::string fOutputRawWavePath
Path to assign to the output if asked for.
daq::DaqDecoderICARUSTPC::~DaqDecoderICARUSTPC ( )
virtual

Destructor.

Definition at line 222 of file DaqDecoderICARUSTPC_module.cc.

223 {}

Member Function Documentation

void daq::DaqDecoderICARUSTPC::beginJob ( art::ProcessingFrame const &  frame)
virtual

Begin job method.

Definition at line 245 of file DaqDecoderICARUSTPC_module.cc.

246 {
247  return;
248 }
void daq::DaqDecoderICARUSTPC::configure ( fhicl::ParameterSet const &  pset)
virtual

Reconfigure method.

Arguments:

pset - Fcl parameter set.

Definition at line 232 of file DaqDecoderICARUSTPC_module.cc.

233 {
234  fFragmentsLabelVec = pset.get<std::vector<art::InputTag>>("FragmentsLabelVec", std::vector<art::InputTag>()={"daq:PHYSCRATEDATA"});
235  fOutputRawWaveform = pset.get<bool >("OutputRawWaveform", false);
236  fOutputCorrection = pset.get<bool >("OutputCorrection", false);
237  fOutputRawWavePath = pset.get<std::string >("OutputRawWavePath", "raw");
238  fOutputCoherentPath = pset.get<std::string >("OutputCoherentPath", "Cor");
239  fPlaneToSimulate = pset.get<unsigned int >("PlaneToSimulate", 2);
240  fSigmaForTruncation = pset.get<float >("NSigmaForTrucation", 3.5);
241 }
float fSigmaForTruncation
This determines the point at which we truncate bins for the RMS calc.
bool fOutputCorrection
Should we output the coherent noise correction vectors?
std::string fOutputCoherentPath
Path to assign to the output if asked for.
bool fOutputRawWaveform
Should we output pedestal corrected (not noise filtered)?
unsigned int fPlaneToSimulate
Use to get fragment offset.
std::vector< art::InputTag > fFragmentsLabelVec
The input artdaq fragment label vector (for more than one)
std::string fOutputRawWavePath
Path to assign to the output if asked for.
void daq::DaqDecoderICARUSTPC::endJob ( art::ProcessingFrame const &  frame)
virtual

End job method.

Definition at line 469 of file DaqDecoderICARUSTPC_module.cc.

470 {
471  mf::LogInfo("DaqDecoderICARUSTPC") << "Looked at " << fNumEvent << " events" << std::endl;
472 }
int fNumEvent
Number of events seen.
void daq::DaqDecoderICARUSTPC::processSingleFragment ( size_t  idx,
detinfo::DetectorClocksData const &  clockData,
art::Handle< artdaq::Fragments >  fragmentHandle,
ConcurrentRawDigitCol rawDigitCollection,
ConcurrentRawDigitCol rawRawDigitCollection,
ConcurrentRawDigitCol coherentCollection 
) const

Definition at line 347 of file DaqDecoderICARUSTPC_module.cc.

353 {
354  cet::cpu_timer theClockProcess;
355 
356  theClockProcess.start();
357 
358  art::Ptr<artdaq::Fragment> fragmentPtr(fragmentHandle, idx);
359 
360  mf::LogDebug("DaqDecoderICARUSTPC") << "--> Processing fragment ID: " << fragmentPtr->fragmentID() << std::endl;
361  mf::LogDebug("DaqDecoderICARUSTPC") << " ==> Current thread index: " << tbb::this_task_arena::current_thread_index() << std::endl;
362 
363  // Recover pointer to the decoder needed here
364  IDecoderFilter* decoderTool = fDecoderToolVec[tbb::this_task_arena::current_thread_index()].get();
365 
366  //process_fragment(event, rawfrag, product_collection, header_collection);
367  decoderTool->process_fragment(clockData, *fragmentPtr);
368 
369  // Useful numerology
370  // convert fragment to Nevis fragment
371  icarus::PhysCrateFragment physCrateFragment(*fragmentPtr);
372 
373 // size_t nBoardsPerFragment = physCrateFragment.nBoards();
374 // size_t nChannelsPerBoard = physCrateFragment.nChannelsPerBoard();
375 
376  // Set base channel for both the board and the board/fragment
377 // size_t boardFragOffset = nChannelsPerBoard * nBoardsPerFragment * (fragmentPtr->fragmentID() + fFragmentOffset);
378 
379  theClockProcess.stop();
380 
381  double totalTime = theClockProcess.accumulated_real_time();
382 
383  // We need to recalculate pedestals for the noise corrected waveforms
384  icarus_signal_processing::WaveformTools<float> waveformTools;
385 
386  // Save the filtered RawDigitsactive but for corrected raw digits pedestal is zero
387  icarus_signal_processing::VectorFloat locPedsVec(decoderTool->getWaveLessCoherent().size(),0.);
388  icarus_signal_processing::VectorFloat locFullRMSVec(locPedsVec.size(),0.);
389  icarus_signal_processing::VectorFloat locTruncRMSVec(locPedsVec.size(),0.);
390  icarus_signal_processing::VectorInt locNumTruncBins(locPedsVec.size(),0);
391  icarus_signal_processing::VectorInt locRangeBins(locPedsVec.size(),0);
392 
393  const icarus_signal_processing::VectorInt& channelVec = decoderTool->getChannelIDs();
394  const icarus_signal_processing::ArrayFloat& corWaveforms = decoderTool->getWaveLessCoherent();
395 
396  icarus_signal_processing::ArrayFloat pedCorWaveforms(corWaveforms.size(),icarus_signal_processing::VectorFloat(corWaveforms[0].size()));
397 
398  for(size_t idx = 0; idx < corWaveforms.size(); idx++)
399  {
400  // Now determine the pedestal and correct for it
401  waveformTools.getPedestalCorrectedWaveform(corWaveforms[idx],
402  pedCorWaveforms[idx],
404  locPedsVec[idx],
405  locFullRMSVec[idx],
406  locTruncRMSVec[idx],
407  locNumTruncBins[idx],
408  locRangeBins[idx]);
409  }
410 
411  saveRawDigits(pedCorWaveforms, locPedsVec, locTruncRMSVec, channelVec, rawDigitCollection);
412 
413  // Optionally, save the raw RawDigits
414  if (fOutputRawWaveform)
415  saveRawDigits(decoderTool->getRawWaveforms(),decoderTool->getPedestalVals(),decoderTool->getFullRMSVals(),channelVec, rawRawDigitCollection);
416 
417  // Also optional is to output the coherent corrections (note there will be many fewer of these! )
418  if (fOutputCorrection)
419 // saveRawDigits(decoderTool->getCorrectedMedians(),decoderTool->getPedestalVals(),decoderTool->getFullRMSVals(),channelVec,coherentCollection);
420  saveRawDigits(decoderTool->getCorrectedMedians(),locPedsVec,decoderTool->getFullRMSVals(),channelVec,coherentCollection);
421 
422  mf::LogDebug("DaqDecoderICARUSTPC") << "--> Exiting fragment processing for thread: " << tbb::this_task_arena::current_thread_index() << ", time: " << totalTime << std::endl;
423  return;
424 }
std::vector< std::unique_ptr< IDecoderFilter > > fDecoderToolVec
Decoder tools.
float fSigmaForTruncation
This determines the point at which we truncate bins for the RMS calc.
bool fOutputCorrection
Should we output the coherent noise correction vectors?
std::size_t size(FixedBins< T, C > const &) noexcept
Definition: FixedBins.h:561
bool fOutputRawWaveform
Should we output pedestal corrected (not noise filtered)?
void saveRawDigits(const icarus_signal_processing::ArrayFloat &, const icarus_signal_processing::VectorFloat &, const icarus_signal_processing::VectorFloat &, const icarus_signal_processing::VectorInt &, ConcurrentRawDigitCol &) const
void daq::DaqDecoderICARUSTPC::produce ( art::Event &  event,
art::ProcessingFrame const &  frame 
)
virtual

Produce method.

Arguments:

evt - Art event.

This is the primary method.

Definition at line 259 of file DaqDecoderICARUSTPC_module.cc.

260 {
261  ++fNumEvent;
262 
263  mf::LogDebug("DaqDecoderICARUSTPC") << "**** Processing raw data fragments ****" << std::endl;
264 
265  // Check the concurrency
266  int max_concurrency = tbb::this_task_arena::max_concurrency();
267 
268  mf::LogDebug("DaqDecoderICARUSTPC") << " ==> concurrency: " << max_concurrency << std::endl;
269 
270 
271  std::cout << "------------------------------------------------------------------------------------------" << std::endl;
272  std::cout << "===> Run: " << event.id().run() << ", subrn: " << event.id().subRun() << ", event: " << event.id().event() << std::endl;
273 
274  cet::cpu_timer theClockTotal;
275 
276  theClockTotal.start();
277 
278  // Loop through the list of input daq fragment collections one by one
279  // We are not trying to multi thread at this stage because we are trying to control
280  // overall memory usage at this level. We'll multi thread internally...
281  for(const auto& fragmentLabel : fFragmentsLabelVec)
282  {
283  art::Handle<artdaq::Fragments> daq_handle;
284  event.getByLabel(fragmentLabel, daq_handle);
285 
286  ConcurrentRawDigitCol concurrentRawDigits;
287  ConcurrentRawDigitCol concurrentRawRawDigits;
288  ConcurrentRawDigitCol coherentRawDigits;
289 
290  // ... Launch multiple threads with TBB to do the deconvolution and find ROIs in parallel
291  auto const clockData = art::ServiceHandle<detinfo::DetectorClocksService>()->DataFor(event);
292  multiThreadFragmentProcessing fragmentProcessing(*this,
293  clockData,
294  daq_handle,
295  concurrentRawDigits,
296  concurrentRawRawDigits,
297  coherentRawDigits);
298 
299  tbb::parallel_for(tbb::blocked_range<size_t>(0, daq_handle->size()), fragmentProcessing);
300 
301  // Copy the raw digits from the concurrent vector to our output vector
302  RawDigitCollectionPtr rawDigitCollection = std::make_unique<std::vector<raw::RawDigit>>(std::move_iterator(concurrentRawDigits.begin()),
303  std::move_iterator(concurrentRawDigits.end()));
304 
305  // Want the RawDigits to be sorted in channel order... has to be done somewhere so why not now?
306  std::sort(rawDigitCollection->begin(),rawDigitCollection->end(),[](const auto& left,const auto&right){return left.Channel() < right.Channel();});
307 
308  // Now transfer ownership to the event store
309  event.put(std::move(rawDigitCollection), fragmentLabel.instance());
310 
311  if (fOutputRawWaveform)
312  {
313  // Copy the raw digits from the concurrent vector to our output vector
314  RawDigitCollectionPtr rawRawDigitCollection = std::make_unique<std::vector<raw::RawDigit>>(std::move_iterator(concurrentRawRawDigits.begin()),
315  std::move_iterator(concurrentRawRawDigits.end()));
316 
317  // Want the RawDigits to be sorted in channel order... has to be done somewhere so why not now?
318  std::sort(rawRawDigitCollection->begin(),rawRawDigitCollection->end(),[](const auto& left,const auto&right){return left.Channel() < right.Channel();});
319 
320  // Now transfer ownership to the event store
321  event.put(std::move(rawRawDigitCollection),fragmentLabel.instance() + fOutputRawWavePath);
322  }
323 
324  if (fOutputCorrection)
325  {
326  // Copy the raw digits from the concurrent vector to our output vector
327  RawDigitCollectionPtr coherentCollection = std::make_unique<std::vector<raw::RawDigit>>(std::move_iterator(coherentRawDigits.begin()),
328  std::move_iterator(coherentRawDigits.end()));
329 
330  // Want the RawDigits to be sorted in channel order... has to be done somewhere so why not now?
331  std::sort(coherentCollection->begin(),coherentCollection->end(),[](const auto& left,const auto&right){return left.Channel() < right.Channel();});
332 
333  // Now transfer ownership to the event store
334  event.put(std::move(coherentCollection),fragmentLabel.instance() + fOutputCoherentPath);
335  }
336  }
337 
338  theClockTotal.stop();
339 
340  double totalTime = theClockTotal.accumulated_real_time();
341 
342  mf::LogInfo("DaqDecoderICARUSTPC") << "==> DaqDecoderICARUSTPC total time: " << totalTime << std::endl;
343 
344  return;
345 }
tbb::concurrent_vector< raw::RawDigit > ConcurrentRawDigitCol
bool fOutputCorrection
Should we output the coherent noise correction vectors?
walls no right
Definition: selectors.fcl:105
std::string fOutputCoherentPath
Path to assign to the output if asked for.
int fNumEvent
Number of events seen.
bool fOutputRawWaveform
Should we output pedestal corrected (not noise filtered)?
std::unique_ptr< RawDigitCollection > RawDigitCollectionPtr
walls no left
Definition: selectors.fcl:105
std::vector< art::InputTag > fFragmentsLabelVec
The input artdaq fragment label vector (for more than one)
std::string fOutputRawWavePath
Path to assign to the output if asked for.
BEGIN_PROLOG could also be cout
void daq::DaqDecoderICARUSTPC::saveRawDigits ( const icarus_signal_processing::ArrayFloat &  dataArray,
const icarus_signal_processing::VectorFloat &  pedestalVec,
const icarus_signal_processing::VectorFloat &  rmsVec,
const icarus_signal_processing::VectorInt &  channelVec,
ConcurrentRawDigitCol rawDigitCol 
) const
private

Definition at line 426 of file DaqDecoderICARUSTPC_module.cc.

431 {
432  if (!dataArray.empty())
433  {
434  cet::cpu_timer theClockSave;
435 
436  theClockSave.start();
437 
438  raw::RawDigit::ADCvector_t wvfm(dataArray[0].size());
439 
440  mf::LogDebug("DaqDecoderICARUSTPC") << " --> saving rawdigits for " << dataArray.size() << " channels" << std::endl;
441 
442  // Loop over the channels to recover the RawDigits after filtering
443  for(size_t chanIdx = 0; chanIdx != dataArray.size(); chanIdx++)
444  {
445  // Protect against case where there was no readout
446  if (channelVec[chanIdx] < 0) continue;
447 
448  const icarus_signal_processing::VectorFloat& dataVec = dataArray[chanIdx];
449 
450  // Need to convert from float to short int
451  std::transform(dataVec.begin(),dataVec.end(),wvfm.begin(),[](const auto& val){return short(std::round(val));});
452 
453  ConcurrentRawDigitCol::iterator newObjItr = rawDigitCol.emplace_back(channelVec[chanIdx],wvfm.size(),wvfm);
454  newObjItr->SetPedestal(pedestalVec[chanIdx],rmsVec[chanIdx]);
455  }//loop over channel indices
456 
457  theClockSave.stop();
458 
459  double totalTime = theClockSave.accumulated_real_time();
460 
461  mf::LogDebug("DaqDecoderICARUSTPC") << " --> done with save, time: " << totalTime << std::endl;
462  }
463 
464  return;
465 }
static constexpr Sample_t transform(Sample_t sample)
std::vector< short > ADCvector_t
Type representing a (compressed) vector of ADC counts.
Definition: RawDigit.h:73
std::size_t size(FixedBins< T, C > const &) noexcept
Definition: FixedBins.h:561

Member Data Documentation

std::vector<std::unique_ptr<IDecoderFilter> > daq::DaqDecoderICARUSTPC::fDecoderToolVec
private

Decoder tools.

Definition at line 122 of file DaqDecoderICARUSTPC_module.cc.

size_t daq::DaqDecoderICARUSTPC::fFragmentOffset
private

The fragment offset to set channel numbering.

Definition at line 136 of file DaqDecoderICARUSTPC_module.cc.

std::vector<art::InputTag> daq::DaqDecoderICARUSTPC::fFragmentsLabelVec
private

The input artdaq fragment label vector (for more than one)

Definition at line 125 of file DaqDecoderICARUSTPC_module.cc.

geo::GeometryCore const* daq::DaqDecoderICARUSTPC::fGeometry
private

pointer to Geometry service

Definition at line 139 of file DaqDecoderICARUSTPC_module.cc.

int daq::DaqDecoderICARUSTPC::fNumEvent
private

Number of events seen.

Definition at line 134 of file DaqDecoderICARUSTPC_module.cc.

std::string daq::DaqDecoderICARUSTPC::fOutputCoherentPath
private

Path to assign to the output if asked for.

Definition at line 129 of file DaqDecoderICARUSTPC_module.cc.

bool daq::DaqDecoderICARUSTPC::fOutputCorrection
private

Should we output the coherent noise correction vectors?

Definition at line 127 of file DaqDecoderICARUSTPC_module.cc.

bool daq::DaqDecoderICARUSTPC::fOutputRawWaveform
private

Should we output pedestal corrected (not noise filtered)?

Definition at line 126 of file DaqDecoderICARUSTPC_module.cc.

std::string daq::DaqDecoderICARUSTPC::fOutputRawWavePath
private

Path to assign to the output if asked for.

Definition at line 128 of file DaqDecoderICARUSTPC_module.cc.

unsigned int daq::DaqDecoderICARUSTPC::fPlaneToSimulate
private

Use to get fragment offset.

Definition at line 130 of file DaqDecoderICARUSTPC_module.cc.

float daq::DaqDecoderICARUSTPC::fSigmaForTruncation
private

This determines the point at which we truncate bins for the RMS calc.

Definition at line 131 of file DaqDecoderICARUSTPC_module.cc.


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