File indexing completed on 2025-03-14 23:36:08
0001 #include "FWCore/Framework/interface/Frameworkfwd.h"
0002 #include "FWCore/Framework/interface/stream/EDProducer.h"
0003
0004 #include "FWCore/Framework/interface/Event.h"
0005 #include "FWCore/Framework/interface/MakerMacros.h"
0006
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0009 #include "FWCore/ParameterSet/interface/allowedValues.h"
0010
0011 #include "FWCore/Common/interface/TriggerNames.h"
0012 #include "DataFormats/Common/interface/TriggerResults.h"
0013 #include "DataFormats/Common/interface/HLTGlobalStatus.h"
0014 #include "DataFormats/Common/interface/HLTPathStatus.h"
0015
0016 #include "DataFormats/L1Trigger/interface/P2GTAlgoBlock.h"
0017
0018 #include <string>
0019
0020 using namespace l1t;
0021
0022 class P2GTTriggerResultsConverter : public edm::stream::EDProducer<> {
0023 public:
0024 explicit P2GTTriggerResultsConverter(const edm::ParameterSet&);
0025
0026 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0027
0028 enum DecisionType { beforeBxMaskAndPrescale, beforePrescale, final };
0029
0030 private:
0031 void produce(edm::Event&, const edm::EventSetup&) override;
0032 void beginRun(const edm::Run&, const edm::EventSetup&) override;
0033
0034 const edm::EDGetTokenT<P2GTAlgoBlockMap> algoBlockToken_;
0035 const std::string prefix_;
0036 const std::string decisionName_;
0037 const DecisionType decisionEnum_;
0038
0039 std::vector<std::string> algoNames_;
0040 };
0041
0042 P2GTTriggerResultsConverter::P2GTTriggerResultsConverter(const edm::ParameterSet& params)
0043 : algoBlockToken_(consumes<P2GTAlgoBlockMap>(params.getParameter<edm::InputTag>("src"))),
0044 prefix_(params.getParameter<std::string>("prefix")),
0045 decisionName_(params.getParameter<std::string>("decision")),
0046 decisionEnum_(decisionName_ == "beforeBxMaskAndPrescale" ? beforeBxMaskAndPrescale
0047 : decisionName_ == "beforePrescale" ? beforePrescale
0048 : final) {
0049 produces<edm::TriggerResults>();
0050 }
0051
0052 void P2GTTriggerResultsConverter::beginRun(const edm::Run&, const edm::EventSetup&) { algoNames_.clear(); }
0053
0054 void P2GTTriggerResultsConverter::produce(edm::Event& event, const edm::EventSetup&) {
0055 const P2GTAlgoBlockMap& algoBlockMap = event.get(algoBlockToken_);
0056
0057 edm::HLTGlobalStatus gtDecisions(algoBlockMap.size());
0058
0059 bool fillAlgoNames = false;
0060
0061 if (algoNames_.empty()) {
0062 algoNames_ = std::vector<std::string>(algoBlockMap.size());
0063 fillAlgoNames = true;
0064 }
0065
0066 std::size_t algoIdx = 0;
0067 for (const auto& [algoName, algoBlock] : algoBlockMap) {
0068 bool decision = decisionEnum_ == beforeBxMaskAndPrescale ? algoBlock.decisionBeforeBxMaskAndPrescale()
0069 : decisionEnum_ == beforePrescale ? algoBlock.decisionBeforePrescale()
0070 : algoBlock.decisionFinal();
0071
0072 gtDecisions[algoIdx] = edm::HLTPathStatus(decision ? edm::hlt::Pass : edm::hlt::Fail);
0073 if (fillAlgoNames) {
0074 algoNames_[algoIdx] = prefix_ + algoName + "_" + decisionName_;
0075 }
0076 algoIdx++;
0077 }
0078
0079 event.put(std::make_unique<edm::TriggerResults>(gtDecisions, algoNames_));
0080 }
0081
0082 void P2GTTriggerResultsConverter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0083 edm::ParameterSetDescription desc;
0084 desc.add<edm::InputTag>("src");
0085 desc.add<std::string>("prefix", "L1_");
0086 desc.ifValue(edm::ParameterDescription<std::string>("decision", "final", true),
0087 edm::allowedValues<std::string>("beforeBxMaskAndPrescale", "beforePrescale", "final"));
0088 descriptions.addWithDefaultLabel(desc);
0089 }
0090
0091 DEFINE_FWK_MODULE(P2GTTriggerResultsConverter);