CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Attributes | Static Private Attributes
L1TGlobalPrescaler Class Reference
Inheritance diagram for L1TGlobalPrescaler:
edm::one::EDFilter<> edm::one::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

bool filter (edm::Event &event, edm::EventSetup const &setup) override
 
 L1TGlobalPrescaler (edm::ParameterSet const &config)
 
- Public Member Functions inherited from edm::one::EDFilter<>
 EDFilter ()=default
 
- Public Member Functions inherited from edm::one::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDFilterBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::one::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Types

enum  Mode {
  Mode::ApplyPrescaleValues, Mode::ApplyPrescaleRatios, Mode::ApplyColumnValues, Mode::ApplyColumnRatios,
  Mode::Invalid = -1
}
 

Private Attributes

std::array< unsigned int, GlobalAlgBlk::maxPhysicsTriggersm_counters
 
const int m_l1tPrescaleColumn
 
const std::array< double, GlobalAlgBlk::maxPhysicsTriggersm_l1tPrescales
 
const edm::EDGetTokenT< GlobalAlgBlkBxCollectionm_l1tResultsToken
 
const Mode m_mode
 
int m_oldIndex
 
std::array< double, GlobalAlgBlk::maxPhysicsTriggersm_prescales
 

Static Private Attributes

static const Entry< Modes_modes []
 

Additional Inherited Members

- Public Types inherited from edm::one::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 129 of file L1TGlobalPrescaler.cc.

Member Enumeration Documentation

enum L1TGlobalPrescaler::Mode
strongprivate
Enumerator
ApplyPrescaleValues 
ApplyPrescaleRatios 
ApplyColumnValues 
ApplyColumnRatios 
Invalid 

Definition at line 138 of file L1TGlobalPrescaler.cc.

138  {
139  ApplyPrescaleValues, // apply the given prescale values
140  ApplyPrescaleRatios, // apply prescales equal to ratio between the given values and the ones read from the EventSetup
141  ApplyColumnValues, // apply the prescale values from the EventSetup corresponding to the given column index
142  ApplyColumnRatios, // apply prescales equal to ratio between the values corresponsing to the given column index, and the ones read from the EventSetup
143  Invalid = -1
144  };

Constructor & Destructor Documentation

L1TGlobalPrescaler::L1TGlobalPrescaler ( edm::ParameterSet const &  config)

Definition at line 169 of file L1TGlobalPrescaler.cc.

References ApplyColumnRatios, ApplyColumnValues, ApplyPrescaleRatios, ApplyPrescaleValues, edm::errors::Configuration, Exception, edm::ParameterSet::getParameter(), Invalid, m_counters, m_l1tPrescales, m_mode, m_prescales, and AlCaHLTBitMon_QueryRunRegistry::string.

169  :
170  m_mode( get_enum_value(s_modes, config.getParameter<std::string>("mode").c_str(), Mode::Invalid) ),
171  m_l1tResultsToken( consumes<GlobalAlgBlkBxCollection>(config.getParameter<edm::InputTag>("l1tResults")) ),
173  getParameterArray<double, GlobalAlgBlk::maxPhysicsTriggers>(config, "l1tPrescales") :
174  std::array<double, GlobalAlgBlk::maxPhysicsTriggers>() ),
176  config.getParameter<uint32_t>("l1tPrescaleColumn") : 0 ),
177  m_oldIndex(-1)
178 {
179  switch (m_mode) {
180  // if the mode is "applyPrescaleValues", use the given values
183  break;
184 
185  // otherwise we need to read the prescale values from the EventSetup
189  break;
190 
191  // this should never happen
192  case Mode::Invalid:
193  throw edm::Exception(edm::errors::Configuration) << "invalid mode \"" << config.getParameter<std::string>("mode") << "\"";
194  }
195 
196  m_counters.fill(0);
197  produces<GlobalAlgBlkBxCollection>();
198 }
const std::array< double, GlobalAlgBlk::maxPhysicsTriggers > m_l1tPrescales
std::array< double, GlobalAlgBlk::maxPhysicsTriggers > m_prescales
std::array< unsigned int, GlobalAlgBlk::maxPhysicsTriggers > m_counters
Definition: config.py:1
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
const edm::EDGetTokenT< GlobalAlgBlkBxCollection > m_l1tResultsToken
static const Entry< Mode > s_modes[]

