File indexing completed on 2024-04-06 12:20:01
0001 #ifndef GlobalTriggerAnalyzer_L1GtUtils_h
0002 #define GlobalTriggerAnalyzer_L1GtUtils_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include <memory>
0020 #include <string>
0021 #include <utility>
0022
0023
0024 #include "CondFormats/L1TObjects/interface/L1GtStableParameters.h"
0025 #include "CondFormats/DataRecord/interface/L1GtStableParametersRcd.h"
0026
0027 #include "CondFormats/L1TObjects/interface/L1GtPrescaleFactors.h"
0028 #include "CondFormats/DataRecord/interface/L1GtPrescaleFactorsAlgoTrigRcd.h"
0029 #include "CondFormats/DataRecord/interface/L1GtPrescaleFactorsTechTrigRcd.h"
0030
0031 #include "CondFormats/L1TObjects/interface/L1GtTriggerMask.h"
0032 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskAlgoTrigRcd.h"
0033 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskTechTrigRcd.h"
0034 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskVetoAlgoTrigRcd.h"
0035 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskVetoTechTrigRcd.h"
0036
0037 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h"
0038 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h"
0039
0040 #include "DataFormats/L1GlobalTrigger/interface/L1GtTriggerMenuLite.h"
0041
0042 #include "FWCore/Framework/interface/ConsumesCollector.h"
0043 #include "FWCore/Framework/interface/Event.h"
0044 #include "FWCore/Framework/interface/EventSetup.h"
0045 #include "FWCore/Framework/interface/Run.h"
0046
0047 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0048 #include "FWCore/Utilities/interface/ESGetToken.h"
0049 #include "FWCore/Utilities/interface/InputTag.h"
0050
0051 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h"
0052
0053 #include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtUtilsHelper.h"
0054
0055
0056 class L1GtStableParameters;
0057 class L1GtPrescaleFactors;
0058 class L1GtTriggerMask;
0059 class L1GtTriggerMenu;
0060
0061 class L1GlobalTriggerReadoutRecord;
0062 class L1GlobalTriggerRecord;
0063
0064
0065
0066 class L1GtUtils {
0067 public:
0068
0069
0070
0071
0072
0073
0074
0075
0076 enum class UseEventSetupIn { Run, Event, RunAndEvent, Nothing };
0077
0078
0079 L1GtUtils(edm::ParameterSet const& pset,
0080 edm::ConsumesCollector&& iC,
0081 bool useL1GtTriggerMenuLite,
0082 UseEventSetupIn use = UseEventSetupIn::Run);
0083
0084 L1GtUtils(edm::ParameterSet const& pset,
0085 edm::ConsumesCollector& iC,
0086 bool useL1GtTriggerMenuLite,
0087 UseEventSetupIn use = UseEventSetupIn::Run);
0088
0089
0090
0091
0092
0093
0094 template <typename T>
0095 L1GtUtils(edm::ParameterSet const& pset,
0096 edm::ConsumesCollector&& iC,
0097 bool useL1GtTriggerMenuLite,
0098 T& module,
0099 UseEventSetupIn use = UseEventSetupIn::Run);
0100
0101 template <typename T>
0102 L1GtUtils(edm::ParameterSet const& pset,
0103 edm::ConsumesCollector& iC,
0104 bool useL1GtTriggerMenuLite,
0105 T& module,
0106 UseEventSetupIn use = UseEventSetupIn::Run);
0107
0108
0109
0110
0111
0112
0113
0114 template <typename T>
0115 L1GtUtils(edm::ParameterSet const& pset,
0116 edm::ConsumesCollector&& iC,
0117 bool useL1GtTriggerMenuLite,
0118 T& module,
0119 edm::InputTag const& l1GtRecordInputTag,
0120 edm::InputTag const& l1GtReadoutRecordInputTag,
0121 edm::InputTag const& l1GtTriggerMenuLiteInputTag,
0122 UseEventSetupIn use = UseEventSetupIn::Run);
0123
0124 template <typename T>
0125 L1GtUtils(edm::ParameterSet const& pset,
0126 edm::ConsumesCollector& iC,
0127 bool useL1GtTriggerMenuLite,
0128 T& module,
0129 edm::InputTag const& l1GtRecordInputTag,
0130 edm::InputTag const& l1GtReadoutRecordInputTag,
0131 edm::InputTag const& l1GtTriggerMenuLiteInputTag,
0132 UseEventSetupIn use = UseEventSetupIn::Run);
0133
0134
0135 virtual ~L1GtUtils();
0136
0137 static void fillDescription(edm::ParameterSetDescription& desc) { L1GtUtilsHelper::fillDescription(desc); }
0138
0139 public:
0140 enum TriggerCategory { AlgorithmTrigger = 0, TechnicalTrigger = 1 };
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157 class LogicalExpressionL1Results {
0158 public:
0159
0160
0161
0162 explicit LogicalExpressionL1Results(const std::string&, L1GtUtils&);
0163
0164
0165 ~LogicalExpressionL1Results();
0166
0167 public:
0168
0169 inline bool isValid() { return m_validLogicalExpression; }
0170
0171
0172
0173 const int logicalExpressionRunUpdate(const edm::Run&, const edm::EventSetup&, const std::string&);
0174
0175
0176 const int logicalExpressionRunUpdate(const edm::Run&, const edm::EventSetup&);
0177
0178
0179
0180 inline const std::vector<L1GtLogicParser::OperandToken>& expL1Triggers() { return m_expL1Triggers; }
0181 const std::vector<std::pair<std::string, bool> >& decisionsBeforeMask();
0182 const std::vector<std::pair<std::string, bool> >& decisionsAfterMask();
0183 const std::vector<std::pair<std::string, int> >& prescaleFactors();
0184 const std::vector<std::pair<std::string, int> >& triggerMasks();
0185
0186 const std::vector<std::pair<std::string, int> >& errorCodes(const edm::Event&);
0187
0188 private:
0189
0190
0191 bool initialize();
0192
0193
0194 void reset(const std::vector<std::pair<std::string, bool> >&) const;
0195 void reset(const std::vector<std::pair<std::string, int> >&) const;
0196
0197 void l1Results(const edm::Event& iEvent);
0198
0199 private:
0200
0201
0202
0203 std::string m_logicalExpression;
0204
0205 L1GtUtils& m_l1GtUtils;
0206
0207 private:
0208
0209
0210
0211 int m_l1ConfCode;
0212
0213
0214 bool m_validL1Configuration;
0215
0216
0217 bool m_validLogicalExpression;
0218
0219
0220 bool m_l1ResultsAlreadyCalled;
0221
0222 std::vector<L1GtLogicParser::OperandToken> m_expL1Triggers;
0223 size_t m_expL1TriggersSize;
0224
0225
0226 std::vector<L1GtUtils::TriggerCategory> m_expTriggerCategory;
0227
0228
0229 bool m_expBitsTechTrigger;
0230
0231
0232
0233 std::vector<bool> m_expTriggerInMenu;
0234
0235
0236 std::vector<std::pair<std::string, bool> > m_decisionsBeforeMask;
0237 std::vector<std::pair<std::string, bool> > m_decisionsAfterMask;
0238 std::vector<std::pair<std::string, int> > m_prescaleFactors;
0239 std::vector<std::pair<std::string, int> > m_triggerMasks;
0240 std::vector<std::pair<std::string, int> > m_errorCodes;
0241 };
0242
0243 public:
0244
0245
0246
0247 const std::string triggerCategory(const TriggerCategory&) const;
0248
0249
0250 void retrieveL1EventSetup(const edm::EventSetup&, bool isRun = true);
0251
0252
0253
0254
0255 void retrieveL1GtTriggerMenuLite(const edm::Run&);
0256
0257
0258
0259
0260 void getL1GtRunCache(const edm::Run&, const edm::EventSetup&, const bool, const bool);
0261
0262
0263 void getL1GtRunCache(const edm::Event&, const edm::EventSetup&, const bool, const bool);
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274 const bool l1AlgoTechTrigBitNumber(const std::string& nameAlgoTechTrig,
0275 TriggerCategory& trigCategory,
0276 int& bitNumber) const;
0277
0278
0279
0280
0281
0282
0283
0284 const bool l1TriggerNameFromBit(const int& bitNumber,
0285 const TriggerCategory& trigCategory,
0286 std::string& aliasL1Trigger,
0287 std::string& nameL1Trigger) const;
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300 const int l1Results(const edm::Event& iEvent,
0301 const std::string& nameAlgoTechTrig,
0302 bool& decisionBeforeMask,
0303 bool& decisionAfterMask,
0304 int& prescaleFactor,
0305 int& triggerMask) const;
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318 const bool decisionBeforeMask(const edm::Event& iEvent, const std::string& nameAlgoTechTrig, int& errorCode) const;
0319
0320
0321 const bool decisionAfterMask(const edm::Event& iEvent, const std::string& nameAlgoTechTrig, int& errorCode) const;
0322
0323
0324
0325 const bool decision(const edm::Event& iEvent, const std::string& nameAlgoTechTrig, int& errorCode) const;
0326
0327
0328 const int prescaleFactor(const edm::Event& iEvent, const std::string& nameAlgoTechTrig, int& errorCode) const;
0329
0330
0331 const int triggerMask(const edm::Event& iEvent, const std::string& nameAlgoTechTrig, int& errorCode) const;
0332
0333
0334
0335 const int triggerMask(const std::string& nameAlgoTechTrig, int& errorCode) const;
0336
0337
0338
0339
0340
0341
0342 const int prescaleFactorSetIndex(const edm::Event& iEvent, const TriggerCategory& trigCategory, int& errorCode) const;
0343
0344
0345
0346
0347
0348 const std::vector<int>& prescaleFactorSet(const edm::Event& iEvent,
0349 const TriggerCategory& trigCategory,
0350 int& errorCode);
0351
0352
0353
0354 const std::vector<unsigned int>& triggerMaskSet(const TriggerCategory& trigCategory, int& errorCode);
0355
0356
0357 const std::string& l1TriggerMenu() const;
0358
0359
0360 const std::string& l1TriggerMenuImplementation() const;
0361
0362
0363 const L1GtTriggerMenu* ptrL1TriggerMenuEventSetup(int& errorCode);
0364
0365
0366 const L1GtTriggerMenuLite* ptrL1GtTriggerMenuLite(int& errorCode);
0367
0368
0369
0370 const bool availableL1Configuration(int& errorCode, int& l1ConfCode) const;
0371
0372 private:
0373 static const std::string EmptyString;
0374 static const int L1GtNotValidError;
0375
0376
0377
0378
0379 const bool trigResult(const DecisionWord& decWord,
0380 const int bitNumber,
0381 const std::string& nameAlgoTechTrig,
0382 const TriggerCategory& trigCategory,
0383 int& errorCode) const;
0384
0385 private:
0386 L1GtUtils(edm::ConsumesCollector&, UseEventSetupIn);
0387
0388
0389
0390
0391 const L1GtStableParameters* m_l1GtStablePar;
0392 unsigned long long m_l1GtStableParCacheID;
0393
0394
0395 unsigned int m_numberAlgorithmTriggers;
0396
0397
0398 unsigned int m_numberTechnicalTriggers;
0399
0400
0401 const L1GtPrescaleFactors* m_l1GtPfAlgo;
0402 unsigned long long m_l1GtPfAlgoCacheID;
0403
0404 const L1GtPrescaleFactors* m_l1GtPfTech;
0405 unsigned long long m_l1GtPfTechCacheID;
0406
0407 const std::vector<std::vector<int> >* m_prescaleFactorsAlgoTrig;
0408 const std::vector<std::vector<int> >* m_prescaleFactorsTechTrig;
0409
0410
0411 const L1GtTriggerMask* m_l1GtTmAlgo;
0412 unsigned long long m_l1GtTmAlgoCacheID;
0413
0414 const L1GtTriggerMask* m_l1GtTmTech;
0415 unsigned long long m_l1GtTmTechCacheID;
0416
0417 const L1GtTriggerMask* m_l1GtTmVetoAlgo;
0418 unsigned long long m_l1GtTmVetoAlgoCacheID;
0419
0420 const L1GtTriggerMask* m_l1GtTmVetoTech;
0421 unsigned long long m_l1GtTmVetoTechCacheID;
0422
0423 const std::vector<unsigned int>* m_triggerMaskAlgoTrig;
0424 const std::vector<unsigned int>* m_triggerMaskTechTrig;
0425
0426 const std::vector<unsigned int>* m_triggerMaskVetoAlgoTrig;
0427 const std::vector<unsigned int>* m_triggerMaskVetoTechTrig;
0428
0429
0430 const L1GtTriggerMenu* m_l1GtMenu;
0431 unsigned long long m_l1GtMenuCacheID;
0432
0433 const AlgorithmMap* m_algorithmMap;
0434 const AlgorithmMap* m_algorithmAliasMap;
0435 const AlgorithmMap* m_technicalTriggerMap;
0436
0437 bool m_l1EventSetupValid;
0438
0439
0440
0441
0442 const L1GtTriggerMenuLite* m_l1GtMenuLite;
0443
0444 const L1GtTriggerMenuLite::L1TriggerMap* m_algorithmMapLite;
0445 const L1GtTriggerMenuLite::L1TriggerMap* m_algorithmAliasMapLite;
0446 const L1GtTriggerMenuLite::L1TriggerMap* m_technicalTriggerMapLite;
0447
0448 const std::vector<unsigned int>* m_triggerMaskAlgoTrigLite;
0449 const std::vector<unsigned int>* m_triggerMaskTechTrigLite;
0450
0451 const std::vector<std::vector<int> >* m_prescaleFactorsAlgoTrigLite;
0452 const std::vector<std::vector<int> >* m_prescaleFactorsTechTrigLite;
0453
0454 bool m_l1GtMenuLiteValid;
0455
0456
0457 bool m_beginRunCache;
0458
0459
0460 edm::RunID m_runIDCache;
0461
0462 private:
0463
0464 unsigned int m_physicsDaqPartition;
0465
0466 std::vector<unsigned int> m_triggerMaskSet;
0467 std::vector<int> m_prescaleFactorSet;
0468
0469
0470 bool m_retrieveL1EventSetup;
0471 bool m_retrieveL1GtTriggerMenuLite;
0472
0473 std::unique_ptr<L1GtUtilsHelper> m_l1GtUtilsHelper;
0474
0475
0476 edm::ESGetToken<L1GtStableParameters, L1GtStableParametersRcd> m_L1GtStableParametersRunToken;
0477 edm::ESGetToken<L1GtPrescaleFactors, L1GtPrescaleFactorsAlgoTrigRcd> m_L1GtPrescaleFactorsAlgoTrigRunToken;
0478 edm::ESGetToken<L1GtPrescaleFactors, L1GtPrescaleFactorsTechTrigRcd> m_L1GtPrescaleFactorsTechTrigRunToken;
0479 edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskAlgoTrigRcd> m_L1GtTriggerMaskAlgoTrigRunToken;
0480 edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskTechTrigRcd> m_L1GtTriggerMaskTechTrigRunToken;
0481 edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskVetoAlgoTrigRcd> m_L1GtTriggerMaskVetoAlgoTrigRunToken;
0482 edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskVetoTechTrigRcd> m_L1GtTriggerMaskVetoTechTrigRunToken;
0483 edm::ESGetToken<L1GtTriggerMenu, L1GtTriggerMenuRcd> m_L1GtTriggerMenuRunToken;
0484
0485
0486 edm::ESGetToken<L1GtStableParameters, L1GtStableParametersRcd> m_L1GtStableParametersEventToken;
0487 edm::ESGetToken<L1GtPrescaleFactors, L1GtPrescaleFactorsAlgoTrigRcd> m_L1GtPrescaleFactorsAlgoTrigEventToken;
0488 edm::ESGetToken<L1GtPrescaleFactors, L1GtPrescaleFactorsTechTrigRcd> m_L1GtPrescaleFactorsTechTrigEventToken;
0489 edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskAlgoTrigRcd> m_L1GtTriggerMaskAlgoTrigEventToken;
0490 edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskTechTrigRcd> m_L1GtTriggerMaskTechTrigEventToken;
0491 edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskVetoAlgoTrigRcd> m_L1GtTriggerMaskVetoAlgoTrigEventToken;
0492 edm::ESGetToken<L1GtTriggerMask, L1GtTriggerMaskVetoTechTrigRcd> m_L1GtTriggerMaskVetoTechTrigEventToken;
0493 edm::ESGetToken<L1GtTriggerMenu, L1GtTriggerMenuRcd> m_L1GtTriggerMenuEventToken;
0494 };
0495
0496 template <typename T>
0497 L1GtUtils::L1GtUtils(edm::ParameterSet const& pset,
0498 edm::ConsumesCollector&& iC,
0499 bool useL1GtTriggerMenuLite,
0500 T& module,
0501 UseEventSetupIn useEventSetupIn)
0502 : L1GtUtils(pset, iC, useL1GtTriggerMenuLite, module, useEventSetupIn) {}
0503
0504 template <typename T>
0505 L1GtUtils::L1GtUtils(edm::ParameterSet const& pset,
0506 edm::ConsumesCollector& iC,
0507 bool useL1GtTriggerMenuLite,
0508 T& module,
0509 UseEventSetupIn useEventSetupIn)
0510 : L1GtUtils(iC, useEventSetupIn) {
0511 m_l1GtUtilsHelper = std::make_unique<L1GtUtilsHelper>(pset, iC, useL1GtTriggerMenuLite, module);
0512 }
0513
0514 template <typename T>
0515 L1GtUtils::L1GtUtils(edm::ParameterSet const& pset,
0516 edm::ConsumesCollector&& iC,
0517 bool useL1GtTriggerMenuLite,
0518 T& module,
0519 edm::InputTag const& l1GtRecordInputTag,
0520 edm::InputTag const& l1GtReadoutRecordInputTag,
0521 edm::InputTag const& l1GtTriggerMenuLiteInputTag,
0522 UseEventSetupIn useEventSetupIn)
0523 : L1GtUtils(pset,
0524 iC,
0525 useL1GtTriggerMenuLite,
0526 module,
0527 l1GtRecordInputTag,
0528 l1GtReadoutRecordInputTag,
0529 l1GtTriggerMenuLiteInputTag,
0530 useEventSetupIn) {}
0531
0532 template <typename T>
0533 L1GtUtils::L1GtUtils(edm::ParameterSet const& pset,
0534 edm::ConsumesCollector& iC,
0535 bool useL1GtTriggerMenuLite,
0536 T& module,
0537 edm::InputTag const& l1GtRecordInputTag,
0538 edm::InputTag const& l1GtReadoutRecordInputTag,
0539 edm::InputTag const& l1GtTriggerMenuLiteInputTag,
0540 UseEventSetupIn useEventSetupIn)
0541 : L1GtUtils(iC, useEventSetupIn) {
0542 m_l1GtUtilsHelper = std::make_unique<L1GtUtilsHelper>(pset,
0543 iC,
0544 useL1GtTriggerMenuLite,
0545 module,
0546 l1GtRecordInputTag,
0547 l1GtReadoutRecordInputTag,
0548 l1GtTriggerMenuLiteInputTag);
0549 }
0550
0551 #endif