LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
detsim::DumpOpDetWaveforms Class Reference

Prints the content of all optical detector waveforms on screen. More...

Inheritance diagram for detsim::DumpOpDetWaveforms:
art::EDAnalyzer art::EventObserverBase art::Consumer art::EngineCreator

Classes

struct  Config
 

Public Types

using Parameters = art::EDAnalyzer::Table< Config >
 
using WorkerType = WorkerT< EDAnalyzer >
 
using ModuleType = EDAnalyzer
 

Public Member Functions

 DumpOpDetWaveforms (Parameters const &config)
 
void analyze (const art::Event &evt)
 Does the printing. More...
 
template<typename Stream >
void DumpWaveform (Stream &&out, raw::OpDetWaveform const &waveform, std::string indent, std::string indentFirst) const
 Dumps the content of a single waveform into the specified output stream. More...
 
template<typename Stream >
void DumpWaveform (Stream &&out, raw::OpDetWaveform const &waveform, std::string indent="") const
 
std::string workerType () const
 
bool modifiesEvent () const
 
void registerProducts (MasterProductRegistry &, ProductDescriptions &, ModuleDescription const &)
 
std::string const & processName () const
 
bool wantAllEvents () const
 
bool wantEvent (Event const &e)
 
fhicl::ParameterSetID selectorConfig () const
 
art::Handle< art::TriggerResultsgetTriggerResults (Event const &e) const
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ProductToken< T > consumes (InputTag const &it)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ViewToken< T > consumesView (InputTag const &it)
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ProductToken< T > mayConsume (InputTag const &it)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ViewToken< T > mayConsumeView (InputTag const &it)
 
base_engine_tcreateEngine (seed_t seed)
 
base_engine_tcreateEngine (seed_t seed, std::string const &kind_of_engine_to_make)
 
base_engine_tcreateEngine (seed_t seed, std::string const &kind_of_engine_to_make, label_t const &engine_label)
 
seed_t get_seed_value (fhicl::ParameterSet const &pset, char const key[]="seed", seed_t const implicit_seed=-1)
 

Static Public Member Functions

static cet::exempt_ptr< Consumernon_module_context ()
 

Protected Member Functions

CurrentProcessingContext const * currentContext () const
 
detail::CachedProducts & cachedProducts ()
 
void validateConsumedProduct (BranchType const bt, ProductInfo const &pi)
 
void prepareForJob (fhicl::ParameterSet const &pset)
 
void showMissingConsumes () const
 

Private Attributes

art::InputTag fOpDetWaveformsTag
 Input tag of data product to dump. More...
 
std::string fOutputCategory
 Category for mf::LogInfo output. More...
 
unsigned int fDigitsPerLine
 ADC readings per line in the output. More...
 
raw::ADC_Count_t fPedestal
 ADC pedestal (subtracted from readings). More...
 

Detailed Description

Prints the content of all optical detector waveforms on screen.

This analyser prints the content of all the raw digits into the LogInfo/LogVerbatim stream.

Configuration parameters

  • OpDetWaveformsTag (string, default: daq): input tag of the raw::OpDetWaveform collection to be dumped
  • OutputCategory (string, default: DumpOpDetWaveforms): the category used for the output (useful for filtering)
  • DigitsPerLine (integer, default: 20): the dump of ADC readings will put this many of them for each line
  • Pedestal (integer, default: 0): ADC readings are written relative to this number

Definition at line 54 of file DumpOpDetWaveforms_module.cc.

Member Typedef Documentation

Definition at line 39 of file EDAnalyzer.h.

Definition at line 38 of file EDAnalyzer.h.

Constructor & Destructor Documentation

detsim::DumpOpDetWaveforms::DumpOpDetWaveforms ( Parameters const &  config)
explicit

Definition at line 127 of file DumpOpDetWaveforms_module.cc.

128  : EDAnalyzer (config)
129  , fOpDetWaveformsTag (config().OpDetWaveformsTag())
130  , fOutputCategory (config().OutputCategory())
131  , fDigitsPerLine (config().DigitsPerLine())
132  , fPedestal (config().Pedestal())
133  {}
std::string fOutputCategory
Category for mf::LogInfo output.
EDAnalyzer(Table< Config > const &config)
Definition: EDAnalyzer.h:100
raw::ADC_Count_t fPedestal
ADC pedestal (subtracted from readings).
art::InputTag fOpDetWaveformsTag
Input tag of data product to dump.
unsigned int fDigitsPerLine
ADC readings per line in the output.