Member Function Documentation

void L1TGlobalPrescaler::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 339 of file L1TGlobalPrescaler.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addNode(), DEFINE_FWK_MODULE, edm::ParameterSetDescription::ifValue(), SelectingProcedure_cff::l1tResults, GlobalAlgBlk::maxPhysicsTriggers, ALCARECOPromptCalibProdSiPixelAli0T_cff::mode, or, s_modes, edm::ParameterDescriptionNode::setComment(), and AlCaHLTBitMon_QueryRunRegistry::string.

339  {
340  // collection with the original uGT results
341  edm::ParameterDescription<edm::InputTag> l1tResults("l1tResults", edm::InputTag("gtStage2Digis"), true);
342  l1tResults.setComment("Collection with the original uGT results");
343 
344  // define how to apply the prescale values
345  edm::ParameterDescription<std::string> mode("mode", "applyPrescaleValues", true);
346  mode.setComment(build_comment_from_entries("Define how to apply the prescale values:", s_modes));
347 
348  // target prescale values (for modes "applyPrescaleValues" or "applyPrescaleRatios")
349  edm::ParameterDescription<std::vector<double>> l1tPrescales("l1tPrescales", std::vector<double>(GlobalAlgBlk::maxPhysicsTriggers, 1.), true);
350  l1tPrescales.setComment("Target prescale values (for modes \"applyPrescaleValues\" or \"applyPrescaleRatios\")");
351 
352  // target prescale column (for modes "applyColumnValues" or "applyColumnRatios")
353  edm::ParameterDescription<uint32_t> l1tPrescaleColumn("l1tPrescaleColumn", 0, true);
354  l1tPrescaleColumn.setComment("Target prescale column (for modes \"applyColumnValues\" or \"applyColumnRatios\")");
355 
356  // validaton of all possible configurations and applyPrescaleValues example
357  {
359  desc.addNode(l1tResults);
360  desc.ifValue(mode,
361  // if mode is "applyPrescaleValues" or "applyPrescaleRatios", read the target prescales
362  "applyPrescaleValues" >> l1tPrescales or
363  "applyPrescaleRatios" >> l1tPrescales or
364  // if mode is "applyColumnValues" or "applyColumnRatios", read the target column
365  "applyColumnValues" >> l1tPrescaleColumn or
366  "applyColumnRatios" >> l1tPrescaleColumn );
367  descriptions.add("l1tGlobalPrescaler", desc);
368  }
369 
370  // applyColumnRatios example
371  {
373  desc.addNode(l1tResults);
374  desc.add<std::string>("mode", "applyColumnRatios")->setComment("apply prescales equal to ratio between the values corresponsing to the given column index, and the ones read from the EventSetup");
375  desc.addNode(l1tPrescaleColumn);
376  descriptions.add("l1tGlobalPrescalerTargetColumn", desc);
377  }
378 }
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
static const unsigned int maxPhysicsTriggers
Definition: GlobalAlgBlk.h:52
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T > > cases)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static const Entry< Mode > s_modes[]
bool L1TGlobalPrescaler::filter ( edm::Event event,
edm::EventSetup const &  setup 
)
overridevirtual

Implements edm::one::EDFilterBase.

Definition at line 200 of file L1TGlobalPrescaler.cc.

