File indexing completed on 2024-10-08 05:11:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtAnalyzer.h"
0017
0018
0019 #include <memory>
0020 #include <iomanip>
0021
0022
0023 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h"
0024 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetup.h"
0025 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerRecord.h"
0026 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMap.h"
0027
0028 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h"
0029
0030 #include "L1Trigger/GlobalTrigger/interface/L1GlobalTriggerPSB.h"
0031 #include "L1Trigger/GlobalTrigger/interface/L1GlobalTriggerGTL.h"
0032 #include "L1Trigger/GlobalTrigger/interface/L1GlobalTriggerFDL.h"
0033
0034 #include "FWCore/Framework/interface/ESHandle.h"
0035 #include "FWCore/Framework/interface/LuminosityBlock.h"
0036
0037 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h"
0038 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h"
0039
0040 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0041
0042
0043 L1GtAnalyzer::L1GtAnalyzer(const edm::ParameterSet& parSet)
0044 :
0045
0046 m_retrieveL1Extra(parSet.getParameter<edm::ParameterSet>("L1ExtraInputTags"), consumesCollector()),
0047
0048 m_printOutput(parSet.getUntrackedParameter<int>("PrintOutput", 3)),
0049
0050 m_analyzeDecisionReadoutRecordEnable(parSet.getParameter<bool>("analyzeDecisionReadoutRecordEnable")),
0051
0052 m_analyzeL1GtUtilsMenuLiteEnable(parSet.getParameter<bool>("analyzeL1GtUtilsMenuLiteEnable")),
0053 m_analyzeL1GtUtilsEventSetupEnable(parSet.getParameter<bool>("analyzeL1GtUtilsEventSetupEnable")),
0054 m_analyzeL1GtUtilsEnable(parSet.getParameter<bool>("analyzeL1GtUtilsEnable")),
0055 m_analyzeTriggerEnable(parSet.getParameter<bool>("analyzeTriggerEnable")),
0056
0057 m_analyzeObjectMapEnable(parSet.getParameter<bool>("analyzeObjectMapEnable")),
0058
0059 m_analyzeL1GtTriggerMenuLiteEnable(parSet.getParameter<bool>("analyzeL1GtTriggerMenuLiteEnable")),
0060
0061 m_analyzeConditionsInRunBlockEnable(parSet.getParameter<bool>("analyzeConditionsInRunBlockEnable")),
0062 m_analyzeConditionsInLumiBlockEnable(parSet.getParameter<bool>("analyzeConditionsInLumiBlockEnable")),
0063 m_analyzeConditionsInEventBlockEnable(parSet.getParameter<bool>("analyzeConditionsInEventBlockEnable")),
0064
0065
0066 m_l1GtDaqReadoutRecordInputTag(parSet.getParameter<edm::InputTag>("L1GtDaqReadoutRecordInputTag")),
0067
0068
0069 m_l1GtRecordInputTag(parSet.getParameter<edm::InputTag>("L1GtRecordInputTag")),
0070
0071
0072 m_l1GtObjectMapTag(parSet.getParameter<edm::InputTag>("L1GtObjectMapTag")),
0073
0074
0075 m_l1GtObjectMapsInputTag(parSet.getParameter<edm::InputTag>("L1GtObjectMapsInputTag")),
0076
0077
0078 m_l1GmtInputTag(parSet.getParameter<edm::InputTag>("L1GmtInputTag")),
0079
0080
0081 m_l1GtTmLInputTag(parSet.getParameter<edm::InputTag>("L1GtTmLInputTag")),
0082
0083
0084 m_condInEdmInputTag(parSet.getParameter<edm::InputTag>("CondInEdmInputTag")),
0085
0086
0087 m_nameAlgTechTrig(parSet.getParameter<std::string>("AlgorithmName")),
0088 m_condName(parSet.getParameter<std::string>("ConditionName")),
0089 m_bitNumber(parSet.getParameter<unsigned int>("BitNumber")),
0090
0091 m_l1GtUtilsConfiguration(parSet.getParameter<unsigned int>("L1GtUtilsConfiguration")),
0092 m_l1GtTmLInputTagProv(parSet.getParameter<bool>("L1GtTmLInputTagProv")),
0093 m_l1GtRecordsInputTagProv(parSet.getParameter<bool>("L1GtRecordsInputTagProv")),
0094 m_l1GtUtilsConfigureBeginRun(parSet.getParameter<bool>("L1GtUtilsConfigureBeginRun")),
0095 m_l1GtUtilsLogicalExpression(parSet.getParameter<std::string>("L1GtUtilsLogicalExpression")),
0096 m_l1GtUtilsProv(parSet,
0097 consumesCollector(),
0098 m_l1GtUtilsConfiguration == 0 || m_l1GtUtilsConfiguration == 100000,
0099 *this,
0100 edm::InputTag(),
0101 edm::InputTag(),
0102 m_l1GtTmLInputTagProv ? edm::InputTag() : m_l1GtTmLInputTag),
0103 m_l1GtUtils(parSet,
0104 consumesCollector(),
0105 m_l1GtUtilsConfiguration == 0 || m_l1GtUtilsConfiguration == 100000,
0106 *this,
0107 m_l1GtRecordInputTag,
0108 m_l1GtDaqReadoutRecordInputTag,
0109 m_l1GtTmLInputTagProv ? edm::InputTag() : m_l1GtTmLInputTag),
0110 m_logicalExpressionL1ResultsProv(m_l1GtUtilsLogicalExpression, m_l1GtUtilsProv),
0111 m_logicalExpressionL1Results(m_l1GtUtilsLogicalExpression, m_l1GtUtils) {
0112 m_l1GtDaqReadoutRecordToken = consumes<L1GlobalTriggerReadoutRecord>(m_l1GtDaqReadoutRecordInputTag);
0113 m_l1GtObjectMapToken = consumes<L1GlobalTriggerObjectMapRecord>(m_l1GtObjectMapTag);
0114 m_l1GtObjectMapsToken = consumes<L1GlobalTriggerObjectMaps>(m_l1GtObjectMapsInputTag);
0115 m_l1GtTmLToken = consumes<L1GtTriggerMenuLite, edm::InRun>(m_l1GtTmLInputTag);
0116 m_condInRunToken = consumes<edm::ConditionsInRunBlock, edm::InRun>(m_condInEdmInputTag);
0117 m_condInLumiToken = consumes<edm::ConditionsInLumiBlock, edm::InLumi>(m_condInEdmInputTag);
0118 m_condInEventToken = consumes<edm::ConditionsInEventBlock>(m_condInEdmInputTag);
0119
0120 LogDebug("L1GtAnalyzer") << "\n Input parameters for L1 GT test analyzer"
0121 << "\n L1 GT DAQ product: " << m_l1GtDaqReadoutRecordInputTag
0122 << "\n L1GlobalTriggerRecord product: " << m_l1GtRecordInputTag
0123 << "\n L1 GT object map collection: " << m_l1GtObjectMapTag
0124 << "\n Muon collection from GMT: " << m_l1GmtInputTag
0125 << "\n L1 trigger menu lite product: " << m_l1GtTmLInputTag
0126 << "\n Algorithm name or alias, technical trigger name: " << m_nameAlgTechTrig
0127 << "\n Condition, if an algorithm trigger is requested: " << m_condName
0128 << "\n Bit number for an algorithm or technical trigger: " << m_bitNumber
0129 << "\n Requested L1 trigger configuration: " << m_l1GtUtilsConfiguration
0130 << "\n Retrieve input tag from provenance for L1GtTriggerMenuLite in the L1GtUtils: "
0131 << m_l1GtTmLInputTagProv
0132 << "\n Retrieve input tag from provenance for L1GlobalTriggerReadoutRecord "
0133 << "\n and / or L1GlobalTriggerRecord in the L1GtUtils: " << m_l1GtRecordsInputTagProv
0134 << "\n Configure L1GtUtils in beginRun(...): " << m_l1GtUtilsConfigureBeginRun << " \n"
0135 << std::endl;
0136 }
0137
0138
0139 L1GtAnalyzer::~L1GtAnalyzer() {
0140
0141 }
0142
0143
0144 void L1GtAnalyzer::beginJob() {
0145
0146 }
0147
0148 void L1GtAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup& evSetup) {
0149 if (m_analyzeConditionsInRunBlockEnable) {
0150 analyzeConditionsInRunBlock(iRun, evSetup);
0151 }
0152
0153
0154
0155 if (m_l1GtUtilsConfigureBeginRun) {
0156
0157
0158 bool useL1EventSetup = false;
0159 bool useL1GtTriggerMenuLite = false;
0160
0161 switch (m_l1GtUtilsConfiguration) {
0162 case 0: {
0163 useL1EventSetup = false;
0164 useL1GtTriggerMenuLite = true;
0165
0166 } break;
0167 case 100000: {
0168 useL1EventSetup = true;
0169 useL1GtTriggerMenuLite = true;
0170
0171 } break;
0172 case 200000: {
0173 useL1EventSetup = true;
0174 useL1GtTriggerMenuLite = false;
0175
0176 } break;
0177 default: {
0178
0179 } break;
0180 }
0181
0182 m_l1GtUtilsProv.getL1GtRunCache(iRun, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0183
0184 m_l1GtUtils.getL1GtRunCache(iRun, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0185
0186
0187
0188 if (m_logicalExpressionL1ResultsProv.isValid()) {
0189 m_logicalExpressionL1ResultsProv.logicalExpressionRunUpdate(iRun, evSetup);
0190 } else {
0191
0192
0193 }
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205 m_logicalExpressionL1Results.logicalExpressionRunUpdate(iRun, evSetup, m_l1GtUtilsLogicalExpression);
0206 if (!(m_logicalExpressionL1Results.isValid())) {
0207
0208
0209 }
0210 }
0211 }
0212
0213 void L1GtAnalyzer::beginLuminosityBlock(const edm::LuminosityBlock& iLumi, const edm::EventSetup& evSetup) {
0214 if (m_analyzeConditionsInLumiBlockEnable) {
0215 analyzeConditionsInLumiBlock(iLumi, evSetup);
0216 }
0217 }
0218
0219
0220
0221
0222
0223 void L1GtAnalyzer::analyzeDecisionReadoutRecord(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
0224 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeDecisionReadoutRecord ****\n" << std::endl;
0225
0226
0227
0228 std::ostringstream myCoutStream;
0229
0230
0231 edm::Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecord;
0232 iEvent.getByToken(m_l1GtDaqReadoutRecordToken, gtReadoutRecord);
0233
0234 if (!gtReadoutRecord.isValid()) {
0235 LogDebug("L1GtAnalyzer") << "\nL1GlobalTriggerReadoutRecord with \n " << m_l1GtDaqReadoutRecordInputTag
0236 << "\nrequested in configuration, but not found in the event."
0237 << "\nExit the method.\n"
0238 << std::endl;
0239
0240 return;
0241 }
0242
0243
0244 bool gtDecision = gtReadoutRecord->decision();
0245 DecisionWord gtDecisionWord = gtReadoutRecord->decisionWord();
0246
0247
0248 edm::LogVerbatim("L1GtAnalyzer") << "\n GlobalTrigger decision: " << gtDecision << std::endl;
0249
0250
0251 gtReadoutRecord->printGtDecision(myCoutStream);
0252
0253
0254 gtReadoutRecord->printTechnicalTrigger(myCoutStream);
0255
0256 printOutput(myCoutStream);
0257 }
0258
0259 void L1GtAnalyzer::analyzeL1GtUtilsCore(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
0260
0261
0262 std::ostringstream myCoutStream;
0263
0264
0265
0266
0267
0268
0269 int iErrorCode = -1;
0270 int l1ConfCode = -1;
0271
0272 const bool l1Conf = m_l1GtUtils.availableL1Configuration(iErrorCode, l1ConfCode);
0273
0274 myCoutStream << "\nL1 configuration code: \n"
0275 << "\n Legend: "
0276 << "\n 0 - Retrieve L1 trigger configuration from L1GtTriggerMenuLite only"
0277 << "\n 10000 L1GtTriggerMenuLite product is valid"
0278 << "\n 99999 L1GtTriggerMenuLite product not valid. Error."
0279 << "\n"
0280 << "\n 100000 - Fall through: try first L1GtTriggerMenuLite; if not valid,try event setup."
0281 << "\n 110000 L1GtTriggerMenuLite product is valid"
0282 << "\n 120000 L1GtTriggerMenuLite product not valid, event setup valid."
0283 << "\n 199999 L1GtTriggerMenuLite product not valid, event setup not valid. Error."
0284 << "\n"
0285 << "\n 200000 - Retrieve L1 trigger configuration from event setup only."
0286 << "\n 210000 Event setup valid."
0287 << "\n 299999 Event setup not valid. Error."
0288 << "\n"
0289 << "\n 300000 - No L1 trigger configuration requested to be retrieved. Error"
0290 << "\n Must call before using L1GtUtils methods: "
0291 << "\n getL1GtRunCache(const edm::Event& iEvent, const edm::EventSetup& evSetup,"
0292 << "\n const bool useL1EventSetup, const bool useL1GtTriggerMenuLite)"
0293 << "\n"
0294 << std::endl;
0295
0296 if (l1Conf) {
0297 myCoutStream << "\nL1 configuration code:" << l1ConfCode << "\nValid L1 trigger configuration." << std::endl;
0298
0299 myCoutStream << "\nL1 trigger menu name and implementation:"
0300 << "\n"
0301 << m_l1GtUtils.l1TriggerMenu() << "\n"
0302 << m_l1GtUtils.l1TriggerMenuImplementation() << std::endl;
0303
0304 } else {
0305 myCoutStream << "\nL1 configuration code:" << l1ConfCode << "\nNo valid L1 trigger configuration available."
0306 << "\nSee text above for error code interpretation"
0307 << "\nNo return here, in order to test each method, protected against configuration error."
0308 << std::endl;
0309 }
0310
0311 myCoutStream << "\n******** Results found with input tags retrieved from provenance ******** \n" << std::endl;
0312
0313
0314
0315
0316
0317
0318
0319
0320 iErrorCode = -1;
0321
0322 bool decisionBeforeMaskAlgTechTrig = m_l1GtUtilsProv.decisionBeforeMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0323
0324 bool decisionAfterMaskAlgTechTrig = m_l1GtUtilsProv.decisionAfterMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0325
0326 bool decisionAlgTechTrig = m_l1GtUtilsProv.decision(iEvent, m_nameAlgTechTrig, iErrorCode);
0327
0328 int prescaleFactorAlgTechTrig = m_l1GtUtilsProv.prescaleFactor(iEvent, m_nameAlgTechTrig, iErrorCode);
0329
0330 int triggerMaskAlgTechTrig = m_l1GtUtilsProv.triggerMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0331
0332 myCoutStream << "\n\nMethods:"
0333 << "\n decisionBeforeMask(iEvent, m_nameAlgTechTrig, iErrorCode)"
0334 << "\n decisionAfterMask(iEvent, m_nameAlgTechTrig, iErrorCode)"
0335 << "\n decision(iEvent, m_nameAlgTechTrig, iErrorCode)"
0336 << "\n prescaleFactor(iEvent, m_nameAlgTechTrig, iErrorCode)"
0337 << "\n triggerMask(iEvent, m_nameAlgTechTrig, iErrorCode)"
0338 << "\n triggerMask(m_nameAlgTechTrig,iErrorCode)"
0339 << "\n\n"
0340 << std::endl;
0341
0342 if (iErrorCode == 0) {
0343 myCoutStream << "\nDecision before trigger mask for " << m_nameAlgTechTrig << ": "
0344 << decisionBeforeMaskAlgTechTrig << std::endl;
0345 myCoutStream << "Decision after trigger mask for " << m_nameAlgTechTrig << ": " << decisionAfterMaskAlgTechTrig
0346 << std::endl;
0347 myCoutStream << "Decision (after trigger mask) for " << m_nameAlgTechTrig << ": " << decisionAlgTechTrig
0348 << std::endl;
0349
0350 myCoutStream << "Prescale factor for " << m_nameAlgTechTrig << ": " << prescaleFactorAlgTechTrig
0351 << std::endl;
0352
0353 myCoutStream << "Trigger mask for " << m_nameAlgTechTrig << ": " << triggerMaskAlgTechTrig
0354 << std::endl;
0355
0356 } else if (iErrorCode == 1) {
0357 myCoutStream << "\n"
0358 << m_nameAlgTechTrig << " does not exist in the L1 menu " << m_l1GtUtilsProv.l1TriggerMenu() << "\n"
0359 << std::endl;
0360
0361 } else {
0362 myCoutStream << "\nError: "
0363 << "\n An error was encountered when retrieving decision, mask and prescale factor for "
0364 << m_nameAlgTechTrig << "\n L1 Menu: " << m_l1GtUtilsProv.l1TriggerMenu()
0365 << "\n Error code: " << iErrorCode << std::endl;
0366 }
0367
0368
0369
0370 iErrorCode = -1;
0371 triggerMaskAlgTechTrig = m_l1GtUtilsProv.triggerMask(m_nameAlgTechTrig, iErrorCode);
0372
0373 if (iErrorCode == 0) {
0374 myCoutStream << "\nTrigger mask for " << m_nameAlgTechTrig << "(faster method): " << triggerMaskAlgTechTrig
0375 << std::endl;
0376
0377 } else if (iErrorCode == 1) {
0378 myCoutStream << "\n"
0379 << m_nameAlgTechTrig << " does not exist in the L1 menu " << m_l1GtUtilsProv.l1TriggerMenu() << "\n"
0380 << std::endl;
0381
0382 } else {
0383 myCoutStream << "\nError: "
0384 << "\n An error was encountered when fast retrieving trigger mask for " << m_nameAlgTechTrig
0385 << "\n L1 Menu: " << m_l1GtUtilsProv.l1TriggerMenu() << "\n Error code: " << iErrorCode << std::endl;
0386 }
0387
0388
0389
0390
0391 L1GtUtils::TriggerCategory trigCategory = L1GtUtils::AlgorithmTrigger;
0392
0393 myCoutStream << "\nMethods:"
0394 << "\n prescaleFactorSetIndex(iEvent, trigCategory, iErrorCode)"
0395 << "\n prescaleFactorSet(iEvent, trigCategory,iErrorCode)\n"
0396 << std::endl;
0397
0398 iErrorCode = -1;
0399 const int pfSetIndexAlgorithmTrigger = m_l1GtUtilsProv.prescaleFactorSetIndex(iEvent, trigCategory, iErrorCode);
0400
0401 if (iErrorCode == 0) {
0402 myCoutStream << "\nAlgorithm triggers: index for prescale factor set = " << pfSetIndexAlgorithmTrigger
0403 << "\nfor run " << iEvent.run() << ", luminosity block " << iEvent.luminosityBlock()
0404 << ", with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu() << std::endl;
0405
0406 } else {
0407 myCoutStream << "\nError encountered when retrieving the prescale factor set index"
0408 << "\n for algorithm triggers, for run " << iEvent.run() << ", luminosity block "
0409 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu()
0410 << "\n Error code: " << iErrorCode << "\n"
0411 << std::endl;
0412 }
0413
0414 iErrorCode = -1;
0415 const std::vector<int>& pfSetAlgorithmTrigger = m_l1GtUtilsProv.prescaleFactorSet(iEvent, trigCategory, iErrorCode);
0416
0417 if (iErrorCode == 0) {
0418 myCoutStream << "\nAlgorithm triggers: prescale factor set index = " << pfSetIndexAlgorithmTrigger << "\nfor run "
0419 << iEvent.run() << ", luminosity block " << iEvent.luminosityBlock() << ", with L1 menu \n "
0420 << m_l1GtUtilsProv.l1TriggerMenu() << std::endl;
0421
0422 int iBit = -1;
0423 for (std::vector<int>::const_iterator cItBit = pfSetAlgorithmTrigger.begin(); cItBit != pfSetAlgorithmTrigger.end();
0424 ++cItBit) {
0425 iBit++;
0426 myCoutStream << "Bit number " << std::right << std::setw(4) << iBit << ": prescale factor = " << (*cItBit)
0427 << std::endl;
0428 }
0429
0430 } else {
0431 myCoutStream << "\nError encountered when retrieving the prescale factor set "
0432 << "\n for algorithm triggers, for run " << iEvent.run() << ", luminosity block "
0433 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu()
0434 << "\n Error code: " << iErrorCode << "\n"
0435 << std::endl;
0436 }
0437
0438
0439
0440 myCoutStream << "\nMethod:"
0441 << "\n triggerMaskSet(trigCategory, iErrorCode)" << std::endl;
0442
0443 iErrorCode = -1;
0444 const std::vector<unsigned int>& tmSetAlgorithmTrigger = m_l1GtUtilsProv.triggerMaskSet(trigCategory, iErrorCode);
0445
0446 if (iErrorCode == 0) {
0447 myCoutStream << "\nAlgorithm triggers: trigger mask set for run " << iEvent.run() << ", luminosity block "
0448 << iEvent.luminosityBlock() << ", with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu() << "\n"
0449 << std::endl;
0450
0451 int iBit = -1;
0452 for (std::vector<unsigned int>::const_iterator cItBit = tmSetAlgorithmTrigger.begin();
0453 cItBit != tmSetAlgorithmTrigger.end();
0454 ++cItBit) {
0455 iBit++;
0456 myCoutStream << "Bit number " << std::right << std::setw(4) << iBit << ": trigger mask = " << (*cItBit)
0457 << std::endl;
0458 }
0459
0460 } else {
0461 myCoutStream << "\nError encountered when retrieving the trigger mask set "
0462 << "\n for algorithm triggers, for run " << iEvent.run() << ", luminosity block "
0463 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu()
0464 << "\n Error code: " << iErrorCode << "\n"
0465 << std::endl;
0466 }
0467
0468
0469
0470
0471 trigCategory = L1GtUtils::TechnicalTrigger;
0472
0473 myCoutStream << "\nMethods:"
0474 << "\n prescaleFactorSetIndex(iEvent, trigCategory, iErrorCode)"
0475 << "\n prescaleFactorSet(iEvent, trigCategory,iErrorCode)\n"
0476 << std::endl;
0477
0478 iErrorCode = -1;
0479 const int pfSetIndexTechnicalTrigger = m_l1GtUtilsProv.prescaleFactorSetIndex(iEvent, trigCategory, iErrorCode);
0480
0481 if (iErrorCode == 0) {
0482 myCoutStream << "\nTechnical triggers: index for prescale factor set = " << pfSetIndexTechnicalTrigger
0483 << "\nfor run " << iEvent.run() << ", luminosity block " << iEvent.luminosityBlock()
0484 << ", with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu()
0485 << "\nMethod: prescaleFactorSetIndex(iEvent, trigCategory, iErrorCode)\n"
0486 << std::endl;
0487
0488 } else {
0489 myCoutStream << "\nError encountered when retrieving the prescale factor set index"
0490 << "\n for technical triggers, for run " << iEvent.run() << ", luminosity block "
0491 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu()
0492 << "\n Error code: " << iErrorCode << "\n"
0493 << std::endl;
0494 }
0495
0496 iErrorCode = -1;
0497 const std::vector<int>& pfSetTechnicalTrigger = m_l1GtUtilsProv.prescaleFactorSet(iEvent, trigCategory, iErrorCode);
0498
0499 if (iErrorCode == 0) {
0500 myCoutStream << "\nTechnical triggers: prescale factor set index = " << pfSetIndexTechnicalTrigger << "\nfor run "
0501 << iEvent.run() << ", luminosity block " << iEvent.luminosityBlock() << ", with L1 menu \n "
0502 << m_l1GtUtilsProv.l1TriggerMenu() << "\nMethod: prescaleFactorSet(iEvent, trigCategory,iErrorCode)\n"
0503 << std::endl;
0504
0505 int iBit = -1;
0506 for (std::vector<int>::const_iterator cItBit = pfSetTechnicalTrigger.begin(); cItBit != pfSetTechnicalTrigger.end();
0507 ++cItBit) {
0508 iBit++;
0509 myCoutStream << "Bit number " << std::right << std::setw(4) << iBit << ": prescale factor = " << (*cItBit)
0510 << std::endl;
0511 }
0512
0513 } else {
0514 myCoutStream << "\nError encountered when retrieving the prescale factor set "
0515 << "\n for technical triggers, for run " << iEvent.run() << ", luminosity block "
0516 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu()
0517 << "\n Error code: " << iErrorCode << "\n"
0518 << std::endl;
0519 }
0520
0521
0522
0523 myCoutStream << "\nMethod:"
0524 << "\n triggerMaskSet(trigCategory, iErrorCode)" << std::endl;
0525
0526 iErrorCode = -1;
0527 const std::vector<unsigned int>& tmSetTechnicalTrigger = m_l1GtUtilsProv.triggerMaskSet(trigCategory, iErrorCode);
0528
0529 if (iErrorCode == 0) {
0530 myCoutStream << "\nTechnical triggers: trigger mask set for run " << iEvent.run() << ", luminosity block "
0531 << iEvent.luminosityBlock() << ", with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu() << "\n"
0532 << std::endl;
0533
0534 int iBit = -1;
0535 for (std::vector<unsigned int>::const_iterator cItBit = tmSetTechnicalTrigger.begin();
0536 cItBit != tmSetTechnicalTrigger.end();
0537 ++cItBit) {
0538 iBit++;
0539 myCoutStream << "Bit number " << std::right << std::setw(4) << iBit << ": trigger mask = " << (*cItBit)
0540 << std::endl;
0541 }
0542
0543 } else {
0544 myCoutStream << "\nError encountered when retrieving the trigger mask set "
0545 << "\n for technical triggers, for run " << iEvent.run() << ", luminosity block "
0546 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtilsProv.l1TriggerMenu()
0547 << "\n Error code: " << iErrorCode << "\n"
0548 << std::endl;
0549 }
0550
0551
0552
0553
0554 const std::vector<std::pair<std::string, int> >& errorCodesProv = m_logicalExpressionL1ResultsProv.errorCodes(iEvent);
0555
0556 const std::vector<L1GtLogicParser::OperandToken>& expL1TriggersProv =
0557 m_logicalExpressionL1ResultsProv.expL1Triggers();
0558
0559 const std::vector<std::pair<std::string, bool> >& decisionsBeforeMaskProv =
0560 m_logicalExpressionL1ResultsProv.decisionsBeforeMask();
0561 const std::vector<std::pair<std::string, bool> >& decisionsAfterMaskProv =
0562 m_logicalExpressionL1ResultsProv.decisionsAfterMask();
0563 const std::vector<std::pair<std::string, int> >& prescaleFactorsProv =
0564 m_logicalExpressionL1ResultsProv.prescaleFactors();
0565 const std::vector<std::pair<std::string, int> >& triggerMasksProv = m_logicalExpressionL1ResultsProv.triggerMasks();
0566
0567 myCoutStream << std::endl;
0568 myCoutStream << "\nLogical expression\n " << m_l1GtUtilsLogicalExpression << std::endl;
0569
0570 for (size_t iTrig = 0; iTrig < errorCodesProv.size(); ++iTrig) {
0571 if ((errorCodesProv[iTrig]).second != 0) {
0572 myCoutStream << "\nError encountered when retrieving L1 results for trigger " << (errorCodesProv[iTrig]).first
0573 << " (bit number " << (expL1TriggersProv[iTrig]).tokenNumber << ")\n for run " << iEvent.run()
0574 << ", luminosity block " << iEvent.luminosityBlock() << " with L1 menu \n "
0575 << m_l1GtUtilsProv.l1TriggerMenu() << "\n Error code: " << (errorCodesProv[iTrig]).second << "\n"
0576 << std::endl;
0577
0578 } else {
0579 myCoutStream << "\n"
0580 << (errorCodesProv[iTrig]).first << " - bit number " << (expL1TriggersProv[iTrig]).tokenNumber
0581 << std::endl;
0582
0583 myCoutStream << " decision before mask = " << (decisionsBeforeMaskProv[iTrig]).second << std::endl;
0584
0585 myCoutStream << " decision after mask = " << (decisionsAfterMaskProv[iTrig]).second << std::endl;
0586
0587 myCoutStream << " prescale factor = " << (prescaleFactorsProv[iTrig]).second << std::endl;
0588
0589 myCoutStream << " trigger mask = " << (triggerMasksProv[iTrig]).second << std::endl;
0590
0591 myCoutStream << " error code = " << (errorCodesProv[iTrig]).second << std::endl;
0592 }
0593 }
0594
0595
0596
0597
0598
0599 myCoutStream << "\n******** Results found with input tags provided in the configuration file ******** \n"
0600 << "\n L1GlobalTriggerRecord: " << m_l1GtRecordInputTag
0601 << "\n L1GlobalTriggerReadoutRecord: " << m_l1GtDaqReadoutRecordInputTag << std::endl;
0602
0603
0604
0605
0606 iErrorCode = -1;
0607
0608 bool decisionBeforeMaskAlgTechTrigITag = m_l1GtUtils.decisionBeforeMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0609
0610 bool decisionAfterMaskAlgTechTrigITag = m_l1GtUtils.decisionAfterMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0611
0612 bool decisionAlgTechTrigITag = m_l1GtUtils.decision(iEvent, m_nameAlgTechTrig, iErrorCode);
0613
0614 int prescaleFactorAlgTechTrigITag = m_l1GtUtils.prescaleFactor(iEvent, m_nameAlgTechTrig, iErrorCode);
0615
0616 int triggerMaskAlgTechTrigITag = m_l1GtUtils.triggerMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0617
0618 myCoutStream
0619 << "\n\nMethods:"
0620 << "\n decisionBeforeMask(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, m_nameAlgTechTrig, "
0621 "iErrorCode)"
0622 << "\n decisionAfterMask(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, m_nameAlgTechTrig, "
0623 "iErrorCode)"
0624 << "\n decision(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, m_nameAlgTechTrig, iErrorCode)"
0625 << "\n prescaleFactor(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, m_nameAlgTechTrig, "
0626 "iErrorCode)"
0627 << "\n triggerMask(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, m_nameAlgTechTrig, iErrorCode)"
0628 << "\n\n"
0629 << std::endl;
0630
0631 if (iErrorCode == 0) {
0632 myCoutStream << "\nDecision before trigger mask for " << m_nameAlgTechTrig << ": "
0633 << decisionBeforeMaskAlgTechTrigITag << std::endl;
0634 myCoutStream << "Decision after trigger mask for " << m_nameAlgTechTrig << ": "
0635 << decisionAfterMaskAlgTechTrigITag << std::endl;
0636 myCoutStream << "Decision (after trigger mask) for " << m_nameAlgTechTrig << ": " << decisionAlgTechTrigITag
0637 << std::endl;
0638
0639 myCoutStream << "Prescale factor for " << m_nameAlgTechTrig << ": " << prescaleFactorAlgTechTrigITag
0640 << std::endl;
0641
0642 myCoutStream << "Trigger mask for " << m_nameAlgTechTrig << ": " << triggerMaskAlgTechTrigITag
0643 << std::endl;
0644
0645 } else if (iErrorCode == 1) {
0646 myCoutStream << "\n"
0647 << m_nameAlgTechTrig << " does not exist in the L1 menu " << m_l1GtUtils.l1TriggerMenu() << "\n"
0648 << std::endl;
0649
0650 } else {
0651 myCoutStream << "\nError: "
0652 << "\n An error was encountered when retrieving decision, mask and prescale factor for "
0653 << m_nameAlgTechTrig << "\n L1 Menu: " << m_l1GtUtils.l1TriggerMenu()
0654 << "\n Error code: " << iErrorCode << std::endl;
0655 }
0656
0657
0658
0659
0660 trigCategory = L1GtUtils::AlgorithmTrigger;
0661
0662 myCoutStream << "\nMethods:"
0663 << "\n prescaleFactorSetIndex(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, "
0664 "trigCategory, iErrorCode)"
0665 << "\n prescaleFactorSet(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, "
0666 "trigCategory,iErrorCode)\n"
0667 << std::endl;
0668
0669 iErrorCode = -1;
0670 const int pfSetIndexAlgorithmTriggerITag = m_l1GtUtils.prescaleFactorSetIndex(iEvent, trigCategory, iErrorCode);
0671
0672 if (iErrorCode == 0) {
0673 myCoutStream << "\nAlgorithm triggers: index for prescale factor set = " << pfSetIndexAlgorithmTriggerITag
0674 << "\nfor run " << iEvent.run() << ", luminosity block " << iEvent.luminosityBlock()
0675 << ", with L1 menu \n " << m_l1GtUtils.l1TriggerMenu() << std::endl;
0676
0677 } else {
0678 myCoutStream << "\nError encountered when retrieving the prescale factor set index"
0679 << "\n for algorithm triggers, for run " << iEvent.run() << ", luminosity block "
0680 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtils.l1TriggerMenu()
0681 << "\n Error code: " << iErrorCode << "\n"
0682 << std::endl;
0683 }
0684
0685 iErrorCode = -1;
0686 const std::vector<int>& pfSetAlgorithmTriggerITag = m_l1GtUtils.prescaleFactorSet(iEvent, trigCategory, iErrorCode);
0687
0688 if (iErrorCode == 0) {
0689 myCoutStream << "\nAlgorithm triggers: prescale factor set index = " << pfSetIndexAlgorithmTriggerITag
0690 << "\nfor run " << iEvent.run() << ", luminosity block " << iEvent.luminosityBlock()
0691 << ", with L1 menu \n " << m_l1GtUtils.l1TriggerMenu() << std::endl;
0692
0693 int iBit = -1;
0694 for (std::vector<int>::const_iterator cItBit = pfSetAlgorithmTriggerITag.begin();
0695 cItBit != pfSetAlgorithmTriggerITag.end();
0696 ++cItBit) {
0697 iBit++;
0698 myCoutStream << "Bit number " << std::right << std::setw(4) << iBit << ": prescale factor = " << (*cItBit)
0699 << std::endl;
0700 }
0701
0702 } else {
0703 myCoutStream << "\nError encountered when retrieving the prescale factor set "
0704 << "\n for algorithm triggers, for run " << iEvent.run() << ", luminosity block "
0705 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtils.l1TriggerMenu()
0706 << "\n Error code: " << iErrorCode << "\n"
0707 << std::endl;
0708 }
0709
0710
0711
0712
0713 trigCategory = L1GtUtils::TechnicalTrigger;
0714
0715 myCoutStream << "\nMethods:"
0716 << "\n prescaleFactorSetIndex(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, "
0717 "trigCategory, iErrorCode)"
0718 << "\n prescaleFactorSet(iEvent, m_l1GtRecordInputTag, m_l1GtDaqReadoutRecordInputTag, "
0719 "trigCategory,iErrorCode)\n"
0720 << std::endl;
0721
0722 iErrorCode = -1;
0723 const int pfSetIndexTechnicalTriggerITag = m_l1GtUtils.prescaleFactorSetIndex(iEvent, trigCategory, iErrorCode);
0724
0725 if (iErrorCode == 0) {
0726 myCoutStream << "\nTechnical triggers: index for prescale factor set = " << pfSetIndexTechnicalTriggerITag
0727 << "\nfor run " << iEvent.run() << ", luminosity block " << iEvent.luminosityBlock()
0728 << ", with L1 menu \n " << m_l1GtUtils.l1TriggerMenu() << std::endl;
0729
0730 } else {
0731 myCoutStream << "\nError encountered when retrieving the prescale factor set index"
0732 << "\n for technical triggers, for run " << iEvent.run() << ", luminosity block "
0733 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtils.l1TriggerMenu()
0734 << "\n Error code: " << iErrorCode << "\n"
0735 << std::endl;
0736 }
0737
0738 iErrorCode = -1;
0739 const std::vector<int>& pfSetTechnicalTriggerITag = m_l1GtUtils.prescaleFactorSet(iEvent, trigCategory, iErrorCode);
0740
0741 if (iErrorCode == 0) {
0742 myCoutStream << "\nTechnical triggers: prescale factor set index = " << pfSetIndexTechnicalTriggerITag
0743 << "\nfor run " << iEvent.run() << ", luminosity block " << iEvent.luminosityBlock()
0744 << ", with L1 menu \n " << m_l1GtUtils.l1TriggerMenu() << std::endl;
0745
0746 int iBit = -1;
0747 for (std::vector<int>::const_iterator cItBit = pfSetTechnicalTriggerITag.begin();
0748 cItBit != pfSetTechnicalTriggerITag.end();
0749 ++cItBit) {
0750 iBit++;
0751 myCoutStream << "Bit number " << std::right << std::setw(4) << iBit << ": prescale factor = " << (*cItBit)
0752 << std::endl;
0753 }
0754
0755 } else {
0756 myCoutStream << "\nError encountered when retrieving the prescale factor set "
0757 << "\n for technical triggers, for run " << iEvent.run() << ", luminosity block "
0758 << iEvent.luminosityBlock() << " with L1 menu \n " << m_l1GtUtils.l1TriggerMenu()
0759 << "\n Error code: " << iErrorCode << "\n"
0760 << std::endl;
0761 }
0762
0763
0764
0765
0766 const std::vector<std::pair<std::string, int> >& errorCodes = m_logicalExpressionL1Results.errorCodes(iEvent);
0767
0768 const std::vector<L1GtLogicParser::OperandToken>& expL1Triggers = m_logicalExpressionL1Results.expL1Triggers();
0769
0770 const std::vector<std::pair<std::string, bool> >& decisionsBeforeMask =
0771 m_logicalExpressionL1Results.decisionsBeforeMask();
0772 const std::vector<std::pair<std::string, bool> >& decisionsAfterMask =
0773 m_logicalExpressionL1Results.decisionsAfterMask();
0774 const std::vector<std::pair<std::string, int> >& prescaleFactors = m_logicalExpressionL1Results.prescaleFactors();
0775 const std::vector<std::pair<std::string, int> >& triggerMasks = m_logicalExpressionL1Results.triggerMasks();
0776
0777 myCoutStream << std::endl;
0778 myCoutStream << "\nLogical expression\n " << m_l1GtUtilsLogicalExpression << std::endl;
0779
0780 for (size_t iTrig = 0; iTrig < errorCodes.size(); ++iTrig) {
0781 if ((errorCodes[iTrig]).second != 0) {
0782 myCoutStream << "\nError encountered when retrieving L1 results for trigger " << (errorCodes[iTrig]).first
0783 << " (bit number " << (expL1Triggers[iTrig]).tokenNumber << ")\n for run " << iEvent.run()
0784 << ", luminosity block " << iEvent.luminosityBlock() << " with L1 menu \n "
0785 << m_l1GtUtils.l1TriggerMenu() << "\n Error code: " << (errorCodes[iTrig]).second << "\n"
0786 << std::endl;
0787
0788 } else {
0789 myCoutStream << "\n"
0790 << (errorCodes[iTrig]).first << " - bit number " << (expL1Triggers[iTrig]).tokenNumber << std::endl;
0791
0792 myCoutStream << " decision before mask = " << (decisionsBeforeMask[iTrig]).second << std::endl;
0793
0794 myCoutStream << " decision after mask = " << (decisionsAfterMask[iTrig]).second << std::endl;
0795
0796 myCoutStream << " prescale factor = " << (prescaleFactors[iTrig]).second << std::endl;
0797
0798 myCoutStream << " trigger mask = " << (triggerMasks[iTrig]).second << std::endl;
0799
0800 myCoutStream << " error code = " << (errorCodes[iTrig]).second << std::endl;
0801 }
0802 }
0803
0804 printOutput(myCoutStream);
0805 }
0806
0807 void L1GtAnalyzer::analyzeL1GtUtilsMenuLite(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
0808 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeL1GtUtilsMenuLite ****\n" << std::endl;
0809
0810
0811
0812
0813
0814
0815 bool useL1EventSetup = false;
0816 bool useL1GtTriggerMenuLite = true;
0817
0818 m_l1GtUtilsProv.getL1GtRunCache(iEvent, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0819
0820 m_l1GtUtils.getL1GtRunCache(iEvent, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0821
0822 analyzeL1GtUtilsCore(iEvent, evSetup);
0823 }
0824
0825 void L1GtAnalyzer::analyzeL1GtUtilsEventSetup(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
0826 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeL1GtUtilsEventSetup ****\n" << std::endl;
0827
0828
0829
0830
0831
0832
0833 bool useL1EventSetup = true;
0834 bool useL1GtTriggerMenuLite = false;
0835
0836 m_l1GtUtilsProv.getL1GtRunCache(iEvent, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0837
0838 m_l1GtUtils.getL1GtRunCache(iEvent, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0839
0840 analyzeL1GtUtilsCore(iEvent, evSetup);
0841 }
0842
0843 void L1GtAnalyzer::analyzeL1GtUtils(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
0844 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeL1GtUtils: fall-through case ****\n" << std::endl;
0845
0846
0847
0848
0849
0850
0851 bool useL1EventSetup = true;
0852 bool useL1GtTriggerMenuLite = true;
0853
0854 m_l1GtUtilsProv.getL1GtRunCache(iEvent, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0855
0856 m_l1GtUtils.getL1GtRunCache(iEvent, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0857
0858 analyzeL1GtUtilsCore(iEvent, evSetup);
0859 }
0860
0861 void L1GtAnalyzer::analyzeTrigger(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
0862 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeTrigger ****\n" << std::endl;
0863
0864
0865
0866 std::ostringstream myCoutStream;
0867
0868
0869 myCoutStream << "\n\nFull analysis of an algorithm or technical trigger"
0870 << "\nMethod: L1GtAnalyzer::analyzeTrigger"
0871 << "\nTrigger: " << m_nameAlgTechTrig << "\n"
0872 << std::endl;
0873
0874 const unsigned int runNumber = iEvent.run();
0875 const unsigned int lsNumber = iEvent.luminosityBlock();
0876 const unsigned int eventNumber = iEvent.id().event();
0877
0878 myCoutStream << "Run: " << runNumber << " LS: " << lsNumber << " Event: " << eventNumber << "\n\n" << std::endl;
0879
0880
0881
0882
0883
0884
0885 bool useL1EventSetup = false;
0886 bool useL1GtTriggerMenuLite = false;
0887
0888 switch (m_l1GtUtilsConfiguration) {
0889 case 0: {
0890 useL1EventSetup = false;
0891 useL1GtTriggerMenuLite = true;
0892
0893 } break;
0894 case 100000: {
0895 useL1EventSetup = true;
0896 useL1GtTriggerMenuLite = true;
0897
0898 } break;
0899 case 200000: {
0900 useL1EventSetup = true;
0901 useL1GtTriggerMenuLite = false;
0902
0903 } break;
0904 default: {
0905
0906 } break;
0907 }
0908
0909 m_l1GtUtilsProv.getL1GtRunCache(iEvent, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0910
0911 m_l1GtUtils.getL1GtRunCache(iEvent, evSetup, useL1EventSetup, useL1GtTriggerMenuLite);
0912
0913
0914
0915 int iErrorCode = -1;
0916 int l1ConfCode = -1;
0917
0918 const bool l1Conf = m_l1GtUtils.availableL1Configuration(iErrorCode, l1ConfCode);
0919
0920 if (l1Conf) {
0921 LogDebug("L1GtAnalyzer") << "\nL1 configuration code:" << l1ConfCode << "\nValid L1 trigger configuration.\n"
0922 << std::endl;
0923
0924 LogTrace("L1GtAnalyzer") << "\nL1 trigger menu name and implementation:"
0925 << "\n"
0926 << m_l1GtUtils.l1TriggerMenu() << "\n"
0927 << m_l1GtUtils.l1TriggerMenuImplementation() << "\n"
0928 << std::endl;
0929
0930 } else {
0931 myCoutStream << "\nL1 configuration code:" << l1ConfCode << "\nNo valid L1 trigger configuration available."
0932 << "\nCheck L1GtUtils wiki page for error code interpretation\n"
0933 << std::endl;
0934 return;
0935 }
0936
0937
0938
0939
0940 iErrorCode = -1;
0941
0942 bool decisionBeforeMaskAlgTechTrig = false;
0943 bool decisionAfterMaskAlgTechTrig = false;
0944 bool decisionAlgTechTrig = false;
0945 int prescaleFactorAlgTechTrig = -1;
0946 int triggerMaskAlgTechTrig = -1;
0947
0948 if (m_l1GtRecordsInputTagProv) {
0949 decisionBeforeMaskAlgTechTrig = m_l1GtUtilsProv.decisionBeforeMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0950
0951 decisionAfterMaskAlgTechTrig = m_l1GtUtilsProv.decisionAfterMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0952
0953 decisionAlgTechTrig = m_l1GtUtilsProv.decision(iEvent, m_nameAlgTechTrig, iErrorCode);
0954
0955 prescaleFactorAlgTechTrig = m_l1GtUtilsProv.prescaleFactor(iEvent, m_nameAlgTechTrig, iErrorCode);
0956
0957 triggerMaskAlgTechTrig = m_l1GtUtilsProv.triggerMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0958
0959 } else {
0960 decisionBeforeMaskAlgTechTrig = m_l1GtUtils.decisionBeforeMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0961
0962 decisionAfterMaskAlgTechTrig = m_l1GtUtils.decisionAfterMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0963
0964 decisionAlgTechTrig = m_l1GtUtils.decision(iEvent, m_nameAlgTechTrig, iErrorCode);
0965
0966 prescaleFactorAlgTechTrig = m_l1GtUtils.prescaleFactor(iEvent, m_nameAlgTechTrig, iErrorCode);
0967
0968 triggerMaskAlgTechTrig = m_l1GtUtils.triggerMask(iEvent, m_nameAlgTechTrig, iErrorCode);
0969 }
0970
0971 switch (iErrorCode) {
0972 case 0: {
0973
0974 } break;
0975 case 1: {
0976 myCoutStream << "\n"
0977 << m_nameAlgTechTrig << " does not exist in the L1 menu " << m_l1GtUtils.l1TriggerMenu() << "\n"
0978 << std::endl;
0979 return;
0980 } break;
0981 default: {
0982 myCoutStream << "\nError: "
0983 << "\n An error was encountered when retrieving decision, mask and prescale factor for "
0984 << m_nameAlgTechTrig << "\n L1 Menu: " << m_l1GtUtils.l1TriggerMenu()
0985 << "\n Error code: " << iErrorCode << "\n Check L1GtUtils wiki page for error code interpretation"
0986 << std::endl;
0987 } break;
0988 }
0989
0990
0991
0992
0993 m_retrieveL1Extra.retrieveL1ExtraObjects(iEvent, evSetup);
0994
0995
0996 myCoutStream << "\nL1Extra collections from all BxInEvent" << std::endl;
0997 m_retrieveL1Extra.printL1Extra(myCoutStream);
0998
0999 int bxInEvent = 0;
1000 myCoutStream << "\nL1Extra collections from BxInEvent = 0 (BX for L1A)" << std::endl;
1001 m_retrieveL1Extra.printL1Extra(myCoutStream, bxInEvent);
1002
1003
1004
1005
1006 bool validRecord = false;
1007 bool gtObjectMapRecordValid = false;
1008
1009 edm::Handle<L1GlobalTriggerObjectMaps> gtObjectMaps;
1010 iEvent.getByToken(m_l1GtObjectMapsToken, gtObjectMaps);
1011
1012 if (gtObjectMaps.isValid()) {
1013 validRecord = true;
1014
1015 } else {
1016 LogDebug("L1GtAnalyzer") << "\nL1GlobalTriggerObjectMaps with \n " << m_l1GtObjectMapsInputTag
1017 << "\nnot found in the event." << std::endl;
1018 }
1019
1020 edm::Handle<L1GlobalTriggerObjectMapRecord> gtObjectMapRecord;
1021 iEvent.getByToken(m_l1GtObjectMapToken, gtObjectMapRecord);
1022
1023 if (gtObjectMapRecord.isValid()) {
1024 gtObjectMapRecordValid = true;
1025 validRecord = true;
1026
1027 } else {
1028 LogDebug("L1GtAnalyzer") << "\nL1GlobalTriggerObjectMapRecord with \n " << m_l1GtObjectMapTag
1029 << "\nnot found in the event." << std::endl;
1030 }
1031
1032
1033 if (validRecord && gtObjectMapRecordValid) {
1034
1035 }
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074 myCoutStream << "\nResults for trigger " << m_nameAlgTechTrig
1075 << "\n Trigger mask: " << triggerMaskAlgTechTrig
1076 << "\n Prescale factor: " << prescaleFactorAlgTechTrig
1077 << "\n Decision before mask: " << decisionBeforeMaskAlgTechTrig
1078 << "\n Decision after mask: " << decisionAfterMaskAlgTechTrig
1079 << "\n Decision (after mask): " << decisionAlgTechTrig << "\n"
1080 << std::endl;
1081
1082 printOutput(myCoutStream);
1083 }
1084
1085
1086 void L1GtAnalyzer::analyzeObjectMap(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
1087 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeObjectMap object map product ****\n" << std::endl;
1088
1089
1090
1091 std::ostringstream myCoutStream;
1092
1093
1094
1095 edm::Handle<L1GlobalTriggerObjectMapRecord> gtObjectMapRecord;
1096 iEvent.getByToken(m_l1GtObjectMapToken, gtObjectMapRecord);
1097
1098 if (!gtObjectMapRecord.isValid()) {
1099 LogDebug("L1GtAnalyzer") << "\nWarning: L1GlobalTriggerObjectMapRecord with input tag " << m_l1GtObjectMapTag
1100 << "\nrequested in configuration, but not found in the event."
1101 << "\nExit the method.\n"
1102 << std::endl;
1103
1104 return;
1105 }
1106
1107
1108 const std::vector<L1GlobalTriggerObjectMap>& objMapVec = gtObjectMapRecord->gtObjectMap();
1109
1110
1111 for (std::vector<L1GlobalTriggerObjectMap>::const_iterator it = objMapVec.begin(); it != objMapVec.end(); ++it) {
1112 (*it).print(myCoutStream);
1113 }
1114
1115
1116 const CombinationsInCond* comb = gtObjectMapRecord->getCombinationsInCond(m_nameAlgTechTrig, m_condName);
1117
1118
1119 if (comb != nullptr) {
1120 myCoutStream << "\n Number of combinations passing (" << m_nameAlgTechTrig << ", " << m_condName
1121 << "): " << comb->size() << std::endl;
1122 } else {
1123 myCoutStream << "\n No combination passes (" << m_nameAlgTechTrig << ", " << m_condName << ") " << std::endl;
1124 }
1125
1126
1127 const bool result = gtObjectMapRecord->getConditionResult(m_nameAlgTechTrig, m_condName);
1128
1129 myCoutStream << "\n Result for condition " << m_condName << " in algorithm " << m_nameAlgTechTrig << ": " << result
1130 << std::endl;
1131
1132 printOutput(myCoutStream);
1133 }
1134
1135
1136 void L1GtAnalyzer::analyzeL1GtTriggerMenuLite(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
1137 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeL1GtTriggerMenuLite ****\n" << std::endl;
1138
1139
1140
1141 std::ostringstream myCoutStream;
1142
1143
1144 const edm::Run& iRun = iEvent.getRun();
1145
1146
1147 edm::Handle<L1GtTriggerMenuLite> triggerMenuLite;
1148 iRun.getByToken(m_l1GtTmLToken, triggerMenuLite);
1149
1150 if (!triggerMenuLite.isValid()) {
1151 LogDebug("L1GtAnalyzer") << "\nL1GtTriggerMenuLite with \n " << m_l1GtTmLInputTag
1152 << "\nrequested in configuration, but not found in the event."
1153 << "\nExit the method.\n"
1154 << std::endl;
1155
1156 return;
1157 }
1158
1159
1160 myCoutStream << (*triggerMenuLite);
1161
1162
1163
1164 const std::string& triggerMenuInterface = triggerMenuLite->gtTriggerMenuInterface();
1165 const std::string& triggerMenuName = triggerMenuLite->gtTriggerMenuName();
1166 const std::string& triggerMenuImplementation = triggerMenuLite->gtTriggerMenuImplementation();
1167 const std::string& scaleDbKey = triggerMenuLite->gtScaleDbKey();
1168
1169 const L1GtTriggerMenuLite::L1TriggerMap& algorithmMap = triggerMenuLite->gtAlgorithmMap();
1170 const L1GtTriggerMenuLite::L1TriggerMap& algorithmAliasMap = triggerMenuLite->gtAlgorithmAliasMap();
1171 const L1GtTriggerMenuLite::L1TriggerMap& technicalTriggerMap = triggerMenuLite->gtTechnicalTriggerMap();
1172
1173 const std::vector<unsigned int>& triggerMaskAlgoTrig = triggerMenuLite->gtTriggerMaskAlgoTrig();
1174 const std::vector<unsigned int>& triggerMaskTechTrig = triggerMenuLite->gtTriggerMaskTechTrig();
1175
1176 const std::vector<std::vector<int> >& prescaleFactorsAlgoTrig = triggerMenuLite->gtPrescaleFactorsAlgoTrig();
1177 const std::vector<std::vector<int> >& prescaleFactorsTechTrig = triggerMenuLite->gtPrescaleFactorsTechTrig();
1178
1179
1180
1181 size_t nrDefinedAlgo = algorithmMap.size();
1182 size_t nrDefinedTech = technicalTriggerMap.size();
1183
1184
1185
1186 myCoutStream << "\n ********** L1 Trigger Menu - printing ********** \n"
1187 << "\nL1 Trigger Menu Interface: " << triggerMenuInterface
1188 << "\nL1 Trigger Menu Name: " << triggerMenuName
1189 << "\nL1 Trigger Menu Implementation: " << triggerMenuImplementation
1190 << "\nAssociated Scale DB Key: " << scaleDbKey << "\n\n"
1191 << "\nL1 Physics Algorithms: " << nrDefinedAlgo << " algorithms defined."
1192 << "\n\n"
1193 << "Bit Number " << std::right << std::setw(35) << "Algorithm Name"
1194 << " " << std::right << std::setw(35) << "Algorithm Alias"
1195 << " " << std::right << std::setw(12) << "Trigger Mask";
1196 for (unsigned iSet = 0; iSet < prescaleFactorsAlgoTrig.size(); iSet++) {
1197 myCoutStream << std::right << std::setw(10) << "PF Set " << std::right << std::setw(2) << iSet;
1198 }
1199
1200 myCoutStream << std::endl;
1201
1202 for (L1GtTriggerMenuLite::CItL1Trig itTrig = algorithmMap.begin(); itTrig != algorithmMap.end(); itTrig++) {
1203 const unsigned int bitNumber = itTrig->first;
1204 const std::string& aName = itTrig->second;
1205
1206 std::string aAlias;
1207 L1GtTriggerMenuLite::CItL1Trig itAlias = algorithmAliasMap.find(bitNumber);
1208 if (itAlias != algorithmAliasMap.end()) {
1209 aAlias = itAlias->second;
1210 }
1211
1212 myCoutStream << std::setw(6) << bitNumber << " " << std::right << std::setw(35) << aName << " " << std::right
1213 << std::setw(35) << aAlias << " " << std::right << std::setw(12) << triggerMaskAlgoTrig[bitNumber];
1214 for (unsigned iSet = 0; iSet < prescaleFactorsAlgoTrig.size(); iSet++) {
1215 myCoutStream << std::right << std::setw(12) << prescaleFactorsAlgoTrig[iSet][bitNumber];
1216 }
1217
1218 myCoutStream << std::endl;
1219 }
1220
1221 myCoutStream << "\nL1 Technical Triggers: " << nrDefinedTech << " technical triggers defined."
1222 << "\n\n"
1223 << std::endl;
1224 if (nrDefinedTech) {
1225 myCoutStream << std::right << std::setw(6) << "Bit Number " << std::right << std::setw(45)
1226 << " Technical trigger name "
1227 << " " << std::right << std::setw(12) << "Trigger Mask";
1228 for (unsigned iSet = 0; iSet < prescaleFactorsTechTrig.size(); iSet++) {
1229 myCoutStream << std::right << std::setw(10) << "PF Set " << std::right << std::setw(2) << iSet;
1230 }
1231
1232 myCoutStream << std::endl;
1233 }
1234
1235 for (L1GtTriggerMenuLite::CItL1Trig itTrig = technicalTriggerMap.begin(); itTrig != technicalTriggerMap.end();
1236 itTrig++) {
1237 unsigned int bitNumber = itTrig->first;
1238 std::string aName = itTrig->second;
1239
1240 myCoutStream << std::setw(6) << bitNumber << " " << std::right << std::setw(45) << aName << std::right
1241 << std::setw(12) << triggerMaskTechTrig[bitNumber];
1242 for (unsigned iSet = 0; iSet < prescaleFactorsTechTrig.size(); iSet++) {
1243 myCoutStream << std::right << std::setw(12) << prescaleFactorsTechTrig[iSet][bitNumber];
1244 }
1245
1246 myCoutStream << std::endl;
1247 }
1248
1249
1250
1251 int errorCode = -1;
1252 const std::string* algorithmAlias = triggerMenuLite->gtAlgorithmAlias(m_bitNumber, errorCode);
1253 if (errorCode) {
1254 myCoutStream << "\nError code retrieving alias for algorithm with bit number " << m_bitNumber << ": " << errorCode
1255 << std::endl;
1256 } else {
1257 myCoutStream << "\nAlias for algorithm with bit number " << m_bitNumber << ": " << (*algorithmAlias) << std::endl;
1258 }
1259
1260 errorCode = -1;
1261 const std::string* algorithmName = triggerMenuLite->gtAlgorithmName(m_bitNumber, errorCode);
1262 if (errorCode) {
1263 myCoutStream << "\nError code retrieving name for algorithm with bit number " << m_bitNumber << ": " << errorCode
1264 << std::endl;
1265 } else {
1266 myCoutStream << "\nName for algorithm with bit number " << m_bitNumber << ": " << (*algorithmName) << std::endl;
1267 }
1268
1269 errorCode = -1;
1270 const std::string* techTrigName = triggerMenuLite->gtTechTrigName(m_bitNumber, errorCode);
1271 if (errorCode) {
1272 myCoutStream << "\nError code retrieving name for technical trigger with bit number " << m_bitNumber << ": "
1273 << errorCode << std::endl;
1274 } else {
1275 myCoutStream << "\nName for technical trigger with bit number " << m_bitNumber << ": " << (*techTrigName)
1276 << std::endl;
1277 }
1278
1279 errorCode = -1;
1280 const unsigned int bitNumber = triggerMenuLite->gtBitNumber(m_nameAlgTechTrig, errorCode);
1281 if (errorCode) {
1282 myCoutStream << "\nError code retrieving bit number for algorithm/technical trigger " << m_nameAlgTechTrig << ": "
1283 << errorCode << std::endl;
1284 } else {
1285 myCoutStream << "\nBit number for algorithm/technical trigger " << m_nameAlgTechTrig << ": " << bitNumber
1286 << std::endl;
1287 }
1288
1289
1290
1291
1292
1293
1294 printOutput(myCoutStream);
1295 }
1296
1297
1298 void L1GtAnalyzer::analyzeConditionsInRunBlock(const edm::Run& iRun, const edm::EventSetup& evSetup) {
1299 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeConditionsInRunBlock ****\n" << std::endl;
1300
1301
1302
1303 std::ostringstream myCoutStream;
1304
1305
1306 edm::Handle<edm::ConditionsInRunBlock> condInRunBlock;
1307 iRun.getByToken(m_condInRunToken, condInRunBlock);
1308
1309 if (!condInRunBlock.isValid()) {
1310 LogDebug("L1GtAnalyzer") << "\nConditionsInRunBlock with \n " << m_condInEdmInputTag
1311 << "\nrequested in configuration, but not found in the event."
1312 << "\nExit the method.\n"
1313 << std::endl;
1314
1315 return;
1316 }
1317
1318 const uint16_t beamModeVal = condInRunBlock->beamMode;
1319 const uint16_t beamMomentumVal = condInRunBlock->beamMomentum;
1320 const uint32_t lhcFillNumberVal = condInRunBlock->lhcFillNumber;
1321
1322
1323 myCoutStream << "\nLHC quantities in run " << iRun.run() << "\n Beam Mode = " << beamModeVal
1324 << "\n Beam Momentum = " << beamMomentumVal << " GeV"
1325 << "\n LHC Fill Number = " << lhcFillNumberVal << std::endl;
1326
1327 printOutput(myCoutStream);
1328 }
1329
1330 void L1GtAnalyzer::analyzeConditionsInLumiBlock(const edm::LuminosityBlock& iLumi, const edm::EventSetup& evSetup) {
1331 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeConditionsInLumiBlock ****\n" << std::endl;
1332
1333
1334
1335 std::ostringstream myCoutStream;
1336
1337
1338 edm::Handle<edm::ConditionsInLumiBlock> condInLumiBlock;
1339 iLumi.getByToken(m_condInLumiToken, condInLumiBlock);
1340
1341 if (!condInLumiBlock.isValid()) {
1342 LogDebug("L1GtAnalyzer") << "\nConditionsInLumiBlock with \n " << m_condInEdmInputTag
1343 << "\nrequested in configuration, but not found in the event."
1344 << "\nExit the method.\n"
1345 << std::endl;
1346
1347 return;
1348 }
1349
1350 const uint32_t totalIntensityBeam1Val = condInLumiBlock->totalIntensityBeam1;
1351 const uint32_t totalIntensityBeam2Val = condInLumiBlock->totalIntensityBeam2;
1352
1353 myCoutStream << "\nLHC quantities in luminosity section "
1354
1355 << iLumi.luminosityBlock() << " from run " << iLumi.run()
1356 << "\n Total Intensity Beam 1 (Integer × 10E10 charges) = " << totalIntensityBeam1Val
1357 << "\n Total Intensity Beam 2 (Integer × 10E10 charges) = " << totalIntensityBeam2Val << std::endl;
1358
1359 printOutput(myCoutStream);
1360 }
1361
1362 void L1GtAnalyzer::analyzeConditionsInEventBlock(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
1363
1364
1365 std::ostringstream myCoutStream;
1366
1367
1368 edm::Handle<edm::ConditionsInEventBlock> condInEventBlock;
1369 iEvent.getByToken(m_condInEventToken, condInEventBlock);
1370
1371 if (!condInEventBlock.isValid()) {
1372 LogDebug("L1GtAnalyzer") << "\nConditionsInEventBlock with \n " << m_condInEdmInputTag
1373 << "\nrequested in configuration, but not found in the event."
1374 << "\nExit the method.\n"
1375 << std::endl;
1376
1377 return;
1378 }
1379
1380 const uint16_t bstMasterStatusVal = condInEventBlock->bstMasterStatus;
1381 const uint32_t turnCountNumberVal = condInEventBlock->turnCountNumber;
1382
1383 myCoutStream << "\nLHC quantities in event " << iEvent.id().event() << " from luminosity section "
1384 << iEvent.luminosityBlock() << " from run " << iEvent.run()
1385 << "\n BST Master Status = " << bstMasterStatusVal << "\n Turn count number = " << turnCountNumberVal
1386 << std::endl;
1387
1388 printOutput(myCoutStream);
1389 }
1390
1391 void L1GtAnalyzer::printOutput(std::ostringstream& myCout) {
1392 switch (m_printOutput) {
1393 case 0: {
1394 std::cout << myCout.str() << std::endl;
1395
1396 }
1397
1398 break;
1399 case 1: {
1400 LogTrace("L1GtAnalyzer") << myCout.str() << std::endl;
1401
1402 } break;
1403
1404 case 2: {
1405 edm::LogVerbatim("L1GtAnalyzer") << myCout.str() << std::endl;
1406
1407 }
1408
1409 break;
1410 case 3: {
1411 edm::LogInfo("L1GtAnalyzer") << myCout.str();
1412
1413 }
1414
1415 break;
1416 default: {
1417 std::cout << "\n\n L1GtAnalyzer: Error - no print output = " << m_printOutput
1418 << " defined! \n Check available values in the cfi file."
1419 << "\n"
1420 << std::endl;
1421
1422 } break;
1423 }
1424
1425 myCout.str("");
1426 myCout.clear();
1427 }
1428
1429
1430 void L1GtAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
1431
1432
1433 if (m_analyzeDecisionReadoutRecordEnable) {
1434 analyzeDecisionReadoutRecord(iEvent, evSetup);
1435 }
1436
1437
1438
1439
1440 switch (m_l1GtUtilsConfiguration) {
1441 case 0: {
1442 if (m_analyzeL1GtUtilsMenuLiteEnable) {
1443 analyzeL1GtUtilsMenuLite(iEvent, evSetup);
1444 }
1445
1446
1447 if (m_analyzeTriggerEnable) {
1448 analyzeTrigger(iEvent, evSetup);
1449 }
1450
1451 } break;
1452 case 100000: {
1453 if (m_analyzeL1GtUtilsEnable) {
1454 analyzeL1GtUtils(iEvent, evSetup);
1455 }
1456
1457
1458 if (m_analyzeTriggerEnable) {
1459 analyzeTrigger(iEvent, evSetup);
1460 }
1461
1462 } break;
1463 case 200000: {
1464 if (m_analyzeL1GtUtilsEventSetupEnable) {
1465 analyzeL1GtUtilsEventSetup(iEvent, evSetup);
1466 }
1467
1468
1469 if (m_analyzeTriggerEnable) {
1470 analyzeTrigger(iEvent, evSetup);
1471 }
1472
1473 } break;
1474 default: {
1475
1476 } break;
1477 }
1478
1479
1480 if (m_analyzeObjectMapEnable) {
1481 analyzeObjectMap(iEvent, evSetup);
1482 }
1483
1484
1485 if (m_analyzeL1GtUtilsMenuLiteEnable) {
1486 analyzeL1GtTriggerMenuLite(iEvent, evSetup);
1487 }
1488
1489
1490 if (m_analyzeConditionsInEventBlockEnable) {
1491 analyzeConditionsInEventBlock(iEvent, evSetup);
1492 }
1493 }
1494
1495
1496 void L1GtAnalyzer::endLuminosityBlock(const edm::LuminosityBlock& iLumi, const edm::EventSetup& evSetup) {
1497
1498 }
1499 void L1GtAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup& evSetup) {
1500
1501 }
1502
1503
1504 void L1GtAnalyzer::endJob() {
1505
1506 }