File indexing completed on 2024-04-06 12:08:59
0001 #ifndef TriggerHelper_H
0002 #define TriggerHelper_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #include "DataFormats/Common/interface/TriggerResults.h"
0022 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
0023 #include "DataFormats/Scalers/interface/DcsStatus.h"
0024 #include "DataFormats/OnlineMetaData/interface/DCSRecord.h"
0025 #include "FWCore/Framework/interface/ESWatcher.h"
0026 #include "FWCore/Framework/interface/Event.h"
0027 #include "FWCore/Framework/interface/EventSetup.h"
0028 #include "FWCore/Framework/interface/Run.h"
0029 #include "FWCore/Utilities/interface/EDGetToken.h"
0030 #include "FWCore/Utilities/interface/ESGetToken.h"
0031 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
0032 #include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtUtils.h"
0033
0034 #include <memory>
0035
0036 class AlCaRecoTriggerBits;
0037 class AlCaRecoTriggerBitsRcd;
0038 namespace edm {
0039 class ConsumesCollector;
0040 class ParameterSet;
0041 }
0042
0043 class TriggerHelper {
0044
0045 edm::ESWatcher<AlCaRecoTriggerBitsRcd> *watchDB_;
0046 std::unique_ptr<L1GtUtils> l1Gt_;
0047 HLTConfigProvider hltConfig_;
0048 bool hltConfigInit_;
0049
0050 bool andOr_;
0051 bool andOrDcs_;
0052 edm::InputTag dcsInputTag_;
0053 edm::InputTag dcsRecordInputTag_;
0054 edm::EDGetTokenT<DcsStatusCollection> dcsInputToken_;
0055 edm::EDGetTokenT<DCSRecord> dcsRecordToken_;
0056 std::vector<int> dcsPartitions_;
0057 bool errorReplyDcs_;
0058 bool andOrGt_;
0059 edm::InputTag gtInputTag_;
0060 edm::EDGetTokenT<L1GlobalTriggerReadoutRecord> gtInputToken_;
0061 std::string gtDBKey_;
0062 std::vector<std::string> gtLogicalExpressions_;
0063 bool errorReplyGt_;
0064 bool andOrL1_;
0065 std::string l1DBKey_;
0066 edm::ESGetToken<AlCaRecoTriggerBits, AlCaRecoTriggerBitsRcd> alcaRecotriggerBitsToken_;
0067 std::vector<std::string> l1LogicalExpressions_;
0068 bool errorReplyL1_;
0069 bool andOrHlt_;
0070 edm::InputTag hltInputTag_;
0071 edm::EDGetTokenT<edm::TriggerResults> hltInputToken_;
0072 std::string hltDBKey_;
0073 std::vector<std::string> hltLogicalExpressions_;
0074 bool errorReplyHlt_;
0075
0076 bool on_;
0077 bool onDcs_;
0078 bool onGt_;
0079 bool onL1_;
0080 bool onHlt_;
0081
0082 const std::string configError_;
0083
0084 public:
0085
0086 template <typename T>
0087 TriggerHelper(const edm::ParameterSet &config, edm::ConsumesCollector &&iC, T &module);
0088
0089 template <typename T>
0090 TriggerHelper(const edm::ParameterSet &config, edm::ConsumesCollector &iC, T &module);
0091
0092 ~TriggerHelper();
0093
0094
0095 bool on() { return on_; }
0096 bool off() { return (!on_); }
0097 void initRun(const edm::Run &run,
0098 const edm::EventSetup &setup);
0099 bool accept(const edm::Event &event,
0100 const edm::EventSetup &setup);
0101
0102 private:
0103
0104
0105 TriggerHelper(const edm::ParameterSet &config, edm::ConsumesCollector &iC);
0106
0107
0108 bool acceptDcs(const edm::Event &event);
0109 bool acceptDcsPartition(const edm::Handle<DcsStatusCollection> &dcsStatus,
0110 const edm::Handle<DCSRecord> &dcsRecord,
0111 bool useDCSRecord,
0112 int dcsPartition) const;
0113
0114
0115 bool acceptGt(const edm::Event &event);
0116 bool acceptGtLogicalExpression(const edm::Handle<L1GlobalTriggerReadoutRecord> >ReadoutRecord,
0117 std::string gtLogicalExpression);
0118
0119
0120 bool acceptL1(const edm::Event &event, const edm::EventSetup &setup);
0121 bool acceptL1LogicalExpression(const edm::Event &event, std::string l1LogicalExpression);
0122
0123
0124 bool acceptHlt(const edm::Event &event);
0125 bool acceptHltLogicalExpression(const edm::Handle<edm::TriggerResults> &hltTriggerResults,
0126 std::string hltLogicalExpression) const;
0127
0128
0129 std::vector<std::string> expressionsFromDB(const std::string &key, const edm::EventSetup &setup);
0130 bool negate(std::string &word) const;
0131 };
0132
0133 template <typename T>
0134 TriggerHelper::TriggerHelper(const edm::ParameterSet &config, edm::ConsumesCollector &&iC, T &module)
0135 : TriggerHelper(config, iC, module) {
0136 gtInputTag_ = config.getParameter<edm::InputTag>("gtInputTag");
0137 gtInputToken_ = iC.consumes<L1GlobalTriggerReadoutRecord>(gtInputTag_);
0138 alcaRecotriggerBitsToken_ = iC.esConsumes<AlCaRecoTriggerBits, AlCaRecoTriggerBitsRcd>();
0139 }
0140
0141 template <typename T>
0142 TriggerHelper::TriggerHelper(const edm::ParameterSet &config, edm::ConsumesCollector &iC, T &module)
0143 : TriggerHelper(config, iC) {
0144 if (onL1_ && (!l1DBKey_.empty() || !l1LogicalExpressions_.empty())) {
0145 l1Gt_ = std::make_unique<L1GtUtils>(config, iC, false, module, L1GtUtils::UseEventSetupIn::Event);
0146 }
0147 }
0148
0149 #endif