References ApplyColumnRatios, ApplyColumnValues, ApplyPrescaleRatios, BXVector< T >::at(), edm::errors::Configuration, cmsPerfStripChart::format, edm::EventSetup::get(), GlobalAlgBlk::getAlgoDecisionFinal(), GlobalAlgBlk::getFinalORVeto(), GlobalAlgBlk::getPreScColumn(), h, cmsBatch::handle, mps_fire::i, diffTreeTool::index, BXVector< T >::isEmpty(), edm::errors::LogicError, m_counters, m_l1tPrescaleColumn, m_l1tPrescales, m_l1tResultsToken, m_mode, m_oldIndex, m_prescales, GlobalAlgBlk::maxPhysicsTriggers, min(), eostools::move(), or, L1TGlobalPrescalesVetos::prescale_table_, mps_fire::result, GlobalAlgBlk::setAlgoDecisionFinal(), GlobalAlgBlk::setFinalOR(), GlobalAlgBlk::setFinalORPreVeto(), and GlobalAlgBlk::setPreScColumn().

200  {
202  event.getByToken(m_l1tResultsToken, handle);
203 
204  // if the input collection does not have any information for bx 0,
205  // produce an empty collection, and fail
206  if (handle->isEmpty(0)) {
207  std::unique_ptr<GlobalAlgBlkBxCollection> result(new GlobalAlgBlkBxCollection());
208  event.put(std::move(result));
209  return false;
210  }
211 
212  // read the prescale index
213  int index = handle->at(0,0).getPreScColumn();
214  assert(index >= 0);
215 
216  // Mode::ApplyPrescaleRatios
217  // apply prescales equal to ratio between the given values and the ones read from the EventSetup
218  if (m_mode == Mode::ApplyPrescaleRatios and m_oldIndex != index) {
220  setup.get<L1TGlobalPrescalesVetosRcd>().get(h);
221  auto const & prescaleTable = h->prescale_table_;
222  if (index >= (int) prescaleTable.size())
223  throw edm::Exception(edm::errors::LogicError) << boost::format("The prescale index %d is invalid, it should be smaller than the prescale table size %d.") % index % prescaleTable.size();
224  auto const & prescales = prescaleTable[index];
225  unsigned long i = 0;
226  for (; i < std::min(prescales.size(), (unsigned long) GlobalAlgBlk::maxPhysicsTriggers); ++i)
227  if (m_l1tPrescales[i] == 0) {
228  // if the trigger is requested to be disabled, just do it
229  m_prescales[i] = 0.;
230  } else if (prescales[i] == 0) {
231  // othersie, if the trigger was originally disabled, warn the user and keep it that way
232  m_prescales[i] = 0.;
233  edm::LogWarning("L1TGlobalPrescaler") << "Request to enable the trigger " << i << " which was originally disabled\nIt will be kept disabled.";
234  } else if (m_l1tPrescales[i] < prescales[i]) {
235  // if the target prescale is lower than the original prescale, keep the trigger unprescaled
236  m_prescales[i] = 1.;
237  edm::LogWarning("L1TGlobalPrescaler") << "Request to prescale the trigger " << i << " less than it was originally prescaled\nNo further prescale will be applied.";
238  } else {
239  // apply the ratio of the new and old prescales
240  m_prescales[i] = (double) m_l1tPrescales[i] / prescales[i];
241  }
242  for (; i < (unsigned long) GlobalAlgBlk::maxPhysicsTriggers; ++i)
243  // disable the triggers not included in the prescale table
244  m_prescales[i] = 0.;
245  // reset the prescales
246  m_counters.fill(0);
247  m_oldIndex = index;
248  }
249 
250  // Mode::ApplyColumnValues
251  // apply the prescale values from the EventSetup corresponding to the given column index
254  setup.get<L1TGlobalPrescalesVetosRcd>().get(h);
255  auto const & prescaleTable = h->prescale_table_;
256  if (m_l1tPrescaleColumn >= (int) prescaleTable.size())
257  throw edm::Exception(edm::errors::Configuration) << boost::format("The prescale index %d is invalid, it should be smaller than the prescale table size %d.") % m_l1tPrescaleColumn % prescaleTable.size();
258  auto const & targets = prescaleTable[m_l1tPrescaleColumn];
259  unsigned long i = 0;
260  for (; i < std::min(targets.size(), (unsigned long) GlobalAlgBlk::maxPhysicsTriggers); ++i)
261  // read the prescales from the EventSetup
262  m_prescales[i] = targets[i];
263  for (; i < (unsigned long) GlobalAlgBlk::maxPhysicsTriggers; ++i)
264  // disable the triggers not included in the prescale table
265  m_prescales[i] = 0.;
266  // reset the prescales
267  m_counters.fill(0);
269  }
270 
271  // Mode::ApplyColumnRatios
272  // apply prescales equal to ratio between the values corresponsing to the given column index, and the ones read from the EventSetup
273  if (m_mode == Mode::ApplyColumnRatios and m_oldIndex != index) {
275  setup.get<L1TGlobalPrescalesVetosRcd>().get(h);
276  auto const & prescaleTable = h->prescale_table_;
277  if (index >= (int) prescaleTable.size())
278  throw edm::Exception(edm::errors::LogicError) << boost::format("The prescale index %d is invalid, it should be smaller than the prescale table size %d.") % index % prescaleTable.size();
279  if (m_l1tPrescaleColumn >= (int) prescaleTable.size())
280  throw edm::Exception(edm::errors::Configuration) << boost::format("The prescale index %d is invalid, it should be smaller than the prescale table size %d.") % m_l1tPrescaleColumn % prescaleTable.size();
281  auto const & prescales = prescaleTable[index];
282  auto const & targets = prescaleTable[m_l1tPrescaleColumn];
283  unsigned long i = 0;
284  for (; i < std::min({prescales.size(), targets.size(), (unsigned long) GlobalAlgBlk::maxPhysicsTriggers}); ++i)
285  if (prescales[i] == 0)
286  // if the trigger was disabled, keep it disabled
287  m_prescales[i] = 0.;
288  else
289  // if the target prescale is lower than the original prescale, keep the trigger unprescaled
290  m_prescales[i] = targets[i] < prescales[i] ? 1. : (double) targets[i] / prescales[i];
291  for (; i < (unsigned long) GlobalAlgBlk::maxPhysicsTriggers; ++i)
292  // disable the triggers not included in the prescale table
293  m_prescales[i] = 0.;
294  // reset the prescales
295  m_counters.fill(0);
296  m_oldIndex = index;
297  }
298 
299  // make a copy of the GlobalAlgBlk for bx 0
300  GlobalAlgBlk algoBlock = handle->at(0,0);
301 
302  bool finalOr = false;
303 
304  for (unsigned int i = 0; i < GlobalAlgBlk::maxPhysicsTriggers; ++i) {
305  if (m_prescales[i] == 0) {
306  // mask this trigger: reset the bit
307  algoBlock.setAlgoDecisionFinal(i, false);
308  } else if (algoBlock.getAlgoDecisionFinal(i)) {
309  // prescale this trigger
310  ++m_counters[i];
311  if (std::fmod(m_counters[i], m_prescales[i]) < 1)
312  // the prescale is successful, keep the bit set
313  finalOr = true;
314  else
315  // the prescale failed, reset the bit
316  algoBlock.setAlgoDecisionFinal(i, false);
317  }
318  }
319 
320  // set the final OR
321  algoBlock.setFinalORPreVeto(finalOr);
322  if (algoBlock.getFinalORVeto())
323  finalOr = false;
324  algoBlock.setFinalOR(finalOr);
325 
326  // set the new prescale column
329 
330  // create a new GlobalAlgBlkBxCollection, and set the new prescaled decisions for bx 0
331  std::unique_ptr<GlobalAlgBlkBxCollection> result(new GlobalAlgBlkBxCollection());
332  result->push_back(0, algoBlock);
333  event.put(std::move(result));
334 
335  return finalOr;
336 }
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
void setFinalORPreVeto(bool fOR)
Definition: GlobalAlgBlk.h:59
std::vector< bool > const & getAlgoDecisionFinal() const
Definition: GlobalAlgBlk.h:88
const std::array< double, GlobalAlgBlk::maxPhysicsTriggers > m_l1tPrescales
std::array< double, GlobalAlgBlk::maxPhysicsTriggers > m_prescales
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:1
std::array< unsigned int, GlobalAlgBlk::maxPhysicsTriggers > m_counters
bool isEmpty(int bx) const
BXVector< GlobalAlgBlk > GlobalAlgBlkBxCollection
Definition: GlobalAlgBlk.h:31
const bool getFinalORVeto() const
Definition: GlobalAlgBlk.h:69
static const unsigned int maxPhysicsTriggers
Definition: GlobalAlgBlk.h:52
const int getPreScColumn() const
Definition: GlobalAlgBlk.h:70
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
format
Some error handling for the usage.
T min(T a, T b)
Definition: MathUtil.h:58
void setFinalOR(bool fOR)
Definition: GlobalAlgBlk.h:60
const edm::EDGetTokenT< GlobalAlgBlkBxCollection > m_l1tResultsToken
std::vector< std::vector< int > > prescale_table_
void setPreScColumn(int psC)
Definition: GlobalAlgBlk.h:61
def move(src, dest)
Definition: eostools.py:510
void setAlgoDecisionFinal(unsigned int bit, bool val)
const T & at(int bx, unsigned i) const

