20 static const unsigned char countMax(2);
41 }
else if (l1tType == 2) {
45 edm::LogError(
"HLTPrescaleProvider") <<
" Unknown L1T Type " << l1tType <<
" - prescales will not be avaiable!";
63 throw cms::Exception(
"LogicError") <<
"HLTPrescaleProvider::prescaleSet,\n" 64 "HLTPrescaleProvider::init was not called at beginRun\n";
76 assert(psfsiTech == psfsiPhys);
77 if ((errorTech == 0) && (errorPhys == 0) && (psfsiTech >= 0) && (psfsiPhys >= 0) && (psfsiTech == psfsiPhys)) {
85 <<
" Error in determining HLT prescale set index from L1 data using L1GtUtils:" 86 <<
" Tech/Phys error = " << errorTech <<
"/" << errorPhys <<
" Tech/Phys psfsi = " << psfsiTech <<
"/" 91 }
else if (l1tType == 2) {
100 <<
" Unknown L1T Type " << l1tType <<
" - can not determine prescale set index!";
109 static constexpr
double kL1RoundingEpsilon = 0.001;
113 <<
", using a FractionalPrescale is a loss of precision";
131 if (nL1GTSeedModules == 0) {
134 }
else if (nL1GTSeedModules == 1) {
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 " 148 <<
" For seeds being complex logical expressions, try the new method 'prescaleValuesInDetail'." 158 for (
unsigned int i = 1;
i != nL1GTSeedModules; ++
i) {
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!)";
168 }
else if (l1tType == 2) {
171 if (nL1TSeedModules == 0) {
174 }
else if (nL1TSeedModules == 1) {
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 " 187 <<
" For seeds being complex logical expressions, try the new method 'prescaleValuesInDetail'." 197 for (
unsigned int i = 1;
i != nL1TSeedModules; ++
i) {
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!)";
210 edm::LogError(
"HLTPrescaleProvider") <<
" Unknown L1T Type " << l1tType <<
" - can not determine L1T prescale! ";
220 std::vector<std::pair<std::string, double>>
result;
227 if (nL1GTSeedModules == 0) {
230 }
else if (nL1GTSeedModules == 1) {
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();
238 for (
const auto&
entry : resultInt) {
242 int l1error(l1Logical.isValid() ? 0 : 1);
243 for (
auto const& errorCode : errorCodes) {
244 l1error +=
std::abs(errorCode.second);
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;
266 for (
unsigned int i = 1;
i != nL1GTSeedModules; ++
i) {
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!)";
276 }
else if (l1tType == 2) {
279 if (nL1TSeedModules == 0) {
282 }
else if (nL1TSeedModules == 1) {
286 const std::vector<GlobalLogicParser::OperandToken> l1tSeeds = l1tGlobalLogicParser.expressionSeedsOperandList();
288 double l1tPrescale(-1);
289 for (
auto const&
i : l1tSeeds) {
290 const string& l1tSeed =
i.tokenName;
294 result.push_back(std::pair<std::string, double>(l1tSeed, l1tPrescale));
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)
320 for (
unsigned int i = 1;
i != nL1TSeedModules; ++
i) {
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!)";
333 edm::LogError(
"HLTPrescaleProvider") <<
" Unknown L1T Type " << l1tType <<
" - can not determine L1T prescale! ";
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";
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";
369 bool readPrescalesFromFile) {
HLTConfigProvider hltConfigProvider_
static void fillPSetDescription(edm::ParameterSetDescription &desc, unsigned int stageL1Trigger, edm::InputTag const &l1tAlgBlkInputTag, edm::InputTag const &l1tExtBlkInputTag, bool readPrescalesFromFile)
std::unique_ptr< L1GtUtils > l1GtUtils_
const std::vector< std::vector< std::string > > & hltL1TSeeds() const
void checkL1GtUtils() const
const std::string moduleType(const std::string &module) const
C++ class name of module.
void checkL1TGlobalUtil() const
Log< level::Error, false > LogError
l1t::L1TGlobalUtil const & l1tGlobalUtil() const
double getL1PrescaleValue(const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
static const unsigned char countMax(2)
unsigned int l1tType() const
L1T type (0=unknown, 1=legacy/stage-1 or 2=stage-2)
boost::rational< int > FractionalPrescale
const std::string & moduleLabel(unsigned int trigger, unsigned int module) const
const std::vector< std::vector< std::pair< bool, std::string > > > & hltL1GTSeeds() const
static const bool useL1GtTriggerMenuLite(false)
Abs< T >::type abs(const T &t)
static std::string const triggerResults
static void fillDescription(edm::ParameterSetDescription &desc, edm::InputTag const &iAlg, edm::InputTag const &iExt, bool readPrescalesFromFile)
int prescaleSet(const edm::Event &iEvent, const edm::EventSetup &iSetup)
bool rejectedByHLTPrescaler(const edm::TriggerResults &triggerResults, unsigned int i) const
static void fillDescription(edm::ParameterSetDescription &desc)
const std::string & processName() const
process name
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
std::unique_ptr< l1t::L1TGlobalUtil > l1tGlobalUtil_
std::vector< std::pair< std::string, double > > getL1PrescaleValueInDetail(const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
L1GtUtils const & l1GtUtils() const
Log< level::Warning, false > LogWarning
T convertL1PS(double val) const
static const bool useL1EventSetup(true)
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
static constexpr int kL1PrescaleDenominator_