Member Function Documentation

void detsim::DumpOpDetWaveforms::analyze ( const art::Event evt)

Does the printing.

Definition at line 137 of file DumpOpDetWaveforms_module.cc.

References DumpWaveform(), fOpDetWaveformsTag, fOutputCategory, and fPedestal.

137  {
138 
139  // fetch the data to be dumped on screen
140  auto Waveforms =
141  event.getValidHandle<std::vector<raw::OpDetWaveform>>(fOpDetWaveformsTag);
142 
144  << "The event " << event.id() << " contains data for "
145  << Waveforms->size() << " optical detector channels";
146  if (fPedestal != 0) {
147  mf::LogVerbatim(fOutputCategory) << "A pedestal of " << fPedestal
148  << " counts will be subtracted from all ADC readings.";
149  } // if pedestal
150 
151  for (raw::OpDetWaveform const& waveform: *Waveforms) {
152 
154 
155  } // for waveforms
156 
157  } // DumpOpDetWaveforms::analyze()
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
std::string fOutputCategory
Category for mf::LogInfo output.
raw::ADC_Count_t fPedestal
ADC pedestal (subtracted from readings).
void DumpWaveform(Stream &&out, raw::OpDetWaveform const &waveform, std::string indent, std::string indentFirst) const
Dumps the content of a single waveform into the specified output stream.
art::InputTag fOpDetWaveformsTag
Input tag of data product to dump.
detail::CachedProducts& art::EventObserverBase::cachedProducts ( )
inlineprotectedinherited

Definition at line 79 of file EventObserverBase.h.

References art::EventObserverBase::selectors_.

Referenced by art::EDAnalyzer::doEvent(), and art::OutputModule::doWriteEvent().

80  {
81  return selectors_;
82  }
detail::CachedProducts selectors_
template<typename T , BranchType = InEvent>
ProductToken<T> art::Consumer::consumes ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ProductToken<T> art::Consumer::consumes ( InputTag const &  it)
inherited

Definition at line 147 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

148 {
149  if (!moduleContext_)
150  return ProductToken<T>::invalid();
151 
152  consumables_[BT].emplace_back(ConsumableType::Product,
153  TypeID{typeid(T)},
154  it.label(),
155  it.instance(),
156  it.process());
157  return ProductToken<T>{it};
158 }
static ProductToken< T > invalid()
Definition: ProductToken.h:47
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename T , art::BranchType BT>
void art::Consumer::consumesMany ( )
inherited

Definition at line 162 of file Consumer.h.

163 {
164  if (!moduleContext_)
165  return;
166 
167  consumables_[BT].emplace_back(ConsumableType::Many, TypeID{typeid(T)});
168 }
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::Consumer::consumesView ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ViewToken<T> art::Consumer::consumesView ( InputTag const &  it)
inherited

Definition at line 172 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

173 {
174  if (!moduleContext_)
175  return ViewToken<T>::invalid();
176 
177  consumables_[BT].emplace_back(ConsumableType::ViewElement,
178  TypeID{typeid(T)},
179  it.label(),
180  it.instance(),
181  it.process());
182  return ViewToken<T>{it};
183 }
static ViewToken< Element > invalid()
Definition: ProductToken.h:75
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
EngineCreator::base_engine_t & EngineCreator::createEngine ( seed_t  seed,
std::string const &  kind_of_engine_to_make 
)
inherited

Definition at line 32 of file EngineCreator.cc.

References art::EngineCreator::rng().

34 {
35  return rng()->createEngine(
36  placeholder_schedule_id(), seed, kind_of_engine_to_make);
37 }
long seed
Definition: chem4.cc:68
static art::ServiceHandle< art::RandomNumberGenerator > & rng()
EngineCreator::base_engine_t & EngineCreator::createEngine ( seed_t  seed,
std::string const &  kind_of_engine_to_make,
label_t const &  engine_label 
)
inherited

Definition at line 40 of file EngineCreator.cc.

References art::EngineCreator::rng().

43 {
44  return rng()->createEngine(
45  placeholder_schedule_id(), seed, kind_of_engine_to_make, engine_label);
46 }
long seed
Definition: chem4.cc:68
static art::ServiceHandle< art::RandomNumberGenerator > & rng()
CurrentProcessingContext const * art::EDAnalyzer::currentContext ( ) const
protectedinherited