Member Data Documentation

std::array<unsigned int, GlobalAlgBlk::maxPhysicsTriggers> L1TGlobalPrescaler::m_counters
private

Definition at line 159 of file L1TGlobalPrescaler.cc.

Referenced by filter(), and L1TGlobalPrescaler().

const int L1TGlobalPrescaler::m_l1tPrescaleColumn
private

Definition at line 160 of file L1TGlobalPrescaler.cc.

Referenced by filter().

const std::array<double, GlobalAlgBlk::maxPhysicsTriggers> L1TGlobalPrescaler::m_l1tPrescales
private

Definition at line 157 of file L1TGlobalPrescaler.cc.

Referenced by filter(), and L1TGlobalPrescaler().

const edm::EDGetTokenT<GlobalAlgBlkBxCollection> L1TGlobalPrescaler::m_l1tResultsToken
private

Definition at line 156 of file L1TGlobalPrescaler.cc.

Referenced by filter().

const Mode L1TGlobalPrescaler::m_mode
private

Definition at line 155 of file L1TGlobalPrescaler.cc.

Referenced by filter(), and L1TGlobalPrescaler().

int L1TGlobalPrescaler::m_oldIndex
private

Definition at line 161 of file L1TGlobalPrescaler.cc.

Referenced by filter().

std::array<double, GlobalAlgBlk::maxPhysicsTriggers> L1TGlobalPrescaler::m_prescales
private

Definition at line 158 of file L1TGlobalPrescaler.cc.

Referenced by filter(), and L1TGlobalPrescaler().

const Entry< L1TGlobalPrescaler::Mode > L1TGlobalPrescaler::s_modes
staticprivate
Initial value:
{
{ Mode::ApplyPrescaleValues, "applyPrescaleValues", "apply the given prescale values" },
{ Mode::ApplyPrescaleRatios, "applyPrescaleRatios", "apply prescales equal to ratio between the given values and the ones read from the EventSetup" },
{ Mode::ApplyColumnValues, "applyColumnValues", "apply the prescale values from the EventSetup corresponding to the given column index" },
{ Mode::ApplyColumnRatios, "applyColumnRatios", "apply prescales equal to ratio between the values corresponsing to the given column index, and the ones read from the EventSetup" },
{ Mode::Invalid, 0 , 0 }
}

Definition at line 147 of file L1TGlobalPrescaler.cc.

Referenced by fillDescriptions().