LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
raw::RecompressRawDigits Class Reference

Writes the input raw::RawDigit with a different compression. More...

Inheritance diagram for raw::RecompressRawDigits:
art::EDProducer art::ProducerBase art::Consumer art::EngineCreator art::ProductRegistryHelper

Classes

struct  Config
 

Public Types

using Parameters = art::EDProducer::Table< Config >
 
using ModuleType = EDProducer
 
using WorkerType = WorkerT< EDProducer >
 
template<typename UserConfig , typename KeysToIgnore = void>
using Table = ProducerBase::Table< UserConfig, KeysToIgnore >
 

Public Member Functions

 RecompressRawDigits (Parameters const &config)
 Constructor; see module documentation for configuration directions. More...
 
virtual void produce (art::Event &event) override
 
template<typename PROD , BranchType B = InEvent>
ProductID getProductID (std::string const &instanceName={}) const
 
template<typename PROD , BranchType B>
ProductID getProductID (ModuleDescription const &moduleDescription, std::string const &instanceName) const
 
bool modifiesEvent () 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 raw::RawDigit recompress (raw::RawDigit const &digit, Compress_t newFormat, bool force=false)
 Returns a RawDigit with its waveform compressed in newFormat More...
 
static raw::Compress_t parseCompressionType (std::string spec)
 Returns the compression mode corresponding to the specified string. More...
 
static cet::exempt_ptr< Consumernon_module_context ()
 

Protected Member Functions

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

Private Attributes

art::InputTag fRawDigitLabel
 tag of input raw digit collection More...
 
raw::Compress_t fCompressionType
 type of compression to be applied More...
 
std::string fInstanceName
 instance name of output data product More...
 

Detailed Description

Writes the input raw::RawDigit with a different compression.

This module writes a collection of raw::RawDigit in a new data product, using the specified compression mode.

Input

A single collection of raw::RawDigit objects.

Output

A single collection of raw::RawDigit objects.

Configuration

  • rawDigitLabel (input tag, mandatory): the input tag for the original raw::RawDigit collection
  • compressionType (string, mandatory): the compression mode code (use names as in the enumerator raw::Compress_t)
  • instanceName (string, optional): if specified, the output collection is saved with the specified product instance name (by default, none is used)

Definition at line 69 of file RecompressRawDigits_module.cc.

Member Typedef Documentation

using art::EDProducer::ModuleType = EDProducer
inherited

Definition at line 34 of file EDProducer.h.

template<typename UserConfig , typename KeysToIgnore = void>
using art::EDProducer::Table = ProducerBase::Table<UserConfig, KeysToIgnore>
inherited

Definition at line 43 of file EDProducer.h.

using art::EDProducer::WorkerType = WorkerT<EDProducer>
inherited

Definition at line 35 of file EDProducer.h.

Constructor & Destructor Documentation

raw::RecompressRawDigits::RecompressRawDigits ( Parameters const &  config)
inlineexplicit

Constructor; see module documentation for configuration directions.

Definition at line 100 of file RecompressRawDigits_module.cc.

References fInstanceName, parseCompressionType(), produce(), and recompress().

101  : fRawDigitLabel(config().rawDigitLabel())
102  , fCompressionType(parseCompressionType(config().compressionType()))
103  , fInstanceName(config().instanceName())
104  {
105  produces<std::vector<raw::RawDigit>>(fInstanceName);
106  }
art::InputTag fRawDigitLabel
tag of input raw digit collection
raw::Compress_t fCompressionType
type of compression to be applied
static raw::Compress_t parseCompressionType(std::string spec)
Returns the compression mode corresponding to the specified string.
std::string fInstanceName
instance name of output data product

Member Function Documentation

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::EDProducer::currentContext ( ) const
protectedinherited

Definition at line 120 of file EDProducer.cc.

References art::EDProducer::current_context_.

