Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2022-05-03 02:53:40

0001 #include <string>
0002 #include <vector>
0003 #include <map>
0004 
0005 #include "FWCore/Utilities/interface/EDGetToken.h"
0006 #include "FWCore/Framework/interface/Frameworkfwd.h"
0007 #include "FWCore/Framework/interface/Event.h"
0008 #include "FWCore/Framework/interface/MakerMacros.h"
0009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0010 #include "FWCore/ServiceRegistry/interface/Service.h"
0011 #include "FWCore/Framework/interface/MakerMacros.h"
0012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0013 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0014 
0015 #include "DQMServices/Core/interface/DQMStore.h"
0016 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0017 #include "DQMOffline/Trigger/plugins/TriggerDQMBase.h"
0018 #include "CommonTools/TriggerUtils/interface/GenericTriggerEventFlag.h"
0019 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
0020 
0021 #include "DataFormats/METReco/interface/PFMET.h"
0022 #include "DataFormats/METReco/interface/PFMETCollection.h"
0023 #include "DataFormats/JetReco/interface/PFJet.h"
0024 #include "DataFormats/JetReco/interface/PFJetCollection.h"
0025 #include "DataFormats/MuonReco/interface/Muon.h"
0026 #include "DataFormats/MuonReco/interface/MuonFwd.h"
0027 #include "DataFormats/TrackReco/interface/Track.h"
0028 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0029 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0030 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
0031 
0032 class DiJetMonitor : public DQMEDAnalyzer, public TriggerDQMBase {
0033 public:
0034   typedef dqm::reco::MonitorElement MonitorElement;
0035   typedef dqm::reco::DQMStore DQMStore;
0036 
0037   DiJetMonitor(const edm::ParameterSet&);
0038   ~DiJetMonitor() throw() override;
0039   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0040 
0041 protected:
0042   void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
0043   void analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) override;
0044   bool dijet_selection(double eta_1,
0045                        double phi_1,
0046                        double eta_2,
0047                        double phi_2,
0048                        double pt_1,
0049                        double pt_2,
0050                        int& tag_id,
0051                        int& probe_id,
0052                        int Event);
0053 
0054 private:
0055   const std::string folderName_;
0056 
0057   const bool requireValidHLTPaths_;
0058   bool hltPathsAreValid_;
0059 
0060   edm::EDGetTokenT<reco::PFMETCollection> metToken_;
0061   edm::EDGetTokenT<reco::GsfElectronCollection> eleToken_;
0062   edm::EDGetTokenT<reco::MuonCollection> muoToken_;
0063   edm::EDGetTokenT<reco::PFJetCollection> dijetSrc_;  // test for Jet
0064 
0065   MEbinning dijetpt_binning_;
0066   MEbinning dijetptThr_binning_;
0067 
0068   ObjME jetpt1ME_;
0069   ObjME jetpt2ME_;
0070   ObjME jetPhi1ME_;
0071   ObjME jetPhi2ME_;
0072   ObjME jetEta1ME_;
0073   ObjME jetEta2ME_;
0074   ObjME jetphiTagME_;
0075   ObjME jetptAvgaME_;
0076   ObjME jetptAvgaThrME_;
0077   ObjME jetptAvgbME_;
0078   ObjME jetptTagME_;
0079   ObjME jetptPrbME_;
0080   ObjME jetptAsyME_;
0081   ObjME jetetaPrbME_;
0082   ObjME jetetaTagME_;
0083   ObjME jetphiPrbME_;
0084   ObjME jetAsyEtaME_;
0085   ObjME jetEtaPhiME_;
0086 
0087   std::unique_ptr<GenericTriggerEventFlag> num_genTriggerEventFlag_;
0088   std::unique_ptr<GenericTriggerEventFlag> den_genTriggerEventFlag_;
0089 
0090   int nmuons_;
0091   double ptcut_;
0092 
0093   // Define Phi Bin //
0094   const double DiJet_MAX_PHI = 3.2;
0095   // unsigned int DiJet_N_PHI = 64;
0096   unsigned int DiJet_N_PHI = 32;
0097   MEbinning dijet_phi_binning{DiJet_N_PHI, -DiJet_MAX_PHI, DiJet_MAX_PHI};
0098   // Define Eta Bin //
0099   const double DiJet_MAX_ETA = 5;
0100   //unsigned int DiJet_N_ETA = 50;
0101   unsigned int DiJet_N_ETA = 20;
0102   MEbinning dijet_eta_binning{DiJet_N_ETA, -DiJet_MAX_ETA, DiJet_MAX_ETA};
0103 
0104   const double MAX_asy = 1;
0105   const double MIN_asy = -1;
0106   //unsigned int N_asy = 100;
0107   unsigned int N_asy = 50;
0108   MEbinning asy_binning{N_asy, MIN_asy, MAX_asy};
0109 };
0110 
0111 DiJetMonitor::DiJetMonitor(const edm::ParameterSet& iConfig)
0112     : folderName_(iConfig.getParameter<std::string>("FolderName")),
0113       requireValidHLTPaths_(iConfig.getParameter<bool>("requireValidHLTPaths")),
0114       hltPathsAreValid_(false),
0115       dijetSrc_(mayConsume<reco::PFJetCollection>(iConfig.getParameter<edm::InputTag>("dijetSrc"))),
0116       dijetpt_binning_(getHistoPSet(
0117           iConfig.getParameter<edm::ParameterSet>("histoPSet").getParameter<edm::ParameterSet>("dijetPSet"))),
0118       dijetptThr_binning_(getHistoPSet(
0119           iConfig.getParameter<edm::ParameterSet>("histoPSet").getParameter<edm::ParameterSet>("dijetPtThrPSet"))),
0120       num_genTriggerEventFlag_(new GenericTriggerEventFlag(
0121           iConfig.getParameter<edm::ParameterSet>("numGenericTriggerEventPSet"), consumesCollector(), *this)),
0122       den_genTriggerEventFlag_(new GenericTriggerEventFlag(
0123           iConfig.getParameter<edm::ParameterSet>("denGenericTriggerEventPSet"), consumesCollector(), *this)),
0124       ptcut_(iConfig.getParameter<double>("ptcut")) {}
0125 
0126 DiJetMonitor::~DiJetMonitor() throw() {
0127   if (num_genTriggerEventFlag_) {
0128     num_genTriggerEventFlag_.reset();
0129   }
0130   if (den_genTriggerEventFlag_) {
0131     den_genTriggerEventFlag_.reset();
0132   }
0133 }
0134 
0135 void DiJetMonitor::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) {
0136   // Initialize the GenericTriggerEventFlag
0137   if (num_genTriggerEventFlag_ && num_genTriggerEventFlag_->on()) {
0138     num_genTriggerEventFlag_->initRun(iRun, iSetup);
0139   }
0140   if (den_genTriggerEventFlag_ && den_genTriggerEventFlag_->on()) {
0141     den_genTriggerEventFlag_->initRun(iRun, iSetup);
0142   }
0143 
0144   // check if every HLT path specified in numerator and denominator has a valid match in the HLT Menu
0145   hltPathsAreValid_ = (num_genTriggerEventFlag_ && den_genTriggerEventFlag_ && num_genTriggerEventFlag_->on() &&
0146                        den_genTriggerEventFlag_->on() && num_genTriggerEventFlag_->allHLTPathsAreValid() &&
0147                        den_genTriggerEventFlag_->allHLTPathsAreValid());
0148 
0149   // if valid HLT paths are required,
0150   // create DQM outputs only if all paths are valid
0151   if (requireValidHLTPaths_ and (not hltPathsAreValid_)) {
0152     return;
0153   }
0154 
0155   std::string histname, histtitle;
0156   std::string currentFolder = folderName_;
0157   ibooker.setCurrentFolder(currentFolder);
0158 
0159   histname = "jetpt1";
0160   histtitle = "leading Jet Pt";
0161   bookME(ibooker, jetpt1ME_, histname, histtitle, dijetpt_binning_.nbins, dijetpt_binning_.xmin, dijetpt_binning_.xmax);
0162   setMETitle(jetpt1ME_, "Pt_1 [GeV]", "events");
0163 
0164   histname = "jetpt2";
0165   histtitle = "second leading Jet Pt";
0166   bookME(ibooker, jetpt2ME_, histname, histtitle, dijetpt_binning_.nbins, dijetpt_binning_.xmin, dijetpt_binning_.xmax);
0167   setMETitle(jetpt2ME_, "Pt_2 [GeV]", "events");
0168 
0169   histname = "jetphi1";
0170   histtitle = "leading Jet Phi";
0171   bookME(
0172       ibooker, jetPhi1ME_, histname, histtitle, dijet_phi_binning.nbins, dijet_phi_binning.xmin, dijet_phi_binning.xmax);
0173   setMETitle(jetPhi1ME_, "Jet_Phi_1", "events");
0174 
0175   histname = "jetphi2";
0176   histtitle = "second leading Jet Phi";
0177   bookME(
0178       ibooker, jetPhi2ME_, histname, histtitle, dijet_phi_binning.nbins, dijet_phi_binning.xmin, dijet_phi_binning.xmax);
0179   setMETitle(jetPhi2ME_, "Jet_Phi_2", "events");
0180 
0181   histname = "jeteta1";
0182   histtitle = "leading Jet Eta";
0183   bookME(
0184       ibooker, jetEta1ME_, histname, histtitle, dijet_eta_binning.nbins, dijet_eta_binning.xmin, dijet_eta_binning.xmax);
0185   setMETitle(jetEta1ME_, "Jet_Eta_1", "events");
0186 
0187   histname = "jeteta2";
0188   histtitle = "second leading Jet Eta";
0189   bookME(
0190       ibooker, jetEta2ME_, histname, histtitle, dijet_eta_binning.nbins, dijet_eta_binning.xmin, dijet_eta_binning.xmax);
0191   setMETitle(jetEta2ME_, "Jet_Eta_2", "events");
0192 
0193   histname = "jetptAvgB";
0194   histtitle = "Pt average before offline selection";
0195   bookME(
0196       ibooker, jetptAvgbME_, histname, histtitle, dijetpt_binning_.nbins, dijetpt_binning_.xmin, dijetpt_binning_.xmax);
0197   setMETitle(jetptAvgbME_, "(pt_1 + pt_2)*0.5 [GeV]", "events");
0198 
0199   histname = "jetptAvgA";
0200   histtitle = "Pt average after offline selection";
0201   bookME(
0202       ibooker, jetptAvgaME_, histname, histtitle, dijetpt_binning_.nbins, dijetpt_binning_.xmin, dijetpt_binning_.xmax);
0203   setMETitle(jetptAvgaME_, "(pt_1 + pt_2)*0.5 [GeV]", "events");
0204 
0205   histname = "jetptAvgAThr";
0206   histtitle = "Pt average after offline selection";
0207   bookME(ibooker,
0208          jetptAvgaThrME_,
0209          histname,
0210          histtitle,
0211          dijetptThr_binning_.nbins,
0212          dijetptThr_binning_.xmin,
0213          dijetptThr_binning_.xmax);
0214   setMETitle(jetptAvgaThrME_, "(pt_1 + pt_2)*0.5 [GeV]", "events");
0215 
0216   histname = "jetptTag";
0217   histtitle = "Tag Jet Pt";
0218   bookME(
0219       ibooker, jetptTagME_, histname, histtitle, dijetpt_binning_.nbins, dijetpt_binning_.xmin, dijetpt_binning_.xmax);
0220   setMETitle(jetptTagME_, "Pt_tag [GeV]", "events ");
0221 
0222   histname = "jetptPrb";
0223   histtitle = "Probe Jet Pt";
0224   bookME(
0225       ibooker, jetptPrbME_, histname, histtitle, dijetpt_binning_.nbins, dijetpt_binning_.xmin, dijetpt_binning_.xmax);
0226   setMETitle(jetptPrbME_, "Pt_prb [GeV]", "events");
0227 
0228   histname = "jetptAsym";
0229   histtitle = "Jet Pt Asymetry";
0230   bookME(ibooker, jetptAsyME_, histname, histtitle, asy_binning.nbins, asy_binning.xmin, asy_binning.xmax);
0231   setMETitle(jetptAsyME_, "(pt_prb - pt_tag)/(pt_prb + pt_tag)", "events");
0232 
0233   histname = "jetetaPrb";
0234   histtitle = "Probe Jet eta";
0235   bookME(ibooker,
0236          jetetaPrbME_,
0237          histname,
0238          histtitle,
0239          dijet_eta_binning.nbins,
0240          dijet_eta_binning.xmin,
0241          dijet_eta_binning.xmax);
0242   setMETitle(jetetaPrbME_, "Eta_probe #eta", "events");
0243 
0244   histname = "jetetaTag";
0245   histtitle = "Tag Jet eta";
0246   bookME(ibooker,
0247          jetetaTagME_,
0248          histname,
0249          histtitle,
0250          dijet_eta_binning.nbins,
0251          dijet_eta_binning.xmin,
0252          dijet_eta_binning.xmax);
0253   setMETitle(jetetaTagME_, "Eta_tag #eta", "events");
0254 
0255   histname = "ptAsymVSetaPrb";
0256   histtitle = "Pt_Asym vs eta_prb";
0257   bookME(ibooker,
0258          jetAsyEtaME_,
0259          histname,
0260          histtitle,
0261          asy_binning.nbins,
0262          asy_binning.xmin,
0263          asy_binning.xmax,
0264          dijet_eta_binning.nbins,
0265          dijet_eta_binning.xmin,
0266          dijet_eta_binning.xmax);
0267   setMETitle(jetAsyEtaME_, "(pt_prb - pt_tag)/(pt_prb + pt_tag)", "Eta_probe #eta");
0268 
0269   histname = "etaPrbVSphiPrb";
0270   histtitle = "eta_prb vs phi_prb";
0271   bookME(ibooker,
0272          jetEtaPhiME_,
0273          histname,
0274          histtitle,
0275          dijet_eta_binning.nbins,
0276          dijet_eta_binning.xmin,
0277          dijet_eta_binning.xmax,
0278          dijet_phi_binning.nbins,
0279          dijet_phi_binning.xmin,
0280          dijet_phi_binning.xmax);
0281   setMETitle(jetEtaPhiME_, "Eta_probe #eta", "Phi_probe #phi");
0282 
0283   histname = "jetphiPrb";
0284   histtitle = "Probe Jet phi";
0285   bookME(ibooker,
0286          jetphiPrbME_,
0287          histname,
0288          histtitle,
0289          dijet_phi_binning.nbins,
0290          dijet_phi_binning.xmin,
0291          dijet_phi_binning.xmax);
0292   setMETitle(jetphiPrbME_, "Phi_probe #phi", "events");
0293 
0294   histname = "jetphiTag";
0295   histtitle = "Tag Jet phi";
0296   bookME(ibooker,
0297          jetphiTagME_,
0298          histname,
0299          histtitle,
0300          dijet_phi_binning.nbins,
0301          dijet_phi_binning.xmin,
0302          dijet_phi_binning.xmax);
0303   setMETitle(jetphiTagME_, "Phi_tag #phi", "events");
0304 }
0305 
0306 void DiJetMonitor::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) {
0307   // if valid HLT paths are required,
0308   // analyze event only if all paths are valid
0309   if (requireValidHLTPaths_ and (not hltPathsAreValid_)) {
0310     return;
0311   }
0312 
0313   // Filter out events if Trigger Filtering is requested
0314   if (den_genTriggerEventFlag_->on() && !den_genTriggerEventFlag_->accept(iEvent, iSetup))
0315     return;
0316 
0317   std::vector<double> v_jetpt;
0318   std::vector<double> v_jeteta;
0319   std::vector<double> v_jetphi;
0320 
0321   v_jetpt.clear();
0322   v_jeteta.clear();
0323   v_jetphi.clear();
0324 
0325   edm::Handle<reco::PFJetCollection> offjets;
0326   iEvent.getByToken(dijetSrc_, offjets);
0327   if (!offjets.isValid()) {
0328     edm::LogWarning("DiJetMonitor") << "DiJet handle not valid \n";
0329     return;
0330   }
0331   for (reco::PFJetCollection::const_iterator ibegin = offjets->begin(), iend = offjets->end(), ijet = ibegin;
0332        ijet != iend;
0333        ++ijet) {
0334     if (ijet->pt() < ptcut_) {
0335       continue;
0336     }
0337     v_jetpt.push_back(ijet->pt());
0338     v_jeteta.push_back(ijet->eta());
0339     v_jetphi.push_back(ijet->phi());
0340   }
0341   if (v_jetpt.size() < 2) {
0342     return;
0343   }
0344   double pt_1 = v_jetpt[0];
0345   double eta_1 = v_jeteta[0];
0346   double phi_1 = v_jetphi[0];
0347   double pt_2 = v_jetpt[1];
0348   double eta_2 = v_jeteta[1];
0349   double phi_2 = v_jetphi[1];
0350   double pt_avg_b = (pt_1 + pt_2) * 0.5;
0351   int tag_id = -999, probe_id = -999;
0352 
0353   jetpt1ME_.denominator->Fill(pt_1);
0354   jetpt2ME_.denominator->Fill(pt_2);
0355   jetPhi1ME_.denominator->Fill(phi_1);
0356   jetPhi2ME_.denominator->Fill(phi_2);
0357   jetEta1ME_.denominator->Fill(eta_1);
0358   jetEta2ME_.denominator->Fill(eta_2);
0359   jetptAvgbME_.denominator->Fill(pt_avg_b);
0360 
0361   if (dijet_selection(eta_1, phi_1, eta_2, phi_2, pt_1, pt_2, tag_id, probe_id, iEvent.id().event())) {
0362     if (tag_id == 0 && probe_id == 1) {
0363       double pt_asy = (pt_2 - pt_1) / (pt_1 + pt_2);
0364       double pt_avg = (pt_1 + pt_2) * 0.5;
0365       jetptAvgaME_.denominator->Fill(pt_avg);
0366       jetptAvgaThrME_.denominator->Fill(pt_avg);
0367       jetptTagME_.denominator->Fill(pt_1);
0368       jetptPrbME_.denominator->Fill(pt_2);
0369       jetetaPrbME_.denominator->Fill(eta_2);
0370       jetetaTagME_.denominator->Fill(eta_1);
0371       jetptAsyME_.denominator->Fill(pt_asy);
0372       jetphiPrbME_.denominator->Fill(phi_2);
0373       jetphiTagME_.denominator->Fill(phi_1);
0374       jetAsyEtaME_.denominator->Fill(pt_asy, eta_2);
0375       jetEtaPhiME_.denominator->Fill(eta_2, phi_2);
0376     }
0377     if (tag_id == 1 && probe_id == 0) {
0378       double pt_asy = (pt_1 - pt_2) / (pt_2 + pt_1);
0379       double pt_avg = (pt_2 + pt_1) * 0.5;
0380       jetptAvgaME_.denominator->Fill(pt_avg);
0381       jetptAvgaThrME_.denominator->Fill(pt_avg);
0382       jetptTagME_.denominator->Fill(pt_2);
0383       jetptPrbME_.denominator->Fill(pt_1);
0384       jetetaPrbME_.denominator->Fill(eta_1);
0385       jetetaTagME_.denominator->Fill(eta_2);
0386       jetptAsyME_.denominator->Fill(pt_asy);
0387       jetphiPrbME_.denominator->Fill(phi_1);
0388       jetphiTagME_.denominator->Fill(phi_2);
0389       jetAsyEtaME_.denominator->Fill(pt_asy, eta_1);
0390       jetEtaPhiME_.denominator->Fill(eta_1, phi_1);
0391     }
0392 
0393     if (num_genTriggerEventFlag_->on() && !num_genTriggerEventFlag_->accept(iEvent, iSetup))
0394       return;
0395 
0396     jetpt1ME_.numerator->Fill(pt_1);
0397     jetpt2ME_.numerator->Fill(pt_2);
0398     jetPhi1ME_.numerator->Fill(phi_1);
0399     jetPhi2ME_.numerator->Fill(phi_2);
0400     jetEta1ME_.numerator->Fill(eta_1);
0401     jetEta2ME_.numerator->Fill(eta_2);
0402     jetptAvgbME_.numerator->Fill(pt_avg_b);
0403 
0404     if (tag_id == 0 && probe_id == 1) {
0405       double pt_asy = (pt_2 - pt_1) / (pt_1 + pt_2);
0406       double pt_avg = (pt_1 + pt_2) * 0.5;
0407       jetptAvgaME_.numerator->Fill(pt_avg);
0408       jetptAvgaThrME_.numerator->Fill(pt_avg);
0409       jetptTagME_.numerator->Fill(pt_1);
0410       jetptPrbME_.numerator->Fill(pt_2);
0411       jetetaPrbME_.numerator->Fill(eta_2);
0412       jetetaTagME_.numerator->Fill(eta_1);
0413       jetptAsyME_.numerator->Fill(pt_asy);
0414       jetphiPrbME_.numerator->Fill(phi_2);
0415       jetphiTagME_.numerator->Fill(phi_1);
0416       jetAsyEtaME_.numerator->Fill(pt_asy, eta_2);
0417       jetEtaPhiME_.numerator->Fill(eta_2, phi_2);
0418     }
0419     if (tag_id == 1 && probe_id == 0) {
0420       double pt_asy = (pt_1 - pt_2) / (pt_2 + pt_1);
0421       double pt_avg = (pt_2 + pt_1) * 0.5;
0422       jetptAvgaME_.numerator->Fill(pt_avg);
0423       jetptAvgaThrME_.numerator->Fill(pt_avg);
0424       jetptTagME_.numerator->Fill(pt_2);
0425       jetptPrbME_.numerator->Fill(pt_1);
0426       jetetaPrbME_.numerator->Fill(eta_1);
0427       jetetaTagME_.numerator->Fill(eta_2);
0428       jetptAsyME_.numerator->Fill(pt_asy);
0429       jetphiPrbME_.numerator->Fill(phi_1);
0430       jetphiTagME_.numerator->Fill(phi_2);
0431       jetAsyEtaME_.numerator->Fill(pt_asy, eta_1);
0432       jetEtaPhiME_.numerator->Fill(eta_1, phi_1);
0433     }
0434   }
0435 }
0436 
0437 //---- Additional DiJet offline selection------
0438 bool DiJetMonitor::dijet_selection(double eta_1,
0439                                    double phi_1,
0440                                    double eta_2,
0441                                    double phi_2,
0442                                    double pt_1,
0443                                    double pt_2,
0444                                    int& tag_id,
0445                                    int& probe_id,
0446                                    int Event) {
0447   double etacut = 1.7;
0448   double phicut = 2.7;
0449 
0450   bool passeta = (std::abs(eta_1) < etacut || std::abs(eta_2) < etacut);  //check that one of the jets in the barrel
0451 
0452   float delta_phi_1_2 = (phi_1 - phi_2);
0453   bool other_cuts = (std::abs(delta_phi_1_2) >= phicut);  //check that jets are back to back
0454 
0455   if (std::abs(eta_1) < etacut && std::abs(eta_2) > etacut) {
0456     tag_id = 0;
0457     probe_id = 1;
0458   } else if (std::abs(eta_2) < etacut && std::abs(eta_1) > etacut) {
0459     tag_id = 1;
0460     probe_id = 0;
0461   } else if (std::abs(eta_2) < etacut && std::abs(eta_1) < etacut) {
0462     int numb = Event % 2;
0463     if (numb == 0) {
0464       tag_id = 0;
0465       probe_id = 1;
0466     }
0467     if (numb == 1) {
0468       tag_id = 1;
0469       probe_id = 0;
0470     }
0471   }
0472 
0473   return (passeta && other_cuts);
0474 }
0475 
0476 void DiJetMonitor::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0477   edm::ParameterSetDescription desc;
0478   desc.add<std::string>("FolderName", "HLT/JME/Jets/AK4/PF");
0479   desc.add<bool>("requireValidHLTPaths", true);
0480 
0481   desc.add<edm::InputTag>("met", edm::InputTag("pfMet"));
0482   desc.add<edm::InputTag>("dijetSrc", edm::InputTag("ak4PFJets"));
0483   desc.add<edm::InputTag>("electrons", edm::InputTag("gedGsfElectrons"));
0484   desc.add<edm::InputTag>("muons", edm::InputTag("muons"));
0485   desc.add<int>("njets", 0);
0486   desc.add<int>("nelectrons", 0);
0487   desc.add<double>("ptcut", 20);
0488 
0489   edm::ParameterSetDescription genericTriggerEventPSet;
0490   GenericTriggerEventFlag::fillPSetDescription(genericTriggerEventPSet);
0491 
0492   desc.add<edm::ParameterSetDescription>("numGenericTriggerEventPSet", genericTriggerEventPSet);
0493   desc.add<edm::ParameterSetDescription>("denGenericTriggerEventPSet", genericTriggerEventPSet);
0494 
0495   edm::ParameterSetDescription histoPSet;
0496   edm::ParameterSetDescription dijetPSet;
0497   edm::ParameterSetDescription dijetPtThrPSet;
0498   fillHistoPSetDescription(dijetPSet);
0499   fillHistoPSetDescription(dijetPtThrPSet);
0500   histoPSet.add<edm::ParameterSetDescription>("dijetPSet", dijetPSet);
0501   histoPSet.add<edm::ParameterSetDescription>("dijetPtThrPSet", dijetPtThrPSet);
0502   std::vector<double> bins = {
0503       0.,   20.,  40.,  60.,  80.,  90.,  100., 110., 120., 130., 140., 150., 160.,
0504       170., 180., 190., 200., 220., 240., 260., 280., 300., 350., 400., 450., 1000.};  // DiJet pT Binning
0505   histoPSet.add<std::vector<double> >("jetptBinning", bins);
0506 
0507   edm::ParameterSetDescription lsPSet;
0508   fillHistoLSPSetDescription(lsPSet);
0509   histoPSet.add<edm::ParameterSetDescription>("lsPSet", lsPSet);
0510   desc.add<edm::ParameterSetDescription>("histoPSet", histoPSet);
0511 
0512   descriptions.add("dijetMonitoring", desc);
0513 }
0514 
0515 DEFINE_FWK_MODULE(DiJetMonitor);