Definition at line 114 of file EDAnalyzer.cc.

References art::EDAnalyzer::current_context_.

Referenced by art::EDAnalyzer::workerType().

115  {
116  return current_context_.get();
117  }
CPC_exempt_ptr current_context_
Definition: EDAnalyzer.h:179
template<typename Stream >
void detsim::DumpOpDetWaveforms::DumpWaveform ( Stream &&  out,
raw::OpDetWaveform const &  waveform,
std::string  indent,
std::string  indentFirst 
) const

Dumps the content of a single waveform into the specified output stream.

Definition at line 162 of file DumpOpDetWaveforms_module.cc.

References lar::util::MinMaxCollector< T >::add(), raw::OpDetWaveform::ChannelNumber(), DEFINE_ART_MODULE, fDigitsPerLine, fPedestal, lar::util::MinMaxCollector< T >::max(), min, lar::util::MinMaxCollector< T >::min(), and raw::OpDetWaveform::TimeStamp().

Referenced by analyze(), and DumpWaveform().

166  {
167  auto const& data = waveform;
168  using Count_t = raw::ADC_Count_t;
169 
170  // print a header for the raw digits
171  out << indentFirst
172  << "on channel #" << waveform.ChannelNumber() << " (time stamp: "
173  << waveform.TimeStamp() << "): " << data.size() << " time ticks";
174 
175  // print the content of the channel
176  if (fDigitsPerLine == 0) return;
177 
178  std::vector<Count_t> DigitBuffer(fDigitsPerLine), LastBuffer;
179 
180  unsigned int repeat_count = 0; // additional lines like the last one
181  unsigned int index = 0;
182 
184  out << "\n" << indent
185  << " content of the channel (" << fDigitsPerLine << " ticks per line):";
186  auto iTick = data.cbegin(), tend = data.cend(); // const iterators
187  while (iTick != tend) {
188  // the next line will show at most fDigitsPerLine ticks
189  unsigned int line_size
190  = std::min(fDigitsPerLine, (unsigned int) data.size() - index);
191  if (line_size == 0) break; // no more ticks
192 
193  // fill the new buffer (iTick will move forward)
194  DigitBuffer.resize(line_size);
195  auto iBuf = DigitBuffer.begin(), bend = DigitBuffer.end();
196  while ((iBuf != bend) && (iTick != tend))
197  Extrema.add(*(iBuf++) = *(iTick++) - fPedestal);
198  index += line_size;
199 
200  // if the new buffer is the same as the old one, just mark it
201  if (DigitBuffer == LastBuffer) {
202  repeat_count += 1;
203  continue;
204  }
205 
206  // if there are previous repeats, write that on screen
207  // before the new, different line
208  if (repeat_count > 0) {
209  out << "\n" << indent
210  << " [ ... repeated " << repeat_count << " more times ]";
211  repeat_count = 0;
212  }
213 
214  // dump the new line of ticks
215  out << "\n" << indent << " ";
216  for (auto digit: DigitBuffer)
217  out << " " << std::setw(4) << digit;
218 
219  // quick way to assign DigitBuffer to LastBuffer
220  // (we don't care we lose the former)
221  std::swap(LastBuffer, DigitBuffer);
222 
223  } // while
224  if (repeat_count > 0) {
225  out << "\n" << indent
226  << " [ ... repeated " << repeat_count << " more times to the end]";
227  }
228  if (Extrema.min() != Extrema.max()) {
229  out << "\n" << indent
230  << " range of " << data.size()
231  << " samples: [" << Extrema.min() << ";" << Extrema.max() << "]";
232  }
233 
234  } // DumpOpDetWaveforms::DumpWaveform()
Data_t max() const
Returns the accumulated maximum, or a very small number if no values.
This_t & add(Data_t value)
Include a single value in the statistics.
Keeps track of the minimum and maximum value we observed.
Data_t min() const
Returns the accumulated minimum, or a very large number if no values.
std::string indent(std::size_t const i)
raw::ADC_Count_t fPedestal
ADC pedestal (subtracted from readings).
void swap(art::HLTGlobalStatus &lhs, art::HLTGlobalStatus &rhs)
Int_t min
Definition: plot.C:26
unsigned int fDigitsPerLine
ADC readings per line in the output.
short ADC_Count_t
Definition: OpDetWaveform.h:22
template<typename Stream >
void detsim::DumpOpDetWaveforms::DumpWaveform ( Stream &&  out,
raw::OpDetWaveform const &  waveform,
std::string  indent = "" 
) const
inline

