Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-03-05 03:16:37

0001 #include "FWCore/Framework/interface/Event.h"
0002 #include "FWCore/Framework/interface/global/EDFilter.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0004 #include "DataFormats/L1Trigger/interface/P2GTAlgoBlock.h"
0005 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0006 
0007 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0008 #include "FWCore/ParameterSet/interface/allowedValues.h"
0009 #include "FWCore/Framework/interface/MakerMacros.h"
0010 #include "DataFormats/Common/interface/Handle.h"
0011 #include "FWCore/Utilities/interface/EDGetToken.h"
0012 
0013 using namespace l1t;
0014 
0015 class L1GTAcceptFilter : public edm::global::EDFilter<> {
0016 public:
0017   explicit L1GTAcceptFilter(const edm::ParameterSet&);
0018   ~L1GTAcceptFilter() override = default;
0019 
0020   static void fillDescriptions(edm::ConfigurationDescriptions&);
0021 
0022   enum DecisionType { beforeBxMaskAndPrescale, beforePrescale, final };
0023 
0024 private:
0025   bool filter(edm::StreamID, edm::Event&, edm::EventSetup const&) const override;
0026 
0027   const edm::EDGetTokenT<P2GTAlgoBlockMap> algoBlocksToken_;
0028   const DecisionType decisionEnum_;
0029   int triggerType_;
0030 };
0031 
0032 L1GTAcceptFilter::L1GTAcceptFilter(const edm::ParameterSet& config)
0033     : algoBlocksToken_(consumes<P2GTAlgoBlockMap>(config.getParameter<edm::InputTag>("algoBlocksTag"))),
0034       decisionEnum_(config.getParameter<std::string>("decision") == "beforeBxMaskAndPrescale" ? beforeBxMaskAndPrescale
0035                     : config.getParameter<std::string>("decision") == "beforePrescale"        ? beforePrescale
0036                                                                                               : final),
0037       triggerType_(config.getParameter<int>("triggerType")) {}
0038 
0039 bool L1GTAcceptFilter::filter(edm::StreamID, edm::Event& event, const edm::EventSetup& setup) const {
0040   const P2GTAlgoBlockMap& algoMap = event.get(algoBlocksToken_);
0041   bool decision = false;
0042   bool veto = false;
0043   for (const auto& [name, algoBlock] : algoMap) {
0044     if (algoBlock.isVeto()) {
0045       veto |= algoBlock.decisionFinal();
0046     } else if ((algoBlock.triggerTypes() & triggerType_) > 0) {
0047       if (decisionEnum_ == beforeBxMaskAndPrescale) {
0048         decision |= algoBlock.decisionBeforeBxMaskAndPrescale();
0049       } else if (decisionEnum_ == beforePrescale) {
0050         decision |= algoBlock.decisionBeforePrescale();
0051       } else {
0052         decision |= algoBlock.decisionFinal();
0053       }
0054     }
0055   }
0056 
0057   return decision && !veto;
0058 }
0059 
0060 void L1GTAcceptFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0061   edm::ParameterSetDescription desc;
0062   desc.add<edm::InputTag>("algoBlocksTag");
0063   desc.add<int>("triggerType", 1);
0064   desc.ifValue(edm::ParameterDescription<std::string>("decision", "final", true),
0065                edm::allowedValues<std::string>("beforeBxMaskAndPrescale", "beforePrescale", "final"));
0066 
0067   descriptions.addWithDefaultLabel(desc);
0068 }
0069 
0070 DEFINE_FWK_MODULE(L1GTAcceptFilter);