File indexing completed on 2024-04-06 12:20:02
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 int iErrorRecord = 0;
1007
1008 bool validRecord = false;
1009 bool gtObjectMapRecordValid = false;
1010
1011 edm::Handle<L1GlobalTriggerObjectMaps> gtObjectMaps;
1012 iEvent.getByToken(m_l1GtObjectMapsToken, gtObjectMaps);
1013
1014 if (gtObjectMaps.isValid()) {
1015 validRecord = true;
1016
1017 } else {
1018 iErrorRecord = 10;
1019 LogDebug("L1GtAnalyzer") << "\nL1GlobalTriggerObjectMaps with \n " << m_l1GtObjectMapsInputTag
1020 << "\nnot found in the event." << std::endl;
1021 }
1022
1023 edm::Handle<L1GlobalTriggerObjectMapRecord> gtObjectMapRecord;
1024 iEvent.getByToken(m_l1GtObjectMapToken, gtObjectMapRecord);
1025
1026 if (gtObjectMapRecord.isValid()) {
1027 gtObjectMapRecordValid = true;
1028 validRecord = true;
1029
1030 } else {
1031 iErrorRecord = iErrorRecord + 100;
1032 LogDebug("L1GtAnalyzer") << "\nL1GlobalTriggerObjectMapRecord with \n " << m_l1GtObjectMapTag
1033 << "\nnot found in the event." << std::endl;
1034 }
1035
1036
1037 if (validRecord && gtObjectMapRecordValid) {
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
1075
1076
1077
1078 myCoutStream << "\nResults for trigger " << m_nameAlgTechTrig
1079 << "\n Trigger mask: " << triggerMaskAlgTechTrig
1080 << "\n Prescale factor: " << prescaleFactorAlgTechTrig
1081 << "\n Decision before mask: " << decisionBeforeMaskAlgTechTrig
1082 << "\n Decision after mask: " << decisionAfterMaskAlgTechTrig
1083 << "\n Decision (after mask): " << decisionAlgTechTrig << "\n"
1084 << std::endl;
1085
1086 printOutput(myCoutStream);
1087 }
1088
1089
1090 void L1GtAnalyzer::analyzeObjectMap(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
1091 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeObjectMap object map product ****\n" << std::endl;
1092
1093
1094
1095 std::ostringstream myCoutStream;
1096
1097
1098
1099 edm::Handle<L1GlobalTriggerObjectMapRecord> gtObjectMapRecord;
1100 iEvent.getByToken(m_l1GtObjectMapToken, gtObjectMapRecord);
1101
1102 if (!gtObjectMapRecord.isValid()) {
1103 LogDebug("L1GtAnalyzer") << "\nWarning: L1GlobalTriggerObjectMapRecord with input tag " << m_l1GtObjectMapTag
1104 << "\nrequested in configuration, but not found in the event."
1105 << "\nExit the method.\n"
1106 << std::endl;
1107
1108 return;
1109 }
1110
1111
1112 const std::vector<L1GlobalTriggerObjectMap>& objMapVec = gtObjectMapRecord->gtObjectMap();
1113
1114
1115 for (std::vector<L1GlobalTriggerObjectMap>::const_iterator it = objMapVec.begin(); it != objMapVec.end(); ++it) {
1116 (*it).print(myCoutStream);
1117 }
1118
1119
1120 const CombinationsInCond* comb = gtObjectMapRecord->getCombinationsInCond(m_nameAlgTechTrig, m_condName);
1121
1122
1123 if (comb != nullptr) {
1124 myCoutStream << "\n Number of combinations passing (" << m_nameAlgTechTrig << ", " << m_condName
1125 << "): " << comb->size() << std::endl;
1126 } else {
1127 myCoutStream << "\n No combination passes (" << m_nameAlgTechTrig << ", " << m_condName << ") " << std::endl;
1128 }
1129
1130
1131 const bool result = gtObjectMapRecord->getConditionResult(m_nameAlgTechTrig, m_condName);
1132
1133 myCoutStream << "\n Result for condition " << m_condName << " in algorithm " << m_nameAlgTechTrig << ": " << result
1134 << std::endl;
1135
1136 printOutput(myCoutStream);
1137 }
1138
1139
1140 void L1GtAnalyzer::analyzeL1GtTriggerMenuLite(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
1141 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeL1GtTriggerMenuLite ****\n" << std::endl;
1142
1143
1144
1145 std::ostringstream myCoutStream;
1146
1147
1148 const edm::Run& iRun = iEvent.getRun();
1149
1150
1151 edm::Handle<L1GtTriggerMenuLite> triggerMenuLite;
1152 iRun.getByToken(m_l1GtTmLToken, triggerMenuLite);
1153
1154 if (!triggerMenuLite.isValid()) {
1155 LogDebug("L1GtAnalyzer") << "\nL1GtTriggerMenuLite with \n " << m_l1GtTmLInputTag
1156 << "\nrequested in configuration, but not found in the event."
1157 << "\nExit the method.\n"
1158 << std::endl;
1159
1160 return;
1161 }
1162
1163
1164 myCoutStream << (*triggerMenuLite);
1165
1166
1167
1168 const std::string& triggerMenuInterface = triggerMenuLite->gtTriggerMenuInterface();
1169 const std::string& triggerMenuName = triggerMenuLite->gtTriggerMenuName();
1170 const std::string& triggerMenuImplementation = triggerMenuLite->gtTriggerMenuImplementation();
1171 const std::string& scaleDbKey = triggerMenuLite->gtScaleDbKey();
1172
1173 const L1GtTriggerMenuLite::L1TriggerMap& algorithmMap = triggerMenuLite->gtAlgorithmMap();
1174 const L1GtTriggerMenuLite::L1TriggerMap& algorithmAliasMap = triggerMenuLite->gtAlgorithmAliasMap();
1175 const L1GtTriggerMenuLite::L1TriggerMap& technicalTriggerMap = triggerMenuLite->gtTechnicalTriggerMap();
1176
1177 const std::vector<unsigned int>& triggerMaskAlgoTrig = triggerMenuLite->gtTriggerMaskAlgoTrig();
1178 const std::vector<unsigned int>& triggerMaskTechTrig = triggerMenuLite->gtTriggerMaskTechTrig();
1179
1180 const std::vector<std::vector<int> >& prescaleFactorsAlgoTrig = triggerMenuLite->gtPrescaleFactorsAlgoTrig();
1181 const std::vector<std::vector<int> >& prescaleFactorsTechTrig = triggerMenuLite->gtPrescaleFactorsTechTrig();
1182
1183
1184
1185 size_t nrDefinedAlgo = algorithmMap.size();
1186 size_t nrDefinedTech = technicalTriggerMap.size();
1187
1188
1189
1190 myCoutStream << "\n ********** L1 Trigger Menu - printing ********** \n"
1191 << "\nL1 Trigger Menu Interface: " << triggerMenuInterface
1192 << "\nL1 Trigger Menu Name: " << triggerMenuName
1193 << "\nL1 Trigger Menu Implementation: " << triggerMenuImplementation
1194 << "\nAssociated Scale DB Key: " << scaleDbKey << "\n\n"
1195 << "\nL1 Physics Algorithms: " << nrDefinedAlgo << " algorithms defined."
1196 << "\n\n"
1197 << "Bit Number " << std::right << std::setw(35) << "Algorithm Name"
1198 << " " << std::right << std::setw(35) << "Algorithm Alias"
1199 << " " << std::right << std::setw(12) << "Trigger Mask";
1200 for (unsigned iSet = 0; iSet < prescaleFactorsAlgoTrig.size(); iSet++) {
1201 myCoutStream << std::right << std::setw(10) << "PF Set " << std::right << std::setw(2) << iSet;
1202 }
1203
1204 myCoutStream << std::endl;
1205
1206 for (L1GtTriggerMenuLite::CItL1Trig itTrig = algorithmMap.begin(); itTrig != algorithmMap.end(); itTrig++) {
1207 const unsigned int bitNumber = itTrig->first;
1208 const std::string& aName = itTrig->second;
1209
1210 std::string aAlias;
1211 L1GtTriggerMenuLite::CItL1Trig itAlias = algorithmAliasMap.find(bitNumber);
1212 if (itAlias != algorithmAliasMap.end()) {
1213 aAlias = itAlias->second;
1214 }
1215
1216 myCoutStream << std::setw(6) << bitNumber << " " << std::right << std::setw(35) << aName << " " << std::right
1217 << std::setw(35) << aAlias << " " << std::right << std::setw(12) << triggerMaskAlgoTrig[bitNumber];
1218 for (unsigned iSet = 0; iSet < prescaleFactorsAlgoTrig.size(); iSet++) {
1219 myCoutStream << std::right << std::setw(12) << prescaleFactorsAlgoTrig[iSet][bitNumber];
1220 }
1221
1222 myCoutStream << std::endl;
1223 }
1224
1225 myCoutStream << "\nL1 Technical Triggers: " << nrDefinedTech << " technical triggers defined."
1226 << "\n\n"
1227 << std::endl;
1228 if (nrDefinedTech) {
1229 myCoutStream << std::right << std::setw(6) << "Bit Number " << std::right << std::setw(45)
1230 << " Technical trigger name "
1231 << " " << std::right << std::setw(12) << "Trigger Mask";
1232 for (unsigned iSet = 0; iSet < prescaleFactorsTechTrig.size(); iSet++) {
1233 myCoutStream << std::right << std::setw(10) << "PF Set " << std::right << std::setw(2) << iSet;
1234 }
1235
1236 myCoutStream << std::endl;
1237 }
1238
1239 for (L1GtTriggerMenuLite::CItL1Trig itTrig = technicalTriggerMap.begin(); itTrig != technicalTriggerMap.end();
1240 itTrig++) {
1241 unsigned int bitNumber = itTrig->first;
1242 std::string aName = itTrig->second;
1243
1244 myCoutStream << std::setw(6) << bitNumber << " " << std::right << std::setw(45) << aName << std::right
1245 << std::setw(12) << triggerMaskTechTrig[bitNumber];
1246 for (unsigned iSet = 0; iSet < prescaleFactorsTechTrig.size(); iSet++) {
1247 myCoutStream << std::right << std::setw(12) << prescaleFactorsTechTrig[iSet][bitNumber];
1248 }
1249
1250 myCoutStream << std::endl;
1251 }
1252
1253
1254
1255 int errorCode = -1;
1256 const std::string* algorithmAlias = triggerMenuLite->gtAlgorithmAlias(m_bitNumber, errorCode);
1257 if (errorCode) {
1258 myCoutStream << "\nError code retrieving alias for algorithm with bit number " << m_bitNumber << ": " << errorCode
1259 << std::endl;
1260 } else {
1261 myCoutStream << "\nAlias for algorithm with bit number " << m_bitNumber << ": " << (*algorithmAlias) << std::endl;
1262 }
1263
1264 errorCode = -1;
1265 const std::string* algorithmName = triggerMenuLite->gtAlgorithmName(m_bitNumber, errorCode);
1266 if (errorCode) {
1267 myCoutStream << "\nError code retrieving name for algorithm with bit number " << m_bitNumber << ": " << errorCode
1268 << std::endl;
1269 } else {
1270 myCoutStream << "\nName for algorithm with bit number " << m_bitNumber << ": " << (*algorithmName) << std::endl;
1271 }
1272
1273 errorCode = -1;
1274 const std::string* techTrigName = triggerMenuLite->gtTechTrigName(m_bitNumber, errorCode);
1275 if (errorCode) {
1276 myCoutStream << "\nError code retrieving name for technical trigger with bit number " << m_bitNumber << ": "
1277 << errorCode << std::endl;
1278 } else {
1279 myCoutStream << "\nName for technical trigger with bit number " << m_bitNumber << ": " << (*techTrigName)
1280 << std::endl;
1281 }
1282
1283 errorCode = -1;
1284 const unsigned int bitNumber = triggerMenuLite->gtBitNumber(m_nameAlgTechTrig, errorCode);
1285 if (errorCode) {
1286 myCoutStream << "\nError code retrieving bit number for algorithm/technical trigger " << m_nameAlgTechTrig << ": "
1287 << errorCode << std::endl;
1288 } else {
1289 myCoutStream << "\nBit number for algorithm/technical trigger " << m_nameAlgTechTrig << ": " << bitNumber
1290 << std::endl;
1291 }
1292
1293
1294
1295
1296
1297
1298 printOutput(myCoutStream);
1299 }
1300
1301
1302 void L1GtAnalyzer::analyzeConditionsInRunBlock(const edm::Run& iRun, const edm::EventSetup& evSetup) {
1303 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeConditionsInRunBlock ****\n" << std::endl;
1304
1305
1306
1307 std::ostringstream myCoutStream;
1308
1309
1310 edm::Handle<edm::ConditionsInRunBlock> condInRunBlock;
1311 iRun.getByToken(m_condInRunToken, condInRunBlock);
1312
1313 if (!condInRunBlock.isValid()) {
1314 LogDebug("L1GtAnalyzer") << "\nConditionsInRunBlock with \n " << m_condInEdmInputTag
1315 << "\nrequested in configuration, but not found in the event."
1316 << "\nExit the method.\n"
1317 << std::endl;
1318
1319 return;
1320 }
1321
1322 const uint16_t beamModeVal = condInRunBlock->beamMode;
1323 const uint16_t beamMomentumVal = condInRunBlock->beamMomentum;
1324 const uint32_t lhcFillNumberVal = condInRunBlock->lhcFillNumber;
1325
1326
1327 myCoutStream << "\nLHC quantities in run " << iRun.run() << "\n Beam Mode = " << beamModeVal
1328 << "\n Beam Momentum = " << beamMomentumVal << " GeV"
1329 << "\n LHC Fill Number = " << lhcFillNumberVal << std::endl;
1330
1331 printOutput(myCoutStream);
1332 }
1333
1334 void L1GtAnalyzer::analyzeConditionsInLumiBlock(const edm::LuminosityBlock& iLumi, const edm::EventSetup& evSetup) {
1335 LogDebug("L1GtAnalyzer") << "\n**** L1GtAnalyzer::analyzeConditionsInLumiBlock ****\n" << std::endl;
1336
1337
1338
1339 std::ostringstream myCoutStream;
1340
1341
1342 edm::Handle<edm::ConditionsInLumiBlock> condInLumiBlock;
1343 iLumi.getByToken(m_condInLumiToken, condInLumiBlock);
1344
1345 if (!condInLumiBlock.isValid()) {
1346 LogDebug("L1GtAnalyzer") << "\nConditionsInLumiBlock with \n " << m_condInEdmInputTag
1347 << "\nrequested in configuration, but not found in the event."
1348 << "\nExit the method.\n"
1349 << std::endl;
1350
1351 return;
1352 }
1353
1354 const uint32_t totalIntensityBeam1Val = condInLumiBlock->totalIntensityBeam1;
1355 const uint32_t totalIntensityBeam2Val = condInLumiBlock->totalIntensityBeam2;
1356
1357 myCoutStream << "\nLHC quantities in luminosity section "
1358
1359 << iLumi.luminosityBlock() << " from run " << iLumi.run()
1360 << "\n Total Intensity Beam 1 (Integer × 10E10 charges) = " << totalIntensityBeam1Val
1361 << "\n Total Intensity Beam 2 (Integer × 10E10 charges) = " << totalIntensityBeam2Val << std::endl;
1362
1363 printOutput(myCoutStream);
1364 }
1365
1366 void L1GtAnalyzer::analyzeConditionsInEventBlock(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
1367
1368
1369 std::ostringstream myCoutStream;
1370
1371
1372 edm::Handle<edm::ConditionsInEventBlock> condInEventBlock;
1373 iEvent.getByToken(m_condInEventToken, condInEventBlock);
1374
1375 if (!condInEventBlock.isValid()) {
1376 LogDebug("L1GtAnalyzer") << "\nConditionsInEventBlock with \n " << m_condInEdmInputTag
1377 << "\nrequested in configuration, but not found in the event."
1378 << "\nExit the method.\n"
1379 << std::endl;
1380
1381 return;
1382 }
1383
1384 const uint16_t bstMasterStatusVal = condInEventBlock->bstMasterStatus;
1385 const uint32_t turnCountNumberVal = condInEventBlock->turnCountNumber;
1386
1387 myCoutStream << "\nLHC quantities in event " << iEvent.id().event() << " from luminosity section "
1388 << iEvent.luminosityBlock() << " from run " << iEvent.run()
1389 << "\n BST Master Status = " << bstMasterStatusVal << "\n Turn count number = " << turnCountNumberVal
1390 << std::endl;
1391
1392 printOutput(myCoutStream);
1393 }
1394
1395 void L1GtAnalyzer::printOutput(std::ostringstream& myCout) {
1396 switch (m_printOutput) {
1397 case 0: {
1398 std::cout << myCout.str() << std::endl;
1399
1400 }
1401
1402 break;
1403 case 1: {
1404 LogTrace("L1GtAnalyzer") << myCout.str() << std::endl;
1405
1406 } break;
1407
1408 case 2: {
1409 edm::LogVerbatim("L1GtAnalyzer") << myCout.str() << std::endl;
1410
1411 }
1412
1413 break;
1414 case 3: {
1415 edm::LogInfo("L1GtAnalyzer") << myCout.str();
1416
1417 }
1418
1419 break;
1420 default: {
1421 std::cout << "\n\n L1GtAnalyzer: Error - no print output = " << m_printOutput
1422 << " defined! \n Check available values in the cfi file."
1423 << "\n"
1424 << std::endl;
1425
1426 } break;
1427 }
1428
1429 myCout.str("");
1430 myCout.clear();
1431 }
1432
1433
1434 void L1GtAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
1435
1436
1437 if (m_analyzeDecisionReadoutRecordEnable) {
1438 analyzeDecisionReadoutRecord(iEvent, evSetup);
1439 }
1440
1441
1442
1443
1444 switch (m_l1GtUtilsConfiguration) {
1445 case 0: {
1446 if (m_analyzeL1GtUtilsMenuLiteEnable) {
1447 analyzeL1GtUtilsMenuLite(iEvent, evSetup);
1448 }
1449
1450
1451 if (m_analyzeTriggerEnable) {
1452 analyzeTrigger(iEvent, evSetup);
1453 }
1454
1455 } break;
1456 case 100000: {
1457 if (m_analyzeL1GtUtilsEnable) {
1458 analyzeL1GtUtils(iEvent, evSetup);
1459 }
1460
1461
1462 if (m_analyzeTriggerEnable) {
1463 analyzeTrigger(iEvent, evSetup);
1464 }
1465
1466 } break;
1467 case 200000: {
1468 if (m_analyzeL1GtUtilsEventSetupEnable) {
1469 analyzeL1GtUtilsEventSetup(iEvent, evSetup);
1470 }
1471
1472
1473 if (m_analyzeTriggerEnable) {
1474 analyzeTrigger(iEvent, evSetup);
1475 }
1476
1477 } break;
1478 default: {
1479
1480 } break;
1481 }
1482
1483
1484 if (m_analyzeObjectMapEnable) {
1485 analyzeObjectMap(iEvent, evSetup);
1486 }
1487
1488
1489 if (m_analyzeL1GtUtilsMenuLiteEnable) {
1490 analyzeL1GtTriggerMenuLite(iEvent, evSetup);
1491 }
1492
1493
1494 if (m_analyzeConditionsInEventBlockEnable) {
1495 analyzeConditionsInEventBlock(iEvent, evSetup);
1496 }
1497 }
1498
1499
1500 void L1GtAnalyzer::endLuminosityBlock(const edm::LuminosityBlock& iLumi, const edm::EventSetup& evSetup) {
1501
1502 }
1503 void L1GtAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup& evSetup) {
1504
1505 }
1506
1507
1508 void L1GtAnalyzer::endJob() {
1509
1510 }