Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:20:08

0001 // -*- C++ -*-
0002 //
0003 // Package: L1CaloTrigger
0004 // Class: L1CaloJetHTTProducer
0005 //
0006 /**\class L1CaloJetHTTProducer L1CaloJetHTTProducer.cc
0007 
0008 Description: 
0009 Use the L1CaloJetProducer collections to calculate
0010 HTT energy sum for CaloJets
0011 
0012 Implementation:
0013 [Notes on implementation]
0014 */
0015 //
0016 // Original Author: Tyler Ruggles
0017 // Created: Fri Mar 22 2019
0018 // $Id$
0019 //
0020 //
0021 
0022 #include "FWCore/Framework/interface/Frameworkfwd.h"
0023 #include "FWCore/Framework/interface/stream/EDProducer.h"
0024 #include "FWCore/Framework/interface/ESHandle.h"
0025 #include "FWCore/ServiceRegistry/interface/Service.h"
0026 #include "FWCore/Framework/interface/Event.h"
0027 #include "FWCore/Framework/interface/MakerMacros.h"
0028 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0029 
0030 #include <iostream>
0031 
0032 // Run2/PhaseI output formats
0033 #include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h"
0034 #include "DataFormats/L1Trigger/interface/Jet.h"
0035 // GenJets if needed
0036 #include "DataFormats/JetReco/interface/GenJet.h"
0037 #include "DataFormats/JetReco/interface/GenJetCollection.h"
0038 
0039 class L1CaloJetHTTProducer : public edm::stream::EDProducer<> {
0040 public:
0041   explicit L1CaloJetHTTProducer(const edm::ParameterSet&);
0042 
0043 private:
0044   void produce(edm::Event&, const edm::EventSetup&) override;
0045 
0046   double EtaMax;
0047   double PtMin;
0048 
0049   edm::EDGetTokenT<BXVector<l1t::Jet>> bxvCaloJetsToken_;
0050   edm::Handle<BXVector<l1t::Jet>> bxvCaloJetsHandle;
0051 
0052   // Gen jet collections are only loaded and used if requested
0053   // (use_gen_jets == true)
0054   edm::EDGetTokenT<std::vector<reco::GenJet>> genJetsToken_;
0055   edm::Handle<std::vector<reco::GenJet>> genJetsHandle;
0056 
0057   bool debug;
0058 
0059   bool use_gen_jets;
0060 };
0061 
0062 L1CaloJetHTTProducer::L1CaloJetHTTProducer(const edm::ParameterSet& iConfig)
0063     : EtaMax(iConfig.getParameter<double>("EtaMax")),
0064       PtMin(iConfig.getParameter<double>("PtMin")),
0065       bxvCaloJetsToken_(consumes<BXVector<l1t::Jet>>(iConfig.getParameter<edm::InputTag>("BXVCaloJetsInputTag"))),
0066       genJetsToken_(consumes<std::vector<reco::GenJet>>(iConfig.getParameter<edm::InputTag>("genJets"))),
0067       debug(iConfig.getParameter<bool>("debug")),
0068       use_gen_jets(iConfig.getParameter<bool>("use_gen_jets"))
0069 
0070 {
0071   produces<float>("CaloJetHTT");
0072 }
0073 
0074 void L1CaloJetHTTProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0075   // Output collections
0076   std::unique_ptr<float> CaloJetHTT(new float);
0077 
0078   *CaloJetHTT = 0.;
0079 
0080   // CaloJet HTT for L1 collections
0081   if (!use_gen_jets) {
0082     iEvent.getByToken(bxvCaloJetsToken_, bxvCaloJetsHandle);
0083 
0084     if (bxvCaloJetsHandle.isValid()) {
0085       for (const auto& caloJet : *bxvCaloJetsHandle.product()) {
0086         if (caloJet.pt() < PtMin)
0087           continue;
0088         if (std::abs(caloJet.eta()) > EtaMax)
0089           continue;
0090         *CaloJetHTT += float(caloJet.pt());
0091       }
0092     }
0093 
0094     if (debug) {
0095       LogDebug("L1CaloJetHTTProducer") << " BXV L1CaloJetCollection JetHTT = " << *CaloJetHTT << " for PtMin " << PtMin
0096                                        << " and EtaMax " << EtaMax << "\n";
0097     }
0098   }
0099 
0100   // CaloJet HTT for gen jets
0101   if (use_gen_jets) {
0102     iEvent.getByToken(genJetsToken_, genJetsHandle);
0103 
0104     if (genJetsHandle.isValid()) {
0105       for (const auto& genJet : *genJetsHandle.product()) {
0106         if (genJet.pt() < PtMin)
0107           continue;
0108         if (std::abs(genJet.eta()) > EtaMax)
0109           continue;
0110         *CaloJetHTT += float(genJet.pt());
0111       }
0112     }
0113 
0114     if (debug) {
0115       LogDebug("L1CaloJetHTTProducer") << " Gen Jets HTT = " << *CaloJetHTT << " for PtMin " << PtMin << " and EtaMax "
0116                                        << EtaMax << "\n";
0117     }
0118   }
0119 
0120   iEvent.put(std::move(CaloJetHTT), "CaloJetHTT");
0121 }
0122 
0123 DEFINE_FWK_MODULE(L1CaloJetHTTProducer);