Definition at line 106 of file DumpOpDetWaveforms_module.cc.

References DumpWaveform(), and art::detail::indent().

109  { DumpWaveform(std::forward<Stream>(out), waveform, indent, indent); }
std::string indent(std::size_t const i)
void DumpWaveform(Stream &&out, raw::OpDetWaveform const &waveform, std::string indent, std::string indentFirst) const
Dumps the content of a single waveform into the specified output stream.
EngineCreator::seed_t EngineCreator::get_seed_value ( fhicl::ParameterSet const &  pset,
char const  key[] = "seed",
seed_t const  implicit_seed = -1 
)
inherited

Definition at line 49 of file EngineCreator.cc.

References fhicl::ParameterSet::get().

Referenced by art::MixFilter< T >::initEngine_().

52 {
53  auto const& explicit_seeds = pset.get<std::vector<int>>(key, {});
54  return explicit_seeds.empty() ? implicit_seed : explicit_seeds.front();
55 }
art::Handle<art::TriggerResults> art::EventObserverBase::getTriggerResults ( Event const &  e) const
inlineinherited

Definition at line 61 of file EventObserverBase.h.

References art::detail::CachedProducts::getOneTriggerResults(), and art::EventObserverBase::selectors_.

Referenced by art::OutputModule::doWriteEvent().

62  {
64  }
detail::CachedProducts selectors_
art::Handle< art::TriggerResults > getOneTriggerResults(Event const &) const
Float_t e
Definition: plot.C:34
template<typename T , BranchType = InEvent>
ProductToken<T> art::Consumer::mayConsume ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ProductToken<T> art::Consumer::mayConsume ( InputTag const &  it)
inherited

Definition at line 190 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

191 {
192  if (!moduleContext_)
193  return ProductToken<T>::invalid();
194 
195  consumables_[BT].emplace_back(ConsumableType::Product,
196  TypeID{typeid(T)},
197  it.label(),
198  it.instance(),
199  it.process());
200  return ProductToken<T>{it};
201 }
static ProductToken< T > invalid()
Definition: ProductToken.h:47
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename T , art::BranchType BT>
void art::Consumer::mayConsumeMany ( )
inherited

Definition at line 205 of file Consumer.h.

206 {
207  if (!moduleContext_)
208  return;
209 
210  consumables_[BT].emplace_back(ConsumableType::Many, TypeID{typeid(T)});
211 }
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::Consumer::mayConsumeView ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ViewToken<T> art::Consumer::mayConsumeView ( InputTag const &  it)
inherited

Definition at line 215 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

216 {
217  if (!moduleContext_)
218  return ViewToken<T>::invalid();
219 
220  consumables_[BT].emplace_back(ConsumableType::ViewElement,
221  TypeID{typeid(T)},
222  it.label(),
223  it.instance(),
224  it.process());
225  return ViewToken<T>{it};
226 }
static ViewToken< Element > invalid()
Definition: ProductToken.h:75
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
bool art::EventObserverBase::modifiesEvent ( ) const
inlineinherited

Definition at line 25 of file EventObserverBase.h.

26  {
27  return false;
28  }
void art::Consumer::prepareForJob ( fhicl::ParameterSet const &  pset)
protectedinherited

Definition at line 89 of file Consumer.cc.

References fhicl::ParameterSet::get_if_present().

Referenced by art::EDProducer::doBeginJob(), art::EDFilter::doBeginJob(), and art::EDAnalyzer::doBeginJob().

90 {
91  if (!moduleContext_)
92  return;
93 
94  pset.get_if_present("errorOnMissingConsumes", requireConsumes_);
95  for (auto& consumablesPerBranch : consumables_) {
96  cet::sort_all(consumablesPerBranch);
97  }
98 }
bool requireConsumes_
Definition: Consumer.h:137
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
std::string const& art::EventObserverBase::processName ( ) const
inlineinherited
void art::EventObserverBase::registerProducts ( MasterProductRegistry ,
ProductDescriptions ,
ModuleDescription const &   
)
inlineinherited

Definition at line 33 of file EventObserverBase.h.

36  {}
fhicl::ParameterSetID art::EventObserverBase::selectorConfig ( ) const
inlineinherited

