Back to home page

Project CMSSW displayed by LXR

 
 

    


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);