121  {
122  return current_context_.get();
123  }
CPC_exempt_ptr current_context_
Definition: EDProducer.h:116
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 }
template<typename PROD , BranchType B>
ProductID art::EDProducer::getProductID ( std::string const &  instanceName = {}) const
inlineinherited

Definition at line 123 of file EDProducer.h.

References art::EDProducer::moduleDescription_.

124  {
125  return ProducerBase::getProductID<PROD, B>(moduleDescription_,
126  instanceName);
127  }
ModuleDescription moduleDescription_
Definition: EDProducer.h:115
template<typename PROD , BranchType B>
ProductID art::ProducerBase::getProductID ( ModuleDescription const &  moduleDescription,
std::string const &  instanceName 
) const
inherited

Definition at line 56 of file ProducerBase.h.

References B, and art::ModuleDescription::moduleLabel().

Referenced by art::ProducerBase::modifiesEvent().

58  {
59  auto const& pd =
60  get_ProductDescription<PROD>(B, md.moduleLabel(), instanceName);
61  return pd.productID();
62  }
Int_t B
Definition: plot.C:25
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::ProducerBase::modifiesEvent ( ) const
inlineinherited

Definition at line 40 of file ProducerBase.h.

References art::ProducerBase::getProductID().

41  {
42  return true;
43  }
raw::Compress_t raw::RecompressRawDigits::parseCompressionType ( std::string  spec)
static

Returns the compression mode corresponding to the specified string.

Parameters
spec
Returns
the compression mode spec describes
Exceptions
art::Exception(type: art::errors::Configuration) if invalid spec

This method returns the compression type described by the specification. Specification is not case sensitive and can omit the trailing letter k. Therefore, for example to specify kNone all the following specifications are valid: "kNone", "kNONE", "none".

Definition at line 238 of file RecompressRawDigits_module.cc.

References art::errors::Configuration, DEFINE_ART_MODULE, raw::kDynamicDec, raw::kHuffman, raw::kNone, raw::kZeroHuffman, and raw::kZeroSuppression.

Referenced by RecompressRawDigits().

239 {
240  std::string SPEC(toupper(spec));
241 
242  if ((SPEC == "NONE" ) || (SPEC == "KNONE" )) return raw::kNone ;
243  if ((SPEC == "HUFFMAN" ) || (SPEC == "KHUFFMAN" )) return raw::kHuffman ;
244  if ((SPEC == "ZEROSUPPRESSION") || (SPEC == "KZEROSUPPRESSION")) return raw::kZeroSuppression;
245  if ((SPEC == "ZEROHUFFMAN" ) || (SPEC == "KZEROHUFFMAN" )) return raw::kZeroHuffman ;
246  if ((SPEC == "DYNAMICDEC" ) || (SPEC == "KDYNAMICDEC" )) return raw::kDynamicDec ;
247 
248  // if a valid one triggers this error, it needs to be added above
250  << "Unrecognized compression type: '" << spec << "'\n";
251 
252 } // raw::RecompressRawDigits::parseCompressionType()
Huffman Encoding.
Definition: RawTypes.h:10
Zero Suppression followed by Huffman Encoding.
Definition: RawTypes.h:12
no compression
Definition: RawTypes.h:9
Zero Suppression algorithm.
Definition: RawTypes.h:11
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
Dynamic decimation.
Definition: RawTypes.h:13
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
void raw::RecompressRawDigits::produce ( art::Event event)
overridevirtual

Implements art::EDProducer.

Definition at line 173 of file RecompressRawDigits_module.cc.

References fCompressionType, fInstanceName, fRawDigitLabel, and recompress().

Referenced by RecompressRawDigits().

