Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-09-07 04:37:22

0001 // -*- C++ -*-
0002 //
0003 // Package:    PatAlgos
0004 // Class:      pat::PATTriggerObjectStandAloneSlimmer
0005 //
0006 //
0007 /**
0008   \class    pat::PATTriggerObjectStandAloneSlimmer PATTriggerObjectStandAloneSlimmer.h "PhysicsTools/PatAlgos/plugins/PATTriggerObjectStandAloneSlimmer.cc"
0009   \brief    Packs filter labels and/or 4-vectors of a pat::TriggerObjectStandAloneCollection
0010 
0011   \author   Giovanni Petrucciani
0012 */
0013 
0014 #include "FWCore/Framework/interface/global/EDProducer.h"
0015 #include "FWCore/Framework/interface/Event.h"
0016 #include "FWCore/Framework/interface/EventSetup.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "FWCore/Utilities/interface/InputTag.h"
0019 
0020 #include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h"
0021 #include <set>
0022 
0023 namespace pat {
0024 
0025   class PATTriggerObjectStandAloneSlimmer : public edm::global::EDProducer<> {
0026   public:
0027     explicit PATTriggerObjectStandAloneSlimmer(const edm::ParameterSet& iConfig);
0028     ~PATTriggerObjectStandAloneSlimmer() override {}
0029 
0030   private:
0031     void produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override;
0032 
0033     const edm::EDGetTokenT<TriggerObjectStandAloneCollection> srcToken_;
0034     const edm::EDGetTokenT<edm::TriggerResults> triggerResultsToken_;
0035 
0036     bool packFilterLabels_, packP4_;
0037   };
0038 
0039 }  // namespace pat
0040 
0041 using namespace pat;
0042 
0043 PATTriggerObjectStandAloneSlimmer::PATTriggerObjectStandAloneSlimmer(const edm::ParameterSet& iConfig)
0044     : srcToken_(consumes<TriggerObjectStandAloneCollection>(iConfig.getParameter<edm::InputTag>("src"))),
0045       triggerResultsToken_(consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag>("triggerResults"))),
0046       packFilterLabels_(iConfig.getParameter<bool>("packFilterLabels")),
0047       packP4_(iConfig.getParameter<bool>("packP4")) {
0048   produces<TriggerObjectStandAloneCollection>();
0049   if (packFilterLabels_) {
0050     produces<std::vector<std::string>>("filterLabels");
0051   }
0052 }
0053 
0054 void PATTriggerObjectStandAloneSlimmer::produce(edm::StreamID,
0055                                                 edm::Event& iEvent,
0056                                                 const edm::EventSetup& iSetup) const {
0057   edm::Handle<TriggerObjectStandAloneCollection> src;
0058   iEvent.getByToken(srcToken_, src);
0059   edm::Handle<edm::TriggerResults> triggerResults;
0060   iEvent.getByToken(triggerResultsToken_, triggerResults);
0061 
0062   auto slimmed = std::make_unique<TriggerObjectStandAloneCollection>(*src);
0063 
0064   if (packFilterLabels_) {
0065     std::set<std::string> allLabels;
0066     for (auto& obj : *slimmed) {
0067       obj.packFilterLabels(iEvent, *triggerResults);
0068     }
0069   }
0070   if (packP4_) {
0071     for (TriggerObjectStandAlone& obj : *slimmed) {
0072       obj.packP4();
0073     }
0074   }
0075   iEvent.put(std::move(slimmed));
0076 }
0077 
0078 #include "FWCore/Framework/interface/MakerMacros.h"
0079 DEFINE_FWK_MODULE(PATTriggerObjectStandAloneSlimmer);