CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
HLTPrescaleProvider Class Reference

#include <HLTPrescaleProvider.h>

Public Member Functions

template<>
FractionalPrescale convertL1PS (double val) const
 
HLTConfigProvider const & hltConfigProvider () const
 
template<typename T >
 HLTPrescaleProvider (edm::ParameterSet const &pset, edm::ConsumesCollector &&iC, T &module)
 
template<typename T >
 HLTPrescaleProvider (edm::ParameterSet const &pset, edm::ConsumesCollector &iC, T &module)
 
bool init (const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
 
L1GtUtils const & l1GtUtils () const
 
l1t::L1TGlobalUtil const & l1tGlobalUtil () const
 
int prescaleSet (const edm::Event &iEvent, const edm::EventSetup &iSetup)
 
template<typename T = unsigned int>
T prescaleValue (const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
 combining the two methods above More...
 
template<typename TL1 = int, typename THLT = TL1>
std::pair< TL1, THLT > prescaleValues (const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
 Combined L1T (pair.first) and HLT (pair.second) prescales per HLT path. More...
 
template<typename TL1 = int, typename THLT = TL1>
std::pair< std::vector< std::pair< std::string, TL1 > >, THLT > prescaleValuesInDetail (const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
 
bool rejectedByHLTPrescaler (const edm::TriggerResults &triggerResults, unsigned int i) const
 

Static Public Member Functions

static void fillPSetDescription (edm::ParameterSetDescription &desc, unsigned int stageL1Trigger, edm::InputTag const &l1tAlgBlkInputTag, edm::InputTag const &l1tExtBlkInputTag, bool readPrescalesFromFile)
 
static int l1PrescaleDenominator ()
 

Private Member Functions

void checkL1GtUtils () const
 
void checkL1TGlobalUtil () const
 
template<typename T >
T convertL1PS (double val) const
 
double getL1PrescaleValue (const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
 
std::vector< std::pair< std::string, double > > getL1PrescaleValueInDetail (const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
 

Private Attributes

unsigned char count_ [5] = {0, 0, 0, 0, 0}
 
HLTConfigProvider hltConfigProvider_
 
bool inited_ = false
 
std::unique_ptr< L1GtUtilsl1GtUtils_
 
std::unique_ptr< l1t::L1TGlobalUtill1tGlobalUtil_
 

Static Private Attributes

static constexpr int kL1PrescaleDenominator_ = 100
 

Detailed Description

This class provides access routines to get hold of the HLT Configuration, as well as the prescales of Level-1 and High-Level triggers.

Author
Martin Grunewald

Originally the functions in here were in HLTConfigProvider. The functions that use L1GtUtils and get products from the Event were moved into this class in 2015 when the consumes function calls were added. W. David Dagenhart

See header file for documentation

Author
Martin Grunewald

Definition at line 39 of file HLTPrescaleProvider.h.

Constructor & Destructor Documentation

◆ HLTPrescaleProvider() [1/2]

template<typename T >
HLTPrescaleProvider::HLTPrescaleProvider ( edm::ParameterSet const &  pset,
edm::ConsumesCollector &&  iC,
T module 
)

Definition at line 137 of file HLTPrescaleProvider.h.

138  : HLTPrescaleProvider(pset, iC, module) {}
HLTPrescaleProvider(edm::ParameterSet const &pset, edm::ConsumesCollector &&iC, T &module)

◆ HLTPrescaleProvider() [2/2]

template<typename T >
HLTPrescaleProvider::HLTPrescaleProvider ( edm::ParameterSet const &  pset,
edm::ConsumesCollector iC,
T module 
)

Definition at line 141 of file HLTPrescaleProvider.h.

References l1GtUtils_, l1tGlobalUtil_, callgraph::module, muonDTDigis_cfi::pset, l1t::Run, L1GtUtils::Run, and PDWG_DiPhoton_SD_cff::stageL1Trigger.

141  {
142  unsigned int stageL1Trigger = pset.getParameter<unsigned int>("stageL1Trigger");
143  if (stageL1Trigger <= 1) {
144  l1GtUtils_ = std::make_unique<L1GtUtils>(pset, iC, false, module, L1GtUtils::UseEventSetupIn::Run);
145  } else {
146  l1tGlobalUtil_ = std::make_unique<l1t::L1TGlobalUtil>(pset, iC, module, l1t::UseEventSetupIn::Run);
147  }
148 }
std::unique_ptr< L1GtUtils > l1GtUtils_
std::unique_ptr< l1t::L1TGlobalUtil > l1tGlobalUtil_

Member Function Documentation

◆ checkL1GtUtils()

void HLTPrescaleProvider::checkL1GtUtils ( ) const
private

Definition at line 345 of file HLTPrescaleProvider.cc.

References Exception, and l1GtUtils_.

Referenced by getL1PrescaleValue(), getL1PrescaleValueInDetail(), init(), l1GtUtils(), and prescaleSet().

345  {
346  if (!l1GtUtils_) {
347  throw cms::Exception("Configuration") << "HLTPrescaleProvider::checkL1GtUtils(),\n"
348  "Attempt to use L1GtUtils object when none was constructed.\n"
349  "Possibly the proper era is not configured or\n"
350  "the module configuration does not use the era properly\n"
351  "or input is from mixed eras";
352  }
353 }
std::unique_ptr< L1GtUtils > l1GtUtils_

◆ checkL1TGlobalUtil()

void HLTPrescaleProvider::checkL1TGlobalUtil ( ) const
private

Definition at line 355 of file HLTPrescaleProvider.cc.

References Exception, and l1tGlobalUtil_.

Referenced by getL1PrescaleValue(), getL1PrescaleValueInDetail(), init(), l1tGlobalUtil(), and prescaleSet().

355  {
356  if (!l1tGlobalUtil_) {
357  throw cms::Exception("Configuration") << "HLTPrescaleProvider:::checkL1TGlobalUtil(),\n"
358  "Attempt to use L1TGlobalUtil object when none was constructed.\n"
359  "Possibly the proper era is not configured or\n"
360  "the module configuration does not use the era properly\n"
361  "or input is from mixed eras";
362  }
363 }
std::unique_ptr< l1t::L1TGlobalUtil > l1tGlobalUtil_

◆ convertL1PS() [1/2]

template<typename T >
T HLTPrescaleProvider::convertL1PS ( double  val) const
inlineprivate

Definition at line 108 of file HLTPrescaleProvider.h.

References or, and heppy_batch::val.

108  {
109  static_assert(std::is_same_v<T, double> or std::is_same_v<T, FractionalPrescale>,
110  "\n\n\tPlease use convertL1PS<double> or convertL1PS<FractionalPrescale>"
111  " (other types for L1T prescales are not supported anymore by HLTPrescaleProvider)"
112  "\n\tconvertL1PS is used inside prescaleValues and prescaleValuesInDetail,"
113  " so it might be necessary to specify template arguments for those calls,"
114  "\n\te.g. prescaleValues<double, FractionalPrescale>"
115  " (the 1st argument applies to L1T prescales, the 2nd to HLT prescales)\n");
116  return T(val);
117  }
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
long double T

◆ convertL1PS() [2/2]

FractionalPrescale HLTPrescaleProvider::convertL1PS ( double  val) const

Definition at line 107 of file HLTPrescaleProvider.cc.

References funct::abs(), kL1PrescaleDenominator_, and heppy_batch::val.

107  {
108  int numer = static_cast<int>(val * kL1PrescaleDenominator_ + 0.5);
109  static constexpr double kL1RoundingEpsilon = 0.001;
110  if (std::abs(numer - val * kL1PrescaleDenominator_) > kL1RoundingEpsilon) {
111  edm::LogWarning("ValueError") << " Error, L1 prescale val " << val
112  << " does not appear to precisely expressable as int / " << kL1PrescaleDenominator_
113  << ", using a FractionalPrescale is a loss of precision";
114  }
115 
116  return {numer, kL1PrescaleDenominator_};
117 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Log< level::Warning, false > LogWarning
static constexpr int kL1PrescaleDenominator_

◆ fillPSetDescription()

void HLTPrescaleProvider::fillPSetDescription ( edm::ParameterSetDescription desc,
unsigned int  stageL1Trigger,
edm::InputTag const &  l1tAlgBlkInputTag,
edm::InputTag const &  l1tExtBlkInputTag,
bool  readPrescalesFromFile 
)
static

Definition at line 365 of file HLTPrescaleProvider.cc.

References submitPVResolutionJobs::desc, l1t::L1TGlobalUtil::fillDescription(), L1GtUtils::fillDescription(), SiStripSourceConfigTier0_cff::l1tAlgBlkInputTag, SiStripSourceConfigTier0_cff::l1tExtBlkInputTag, and PDWG_DiPhoton_SD_cff::stageL1Trigger.

Referenced by BPHMonitor::fillDescriptions().

369  {
370  desc.add<unsigned int>("stageL1Trigger", stageL1Trigger);
373 }
static void fillDescription(edm::ParameterSetDescription &desc, edm::InputTag const &iAlg, edm::InputTag const &iExt, bool readPrescalesFromFile)
static void fillDescription(edm::ParameterSetDescription &desc)
Definition: L1GtUtils.h:137

◆ getL1PrescaleValue()

double HLTPrescaleProvider::getL1PrescaleValue ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const std::string &  trigger 
)
private

error - can't handle properly multiple L1GTSeed modules

error - can't handle properly multiple L1TSeed modules

Definition at line 119 of file HLTPrescaleProvider.cc.

References checkL1GtUtils(), checkL1TGlobalUtil(), count_, countMax(), GCP_Ntuples_cfg::dump, hltConfigProvider_, HLTConfigProvider::hltL1GTSeeds(), HLTConfigProvider::hltL1TSeeds(), mps_fire::i, iEvent, l1GtUtils_, l1tGlobalUtil_, HLTConfigProvider::l1tType(), mps_fire::result, AlCaHLTBitMon_QueryRunRegistry::string, useL1EventSetup(), and useL1GtTriggerMenuLite().

Referenced by prescaleValues().

121  {
122  // get L1T prescale - works only for those hlt trigger paths with
123  // exactly one L1GT seed module which has exactly one L1T name as seed
124 
125  double result = -1;
126 
127  const unsigned int l1tType(hltConfigProvider_.l1tType());
128  if (l1tType == 1) {
129  checkL1GtUtils();
130  const unsigned int nL1GTSeedModules(hltConfigProvider_.hltL1GTSeeds(trigger).size());
131  if (nL1GTSeedModules == 0) {
132  // no L1 seed module on path hence no L1 seed hence formally no L1 prescale
133  result = 1;
134  } else if (nL1GTSeedModules == 1) {
135  l1GtUtils_->getL1GtRunCache(iEvent, iSetup, useL1EventSetup, useL1GtTriggerMenuLite);
136  const std::string l1tname(hltConfigProvider_.hltL1GTSeeds(trigger).at(0).second);
137  int l1error(0);
138  result = l1GtUtils_->prescaleFactor(iEvent, l1tname, l1error);
139  if (l1error != 0) {
140  if (count_[1] < countMax) {
141  count_[1] += 1;
142  edm::LogError("HLTPrescaleProvider")
143  << " Error in determining L1T prescale for HLT path: '" << trigger << "' with L1T seed: '" << l1tname
144  << "' using L1GtUtils: error code = " << l1error << "." << std::endl
145  << " Note: for this method ('prescaleValues'), only a single L1T name (and not a bit number) is allowed "
146  "as seed!"
147  << std::endl
148  << " For seeds being complex logical expressions, try the new method 'prescaleValuesInDetail'."
149  << std::endl;
150  }
151  result = -1;
152  }
153  } else {
155  if (count_[2] < countMax) {
156  count_[2] += 1;
157  std::string dump("'" + hltConfigProvider_.hltL1GTSeeds(trigger).at(0).second + "'");
158  for (unsigned int i = 1; i != nL1GTSeedModules; ++i) {
159  dump += " * '" + hltConfigProvider_.hltL1GTSeeds(trigger).at(i).second + "'";
160  }
161  edm::LogError("HLTPrescaleProvider")
162  << " Error in determining L1T prescale for HLT path: '" << trigger << "' has multiple L1GTSeed modules, "
163  << nL1GTSeedModules << ", with L1 seeds: " << dump
164  << ". (Note: at most one L1GTSeed module is allowed for a proper determination of the L1T prescale!)";
165  }
166  result = -1;
167  }
168  } else if (l1tType == 2) {
170  const unsigned int nL1TSeedModules(hltConfigProvider_.hltL1TSeeds(trigger).size());
171  if (nL1TSeedModules == 0) {
172  // no L1 seed module on path hence no L1 seed hence formally no L1 prescale
173  result = 1;
174  } else if (nL1TSeedModules == 1) {
175  // l1tGlobalUtil_->retrieveL1Event(iEvent,iSetup);
176  const std::string l1tname(hltConfigProvider_.hltL1TSeeds(trigger).at(0));
177  bool l1error(!l1tGlobalUtil_->getPrescaleByName(l1tname, result));
178  if (l1error) {
179  if (count_[1] < countMax) {
180  count_[1] += 1;
181  edm::LogError("HLTPrescaleProvider")
182  << " Error in determining L1T prescale for HLT path: '" << trigger << "' with L1T seed: '" << l1tname
183  << "' using L1TGlobalUtil: error cond = " << l1error << "." << std::endl
184  << " Note: for this method ('prescaleValues'), only a single L1T name (and not a bit number) is allowed "
185  "as seed!"
186  << std::endl
187  << " For seeds being complex logical expressions, try the new method 'prescaleValuesInDetail'."
188  << std::endl;
189  }
190  result = -1;
191  }
192  } else {
194  if (count_[2] < countMax) {
195  count_[2] += 1;
197  for (unsigned int i = 1; i != nL1TSeedModules; ++i) {
198  dump += " * '" + hltConfigProvider_.hltL1TSeeds(trigger).at(i) + "'";
199  }
200  edm::LogError("HLTPrescaleProvider")
201  << " Error in determining L1T prescale for HLT path: '" << trigger << "' has multiple L1TSeed modules, "
202  << nL1TSeedModules << ", with L1T seeds: " << dump
203  << ". (Note: at most one L1TSeed module is allowed for a proper determination of the L1T prescale!)";
204  }
205  result = -1;
206  }
207  } else {
208  if (count_[1] < countMax) {
209  count_[1] += 1;
210  edm::LogError("HLTPrescaleProvider") << " Unknown L1T Type " << l1tType << " - can not determine L1T prescale! ";
211  }
212  result = -1;
213  }
214 
215  return result;
216 }
HLTConfigProvider hltConfigProvider_
std::unique_ptr< L1GtUtils > l1GtUtils_
const std::vector< std::vector< std::string > > & hltL1TSeeds() const
Log< level::Error, false > LogError
static const unsigned char countMax(2)
unsigned int l1tType() const
L1T type (0=unknown, 1=legacy/stage-1 or 2=stage-2)
int iEvent
Definition: GenABIO.cc:224
const std::vector< std::vector< std::pair< bool, std::string > > > & hltL1GTSeeds() const
static const bool useL1GtTriggerMenuLite(false)
std::unique_ptr< l1t::L1TGlobalUtil > l1tGlobalUtil_
unsigned char count_[5]
static const bool useL1EventSetup(true)

◆ getL1PrescaleValueInDetail()

std::vector< std::pair< std::string, double > > HLTPrescaleProvider::getL1PrescaleValueInDetail ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const std::string &  trigger 
)
private

error - can't handle properly multiple L1GTSeed modules

error - can't handle properly multiple L1TSeed modules

Definition at line 218 of file HLTPrescaleProvider.cc.

References funct::abs(), checkL1GtUtils(), checkL1TGlobalUtil(), count_, countMax(), GCP_Ntuples_cfg::dump, mps_splice::entry, hltConfigProvider_, HLTConfigProvider::hltL1GTSeeds(), HLTConfigProvider::hltL1TSeeds(), mps_fire::i, iEvent, l1GtUtils_, l1tGlobalUtil_, HLTConfigProvider::l1tType(), mps_fire::result, AlCaHLTBitMon_QueryRunRegistry::string, useL1EventSetup(), and useL1GtTriggerMenuLite().

Referenced by prescaleValuesInDetail().

219  {
220  std::vector<std::pair<std::string, double>> result;
221 
222  const unsigned int l1tType(hltConfigProvider_.l1tType());
223  if (l1tType == 1) {
224  checkL1GtUtils();
225 
226  const unsigned int nL1GTSeedModules(hltConfigProvider_.hltL1GTSeeds(trigger).size());
227  if (nL1GTSeedModules == 0) {
228  // no L1 seed module on path hence no L1 seed hence formally no L1 prescale
229  result.clear();
230  } else if (nL1GTSeedModules == 1) {
231  l1GtUtils_->getL1GtRunCache(iEvent, iSetup, useL1EventSetup, useL1GtTriggerMenuLite);
232  const std::string l1tname(hltConfigProvider_.hltL1GTSeeds(trigger).at(0).second);
234  l1Logical.logicalExpressionRunUpdate(iEvent.getRun(), iSetup, l1tname);
235  const std::vector<std::pair<std::string, int>>& errorCodes(l1Logical.errorCodes(iEvent));
236  auto resultInt = l1Logical.prescaleFactors();
237  result.clear();
238  for (const auto& entry : resultInt) {
239  result.push_back(entry);
240  }
241 
242  int l1error(l1Logical.isValid() ? 0 : 1);
243  for (auto const& errorCode : errorCodes) {
244  l1error += std::abs(errorCode.second);
245  }
246  if (l1error != 0) {
247  if (count_[3] < countMax) {
248  count_[3] += 1;
249  std::ostringstream message;
250  message << " Error in determining L1T prescales for HLT path: '" << trigger << "' with complex L1T seed: '"
251  << l1tname << "' using L1GtUtils: " << std::endl
252  << " isValid=" << l1Logical.isValid() << " l1tname/error/prescale " << errorCodes.size() << std::endl;
253  for (unsigned int i = 0; i < errorCodes.size(); ++i) {
254  message << " " << i << ":" << errorCodes[i].first << "/" << errorCodes[i].second << "/" << result[i].second;
255  }
256  message << ".";
257  edm::LogError("HLTPrescaleProvider") << message.str();
258  }
259  result.clear();
260  }
261  } else {
263  if (count_[4] < countMax) {
264  count_[4] += 1;
265  std::string dump("'" + hltConfigProvider_.hltL1GTSeeds(trigger).at(0).second + "'");
266  for (unsigned int i = 1; i != nL1GTSeedModules; ++i) {
267  dump += " * '" + hltConfigProvider_.hltL1GTSeeds(trigger).at(i).second + "'";
268  }
269  edm::LogError("HLTPrescaleProvider")
270  << " Error in determining L1T prescale for HLT path: '" << trigger << "' has multiple L1GTSeed modules, "
271  << nL1GTSeedModules << ", with L1 seeds: " << dump
272  << ". (Note: at most one L1GTSeed module is allowed for a proper determination of the L1T prescale!)";
273  }
274  result.clear();
275  }
276  } else if (l1tType == 2) {
278  const unsigned int nL1TSeedModules(hltConfigProvider_.hltL1TSeeds(trigger).size());
279  if (nL1TSeedModules == 0) {
280  // no L1 seed module on path hence no L1 seed hence formally no L1 prescale
281  result.clear();
282  } else if (nL1TSeedModules == 1) {
283  // l1tGlobalUtil_->retrieveL1Event(iEvent,iSetup);
285  GlobalLogicParser l1tGlobalLogicParser = GlobalLogicParser(l1tname);
286  const std::vector<GlobalLogicParser::OperandToken> l1tSeeds = l1tGlobalLogicParser.expressionSeedsOperandList();
287  int l1error(0);
288  double l1tPrescale(-1);
289  for (auto const& i : l1tSeeds) {
290  const string& l1tSeed = i.tokenName;
291  if (!l1tGlobalUtil_->getPrescaleByName(l1tSeed, l1tPrescale)) {
292  l1error += 1;
293  }
294  result.push_back(std::pair<std::string, double>(l1tSeed, l1tPrescale));
295  }
296  if (l1error != 0) {
297  if (count_[3] < countMax) {
298  count_[3] += 1;
299  string l1name = l1tname;
300  std::ostringstream message;
301  message << " Error in determining L1T prescales for HLT path: '" << trigger << "' with complex L1T seed: '"
302  << l1tname << "' using L1TGlobalUtil: " << std::endl
303  << " isValid=" << l1tGlobalLogicParser.checkLogicalExpression(l1name) << " l1tname/error/prescale "
304  << l1tSeeds.size() << std::endl;
305  for (unsigned int i = 0; i < l1tSeeds.size(); ++i) {
306  const string& l1tSeed = l1tSeeds[i].tokenName;
307  message << " " << i << ":" << l1tSeed << "/" << l1tGlobalUtil_->getPrescaleByName(l1tSeed, l1tPrescale)
308  << "/" << result[i].second;
309  }
310  message << ".";
311  edm::LogError("HLTPrescaleProvider") << message.str();
312  }
313  result.clear();
314  }
315  } else {
317  if (count_[4] < countMax) {
318  count_[4] += 1;
320  for (unsigned int i = 1; i != nL1TSeedModules; ++i) {
321  dump += " * '" + hltConfigProvider_.hltL1TSeeds(trigger).at(i) + "'";
322  }
323  edm::LogError("HLTPrescaleProvider")
324  << " Error in determining L1T prescale for HLT path: '" << trigger << "' has multiple L1TSeed modules, "
325  << nL1TSeedModules << ", with L1T seeds: " << dump
326  << ". (Note: at most one L1TSeed module is allowed for a proper determination of the L1T prescale!)";
327  }
328  result.clear();
329  }
330  } else {
331  if (count_[3] < countMax) {
332  count_[3] += 1;
333  edm::LogError("HLTPrescaleProvider") << " Unknown L1T Type " << l1tType << " - can not determine L1T prescale! ";
334  }
335  result.clear();
336  }
337 
338  return result;
339 }
HLTConfigProvider hltConfigProvider_
std::unique_ptr< L1GtUtils > l1GtUtils_
const std::vector< std::vector< std::string > > & hltL1TSeeds() const
Log< level::Error, false > LogError
static const unsigned char countMax(2)
unsigned int l1tType() const
L1T type (0=unknown, 1=legacy/stage-1 or 2=stage-2)
int iEvent
Definition: GenABIO.cc:224
const std::vector< std::vector< std::pair< bool, std::string > > > & hltL1GTSeeds() const
static const bool useL1GtTriggerMenuLite(false)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::unique_ptr< l1t::L1TGlobalUtil > l1tGlobalUtil_
unsigned char count_[5]
static const bool useL1EventSetup(true)

◆ hltConfigProvider()

HLTConfigProvider const& HLTPrescaleProvider::hltConfigProvider ( ) const
inline

◆ init()

bool HLTPrescaleProvider::init ( const edm::Run iRun,
const edm::EventSetup iSetup,
const std::string &  processName,
bool &  changed 
)

Run-dependent initialisation (non-const method) "init" return value indicates whether intitialisation has succeeded "changed" parameter indicates whether the config has actually changed This must be called at beginRun for most of the other functions in this class to succeed

L1 GTA V3: https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideL1TriggerL1GtUtils#Version_3

Definition at line 22 of file HLTPrescaleProvider.cc.

References checkL1GtUtils(), checkL1TGlobalUtil(), count_, hltConfigProvider_, HLTConfigProvider::init(), inited_, l1GtUtils_, l1tGlobalUtil_, HLTConfigProvider::l1tType(), SimL1EmulatorRepack_CalouGT_cff::processName, mps_fire::result, useL1EventSetup(), and useL1GtTriggerMenuLite().

Referenced by HLTPrescaleExample::beginRun(), CandidateTriggerObjectProducer::beginRun(), HLTEventAnalyzerAOD::beginRun(), pat::PATTriggerProducer::beginRun(), IsoTrig::beginRun(), BPHMonitor::bookHistograms(), EwkElecDQM::dqmBeginRun(), and EwkMuDQM::dqmBeginRun().

25  {
26  inited_ = true;
27 
28  count_[0] = 0;
29  count_[1] = 0;
30  count_[2] = 0;
31  count_[3] = 0;
32  count_[4] = 0;
33 
34  const bool result(hltConfigProvider_.init(iRun, iSetup, processName, changed));
35 
36  const unsigned int l1tType(hltConfigProvider_.l1tType());
37  if (l1tType == 1) {
40  l1GtUtils_->getL1GtRunCache(iRun, iSetup, useL1EventSetup, useL1GtTriggerMenuLite);
41  } else if (l1tType == 2) {
43  l1tGlobalUtil_->retrieveL1Setup(iSetup);
44  } else {
45  edm::LogError("HLTPrescaleProvider") << " Unknown L1T Type " << l1tType << " - prescales will not be avaiable!";
46  }
47 
48  return result;
49 }
HLTConfigProvider hltConfigProvider_
std::unique_ptr< L1GtUtils > l1GtUtils_
Log< level::Error, false > LogError
unsigned int l1tType() const
L1T type (0=unknown, 1=legacy/stage-1 or 2=stage-2)
static const bool useL1GtTriggerMenuLite(false)
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
std::unique_ptr< l1t::L1TGlobalUtil > l1tGlobalUtil_
unsigned char count_[5]
static const bool useL1EventSetup(true)

◆ l1GtUtils()

L1GtUtils const & HLTPrescaleProvider::l1GtUtils ( ) const

Definition at line 51 of file HLTPrescaleProvider.cc.

References checkL1GtUtils(), and l1GtUtils_.

Referenced by pat::PATTriggerProducer::produce().

51  {
53  return *l1GtUtils_;
54 }
std::unique_ptr< L1GtUtils > l1GtUtils_

◆ l1PrescaleDenominator()

static int HLTPrescaleProvider::l1PrescaleDenominator ( )
inlinestatic

Definition at line 95 of file HLTPrescaleProvider.h.

References kL1PrescaleDenominator_.

95 { return kL1PrescaleDenominator_; }
static constexpr int kL1PrescaleDenominator_

◆ l1tGlobalUtil()

l1t::L1TGlobalUtil const & HLTPrescaleProvider::l1tGlobalUtil ( ) const

Definition at line 56 of file HLTPrescaleProvider.cc.

References checkL1TGlobalUtil(), and l1tGlobalUtil_.

56  {
58  return *l1tGlobalUtil_;
59 }
std::unique_ptr< l1t::L1TGlobalUtil > l1tGlobalUtil_

◆ prescaleSet()

int HLTPrescaleProvider::prescaleSet ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)

HLT prescale values via (L1) EventSetup current (default) prescale set index - to be taken from L1GtUtil via Event

error - notify user!

Definition at line 61 of file HLTPrescaleProvider.cc.

References L1GtUtils::AlgorithmTrigger, cms::cuda::assert(), checkL1GtUtils(), checkL1TGlobalUtil(), count_, countMax(), Exception, hltConfigProvider_, iEvent, inited_, l1GtUtils_, l1tGlobalUtil_, HLTConfigProvider::l1tType(), HLTConfigProvider::processName(), L1GtUtils::TechnicalTrigger, useL1EventSetup(), and useL1GtTriggerMenuLite().

Referenced by EwkMuDQM::analyze(), EwkElecDQM::analyze(), prescaleValue(), and pat::PATTriggerProducer::produce().

61  {
62  if (!inited_) {
63  throw cms::Exception("LogicError") << "HLTPrescaleProvider::prescaleSet,\n"
64  "HLTPrescaleProvider::init was not called at beginRun\n";
65  }
66  const unsigned int l1tType(hltConfigProvider_.l1tType());
67  if (l1tType == 1) {
69 
70  // return hltPrescaleTable_.set();
71  l1GtUtils_->getL1GtRunCache(iEvent, iSetup, useL1EventSetup, useL1GtTriggerMenuLite);
72  int errorTech(0);
73  const int psfsiTech(l1GtUtils_->prescaleFactorSetIndex(iEvent, L1GtUtils::TechnicalTrigger, errorTech));
74  int errorPhys(0);
75  const int psfsiPhys(l1GtUtils_->prescaleFactorSetIndex(iEvent, L1GtUtils::AlgorithmTrigger, errorPhys));
76  assert(psfsiTech == psfsiPhys);
77  if ((errorTech == 0) && (errorPhys == 0) && (psfsiTech >= 0) && (psfsiPhys >= 0) && (psfsiTech == psfsiPhys)) {
78  return psfsiPhys;
79  } else {
81  if (count_[0] < countMax) {
82  count_[0] += 1;
83  edm::LogError("HLTPrescaleProvider")
84  << " Using processName '" << hltConfigProvider_.processName() << "':"
85  << " Error in determining HLT prescale set index from L1 data using L1GtUtils:"
86  << " Tech/Phys error = " << errorTech << "/" << errorPhys << " Tech/Phys psfsi = " << psfsiTech << "/"
87  << psfsiPhys;
88  }
89  return -1;
90  }
91  } else if (l1tType == 2) {
93  l1tGlobalUtil_->retrieveL1Event(iEvent, iSetup);
94  return static_cast<int>(l1tGlobalUtil_->prescaleColumn());
95  } else {
96  if (count_[0] < countMax) {
97  count_[0] += 1;
98  edm::LogError("HLTPrescaleProvider")
99  << " Using processName '" << hltConfigProvider_.processName() << "':"
100  << " Unknown L1T Type " << l1tType << " - can not determine prescale set index!";
101  }
102  return -1;
103  }
104 }
HLTConfigProvider hltConfigProvider_
std::unique_ptr< L1GtUtils > l1GtUtils_
Log< level::Error, false > LogError
assert(be >=bs)
static const unsigned char countMax(2)
unsigned int l1tType() const
L1T type (0=unknown, 1=legacy/stage-1 or 2=stage-2)
int iEvent
Definition: GenABIO.cc:224
static const bool useL1GtTriggerMenuLite(false)
const std::string & processName() const
process name
std::unique_ptr< l1t::L1TGlobalUtil > l1tGlobalUtil_
unsigned char count_[5]
static const bool useL1EventSetup(true)

◆ prescaleValue()

template<typename T = unsigned int>
T HLTPrescaleProvider::prescaleValue ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const std::string &  trigger 
)
inline

combining the two methods above

Definition at line 64 of file HLTPrescaleProvider.h.

References hltConfigProvider_, iEvent, prescaleSet(), and HLTConfigProvider::prescaleValue().

Referenced by HLTPrescaleExample::analyze().

64  {
65  const int set(prescaleSet(iEvent, iSetup));
66  //there is a template specialisation for unsigned in which returns +1 which
67  //emulates old behaviour
68  return set < 0 ? -1 : hltConfigProvider_.prescaleValue<T>(static_cast<unsigned int>(set), trigger);
69  }
HLTConfigProvider hltConfigProvider_
T prescaleValue(unsigned int set, const std::string &trigger) const
HLT prescale value in specific prescale set for a specific trigger path.
int iEvent
Definition: GenABIO.cc:224
int prescaleSet(const edm::Event &iEvent, const edm::EventSetup &iSetup)
long double T

◆ prescaleValues()

template<typename TL1 = int, typename THLT = TL1>
std::pair<TL1, THLT> HLTPrescaleProvider::prescaleValues ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const std::string &  trigger 
)
inline

Combined L1T (pair.first) and HLT (pair.second) prescales per HLT path.

Definition at line 73 of file HLTPrescaleProvider.h.

References getL1PrescaleValue(), and iEvent.

Referenced by HLTPrescaleExample::analyze(), IsoTrig::analyze(), HLTEventAnalyzerAOD::analyzeTrigger(), and CandidateTriggerObjectProducer::produce().

75  {
76  return {convertL1PS<TL1>(getL1PrescaleValue(iEvent, iSetup, trigger)),
77  prescaleValue<THLT>(iEvent, iSetup, trigger)};
78  }
double getL1PrescaleValue(const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
int iEvent
Definition: GenABIO.cc:224

◆ prescaleValuesInDetail()

template<typename TL1 = int, typename THLT = TL1>
std::pair<std::vector<std::pair<std::string, TL1> >, THLT> HLTPrescaleProvider::prescaleValuesInDetail ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const std::string &  trigger 
)
inline

Definition at line 83 of file HLTPrescaleProvider.h.

References mps_splice::entry, getL1PrescaleValueInDetail(), iEvent, and eostools::move().

Referenced by HLTPrescaleExample::analyze(), HLTEventAnalyzerAOD::analyzeTrigger(), BPHMonitor::Prescale(), and pat::PATTriggerProducer::produce().

85  {
86  std::pair<std::vector<std::pair<std::string, TL1>>, THLT> retval;
87  for (auto& entry : getL1PrescaleValueInDetail(iEvent, iSetup, trigger)) {
88  retval.first.emplace_back(std::move(entry.first), convertL1PS<TL1>(entry.second));
89  }
90  retval.second = prescaleValue<THLT>(iEvent, iSetup, trigger);
91  return retval;
92  }
int iEvent
Definition: GenABIO.cc:224
std::vector< std::pair< std::string, double > > getL1PrescaleValueInDetail(const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
def move(src, dest)
Definition: eostools.py:511

◆ rejectedByHLTPrescaler()

bool HLTPrescaleProvider::rejectedByHLTPrescaler ( const edm::TriggerResults triggerResults,
unsigned int  i 
) const

Definition at line 341 of file HLTPrescaleProvider.cc.

References hltConfigProvider_, mps_fire::i, HLTConfigProvider::moduleLabel(), HLTConfigProvider::moduleType(), and triggerResults.

341  {
342  return hltConfigProvider_.moduleType(hltConfigProvider_.moduleLabel(i, triggerResults.index(i))) == "HLTPrescaler";
343 }
HLTConfigProvider hltConfigProvider_
const std::string moduleType(const std::string &module) const
C++ class name of module.
const std::string & moduleLabel(unsigned int trigger, unsigned int module) const
static std::string const triggerResults
Definition: EdmProvDump.cc:47

Member Data Documentation

◆ count_

unsigned char HLTPrescaleProvider::count_[5] = {0, 0, 0, 0, 0}
private

◆ hltConfigProvider_

HLTConfigProvider HLTPrescaleProvider::hltConfigProvider_
private

◆ inited_

bool HLTPrescaleProvider::inited_ = false
private

Definition at line 133 of file HLTPrescaleProvider.h.

Referenced by init(), and prescaleSet().

◆ kL1PrescaleDenominator_

constexpr int HLTPrescaleProvider::kL1PrescaleDenominator_ = 100
staticprivate

Definition at line 125 of file HLTPrescaleProvider.h.

Referenced by convertL1PS(), and l1PrescaleDenominator().

◆ l1GtUtils_

std::unique_ptr<L1GtUtils> HLTPrescaleProvider::l1GtUtils_
private

◆ l1tGlobalUtil_

std::unique_ptr<l1t::L1TGlobalUtil> HLTPrescaleProvider::l1tGlobalUtil_
private