173  {
174 
175  //
176  // prepare input and output container
177  //
178  auto oldRawDigitHandle
179  = event.getValidHandle<std::vector<raw::RawDigit>>(fRawDigitLabel);
180 
181  auto newRawDigits = std::make_unique<std::vector<raw::RawDigit>>();
182 
183  //
184  // create a new compressed raw digit for each existing one
185  //
186  std::set<raw::Compress_t> formats;
187  for (raw::RawDigit const& oldDigits: *oldRawDigitHandle) {
188 
189  // keep track of all the formats
190  formats.insert(oldDigits.Compression());
191 
192  // recompress the digit, and put it into the future data product
193  newRawDigits->emplace_back(recompress(oldDigits, fCompressionType));
194 
195  } // for oldDigits
196 
197  //
198  // store the new digits into the event
199  //
200  event.put(std::move(newRawDigits), fInstanceName);
201 
202 } // raw::RecompressRawDigits::produce()
Collection of charge vs time digitized from a single readout channel.
Definition: RawDigit.h:68
art::InputTag fRawDigitLabel
tag of input raw digit collection
raw::Compress_t fCompressionType
type of compression to be applied
static raw::RawDigit recompress(raw::RawDigit const &digit, Compress_t newFormat, bool force=false)
Returns a RawDigit with its waveform compressed in newFormat
std::string fInstanceName
instance name of output data product
raw::RawDigit raw::RecompressRawDigits::recompress ( raw::RawDigit const &  digit,
Compress_t  newFormat,
bool  force = false 
)
static

Returns a RawDigit with its waveform compressed in newFormat

Parameters
digitRawDigit to be recompressed
newFormatcompression format for the returned RawDigit
forcerun even if input and target compression formats match
Returns
RawDigit with the waveform in a new compression format

A copy of RawDigit is always returned, with the waveform stored in the newFormat compression format. If the input RawDigit is already in that format, the waveform is simply copied, unless force is specified true, in which case data is uncompressed and compressed back.

Definition at line 208 of file RecompressRawDigits_module.cc.

References raw::RawDigit::ADCs(), raw::RawDigit::Channel(), raw::Compress(), raw::RawDigit::Compression(), raw::RawDigit::Samples(), and raw::Uncompress().

Referenced by produce(), and RecompressRawDigits().

209 {
210 
211  if ((newFormat == digit.Compression()) && !force)
212  return digit; // return a copy
213 
214  // uncompress the data
215  raw::RawDigit::ADCvector_t ADCs(digit.Samples());
216  raw::Uncompress(digit.ADCs(), ADCs, digit.Compression());
217 
218  // compress the data (it happens in place)
219  raw::Compress(ADCs, newFormat);
220 
221  // we force a copy in a buffer sized just big enough to host the data;
222  // in case the buffer is already of the right size (as it happens when
223  // newFormat specifies no compression), then no copy happens
224  ADCs.shrink_to_fit();
225 
226  // create a new digit with the new buffer
227  return raw::RawDigit{
228  digit.Channel(),
229  digit.Samples(),
230  std::move(ADCs),
231  newFormat
232  };
233 
234 } // raw::RecompressRawDigits::recompress()
Collection of charge vs time digitized from a single readout channel.
Definition: RawDigit.h:68
ChannelID_t Channel() const
DAQ channel this raw data was read from.
Definition: RawDigit.h:211
std::vector< short > ADCvector_t
Type representing a (compressed) vector of ADC counts.
Definition: RawDigit.h:72
void Compress(std::vector< short > &adc, raw::Compress_t compress)
Compresses a raw data buffer.
Definition: raw.cxx:20
void Uncompress(const std::vector< short > &adc, std::vector< short > &uncompressed, raw::Compress_t compress)
Uncompresses a raw data buffer.
Definition: raw.cxx:756
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

Member Data Documentation

raw::Compress_t raw::RecompressRawDigits::fCompressionType
private

type of compression to be applied

Definition at line 147 of file RecompressRawDigits_module.cc.

Referenced by produce().

std::string raw::RecompressRawDigits::fInstanceName
private

instance name of output data product

Definition at line 148 of file RecompressRawDigits_module.cc.

Referenced by produce(), and RecompressRawDigits().

art::InputTag raw::RecompressRawDigits::fRawDigitLabel
private

tag of input raw digit collection

Definition at line 146 of file RecompressRawDigits_module.cc.

Referenced by produce().


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