diff --git a/Configuration/StandardSequences/python/Harvesting_cff.py b/Configuration/StandardSequences/python/Harvesting_cff.py index 98cde621b0d63..684b6461e5ff9 100644 --- a/Configuration/StandardSequences/python/Harvesting_cff.py +++ b/Configuration/StandardSequences/python/Harvesting_cff.py @@ -9,6 +9,8 @@ from FastSimulation.Configuration.Harvesting_cff import * from Validation.RecoHI.HarvestingHI_cff import * +from Validation.RecoJets.JetPostProcessor_cff import * +from Validation.RecoMET.METPostProcessor_cff import * dqmHarvesting = cms.Path(DQMOffline_SecondStep*DQMOffline_Certification) @@ -31,4 +33,4 @@ alcaHarvesting = cms.Path() -validationHarvestingMiniAOD = cms.Path() +validationHarvestingMiniAOD = cms.Path(JetPostProcessor*METPostProcessorHarvesting) diff --git a/Configuration/StandardSequences/python/Validation_cff.py b/Configuration/StandardSequences/python/Validation_cff.py index 86498c6d4db0c..ed454fc81e836 100644 --- a/Configuration/StandardSequences/python/Validation_cff.py +++ b/Configuration/StandardSequences/python/Validation_cff.py @@ -31,7 +31,7 @@ prevalidation = cms.Sequence( globalPrevalidation * hltassociation * metPreValidSeq * jetPreValidSeq ) prevalidationLiteTracking = cms.Sequence( prevalidation ) prevalidationLiteTracking.replace(globalPrevalidation,globalPrevalidationLiteTracking) -prevalidationMiniAOD = cms.Sequence( genParticles1 * miniAODValidationSequence ) +prevalidationMiniAOD = cms.Sequence( genParticles1 * miniAODValidationSequence) validation = cms.Sequence(cms.SequencePlaceholder("mix") @@ -46,7 +46,7 @@ validationLiteTracking.replace(globalValidation,globalValidationLiteTracking) validationLiteTracking.remove(condDataValidation) -validationMiniAOD = cms.Sequence( ) +validationMiniAOD = cms.Sequence(JetValidationMiniAOD*METValidationMiniAOD) prevalidation_preprod = cms.Sequence( preprodPrevalidation ) diff --git a/Validation/Configuration/python/postValidation_cff.py b/Validation/Configuration/python/postValidation_cff.py index fef753ed9ed8a..636e5d6541a31 100644 --- a/Validation/Configuration/python/postValidation_cff.py +++ b/Validation/Configuration/python/postValidation_cff.py @@ -15,6 +15,7 @@ from Validation.RecoTau.DQMMCValidation_cfi import * from Validation.RecoEgamma.photonFastSimPostProcessor_cff import * from Validation.RecoVertex.PrimaryVertexAnalyzer4PUSlimmed_Client_cfi import * +from Validation.RecoMET.METPostProcessor_cff import * from DQMOffline.RecoB.dqmCollector_cff import * @@ -32,6 +33,7 @@ + rpcRecHitPostValidation_step + runTauEff + makeBetterPlots + bTagCollectorSequenceMCbcl + + METPostProcessor ) postValidation_preprod = cms.Sequence( diff --git a/Validation/RecoJets/plugins/JetTester.cc b/Validation/RecoJets/plugins/JetTester.cc index 6440f013441f5..341d60b36a860 100644 --- a/Validation/RecoJets/plugins/JetTester.cc +++ b/Validation/RecoJets/plugins/JetTester.cc @@ -68,6 +68,9 @@ JetTester::JetTester(const edm::ParameterSet& iConfig) : mPtCorrOverReco_Eta_200_600 = 0; mPtCorrOverReco_Eta_600_1500 = 0; mPtCorrOverReco_Eta_1500_3500 = 0; + mPtCorrOverReco_Eta_3500_5000 = 0; + mPtCorrOverReco_Eta_5000_6500 = 0; + mPtCorrOverReco_Eta_3500 = 0; mPtCorrOverGen_GenPt_B = 0; mPtCorrOverGen_GenPt_E = 0; mPtCorrOverGen_GenPt_F = 0; @@ -76,6 +79,9 @@ JetTester::JetTester(const edm::ParameterSet& iConfig) : mPtCorrOverGen_GenEta_200_600 = 0; mPtCorrOverGen_GenEta_600_1500 = 0; mPtCorrOverGen_GenEta_1500_3500 = 0; + mPtCorrOverGen_GenEta_3500_5000 = 0; + mPtCorrOverGen_GenEta_5000_6500 = 0; + mPtCorrOverGen_GenEta_3500 = 0; // Generation mGenEta = 0; @@ -103,6 +109,13 @@ JetTester::JetTester(const edm::ParameterSet& iConfig) : mPtRecoOverGen_B_1500_3500 = 0; mPtRecoOverGen_E_1500_3500 = 0; mPtRecoOverGen_F_1500_3500 = 0; + mPtRecoOverGen_B_3500_5000 = 0; + mPtRecoOverGen_E_3500_5000 = 0; + mPtRecoOverGen_B_5000_6500 = 0; + mPtRecoOverGen_E_5000_6500 = 0; + mPtRecoOverGen_B_3500 = 0; + mPtRecoOverGen_E_3500 = 0; + mPtRecoOverGen_F_3500 = 0; // Generation profiles mPtRecoOverGen_GenPt_B = 0; @@ -116,6 +129,9 @@ JetTester::JetTester(const edm::ParameterSet& iConfig) : mPtRecoOverGen_GenEta_200_600 = 0; mPtRecoOverGen_GenEta_600_1500 = 0; mPtRecoOverGen_GenEta_1500_3500 = 0; + mPtRecoOverGen_GenEta_3500_5000 = 0; + mPtRecoOverGen_GenEta_5000_6500 = 0; + mPtRecoOverGen_GenEta_3500 = 0; // Some jet algebra mEtaFirst = 0; @@ -249,6 +265,7 @@ void JetTester::bookHistograms(DQMStore::IBooker & ibooker, double log10PtMax = 3.75; int log10PtBins = 26; + //if eta range changed here need change in JetTesterPostProcessor as well double etaRange[91] = {-6.0, -5.8, -5.6, -5.4, -5.2, -5.0, -4.8, -4.6, -4.4, -4.2, -4.0, -3.8, -3.6, -3.4, -3.2, -3.0, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2.0, -1.9, -1.8, -1.7, -1.6, @@ -291,16 +308,22 @@ void JetTester::bookHistograms(DQMStore::IBooker & ibooker, mPtCorrOverReco_Eta_200_600 = ibooker.bookProfile("PtCorrOverReco_Eta_200_600", "2003500", 90, etaRange, 0, 5, " "); mPtCorrOverGen_GenPt_B = ibooker.bookProfile("PtCorrOverGen_GenPt_B", "0<|eta|<1.5", log10PtBins, log10PtMin, log10PtMax, 0.8, 1.2, " "); mPtCorrOverGen_GenPt_E = ibooker.bookProfile("PtCorrOverGen_GenPt_E", "1.5<|eta|<3", log10PtBins, log10PtMin, log10PtMax, 0.8, 1.2, " "); mPtCorrOverGen_GenPt_F = ibooker.bookProfile("PtCorrOverGen_GenPt_F", "3<|eta|<6", log10PtBins, log10PtMin, log10PtMax, 0.8, 1.2, " "); - + //if eta range changed here need change in JetTesterPostProcessor as well mPtCorrOverGen_GenEta_20_40 = ibooker.bookProfile("PtCorrOverGen_GenEta_20_40", "203500;#eta", 90, etaRange, 0.8, 1.2, " "); } mGenEta = ibooker.book1D("GenEta", "GenEta", 120, -6, 6); @@ -328,6 +351,13 @@ void JetTester::bookHistograms(DQMStore::IBooker & ibooker, mPtRecoOverGen_B_1500_3500 = ibooker.book1D("PtRecoOverGen_B_1500_3500", "15003500", 90, 0, 2); + mPtRecoOverGen_E_3500 = ibooker.book1D("PtRecoOverGen_E_3500", "genpt>3500", 90, 0, 2); + mPtRecoOverGen_F_3500 = ibooker.book1D("PtRecoOverGen_F_3500", "genpt>3500", 90, 0, 2); // Generation profiles mPtRecoOverGen_GenPt_B = ibooker.bookProfile("PtRecoOverGen_GenPt_B", "0<|eta|<1.5", log10PtBins, log10PtMin, log10PtMax, 0, 2, " "); @@ -336,12 +366,16 @@ void JetTester::bookHistograms(DQMStore::IBooker & ibooker, mPtRecoOverGen_GenPhi_B = ibooker.bookProfile("PtRecoOverGen_GenPhi_B", "0<|eta|<1.5", 70, -3.5, 3.5, 0, 2, " "); mPtRecoOverGen_GenPhi_E = ibooker.bookProfile("PtRecoOverGen_GenPhi_E", "1.5<|eta|<3", 70, -3.5, 3.5, 0, 2, " "); mPtRecoOverGen_GenPhi_F = ibooker.bookProfile("PtRecoOverGen_GenPhi_F", "3<|eta|<6", 70, -3.5, 3.5, 0, 2, " "); + //if eta range changed here need change in JetTesterPostProcessor as well mPtRecoOverGen_GenEta_20_40 = ibooker.bookProfile("PtRecoOverGen_GenEta_20_40", "203500", 90, etaRange, 0, 2, " "); + // Some jet algebra //------------------------------------------------------------------------ mEtaFirst = ibooker.book1D("EtaFirst", "EtaFirst", 120, -6, 6); @@ -785,6 +819,9 @@ void JetTester::analyze(const edm::Event& mEvent, const edm::EventSetup& mSetup) else if (ijetPt < 600) mPtCorrOverReco_Eta_200_600 ->Fill(ijetEta, ratio); else if (ijetPt < 1500) mPtCorrOverReco_Eta_600_1500 ->Fill(ijetEta, ratio); else if (ijetPt < 3500) mPtCorrOverReco_Eta_1500_3500->Fill(ijetEta, ratio); + else if (ijetPt < 5000) mPtCorrOverReco_Eta_3500_5000->Fill(ijetEta, ratio); + else if (ijetPt < 6500) mPtCorrOverReco_Eta_5000_6500->Fill(ijetEta, ratio); + if (ijetPt > 3500) mPtCorrOverReco_Eta_3500->Fill(ijetEta, ratio); } } @@ -873,6 +910,9 @@ void JetTester::analyze(const edm::Event& mEvent, const edm::EventSetup& mSetup) else if (gjet->pt() < 600) mPtCorrOverGen_GenEta_200_600 ->Fill(gjet->eta(), response); else if (gjet->pt() < 1500) mPtCorrOverGen_GenEta_600_1500 ->Fill(gjet->eta(), response); else if (gjet->pt() < 3500) mPtCorrOverGen_GenEta_1500_3500->Fill(gjet->eta(), response); + else if (gjet->pt() < 5000) mPtCorrOverGen_GenEta_3500_5000->Fill(gjet->eta(), response); + else if (gjet->pt() < 6500) mPtCorrOverGen_GenEta_5000_6500->Fill(gjet->eta(), response); + if (gjet->pt() > 3500) mPtCorrOverGen_GenEta_3500->Fill(gjet->eta(), response); } } } @@ -908,6 +948,9 @@ void JetTester::fillMatchHists(const double GenEta, else if (GenPt < 600) mPtRecoOverGen_B_200_600 ->Fill(RecoPt / GenPt); else if (GenPt < 1500) mPtRecoOverGen_B_600_1500 ->Fill(RecoPt / GenPt); else if (GenPt < 3500) mPtRecoOverGen_B_1500_3500->Fill(RecoPt / GenPt); + else if (GenPt < 5000) mPtRecoOverGen_B_3500_5000->Fill(RecoPt / GenPt); + else if (GenPt < 6500) mPtRecoOverGen_B_5000_6500->Fill(RecoPt / GenPt); + if (GenPt>3500) mPtRecoOverGen_B_3500->Fill(RecoPt / GenPt); } else if (fabs(GenEta) < 3.0) { @@ -919,6 +962,9 @@ void JetTester::fillMatchHists(const double GenEta, else if (GenPt < 600) mPtRecoOverGen_E_200_600 ->Fill(RecoPt / GenPt); else if (GenPt < 1500) mPtRecoOverGen_E_600_1500 ->Fill(RecoPt / GenPt); else if (GenPt < 3500) mPtRecoOverGen_E_1500_3500->Fill(RecoPt / GenPt); + else if (GenPt < 5000) mPtRecoOverGen_E_3500_5000->Fill(RecoPt / GenPt); + else if (GenPt < 6500) mPtRecoOverGen_E_5000_6500->Fill(RecoPt / GenPt); + if (GenPt>3500) mPtRecoOverGen_E_3500->Fill(RecoPt / GenPt); } else if (fabs(GenEta) < 6.0) { @@ -930,6 +976,7 @@ void JetTester::fillMatchHists(const double GenEta, else if (GenPt < 600) mPtRecoOverGen_F_200_600 ->Fill(RecoPt / GenPt); else if (GenPt < 1500) mPtRecoOverGen_F_600_1500 ->Fill(RecoPt / GenPt); else if (GenPt < 3500) mPtRecoOverGen_F_1500_3500->Fill(RecoPt / GenPt); + if (GenPt>3500) mPtRecoOverGen_F_3500->Fill(RecoPt / GenPt); } if (GenPt > 20 && GenPt < 40) mPtRecoOverGen_GenEta_20_40 ->Fill(GenEta, RecoPt / GenPt); @@ -937,4 +984,7 @@ void JetTester::fillMatchHists(const double GenEta, else if (GenPt < 600) mPtRecoOverGen_GenEta_200_600 ->Fill(GenEta, RecoPt / GenPt); else if (GenPt < 1500) mPtRecoOverGen_GenEta_600_1500 ->Fill(GenEta, RecoPt / GenPt); else if (GenPt < 3500) mPtRecoOverGen_GenEta_1500_3500->Fill(GenEta, RecoPt / GenPt); + else if (GenPt < 5000) mPtRecoOverGen_GenEta_3500_5000->Fill(GenEta, RecoPt / GenPt); + else if (GenPt < 6500) mPtRecoOverGen_GenEta_5000_6500->Fill(GenEta, RecoPt / GenPt); + if (GenPt > 3500) mPtRecoOverGen_GenEta_3500->Fill(GenEta, RecoPt / GenPt); } diff --git a/Validation/RecoJets/plugins/JetTester.h b/Validation/RecoJets/plugins/JetTester.h index de3bd2104d985..f2a28950ce438 100644 --- a/Validation/RecoJets/plugins/JetTester.h +++ b/Validation/RecoJets/plugins/JetTester.h @@ -97,6 +97,9 @@ class JetTester : public DQMEDAnalyzer { MonitorElement* mPtCorrOverReco_Eta_200_600; MonitorElement* mPtCorrOverReco_Eta_600_1500; MonitorElement* mPtCorrOverReco_Eta_1500_3500; + MonitorElement* mPtCorrOverReco_Eta_3500_5000; + MonitorElement* mPtCorrOverReco_Eta_5000_6500; + MonitorElement* mPtCorrOverReco_Eta_3500; MonitorElement* mPtCorrOverGen_GenPt_B; MonitorElement* mPtCorrOverGen_GenPt_E; MonitorElement* mPtCorrOverGen_GenPt_F; @@ -105,6 +108,9 @@ class JetTester : public DQMEDAnalyzer { MonitorElement* mPtCorrOverGen_GenEta_200_600; MonitorElement* mPtCorrOverGen_GenEta_600_1500; MonitorElement* mPtCorrOverGen_GenEta_1500_3500; + MonitorElement* mPtCorrOverGen_GenEta_3500_5000; + MonitorElement* mPtCorrOverGen_GenEta_5000_6500; + MonitorElement* mPtCorrOverGen_GenEta_3500; // Generation MonitorElement* mGenEta; @@ -133,6 +139,14 @@ class JetTester : public DQMEDAnalyzer { MonitorElement* mPtRecoOverGen_E_1500_3500; MonitorElement* mPtRecoOverGen_F_1500_3500; + MonitorElement* mPtRecoOverGen_B_3500_5000; + MonitorElement* mPtRecoOverGen_E_3500_5000; + MonitorElement* mPtRecoOverGen_B_5000_6500; + MonitorElement* mPtRecoOverGen_E_5000_6500; + MonitorElement* mPtRecoOverGen_B_3500; + MonitorElement* mPtRecoOverGen_E_3500; + MonitorElement* mPtRecoOverGen_F_3500; + // Generation profiles MonitorElement* mPtRecoOverGen_GenPt_B; MonitorElement* mPtRecoOverGen_GenPt_E; @@ -145,6 +159,10 @@ class JetTester : public DQMEDAnalyzer { MonitorElement* mPtRecoOverGen_GenEta_200_600; MonitorElement* mPtRecoOverGen_GenEta_600_1500; MonitorElement* mPtRecoOverGen_GenEta_1500_3500; + MonitorElement* mPtRecoOverGen_GenEta_3500_5000; + MonitorElement* mPtRecoOverGen_GenEta_5000_6500; + MonitorElement* mPtRecoOverGen_GenEta_3500; + // Some jet algebra MonitorElement* mEtaFirst; diff --git a/Validation/RecoJets/plugins/JetTesterPostProcessor.cc b/Validation/RecoJets/plugins/JetTesterPostProcessor.cc new file mode 100644 index 0000000000000..e2e0fff921a50 --- /dev/null +++ b/Validation/RecoJets/plugins/JetTesterPostProcessor.cc @@ -0,0 +1,256 @@ +// -*- C++ -*- +// +// Package: Validation/RecoMET +// Class: METTesterPostProcessor +// +// Original Author: "Matthias Weber" +// Created: Sun Feb 22 14:35:25 CET 2015 +// + +#include "Validation/RecoJets/plugins/JetTesterPostProcessor.h" +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/Framework/interface/Run.h" + +// Some switches +// +// constructors and destructor +// +JetTesterPostProcessor::JetTesterPostProcessor(const edm::ParameterSet& iConfig) +{ + inputJetLabelRECO_=iConfig.getParameter("JetTypeRECO"); + inputJetLabelMiniAOD_=iConfig.getParameter("JetTypeMiniAOD"); +} + + +JetTesterPostProcessor::~JetTesterPostProcessor() +{ +} + + +// ------------ method called right after a run ends ------------ +void +JetTesterPostProcessor::dqmEndJob(DQMStore::IBooker& ibook_, DQMStore::IGetter& iget_) +{ + std::vector subDirVec; + std::string RunDir="JetMET/JetValidation/"; + iget_.setCurrentFolder(RunDir); + jet_dirs=iget_.getSubdirs(); + bool found_reco_dir=false; + bool found_miniaod_dir=false; + //loop over jet subdirectories + for (int i=0; i(rundir_reco+"/"+"Pt" ,mPt_Reco)); + map_of_MEs.insert(std::pair(rundir_reco+"/"+"Phi" ,mPhi_Reco)); + map_of_MEs.insert(std::pair(rundir_reco+"/"+"Eta" ,mEta_Reco)); + map_of_MEs.insert(std::pair(rundir_reco+"/"+"CorrJetPt" ,mCorrJetPt_Reco)); + map_of_MEs.insert(std::pair(rundir_reco+"/"+"CorrJetPhi" ,mCorrJetPhi_Reco)); + map_of_MEs.insert(std::pair(rundir_reco+"/"+"CorrJetEta" ,mCorrJetEta_Reco)); + */ + MonitorElement* mPtCorrOverReco_Eta_20_40_Reco=iget_.get(rundir_reco+"/"+"PtCorrOverReco_Eta_20_40"); + MonitorElement* mPtCorrOverReco_Eta_200_600_Reco=iget_.get(rundir_reco+"/"+"PtCorrOverReco_Eta_200_600"); + MonitorElement* mPtCorrOverReco_Eta_1500_3500_Reco=iget_.get(rundir_reco+"/"+"PtCorrOverReco_Eta_1500_3500"); + MonitorElement* mPtCorrOverGen_GenEta_40_200_Reco=iget_.get(rundir_reco+"/"+"PtCorrOverGen_GenEta_40_200"); + MonitorElement* mPtCorrOverGen_GenEta_600_1500_Reco=iget_.get(rundir_reco+"/"+"PtCorrOverGen_GenEta_600_1500"); + MonitorElement* mDeltaEta_Reco=iget_.get(rundir_reco+"/"+"DeltaEta"); + MonitorElement* mDeltaPhi_Reco=iget_.get(rundir_reco+"/"+"DeltaPhi"); + MonitorElement* mDeltaPt_Reco=iget_.get(rundir_reco+"/"+"DeltaPt"); + MonitorElement* mMjj_Reco=iget_.get(rundir_reco+"/"+"Mjj"); + MonitorElement* mNJets40_Reco=iget_.get(rundir_reco+"/"+"NJets"); + MonitorElement* mchargedHadronMultiplicity_Reco=iget_.get(rundir_reco+"/"+"chargedHadronMultiplicity"); + MonitorElement* mneutralHadronMultiplicity_Reco=iget_.get(rundir_reco+"/"+"neutralHadronMultiplicity"); + MonitorElement* mphotonMultiplicity_Reco=iget_.get(rundir_reco+"/"+"photonMultiplicity"); + MonitorElement* mphotonEnergyFraction_Reco=iget_.get(rundir_reco+"/"+"photonEnergyFraction"); + MonitorElement* mneutralHadronEnergyFraction_Reco=iget_.get(rundir_reco+"/"+"neutralHadronEnergyFraction"); + MonitorElement* mchargedHadronEnergyFraction_Reco=iget_.get(rundir_reco+"/"+"chargedHadronEnergyFraction"); + + std::vectorME_Reco; + ME_Reco.push_back(mGenPt_Reco); + ME_Reco.push_back(mGenPhi_Reco); + ME_Reco.push_back(mGenEta_Reco); + ME_Reco.push_back(mPt_Reco); + ME_Reco.push_back(mPhi_Reco); + ME_Reco.push_back(mEta_Reco); + ME_Reco.push_back(mCorrJetPt_Reco); + ME_Reco.push_back(mCorrJetPhi_Reco); + ME_Reco.push_back(mCorrJetEta_Reco); + ME_Reco.push_back(mPtCorrOverReco_Eta_20_40_Reco); + ME_Reco.push_back(mPtCorrOverReco_Eta_200_600_Reco); + ME_Reco.push_back(mPtCorrOverReco_Eta_1500_3500_Reco); + ME_Reco.push_back(mPtCorrOverGen_GenEta_40_200_Reco); + ME_Reco.push_back(mPtCorrOverGen_GenEta_600_1500_Reco); + ME_Reco.push_back(mDeltaEta_Reco); + ME_Reco.push_back(mDeltaPhi_Reco); + ME_Reco.push_back(mDeltaPt_Reco); + ME_Reco.push_back(mMjj_Reco); + ME_Reco.push_back(mNJets40_Reco); + ME_Reco.push_back(mchargedHadronMultiplicity_Reco); + ME_Reco.push_back(mneutralHadronMultiplicity_Reco); + ME_Reco.push_back(mphotonMultiplicity_Reco); + ME_Reco.push_back(mphotonEnergyFraction_Reco); + ME_Reco.push_back(mneutralHadronEnergyFraction_Reco); + ME_Reco.push_back(mchargedHadronEnergyFraction_Reco); + + MonitorElement* mGenPt_MiniAOD=iget_.get(rundir_miniaod+"/"+"GenPt"); + MonitorElement* mGenPhi_MiniAOD=iget_.get(rundir_miniaod+"/"+"GenPhi"); + MonitorElement* mGenEta_MiniAOD=iget_.get(rundir_miniaod+"/"+"GenEta"); + MonitorElement* mPt_MiniAOD=iget_.get(rundir_miniaod+"/"+"Pt"); + MonitorElement* mPhi_MiniAOD=iget_.get(rundir_miniaod+"/"+"Phi"); + MonitorElement* mEta_MiniAOD=iget_.get(rundir_miniaod+"/"+"Eta"); + MonitorElement* mCorrJetPt_MiniAOD=iget_.get(rundir_miniaod+"/"+"CorrJetPt"); + MonitorElement* mCorrJetPhi_MiniAOD=iget_.get(rundir_miniaod+"/"+"CorrJetPhi"); + MonitorElement* mCorrJetEta_MiniAOD=iget_.get(rundir_miniaod+"/"+"CorrJetEta"); + MonitorElement* mPtCorrOverReco_Eta_20_40_MiniAOD=iget_.get(rundir_miniaod+"/"+"PtCorrOverReco_Eta_20_40"); + MonitorElement* mPtCorrOverReco_Eta_200_600_MiniAOD=iget_.get(rundir_miniaod+"/"+"PtCorrOverReco_Eta_200_600"); + MonitorElement* mPtCorrOverReco_Eta_1500_3500_MiniAOD=iget_.get(rundir_miniaod+"/"+"PtCorrOverReco_Eta_1500_3500"); + MonitorElement* mPtCorrOverGen_GenEta_40_200_MiniAOD=iget_.get(rundir_miniaod+"/"+"PtCorrOverGen_GenEta_40_200"); + MonitorElement* mPtCorrOverGen_GenEta_600_1500_MiniAOD=iget_.get(rundir_miniaod+"/"+"PtCorrOverGen_GenEta_600_1500"); + MonitorElement* mDeltaEta_MiniAOD=iget_.get(rundir_miniaod+"/"+"DeltaEta"); + MonitorElement* mDeltaPhi_MiniAOD=iget_.get(rundir_miniaod+"/"+"DeltaPhi"); + MonitorElement* mDeltaPt_MiniAOD=iget_.get(rundir_miniaod+"/"+"DeltaPt"); + MonitorElement* mMjj_MiniAOD=iget_.get(rundir_miniaod+"/"+"Mjj"); + MonitorElement* mNJets40_MiniAOD=iget_.get(rundir_miniaod+"/"+"NJets"); + MonitorElement* mchargedHadronMultiplicity_MiniAOD=iget_.get(rundir_miniaod+"/"+"chargedHadronMultiplicity"); + MonitorElement* mneutralHadronMultiplicity_MiniAOD=iget_.get(rundir_miniaod+"/"+"neutralHadronMultiplicity"); + MonitorElement* mphotonMultiplicity_MiniAOD=iget_.get(rundir_miniaod+"/"+"photonMultiplicity"); + MonitorElement* mphotonEnergyFraction_MiniAOD=iget_.get(rundir_miniaod+"/"+"photonEnergyFraction"); + MonitorElement* mneutralHadronEnergyFraction_MiniAOD=iget_.get(rundir_miniaod+"/"+"neutralHadronEnergyFraction"); + MonitorElement* mchargedHadronEnergyFraction_MiniAOD=iget_.get(rundir_miniaod+"/"+"chargedHadronEnergyFraction"); + + std::vectorME_MiniAOD; + ME_MiniAOD.push_back(mGenPt_MiniAOD); + ME_MiniAOD.push_back(mGenPhi_MiniAOD); + ME_MiniAOD.push_back(mGenEta_MiniAOD); + ME_MiniAOD.push_back(mPt_MiniAOD); + ME_MiniAOD.push_back(mPhi_MiniAOD); + ME_MiniAOD.push_back(mEta_MiniAOD); + ME_MiniAOD.push_back(mCorrJetPt_MiniAOD); + ME_MiniAOD.push_back(mCorrJetPhi_MiniAOD); + ME_MiniAOD.push_back(mCorrJetEta_MiniAOD); + ME_MiniAOD.push_back(mPtCorrOverReco_Eta_20_40_MiniAOD); + ME_MiniAOD.push_back(mPtCorrOverReco_Eta_200_600_MiniAOD); + ME_MiniAOD.push_back(mPtCorrOverReco_Eta_1500_3500_MiniAOD); + ME_MiniAOD.push_back(mPtCorrOverGen_GenEta_40_200_MiniAOD); + ME_MiniAOD.push_back(mPtCorrOverGen_GenEta_600_1500_MiniAOD); + ME_MiniAOD.push_back(mDeltaEta_MiniAOD); + ME_MiniAOD.push_back(mDeltaPhi_MiniAOD); + ME_MiniAOD.push_back(mDeltaPt_MiniAOD); + ME_MiniAOD.push_back(mMjj_MiniAOD); + ME_MiniAOD.push_back(mNJets40_MiniAOD); + ME_MiniAOD.push_back(mchargedHadronMultiplicity_MiniAOD); + ME_MiniAOD.push_back(mneutralHadronMultiplicity_MiniAOD); + ME_MiniAOD.push_back(mphotonMultiplicity_MiniAOD); + ME_MiniAOD.push_back(mphotonEnergyFraction_MiniAOD); + ME_MiniAOD.push_back(mneutralHadronEnergyFraction_MiniAOD); + ME_MiniAOD.push_back(mchargedHadronEnergyFraction_MiniAOD); + + ibook_.setCurrentFolder(RunDir+"MiniAOD_over_RECO"); + mGenPt_MiniAOD_over_Reco=ibook_.book1D("GenPt_MiniAOD_over_RECO",(TH1F*)mGenPt_Reco->getRootObject()); + mGenPhi_MiniAOD_over_Reco=ibook_.book1D("GenPhi_MiniAOD_over_RECO",(TH1F*)mGenPhi_Reco->getRootObject()); + mGenEta_MiniAOD_over_Reco=ibook_.book1D("GenEta_MiniAOD_over_RECO",(TH1F*)mGenEta_Reco->getRootObject()); + mPt_MiniAOD_over_Reco=ibook_.book1D("Pt_MiniAOD_over_RECO",(TH1F*)mPt_Reco->getRootObject()); + mPhi_MiniAOD_over_Reco=ibook_.book1D("Phi_MiniAOD_over_RECO",(TH1F*)mPhi_Reco->getRootObject()); + mEta_MiniAOD_over_Reco=ibook_.book1D("Eta_MiniAOD_over_RECO",(TH1F*)mEta_Reco->getRootObject()); + mCorrJetPt_MiniAOD_over_Reco=ibook_.book1D("CorrJetPt_MiniAOD_over_RECO",(TH1F*)mCorrJetPt_Reco->getRootObject()); + mCorrJetPhi_MiniAOD_over_Reco=ibook_.book1D("CorrJetPhi_MiniAOD_over_RECO",(TH1F*)mCorrJetPhi_Reco->getRootObject()); + mCorrJetEta_MiniAOD_over_Reco=ibook_.book1D("CorrJetEta_MiniAOD_over_RECO",(TH1F*)mCorrJetEta_Reco->getRootObject()); + + //if eta range changed here need change in JetTester as well + float etarange[91] = {-6.0, -5.8, -5.6, -5.4, -5.2, -5.0, -4.8, -4.6, -4.4, -4.2, + -4.0, -3.8, -3.6, -3.4, -3.2, -3.0, -2.9, -2.8, -2.7, -2.6, + -2.5, -2.4, -2.3, -2.2, -2.1, -2.0, -1.9, -1.8, -1.7, -1.6, + -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, + -0.5, -0.4, -0.3, -0.2, -0.1, + 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, + 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, + 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, + 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, + 5.0, 5.2, 5.4, 5.6, 5.8, 6.0}; + + mPtCorrOverReco_Eta_20_40_MiniAOD_over_Reco=ibook_.book1D("PtCorrOverReco_Eta_20_40_MiniAOD_over_RECO","20getRootObject()); + mDeltaPhi_MiniAOD_over_Reco=ibook_.book1D("DeltaPhi_MiniAOD_over_RECO",(TH1F*)mDeltaPhi_Reco->getRootObject()); + mDeltaEta_MiniAOD_over_Reco=ibook_.book1D("DeltaEta_MiniAOD_over_RECO",(TH1F*)mDeltaEta_Reco->getRootObject()); + mMjj_MiniAOD_over_Reco=ibook_.book1D("Mjj_MiniAOD_over_RECO",(TH1F*)mMjj_Reco->getRootObject()); + mNJets40_MiniAOD_over_Reco=ibook_.book1D("NJets_MiniAOD_over_RECO",(TH1F*)mNJets40_Reco->getRootObject()); + mchargedHadronMultiplicity_MiniAOD_over_Reco=ibook_.book1D("chargedHadronMultiplicity_MiniAOD_over_RECO",(TH1F*)mchargedHadronMultiplicity_Reco->getRootObject()); + mneutralHadronMultiplicity_MiniAOD_over_Reco=ibook_.book1D("neutralHadronMultiplicity_MiniAOD_over_RECO",(TH1F*)mneutralHadronMultiplicity_Reco->getRootObject()); + mphotonMultiplicity_MiniAOD_over_Reco=ibook_.book1D("photonMultiplicity_MiniAOD_over_RECO",(TH1F*)mphotonMultiplicity_Reco->getRootObject()); + mchargedHadronEnergyFraction_MiniAOD_over_Reco=ibook_.book1D("chargedHadronEnergyFraction_MiniAOD_over_RECO",(TH1F*)mchargedHadronEnergyFraction_Reco->getRootObject()); + mneutralHadronEnergyFraction_MiniAOD_over_Reco=ibook_.book1D("neutralHadronEnergyFraction_MiniAOD_over_RECO",(TH1F*)mneutralHadronEnergyFraction_Reco->getRootObject()); + mphotonEnergyFraction_MiniAOD_over_Reco=ibook_.book1D("photonEnergyFraction_MiniAOD_over_RECO",(TH1F*)mphotonEnergyFraction_Reco->getRootObject()); + + std::vectorME_MiniAOD_over_Reco; + ME_MiniAOD_over_Reco.push_back(mGenPt_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mGenPhi_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mGenEta_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPt_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPhi_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mEta_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mCorrJetPt_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mCorrJetPhi_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mCorrJetEta_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPtCorrOverReco_Eta_20_40_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPtCorrOverReco_Eta_200_600_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPtCorrOverReco_Eta_1500_3500_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPtCorrOverGen_GenEta_40_200_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPtCorrOverGen_GenEta_600_1500_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mDeltaEta_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mDeltaPhi_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mDeltaPt_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mMjj_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mNJets40_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mchargedHadronMultiplicity_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mneutralHadronMultiplicity_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mphotonMultiplicity_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mphotonEnergyFraction_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mneutralHadronEnergyFraction_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mchargedHadronEnergyFraction_MiniAOD_over_Reco); + for(unsigned int j=0;jgetRootObject()){ + MonitorElement* monMiniAOD=ME_MiniAOD[j];if(monMiniAOD && monMiniAOD->getRootObject()){ + MonitorElement* monMiniAOD_over_RECO=ME_MiniAOD_over_Reco[j];if(monMiniAOD_over_RECO && monMiniAOD_over_RECO->getRootObject()){ + for(int i=0;i<=(monMiniAOD_over_RECO->getNbinsX()+1);i++){ + if(monReco->getBinContent(i)!=0){ + monMiniAOD_over_RECO->setBinContent(i,monMiniAOD->getBinContent(i)/monReco->getBinContent(i)); + }else if (monMiniAOD->getBinContent(i)!=0){ + monMiniAOD_over_RECO->setBinContent(i,-0.5); + } + } + } + } + } + } + } +} diff --git a/Validation/RecoJets/plugins/JetTesterPostProcessor.h b/Validation/RecoJets/plugins/JetTesterPostProcessor.h new file mode 100644 index 0000000000000..df6c372b015be --- /dev/null +++ b/Validation/RecoJets/plugins/JetTesterPostProcessor.h @@ -0,0 +1,69 @@ +#ifndef JETTESTERPOSTPROCESSOR_H +#define JETTESTERPOSTPROCESSOR_H + +// author: Matthias Weber, Feb 2015 + +// system include files +#include +#include +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DQMServices/Core/interface/DQMEDHarvester.h" +// +// class decleration +// + +class JetTesterPostProcessor : public DQMEDHarvester { + public: + explicit JetTesterPostProcessor(const edm::ParameterSet&); + ~JetTesterPostProcessor(); + + private: + virtual void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) ; + + edm::InputTag inputJetLabelRECO_; + edm::InputTag inputJetLabelMiniAOD_; + + std::vector jet_dirs; + + MonitorElement* mGenPt_MiniAOD_over_Reco; + MonitorElement* mGenPhi_MiniAOD_over_Reco; + MonitorElement* mGenEta_MiniAOD_over_Reco; + MonitorElement* mPt_MiniAOD_over_Reco; + MonitorElement* mPhi_MiniAOD_over_Reco; + MonitorElement* mEta_MiniAOD_over_Reco; + MonitorElement* mCorrJetPt_MiniAOD_over_Reco; + MonitorElement* mCorrJetPhi_MiniAOD_over_Reco; + MonitorElement* mCorrJetEta_MiniAOD_over_Reco; + MonitorElement* mPtCorrOverReco_Eta_20_40_MiniAOD_over_Reco; + MonitorElement* mPtCorrOverReco_Eta_200_600_MiniAOD_over_Reco; + MonitorElement* mPtCorrOverReco_Eta_1500_3500_MiniAOD_over_Reco; + MonitorElement* mPtCorrOverGen_GenEta_40_200_MiniAOD_over_Reco; + MonitorElement* mPtCorrOverGen_GenEta_600_1500_MiniAOD_over_Reco; + MonitorElement* mDeltaEta_MiniAOD_over_Reco; + MonitorElement* mDeltaPhi_MiniAOD_over_Reco; + MonitorElement* mDeltaPt_MiniAOD_over_Reco; + MonitorElement* mMjj_MiniAOD_over_Reco; + MonitorElement* mNJets40_MiniAOD_over_Reco; + MonitorElement* mchargedHadronMultiplicity_MiniAOD_over_Reco; + MonitorElement* mneutralHadronMultiplicity_MiniAOD_over_Reco; + MonitorElement* mphotonMultiplicity_MiniAOD_over_Reco; + MonitorElement* mphotonEnergyFraction_MiniAOD_over_Reco; + MonitorElement* mneutralHadronEnergyFraction_MiniAOD_over_Reco; + MonitorElement* mchargedHadronEnergyFraction_MiniAOD_over_Reco; + +}; + +#endif diff --git a/Validation/RecoJets/plugins/SealModule.cc b/Validation/RecoJets/plugins/SealModule.cc index 41c855efa69be..bfd903d113f6e 100644 --- a/Validation/RecoJets/plugins/SealModule.cc +++ b/Validation/RecoJets/plugins/SealModule.cc @@ -2,7 +2,9 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "JetTester.h" +#include "JetTesterPostProcessor.h" #include "JetTester_HeavyIons.h" DEFINE_FWK_MODULE( JetTester ); +DEFINE_FWK_MODULE( JetTesterPostProcessor ); DEFINE_FWK_MODULE( JetTester_HeavyIons ); diff --git a/Validation/RecoJets/python/JetPostProcessor_cff.py b/Validation/RecoJets/python/JetPostProcessor_cff.py new file mode 100644 index 0000000000000..934bc1746750f --- /dev/null +++ b/Validation/RecoJets/python/JetPostProcessor_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.RecoJets.JetPostProcessor_cfi import * +JetPostProcessor = cms.Sequence(JetPostprocessing) diff --git a/Validation/RecoJets/python/JetPostProcessor_cfi.py b/Validation/RecoJets/python/JetPostProcessor_cfi.py new file mode 100644 index 0000000000000..83334dc625230 --- /dev/null +++ b/Validation/RecoJets/python/JetPostProcessor_cfi.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + +################# Postprocessing ######################### +JetPostprocessing = cms.EDAnalyzer('JetTesterPostProcessor', + JetTypeRECO = cms.InputTag("ak4PFJetsCHS"), + JetTypeMiniAOD = cms.InputTag("slimmedJets") + ) diff --git a/Validation/RecoJets/test/sequence_validation_cfg.py b/Validation/RecoJets/test/sequence_validation_cfg.py index 327792e3ccc42..a22f6fcabc4bb 100644 --- a/Validation/RecoJets/test/sequence_validation_cfg.py +++ b/Validation/RecoJets/test/sequence_validation_cfg.py @@ -6,15 +6,15 @@ process = cms.Process("JETVALIDATION") -#process.load("Configuration.StandardSequences.GeometryDB_cff") #process.load("Configuration.StandardSequences.Reconstruction_cff") #process.load("Configuration/StandardSequences/MagneticField_cff") +process.load("Configuration.StandardSequences.GeometryRecoDB_cff") process.load('Configuration/StandardSequences/FrontierConditions_GlobalTag_cff') #process.GlobalTag.globaltag = 'START42_V17::All' ##process.GlobalTag.globaltag = 'MC_38Y_V14::All' ## for 6_2_0 QCD -process.GlobalTag.globaltag = 'PRE_LS172_V16::All' +process.GlobalTag.globaltag = 'MCRUN2_74_V7::All' #process.load("Configuration.StandardSequences.Services_cff") #process.load("Configuration.StandardSequences.Simulation_cff") @@ -30,15 +30,10 @@ process.source = cms.Source ("PoolSource",fileNames = readFiles, secondaryFileNames = secFiles) readFiles.extend( [ #for RECO - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/22A79853-D85E-E411-BAA9-02163E00C055.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/28923A16-C95E-E411-871C-02163E00FFCE.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/307F76E6-E05E-E411-90AF-02163E00B036.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/4E03E1A5-CE5E-E411-AE0F-02163E008BE3.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/689DCC5B-D35E-E411-A720-02163E00D13A.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/CC3F6060-DA5E-E411-BA7C-02163E0105B8.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/D470466A-C55E-E411-A382-02163E00EB5D.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/E2A34427-E75E-E411-ABBA-02163E008DD3.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/FCE96BE5-F15E-E411-BD38-02163E00D13A.root' + '/store/relval/CMSSW_7_4_0_pre8/RelValTTbar_13/GEN-SIM-RECO/MCRUN2_74_V7-v1/00000/48E3FDFE-3DBD-E411-9B99-0025905A613C.root', + '/store/relval/CMSSW_7_4_0_pre8/RelValTTbar_13/GEN-SIM-RECO/MCRUN2_74_V7-v1/00000/706A960F-54BD-E411-8561-00261894384F.root', + '/store/relval/CMSSW_7_4_0_pre8/RelValTTbar_13/GEN-SIM-RECO/MCRUN2_74_V7-v1/00000/E4EF6410-54BD-E411-8838-002590593920.root', + '/store/relval/CMSSW_7_4_0_pre8/RelValTTbar_13/GEN-SIM-RECO/MCRUN2_74_V7-v1/00000/FA18AB00-3EBD-E411-AAE8-0025905A608A.root' #for MINIAODtests #'/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/MINIAODSIM/PU50ns_PRE_LS172_V16-v1/00000/9886ACB4-F45E-E411-9E5D-02163E00F01E.root' #test HI sequence for jets @@ -48,6 +43,7 @@ # Validation module process.load("Validation.RecoJets.JetValidation_cff") +process.load("Validation.RecoJets.JetPostProcessor_cff") #process.load("Validation.RecoHI.JetValidationHeavyIons_cff") process.maxEvents = cms.untracked.PSet( @@ -70,6 +66,7 @@ process.JetValidation #for MiniAOD #process.JetValidationMiniAOD + *process.JetPostProcessor *process.dqmSaver ) diff --git a/Validation/RecoMET/plugins/METTester.cc b/Validation/RecoMET/plugins/METTester.cc index 4584c9d20b141..995224a2174be 100644 --- a/Validation/RecoMET/plugins/METTester.cc +++ b/Validation/RecoMET/plugins/METTester.cc @@ -51,6 +51,7 @@ METTester::METTester(const edm::ParameterSet& iConfig) genMETsTrueToken_ = consumes (edm::InputTag("genMetTrue")); genMETsCaloToken_ = consumes (edm::InputTag("genMetCalo")); } + //Events variables mNvertex = 0; @@ -105,7 +106,7 @@ METTester::METTester(const edm::ParameterSet& iConfig) mMETDifference_GenMETTrue_MET200to300=0; mMETDifference_GenMETTrue_MET300to400=0; mMETDifference_GenMETTrue_MET400to500=0; - mMETDifference_GenMETTrue_METResolution=0; + mMETDifference_GenMETTrue_MET500=0; } @@ -141,10 +142,7 @@ void METTester::bookHistograms(DQMStore::IBooker & ibooker, mMETDifference_GenMETTrue_MET200to300 = ibooker.book1D("METResolution_GenMETTrue_MET200to300", "METResolution_GenMETTrue_MET200to300", 500,-500,500); mMETDifference_GenMETTrue_MET300to400 = ibooker.book1D("METResolution_GenMETTrue_MET300to400", "METResolution_GenMETTrue_MET300to400", 500,-500,500); mMETDifference_GenMETTrue_MET400to500 = ibooker.book1D("METResolution_GenMETTrue_MET400to500", "METResolution_GenMETTrue_MET400to500", 500,-500,500); - //this will be filled at the end of the job using info from above hists - int nBins = 10; - float bins[] = {0.,20.,40.,60.,80.,100.,150.,200.,300.,400.,500.}; - mMETDifference_GenMETTrue_METResolution = ibooker.book1D("METResolution_GenMETTrue_InMETBins","METResolution_GenMETTrue_InMETBins",nBins, bins); + mMETDifference_GenMETTrue_MET500 = ibooker.book1D("METResolution_GenMETTrue_MET500", "METResolution_GenMETTrue_MET500", 500,-500,500); } if ( isCaloMET) { mCaloMaxEtInEmTowers = ibooker.book1D("CaloMaxEtInEmTowers","CaloMaxEtInEmTowers",300,0,1500); //5GeV @@ -191,11 +189,12 @@ void METTester::bookHistograms(DQMStore::IBooker & ibooker, } } - } +} void METTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { //int counter(0); + edm::Handle pvHandle; iEvent.getByToken(pvToken_, pvHandle); if (! pvHandle.isValid()) @@ -258,6 +257,7 @@ void METTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) genMetTrue=patMET->front().genMET(); isvalidgenmet=true; } + if(isvalidgenmet){ double genMET = genMetTrue->pt(); double genMETPhi = genMetTrue->phi(); @@ -277,6 +277,7 @@ void METTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) else if (MET >200 && MET <300) mMETDifference_GenMETTrue_MET200to300->Fill( MET - genMET ); else if (MET >300 && MET <400) mMETDifference_GenMETTrue_MET300to400->Fill( MET - genMET ); else if (MET >400 && MET <500) mMETDifference_GenMETTrue_MET400to500->Fill( MET - genMET ); + else if (MET >500) mMETDifference_GenMETTrue_MET500->Fill( MET - genMET ); } else { edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetTrue"; @@ -381,37 +382,6 @@ void METTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) mPFHFEMEtFraction->Fill(patmet->Type7EtFraction());//HFEMEt } } - //This is so dirty I could cry. It should be called only ONCE in endJob. But the MonitorElements don't exist then any more. - FillMETRes(); -} - -//void METTester::endRun(const edm::Run& iRun, const edm::EventSetup& iSetup) -void METTester::FillMETRes() -{ - if(!isGenMET){ - mMETDifference_GenMETTrue_METResolution->setBinContent(1, mMETDifference_GenMETTrue_MET0to20->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(2, mMETDifference_GenMETTrue_MET20to40->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(3, mMETDifference_GenMETTrue_MET40to60->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(4, mMETDifference_GenMETTrue_MET60to80->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(5, mMETDifference_GenMETTrue_MET80to100->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(6, mMETDifference_GenMETTrue_MET100to150->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(7, mMETDifference_GenMETTrue_MET150to200->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(8, mMETDifference_GenMETTrue_MET200to300->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(9, mMETDifference_GenMETTrue_MET300to400->getMean()); - mMETDifference_GenMETTrue_METResolution->setBinContent(10, mMETDifference_GenMETTrue_MET400to500->getMean()); - - //the error computation should be done in a postProcessor in the harvesting step otherwise the histograms will be just summed - mMETDifference_GenMETTrue_METResolution->setBinError(1, mMETDifference_GenMETTrue_MET0to20->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(2, mMETDifference_GenMETTrue_MET20to40->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(3, mMETDifference_GenMETTrue_MET40to60->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(4, mMETDifference_GenMETTrue_MET60to80->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(5, mMETDifference_GenMETTrue_MET80to100->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(6, mMETDifference_GenMETTrue_MET100to150->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(7, mMETDifference_GenMETTrue_MET150to200->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(8, mMETDifference_GenMETTrue_MET200to300->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(9, mMETDifference_GenMETTrue_MET300to400->getRMS()); - mMETDifference_GenMETTrue_METResolution->setBinError(10, mMETDifference_GenMETTrue_MET400to500->getRMS()); - } } diff --git a/Validation/RecoMET/plugins/METTester.h b/Validation/RecoMET/plugins/METTester.h index 59d44671108ee..dbc778f1ee4cc 100644 --- a/Validation/RecoMET/plugins/METTester.h +++ b/Validation/RecoMET/plugins/METTester.h @@ -57,7 +57,6 @@ class METTester: public DQMEDAnalyzer { virtual void analyze(const edm::Event&, const edm::EventSetup&); void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; - void FillMETRes(); private: @@ -153,8 +152,9 @@ class METTester: public DQMEDAnalyzer { MonitorElement* mMETDifference_GenMETTrue_MET200to300; MonitorElement* mMETDifference_GenMETTrue_MET300to400; MonitorElement* mMETDifference_GenMETTrue_MET400to500; - MonitorElement* mMETDifference_GenMETTrue_METResolution; - + MonitorElement* mMETDifference_GenMETTrue_MET500; + //moved into postprocessor + //MonitorElement* mMETDifference_GenMETTrue_METResolution; bool isCaloMET; diff --git a/Validation/RecoMET/plugins/METTesterPostProcessor.cc b/Validation/RecoMET/plugins/METTesterPostProcessor.cc new file mode 100644 index 0000000000000..a0a7761750d24 --- /dev/null +++ b/Validation/RecoMET/plugins/METTesterPostProcessor.cc @@ -0,0 +1,101 @@ +// -*- C++ -*- +// +// Package: Validation/RecoMET +// Class: METTesterPostProcessor +// +// Original Author: "Matthias Weber" +// Created: Sun Feb 22 14:35:25 CET 2015 +// + +#include "Validation/RecoMET/plugins/METTesterPostProcessor.h" +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/Framework/interface/Run.h" + +// Some switches +// +// constructors and destructor +// +METTesterPostProcessor::METTesterPostProcessor(const edm::ParameterSet& iConfig) +{ +} + + +METTesterPostProcessor::~METTesterPostProcessor() +{ +} + + +// ------------ method called right after a run ends ------------ +void +METTesterPostProcessor::dqmEndJob(DQMStore::IBooker& ibook_, DQMStore::IGetter& iget_) +{ + std::vector subDirVec; + std::string RunDir="JetMET/METValidation/"; + iget_.setCurrentFolder(RunDir); + met_dirs=iget_.getSubdirs(); + //bin definition for resolution plot -> last bin contains overflow too, but for plotting purposes show up to 1 TeV only + int nBins = 11; + float bins[] = {0.,20.,40.,60.,80.,100.,150.,200.,300.,400.,500.,1000}; + //loop over met subdirectories + for (int i=0; igetRootObject()){//check one object, if existing, then the remaining ME's exist too + //for genmet none of these ME's are filled + mMETDifference_GenMETTrue_METResolution->setBinContent(1, mMETDifference_GenMETTrue_MET0to20->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(2, mMETDifference_GenMETTrue_MET20to40->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(3, mMETDifference_GenMETTrue_MET40to60->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(4, mMETDifference_GenMETTrue_MET60to80->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(5, mMETDifference_GenMETTrue_MET80to100->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(6, mMETDifference_GenMETTrue_MET100to150->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(7, mMETDifference_GenMETTrue_MET150to200->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(8, mMETDifference_GenMETTrue_MET200to300->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(9, mMETDifference_GenMETTrue_MET300to400->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(10, mMETDifference_GenMETTrue_MET400to500->getMean()); + mMETDifference_GenMETTrue_METResolution->setBinContent(11, mMETDifference_GenMETTrue_MET500->getMean()); + + //the error computation should be done in a postProcessor in the harvesting step otherwise the histograms will be just summed + mMETDifference_GenMETTrue_METResolution->setBinError(1, mMETDifference_GenMETTrue_MET0to20->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(2, mMETDifference_GenMETTrue_MET20to40->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(3, mMETDifference_GenMETTrue_MET40to60->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(4, mMETDifference_GenMETTrue_MET60to80->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(5, mMETDifference_GenMETTrue_MET80to100->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(6, mMETDifference_GenMETTrue_MET100to150->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(7, mMETDifference_GenMETTrue_MET150to200->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(8, mMETDifference_GenMETTrue_MET200to300->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(9, mMETDifference_GenMETTrue_MET300to400->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(10, mMETDifference_GenMETTrue_MET400to500->getRMS()); + mMETDifference_GenMETTrue_METResolution->setBinError(11, mMETDifference_GenMETTrue_MET500->getRMS()); + } +} diff --git a/Validation/RecoMET/plugins/METTesterPostProcessor.h b/Validation/RecoMET/plugins/METTesterPostProcessor.h new file mode 100644 index 0000000000000..ceacc683430ea --- /dev/null +++ b/Validation/RecoMET/plugins/METTesterPostProcessor.h @@ -0,0 +1,52 @@ +#ifndef METTESTERPOSTPROCESSOR_H +#define METTESTERPOSTPROCESSOR_H + +// author: Matthias Weber, Feb 2015 + +// system include files +#include +#include +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DQMServices/Core/interface/DQMEDHarvester.h" +// +// class decleration +// + +class METTesterPostProcessor : public DQMEDHarvester { + public: + explicit METTesterPostProcessor(const edm::ParameterSet&); + ~METTesterPostProcessor(); + + private: + virtual void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) ; + std::vector met_dirs; + + void FillMETRes(std::string metdir,DQMStore::IGetter &); + MonitorElement* mMETDifference_GenMETTrue_MET0to20; + MonitorElement* mMETDifference_GenMETTrue_MET20to40; + MonitorElement* mMETDifference_GenMETTrue_MET40to60; + MonitorElement* mMETDifference_GenMETTrue_MET60to80; + MonitorElement* mMETDifference_GenMETTrue_MET80to100; + MonitorElement* mMETDifference_GenMETTrue_MET100to150; + MonitorElement* mMETDifference_GenMETTrue_MET150to200; + MonitorElement* mMETDifference_GenMETTrue_MET200to300; + MonitorElement* mMETDifference_GenMETTrue_MET300to400; + MonitorElement* mMETDifference_GenMETTrue_MET400to500; + MonitorElement* mMETDifference_GenMETTrue_MET500; + MonitorElement* mMETDifference_GenMETTrue_METResolution; +}; + +#endif diff --git a/Validation/RecoMET/plugins/METTesterPostProcessorHarvesting.cc b/Validation/RecoMET/plugins/METTesterPostProcessorHarvesting.cc new file mode 100644 index 0000000000000..26bb839389c4a --- /dev/null +++ b/Validation/RecoMET/plugins/METTesterPostProcessorHarvesting.cc @@ -0,0 +1,157 @@ +// -*- C++ -*- +// +// Package: Validation/RecoMET +// Class: METTesterPostProcessorHarvesting +// +// Original Author: "Matthias Weber" +// Created: Sun Feb 22 14:35:25 CET 2015 +// + +#include "Validation/RecoMET/plugins/METTesterPostProcessorHarvesting.h" +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/Framework/interface/Run.h" + +// Some switches +// +// constructors and destructor +// +METTesterPostProcessorHarvesting::METTesterPostProcessorHarvesting(const edm::ParameterSet& iConfig) +{ + inputMETLabelRECO_=iConfig.getParameter("METTypeRECO"); + inputMETLabelMiniAOD_=iConfig.getParameter("METTypeMiniAOD"); +} + + +METTesterPostProcessorHarvesting::~METTesterPostProcessorHarvesting() +{ +} + + +// ------------ method called right after a run ends ------------ +void +METTesterPostProcessorHarvesting::dqmEndJob(DQMStore::IBooker& ibook_, DQMStore::IGetter& iget_) +{ + std::vector subDirVec; + std::string RunDir="JetMET/METValidation/"; + iget_.setCurrentFolder(RunDir); + met_dirs=iget_.getSubdirs(); + bool found_reco_dir=false; + bool found_miniaod_dir=false; + //loop over met subdirectories + for (int i=0; iME_Reco; + ME_Reco.push_back(mMET_Reco); + ME_Reco.push_back(mMETPhi_Reco); + ME_Reco.push_back(mSumET_Reco); + ME_Reco.push_back(mMETDifference_GenMETTrue_Reco); + ME_Reco.push_back(mMETDeltaPhi_GenMETTrue_Reco); + ME_Reco.push_back(mPFPhotonEtFraction_Reco); + ME_Reco.push_back(mPFNeutralHadronEtFraction_Reco); + ME_Reco.push_back(mPFChargedHadronEtFraction_Reco); + ME_Reco.push_back(mPFHFHadronEtFraction_Reco); + ME_Reco.push_back(mPFHFEMEtFraction_Reco); + ME_Reco.push_back(mMETDifference_GenMETTrue_MET20to40_Reco); + ME_Reco.push_back(mMETDifference_GenMETTrue_MET100to150_Reco); + ME_Reco.push_back(mMETDifference_GenMETTrue_MET300to400_Reco); + + + MonitorElement* mMET_MiniAOD=iget_.get(rundir_miniaod+"/"+"MET"); + MonitorElement* mMETPhi_MiniAOD=iget_.get(rundir_miniaod+"/"+"METPhi"); + MonitorElement* mSumET_MiniAOD=iget_.get(rundir_miniaod+"/"+"SumET"); + MonitorElement* mMETDifference_GenMETTrue_MiniAOD=iget_.get(rundir_miniaod+"/"+"METDifference_GenMETTrue"); + MonitorElement* mMETDeltaPhi_GenMETTrue_MiniAOD=iget_.get(rundir_miniaod+"/"+"METDeltaPhi_GenMETTrue"); + MonitorElement* mPFPhotonEtFraction_MiniAOD=iget_.get(rundir_miniaod+"/"+"photonEtFraction"); + MonitorElement* mPFNeutralHadronEtFraction_MiniAOD=iget_.get(rundir_miniaod+"/"+"neutralHadronEtFraction"); + MonitorElement* mPFChargedHadronEtFraction_MiniAOD=iget_.get(rundir_miniaod+"/"+"chargedHadronEtFraction"); + MonitorElement* mPFHFHadronEtFraction_MiniAOD=iget_.get(rundir_miniaod+"/"+"HFHadronEtFraction"); + MonitorElement* mPFHFEMEtFraction_MiniAOD=iget_.get(rundir_miniaod+"/"+"HFEMEtFraction"); + MonitorElement* mMETDifference_GenMETTrue_MET20to40_MiniAOD=iget_.get(rundir_miniaod+"/"+"METResolution_GenMETTrue_MET20to40"); + MonitorElement* mMETDifference_GenMETTrue_MET100to150_MiniAOD=iget_.get(rundir_miniaod+"/"+"METResolution_GenMETTrue_MET100to150"); + MonitorElement* mMETDifference_GenMETTrue_MET300to400_MiniAOD=iget_.get(rundir_miniaod+"/"+"METResolution_GenMETTrue_MET300to400"); + + std::vectorME_MiniAOD; + ME_MiniAOD.push_back(mMET_MiniAOD); + ME_MiniAOD.push_back(mMETPhi_MiniAOD); + ME_MiniAOD.push_back(mSumET_MiniAOD); + ME_MiniAOD.push_back(mMETDifference_GenMETTrue_MiniAOD); + ME_MiniAOD.push_back(mMETDeltaPhi_GenMETTrue_MiniAOD); + ME_MiniAOD.push_back(mPFPhotonEtFraction_MiniAOD); + ME_MiniAOD.push_back(mPFNeutralHadronEtFraction_MiniAOD); + ME_MiniAOD.push_back(mPFChargedHadronEtFraction_MiniAOD); + ME_MiniAOD.push_back(mPFHFHadronEtFraction_MiniAOD); + ME_MiniAOD.push_back(mPFHFEMEtFraction_MiniAOD); + ME_MiniAOD.push_back(mMETDifference_GenMETTrue_MET20to40_MiniAOD); + ME_MiniAOD.push_back(mMETDifference_GenMETTrue_MET100to150_MiniAOD); + ME_MiniAOD.push_back(mMETDifference_GenMETTrue_MET300to400_MiniAOD); + + ibook_.setCurrentFolder(RunDir+"MiniAOD_over_RECO"); + mMET_MiniAOD_over_Reco=ibook_.book1D("MET_MiniAOD_over_RECO",(TH1F*)mMET_Reco->getRootObject()); + mMETPhi_MiniAOD_over_Reco=ibook_.book1D("METPhi_MiniAOD_over_RECO",(TH1F*)mMETPhi_Reco->getRootObject()); + mSumET_MiniAOD_over_Reco=ibook_.book1D("SumET_MiniAOD_over_RECO",(TH1F*)mSumET_Reco->getRootObject()); + mMETDifference_GenMETTrue_MiniAOD_over_Reco=ibook_.book1D("METDifference_GenMETTrue_MiniAOD_over_RECO",(TH1F*)mMETDifference_GenMETTrue_Reco->getRootObject()); + mMETDeltaPhi_GenMETTrue_MiniAOD_over_Reco=ibook_.book1D("METDeltaPhi_GenMETTrue_MiniAOD_over_RECO",(TH1F*)mMETDeltaPhi_GenMETTrue_Reco->getRootObject()); + mPFPhotonEtFraction_MiniAOD_over_Reco=ibook_.book1D("photonEtFraction_MiniAOD_over_RECO",(TH1F*)mPFPhotonEtFraction_Reco->getRootObject()); + mPFNeutralHadronEtFraction_MiniAOD_over_Reco=ibook_.book1D("neutralHadronEtFraction_MiniAOD_over_RECO",(TH1F*)mPFNeutralHadronEtFraction_Reco->getRootObject()); + mPFChargedHadronEtFraction_MiniAOD_over_Reco=ibook_.book1D("chargedHadronEtFraction_MiniAOD_over_RECO",(TH1F*)mPFChargedHadronEtFraction_Reco->getRootObject()); + mPFHFHadronEtFraction_MiniAOD_over_Reco=ibook_.book1D("HFHadronEtFraction_MiniAOD_over_RECO",(TH1F*)mPFHFHadronEtFraction_Reco->getRootObject()); + mPFHFEMEtFraction_MiniAOD_over_Reco=ibook_.book1D("HFEMEtEtFraction_MiniAOD_over_RECO",(TH1F*)mPFHFEMEtFraction_Reco->getRootObject()); + mMETDifference_GenMETTrue_MET20to40_MiniAOD_over_Reco=ibook_.book1D("METResolution_GenMETTrue_MET20to40_MiniAOD_over_RECO",(TH1F*)mMETDifference_GenMETTrue_MET20to40_Reco->getRootObject()); + mMETDifference_GenMETTrue_MET100to150_MiniAOD_over_Reco=ibook_.book1D("METResolution_GenMETTrue_MET100to150_MiniAOD_over_RECO",(TH1F*)mMETDifference_GenMETTrue_MET100to150_Reco->getRootObject()); + mMETDifference_GenMETTrue_MET300to400_MiniAOD_over_Reco=ibook_.book1D("METResolution_GenMETTrue_MET300to400_MiniAOD_over_RECO",(TH1F*)mMETDifference_GenMETTrue_MET300to400_Reco->getRootObject()); + + std::vectorME_MiniAOD_over_Reco; + ME_MiniAOD_over_Reco.push_back(mMET_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mMETPhi_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mSumET_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mMETDifference_GenMETTrue_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mMETDeltaPhi_GenMETTrue_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPFPhotonEtFraction_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPFNeutralHadronEtFraction_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPFChargedHadronEtFraction_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPFHFHadronEtFraction_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mPFHFEMEtFraction_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mMETDifference_GenMETTrue_MET20to40_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mMETDifference_GenMETTrue_MET100to150_MiniAOD_over_Reco); + ME_MiniAOD_over_Reco.push_back(mMETDifference_GenMETTrue_MET300to400_MiniAOD_over_Reco); + + for(unsigned int j=0;jgetRootObject()){ + MonitorElement* monMiniAOD=ME_MiniAOD[j];if(monMiniAOD && monMiniAOD->getRootObject()){ + MonitorElement* monMiniAOD_over_RECO=ME_MiniAOD_over_Reco[j];if(monMiniAOD_over_RECO && monMiniAOD_over_RECO->getRootObject()){ + for(int i=0;i<=(monMiniAOD_over_RECO->getNbinsX()+1);i++){ + if(monReco->getBinContent(i)!=0){ + monMiniAOD_over_RECO->setBinContent(i,monMiniAOD->getBinContent(i)/monReco->getBinContent(i)); + }else if (monMiniAOD->getBinContent(i)!=0){ + monMiniAOD_over_RECO->setBinContent(i,-0.5); + } + } + } + } + } + } + } +} diff --git a/Validation/RecoMET/plugins/METTesterPostProcessorHarvesting.h b/Validation/RecoMET/plugins/METTesterPostProcessorHarvesting.h new file mode 100644 index 0000000000000..1c65fad27153b --- /dev/null +++ b/Validation/RecoMET/plugins/METTesterPostProcessorHarvesting.h @@ -0,0 +1,57 @@ +#ifndef METTESTERPOSTPROCESSORHARVESTING_H +#define METTESTERPOSTPROCESSORHARVESTING_H + +// author: Matthias Weber, Feb 2015 + +// system include files +#include +#include +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DQMServices/Core/interface/DQMEDHarvester.h" +// +// class decleration +// + +class METTesterPostProcessorHarvesting : public DQMEDHarvester { + public: + explicit METTesterPostProcessorHarvesting(const edm::ParameterSet&); + ~METTesterPostProcessorHarvesting(); + + private: + virtual void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) ; + + edm::InputTag inputMETLabelRECO_; + edm::InputTag inputMETLabelMiniAOD_; + + std::vector met_dirs; + + MonitorElement* mMET_MiniAOD_over_Reco; + MonitorElement* mMETPhi_MiniAOD_over_Reco; + MonitorElement* mSumET_MiniAOD_over_Reco; + MonitorElement* mPFPhotonEtFraction_MiniAOD_over_Reco; + MonitorElement* mPFNeutralHadronEtFraction_MiniAOD_over_Reco; + MonitorElement* mPFChargedHadronEtFraction_MiniAOD_over_Reco; + MonitorElement* mPFHFHadronEtFraction_MiniAOD_over_Reco; + MonitorElement* mPFHFEMEtFraction_MiniAOD_over_Reco; + MonitorElement* mMETDifference_GenMETTrue_MiniAOD_over_Reco; + MonitorElement* mMETDeltaPhi_GenMETTrue_MiniAOD_over_Reco; + MonitorElement* mMETDifference_GenMETTrue_MET20to40_MiniAOD_over_Reco; + MonitorElement* mMETDifference_GenMETTrue_MET100to150_MiniAOD_over_Reco; + MonitorElement* mMETDifference_GenMETTrue_MET300to400_MiniAOD_over_Reco; + +}; + +#endif diff --git a/Validation/RecoMET/plugins/SealModule.cc b/Validation/RecoMET/plugins/SealModule.cc index 41bc707f327a5..df29a49d4a155 100644 --- a/Validation/RecoMET/plugins/SealModule.cc +++ b/Validation/RecoMET/plugins/SealModule.cc @@ -1,7 +1,11 @@ #include "FWCore/PluginManager/interface/ModuleDef.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "METTester.h" +#include "METTesterPostProcessor.h" +#include "METTesterPostProcessorHarvesting.h" -DEFINE_FWK_MODULE (METTester) ; +DEFINE_FWK_MODULE (METTester); +DEFINE_FWK_MODULE (METTesterPostProcessor); +DEFINE_FWK_MODULE (METTesterPostProcessorHarvesting); diff --git a/Validation/RecoMET/python/METPostProcessor_cff.py b/Validation/RecoMET/python/METPostProcessor_cff.py new file mode 100644 index 0000000000000..1d27031f7e25b --- /dev/null +++ b/Validation/RecoMET/python/METPostProcessor_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +from Validation.RecoMET.METPostProcessor_cfi import * +METPostProcessor = cms.Sequence(METPostprocessing) +METPostProcessorHarvesting = cms.Sequence(METPostprocessingHarvesting) diff --git a/Validation/RecoMET/python/METPostProcessor_cfi.py b/Validation/RecoMET/python/METPostProcessor_cfi.py new file mode 100644 index 0000000000000..6f8eb9ee08d19 --- /dev/null +++ b/Validation/RecoMET/python/METPostProcessor_cfi.py @@ -0,0 +1,10 @@ +import FWCore.ParameterSet.Config as cms + +################# Postprocessing ######################### +METPostprocessing = cms.EDAnalyzer('METTesterPostProcessor') + +################ Postprocessing Harvesting ######################### +METPostprocessingHarvesting = cms.EDAnalyzer('METTesterPostProcessorHarvesting', + METTypeRECO = cms.InputTag("pfMetT1"), + METTypeMiniAOD = cms.InputTag("slimmedMETs") + ) diff --git a/Validation/RecoMET/test/sequence_validation_cfg.py b/Validation/RecoMET/test/sequence_validation_cfg.py index 37d01eda6b25a..e814f77842d34 100644 --- a/Validation/RecoMET/test/sequence_validation_cfg.py +++ b/Validation/RecoMET/test/sequence_validation_cfg.py @@ -3,9 +3,7 @@ process = cms.Process("METVALIDATION") -process.load("Configuration.StandardSequences.GeometryDB_cff") -#process.load("Configuration.StandardSequences.GeometryRecoDB_cff") -#process.load("Configuration.StandardSequences.GeometryRecoDB_cff") +process.load("Configuration.StandardSequences.GeometryRecoDB_cff") process.load("Configuration.StandardSequences.Reconstruction_cff") process.load("Configuration/StandardSequences/MagneticField_cff") process.load('Configuration/StandardSequences/FrontierConditions_GlobalTag_cff') @@ -13,7 +11,7 @@ #process.GlobalTag.globaltag = 'START42_V17::All' ##process.GlobalTag.globaltag = 'MC_38Y_V14::All' ## for 6_2_0 QCD -process.GlobalTag.globaltag = 'PRE_LS172_V16::All' +process.GlobalTag.globaltag = 'MCRUN2_74_V7::All' process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 1000 @@ -23,6 +21,7 @@ # process.load("Validation.RecoMET.METRelValForDQM_cff") +process.load("Validation.RecoMET.METPostProcessor_cff") readFiles = cms.untracked.vstring() @@ -30,15 +29,10 @@ process.source = cms.Source ("PoolSource",fileNames = readFiles, secondaryFileNames = secFiles) readFiles.extend( [ #for RECO - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/22A79853-D85E-E411-BAA9-02163E00C055.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/28923A16-C95E-E411-871C-02163E00FFCE.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/307F76E6-E05E-E411-90AF-02163E00B036.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/4E03E1A5-CE5E-E411-AE0F-02163E008BE3.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/689DCC5B-D35E-E411-A720-02163E00D13A.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/CC3F6060-DA5E-E411-BA7C-02163E0105B8.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/D470466A-C55E-E411-A382-02163E00EB5D.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/E2A34427-E75E-E411-ABBA-02163E008DD3.root', - '/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/GEN-SIM-RECO/PU50ns_PRE_LS172_V16-v1/00000/FCE96BE5-F15E-E411-BD38-02163E00D13A.root' + '/store/relval/CMSSW_7_4_0_pre8/RelValTTbar_13/GEN-SIM-RECO/MCRUN2_74_V7-v1/00000/48E3FDFE-3DBD-E411-9B99-0025905A613C.root', + '/store/relval/CMSSW_7_4_0_pre8/RelValTTbar_13/GEN-SIM-RECO/MCRUN2_74_V7-v1/00000/706A960F-54BD-E411-8561-00261894384F.root', + '/store/relval/CMSSW_7_4_0_pre8/RelValTTbar_13/GEN-SIM-RECO/MCRUN2_74_V7-v1/00000/E4EF6410-54BD-E411-8838-002590593920.root', + '/store/relval/CMSSW_7_4_0_pre8/RelValTTbar_13/GEN-SIM-RECO/MCRUN2_74_V7-v1/00000/FA18AB00-3EBD-E411-AAE8-0025905A608A.root' #for MINIAODtests #'/store/relval/CMSSW_7_3_0_pre1/RelValTTbar_13/MINIAODSIM/PU50ns_PRE_LS172_V16-v1/00000/9886ACB4-F45E-E411-9E5D-02163E00F01E.root' ] ); @@ -57,6 +51,8 @@ process.METValidation #for MiniAOD #process.METValidationMiniAOD + process.METPostProcessor + *process.METPostProcessorHarvesting *process.dqmSaver )