Definition at line 56 of file EventObserverBase.h.

References art::EventObserverBase::selector_config_id_.

Referenced by art::RootOutputFile::writeOne().

57  {
58  return selector_config_id_;
59  }
fhicl::ParameterSetID selector_config_id_
void art::Consumer::showMissingConsumes ( ) const
protectedinherited

Definition at line 125 of file Consumer.cc.

Referenced by art::EDProducer::doEndJob(), art::EDFilter::doEndJob(), art::EDAnalyzer::doEndJob(), and art::RootOutput::endJob().

126 {
127  if (!moduleContext_)
128  return;
129 
130  // If none of the branches have missing consumes statements, exit early.
131  if (std::all_of(cbegin(missingConsumes_),
132  cend(missingConsumes_),
133  [](auto const& perBranch) { return perBranch.empty(); }))
134  return;
135 
136  constexpr cet::HorizontalRule rule{60};
137  mf::LogPrint log{"MTdiagnostics"};
138  log << '\n'
139  << rule('=') << '\n'
140  << "The following consumes (or mayConsume) statements are missing from\n"
141  << module_context(moduleDescription_) << '\n'
142  << rule('-') << '\n';
143 
144  cet::for_all_with_index(
145  missingConsumes_, [&log](std::size_t const i, auto const& perBranch) {
146  for (auto const& pi : perBranch) {
147  log << " "
148  << assemble_consumes_statement(static_cast<BranchType>(i), pi)
149  << '\n';
150  }
151  });
152  log << rule('=');
153 }
cet::exempt_ptr< ModuleDescription const > moduleDescription_
Definition: Consumer.h:140
constexpr T pi()
Returns the constant pi (up to 35 decimal digits of precision)
bool moduleContext_
Definition: Consumer.h:136
ConsumableProductSets missingConsumes_
Definition: Consumer.h:139
void art::Consumer::validateConsumedProduct ( BranchType const  bt,
ProductInfo const &  pi 
)
protectedinherited

Definition at line 101 of file Consumer.cc.

References art::errors::ProductRegistrationFailure.

103 {
104  // Early exits if consumes tracking has been disabled or if the
105  // consumed product is an allowed consumable.
106  if (!moduleContext_)
107  return;
108 
109  if (cet::binary_search_all(consumables_[bt], pi))
110  return;
111 
112  if (requireConsumes_) {
114  "Consumer: an error occurred during validation of a "
115  "retrieved product\n\n")
116  << "The following consumes (or mayConsume) statement is missing from\n"
117  << module_context(moduleDescription_) << ":\n\n"
118  << " " << assemble_consumes_statement(bt, pi) << "\n\n";
119  }
120 
121  missingConsumes_[bt].insert(pi);
122 }
cet::exempt_ptr< ModuleDescription const > moduleDescription_
Definition: Consumer.h:140
bool requireConsumes_
Definition: Consumer.h:137
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
constexpr T pi()
Returns the constant pi (up to 35 decimal digits of precision)
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
ConsumableProductSets missingConsumes_
Definition: Consumer.h:139
bool art::EventObserverBase::wantAllEvents ( ) const
inlineinherited
bool art::EventObserverBase::wantEvent ( Event const &  e)
inlineinherited
std::string art::EDAnalyzer::workerType ( ) const
inlineinherited

Definition at line 109 of file EDAnalyzer.h.

References art::EDAnalyzer::currentContext().

110  {
111  return "WorkerT<EDAnalyzer>";
112  }

Member Data Documentation

unsigned int detsim::DumpOpDetWaveforms::fDigitsPerLine
private

ADC readings per line in the output.

Definition at line 116 of file DumpOpDetWaveforms_module.cc.

Referenced by DumpWaveform().

art::InputTag detsim::DumpOpDetWaveforms::fOpDetWaveformsTag
private

Input tag of data product to dump.

Definition at line 114 of file DumpOpDetWaveforms_module.cc.

Referenced by analyze().

std::string detsim::DumpOpDetWaveforms::fOutputCategory
private

Category for mf::LogInfo output.

Definition at line 115 of file DumpOpDetWaveforms_module.cc.

Referenced by analyze().

raw::ADC_Count_t detsim::DumpOpDetWaveforms::fPedestal
private

ADC pedestal (subtracted from readings).

Definition at line 117 of file DumpOpDetWaveforms_module.cc.

Referenced by analyze(), and DumpWaveform().


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