diff --git a/DQMOffline/Configuration/python/autoDQM.py b/DQMOffline/Configuration/python/autoDQM.py index 3cb811f3148be..ca630a9edc941 100644 --- a/DQMOffline/Configuration/python/autoDQM.py +++ b/DQMOffline/Configuration/python/autoDQM.py @@ -116,7 +116,7 @@ 'ctpps': ['DQMOfflineCTPPS', 'PostDQMOffline', 'DQMHarvestCTPPS'], - + 'btag': ['DQMOfflineBTag', 'PostDQMOffline', 'DQMHarvestBTag'], @@ -141,8 +141,8 @@ 'PostDQMOffline', 'HLTMonitoringClient'], - 'HLTMonPA': ['HLTMonitoringPA', - 'PostDQMOffline', + 'HLTMonPA': ['HLTMonitoringPA', + 'PostDQMOffline', 'HLTMonitoringClientPA'], 'express': ['@commonSiStripZeroBias+@muon+@hcal+@jetmet+@ecal', @@ -177,12 +177,12 @@ 'PostDQMOffline', 'DQMHarvestNanoAOD'], - 'pfDQM': ['DQMOfflinePF', + 'pfDQM': ['DQMOfflinePF+DQMOfflinePFExtended', 'PostDQMOffline', 'DQMHarvestPF'], -# 'standardDQM': ['@dcs+@DQMMessageLogger+@ecal+@hcal+@hcal2+@strip+@pixel+@castor+@ctpps+@muon+@tracking+@jetmet+@egamma+@L1TMon+@hlt+@btag+@beam+@physics+@HLTMon', - 'standardDQM': ['DQMOffline', +# 'standardDQM': ['@dcs+@DQMMessageLogger+@ecal+@hcal+@hcal2+@strip+@pixel+@castor+@ctpps+@muon+@tracking+@jetmet+@egamma+@L1TMon+@hlt+@btag+@beam+@physics+@HLTMon', + 'standardDQM': ['DQMOffline', 'PostDQMOffline', 'dqmHarvesting'], @@ -194,8 +194,8 @@ 'PostDQMOffline', 'dqmHarvestingExtraHLT'], -# 'standardDQMFakeHLT': ['@dcs+@DQMMessageLogger+@ecal+@hcal+@hcal2+@strip+@pixel+@castor+@ctpps+@muon+@tracking+@jetmet+@egamma+@L1TMon+@btag+@beam+@physics', - 'standardDQMFakeHLT': ['DQMOfflineFakeHLT', +# 'standardDQMFakeHLT': ['@dcs+@DQMMessageLogger+@ecal+@hcal+@hcal2+@strip+@pixel+@castor+@ctpps+@muon+@tracking+@jetmet+@egamma+@L1TMon+@btag+@beam+@physics', + 'standardDQMFakeHLT': ['DQMOfflineFakeHLT', 'PostDQMOffline', 'dqmHarvestingFakeHLT'], @@ -217,4 +217,3 @@ for i in [0,2]: autoDQM['phase2'][i] = '+'.join([autoDQM[m][i] for m in _phase2_allowed]) autoDQM['phase2'][1] = 'PostDQMOffline' - diff --git a/Validation/RecoParticleFlow/plugins/PFCandidateAnalyzerDQM.cc b/Validation/RecoParticleFlow/plugins/PFCandidateAnalyzerDQM.cc new file mode 100644 index 0000000000000..ee961f38ea18a --- /dev/null +++ b/Validation/RecoParticleFlow/plugins/PFCandidateAnalyzerDQM.cc @@ -0,0 +1,149 @@ +// Producer for particle flow candidates. Plots Eta, Phi, Charge, Pt (log freq, bin) +// for different types of particles described in python/defaults_cfi.py +// It actually uses packedCandidates so that we need only MINIAOD contents to run this DQMAnalyzer. +// note: for pt, log freq is done in this producer, but log freq is done by running +// compare.py +// author: Chosila Sutantawibul, April 23, 2020 + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" + +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" + +#include "DQMServices/Core/interface/DQMStore.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" + +#include "TH1F.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class PFCandidateAnalyzerDQM : public DQMEDAnalyzer { +public: + explicit PFCandidateAnalyzerDQM(const edm::ParameterSet&); + void analyze(const edm::Event&, const edm::EventSetup&) override; + +protected: + void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + +private: + //from config file + edm::InputTag PFCandTag; + edm::EDGetTokenT> PFCandToken; + std::vector etabins; + std::map me; + + std::map pdgMap; +}; + +// constructor +PFCandidateAnalyzerDQM::PFCandidateAnalyzerDQM(const edm::ParameterSet& iConfig) { + PFCandTag = iConfig.getParameter("PFCandType"); + PFCandToken = consumes>(PFCandTag); + etabins = iConfig.getParameter>("etabins"); + + //create map of pdgId + std::vector pdgKeys = iConfig.getParameter>("pdgKeys"); + std::vector pdgStrs = iConfig.getParameter>("pdgStrs"); + for (int i = 0, n = pdgKeys.size(); i < n; i++) + pdgMap[pdgKeys[i]] = pdgStrs[i]; +} + +void PFCandidateAnalyzerDQM::bookHistograms(DQMStore::IBooker& booker, edm::Run const&, edm::EventSetup const&) { + // all candidate + booker.setCurrentFolder("ParticleFlow/PackedCandidates/AllCandidate"); + + // for eta binning + int n = etabins.size() - 1; + float etabinArray[etabins.size()]; + std::copy(etabins.begin(), etabins.end(), etabinArray); + + //eta has variable bin sizes, use 4th def of TH1F constructor + TH1F* etaHist = new TH1F("AllCandidateEta", "AllCandidateEta", n, etabinArray); + me["AllCandidateEta"] = booker.book1D("AllCandidateEta", etaHist); + + me["AllCandidateLog10Pt"] = booker.book1D("AllCandidateLog10Pt", "AllCandidateLog10Pt", 120, -2, 4); + + //for phi binnings + double nPhiBins = 73; + double phiBinWidth = M_PI / (nPhiBins - 1) * 2.; + me["AllCandidatePhi"] = booker.book1D( + "AllCandidatePhi", "AllCandidatePhi", nPhiBins, -M_PI - 0.25 * phiBinWidth, +M_PI + 0.75 * phiBinWidth); + + me["AllCandidateCharge"] = booker.book1D("AllCandidateCharge", "AllCandidateCharge", 3, -1.5, 1.5); + me["AllCandidatePtLow"] = booker.book1D("AllCandidatePtLow", "AllCandidatePtLow", 100, 0., 5.); + me["AllCandidatePtMid"] = booker.book1D("AllCandidatePtMid", "AllCandidatePtMid", 100, 0., 200.); + me["AllCandidatePtHigh"] = booker.book1D("AllCandidatePtHigh", "AllCandidatePtHigh", 100, 0., 1000.); + + for (auto& pair : pdgMap) { + booker.setCurrentFolder("ParticleFlow/PackedCandidates/" + pair.second); + + //TH1F only takes char*, so have to do conversions for histogram name + const char* etaHistName = (pair.second + "Eta").c_str(); + TH1F* etaHist = new TH1F(etaHistName, etaHistName, n, etabinArray); + me[pair.second + "Eta"] = booker.book1D(pair.second + "Eta", etaHist); + + me[pair.second + "Log10Pt"] = booker.book1D(pair.second + "Log10Pt", pair.second + "Log10Pt", 120, -2, 4); + me[pair.second + "Phi"] = booker.book1D( + pair.second + "Phi", pair.second + "Phi", nPhiBins, -M_PI - 0.25 * phiBinWidth, +M_PI + 0.75 * phiBinWidth); + me[pair.second + "Charge"] = booker.book1D(pair.second + "Charge", pair.second + "Charge", 3, -1.5, 1.5); + me[pair.second + "PtLow"] = booker.book1D(pair.second + "PtLow", pair.second + "PtLow", 100, 0., 5.); + me[pair.second + "PtMid"] = booker.book1D(pair.second + "PtMid", pair.second + "PtMid", 100, 0., 200.); + me[pair.second + "PtHigh"] = booker.book1D(pair.second + "PtHigh", pair.second + "PtHigh", 100, 0., 1000.); + } +} + +void PFCandidateAnalyzerDQM::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + //retrieve + edm::Handle> pfHandle; + iEvent.getByToken(PFCandToken, pfHandle); + + if (!pfHandle.isValid()) { + edm::LogInfo("OutputInfo") << " failed to retrieve data required by ParticleFlow Task"; + edm::LogInfo("OutputInfo") << " ParticleFlow Task cannot continue...!"; + return; + } else { + //Analyze + // Loop Over Particle Flow Candidates + + for (unsigned int i = 0; i < pfHandle->size(); i++) { + // Fill Histograms for Candidate Methods + // all candidates + me["AllCandidateLog10Pt"]->Fill(log10(pfHandle->at(i).pt())); + me["AllCandidateEta"]->Fill(pfHandle->at(i).eta()); + me["AllCandidatePhi"]->Fill(pfHandle->at(i).phi()); + me["AllCandidateCharge"]->Fill(pfHandle->at(i).charge()); + me["AllCandidatePtLow"]->Fill(pfHandle->at(i).pt()); + me["AllCandidatePtMid"]->Fill(pfHandle->at(i).pt()); + me["AllCandidatePtHigh"]->Fill(pfHandle->at(i).pt()); + + int pdgId = abs(pfHandle->at(i).pdgId()); + if (pdgMap.find(pdgId) != pdgMap.end()) { + me[pdgMap[pdgId] + "Log10Pt"]->Fill(log10(pfHandle->at(i).pt())); + me[pdgMap[pdgId] + "Eta"]->Fill(pfHandle->at(i).eta()); + me[pdgMap[pdgId] + "Phi"]->Fill(pfHandle->at(i).phi()); + me[pdgMap[pdgId] + "Charge"]->Fill(pfHandle->at(i).charge()); + me[pdgMap[pdgId] + "PtLow"]->Fill(pfHandle->at(i).pt()); + me[pdgMap[pdgId] + "PtMid"]->Fill(pfHandle->at(i).pt()); + me[pdgMap[pdgId] + "PtHigh"]->Fill(pfHandle->at(i).pt()); + } + } + } +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(PFCandidateAnalyzerDQM); diff --git a/Validation/RecoParticleFlow/python/DQMForPF_MiniAOD_cff.py b/Validation/RecoParticleFlow/python/DQMForPF_MiniAOD_cff.py index 3c193adc5a42e..c7f1f0596a128 100644 --- a/Validation/RecoParticleFlow/python/DQMForPF_MiniAOD_cff.py +++ b/Validation/RecoParticleFlow/python/DQMForPF_MiniAOD_cff.py @@ -3,16 +3,27 @@ from Validation.RecoParticleFlow.particleFlowDQM_cff import pfJetAnalyzerDQM from Validation.RecoParticleFlow.particleFlowDQM_cff import pfPuppiJetAnalyzerDQM from Validation.RecoParticleFlow.particleFlowDQM_cff import pfJetDQMPostProcessor +from Validation.RecoParticleFlow.particleFlowDQM_cff import PFCandAnalyzerDQM from Validation.RecoParticleFlow.offsetAnalyzerDQM_cff import offsetAnalyzerDQM from Validation.RecoParticleFlow.offsetAnalyzerDQM_cff import offsetDQMPostProcessor +# Use also other POGs' analyzers for extended checks +from Validation.RecoMET.METRelValForDQM_cff import * +from Validation.RecoJets.JetValidation_cff import * DQMOfflinePF = cms.Sequence( pfJetAnalyzerDQM + pfPuppiJetAnalyzerDQM + - offsetAnalyzerDQM + offsetAnalyzerDQM + + PFCandAnalyzerDQM ) DQMHarvestPF = cms.Sequence( pfJetDQMPostProcessor + offsetDQMPostProcessor ) + +# MET & Jets sequence +DQMOfflinePFExtended = cms.Sequence( + METValidationMiniAOD + + JetValidationMiniAOD +) diff --git a/Validation/RecoParticleFlow/python/defaults_cfi.py b/Validation/RecoParticleFlow/python/defaults_cfi.py index e9631af88186a..80fdf342f9f26 100644 --- a/Validation/RecoParticleFlow/python/defaults_cfi.py +++ b/Validation/RecoParticleFlow/python/defaults_cfi.py @@ -41,8 +41,8 @@ def genjet_distribution_name(ietabin): Defined in PFCandidate.cc ParticleTypes (use absolute value) 211 h, // charged hadron -11 e, // electron -13 mu, // muon +11 e, // electron +13 mu, // muon 22 gamma, // photon 130 h0, // neutral hadron 1 h_HF, // HF tower identified as a hadron @@ -54,6 +54,9 @@ def genjet_distribution_name(ietabin): #our particle types (note chu = unmatched charged hadrons) candidateType = ["chm", "chu", "nh", "ne", "hfh", "hfe", "lep"] +# map reco::PFCandidate::pdgId() to particle type for PFCand +pdgIDDict = {211: "chargedHadron", 11:"electron", 13:"muon", 22:"photon", 130:"neutralHadron", 1:"HF_hadron", 2: "HF_EM_particle"} + offsetPlotBaseName = 'p_offset_eta' offsetDir = 'ParticleFlow/Offset/' offsetR = 0.4 @@ -62,4 +65,3 @@ def genjet_distribution_name(ietabin): def offset_name( var, ivar, itype ) : return "{0}_{1}{2}_{3}".format( offsetPlotBaseName, var, ivar, itype ) - diff --git a/Validation/RecoParticleFlow/python/particleFlowDQM_cff.py b/Validation/RecoParticleFlow/python/particleFlowDQM_cff.py index 3eea8fb0bbc8d..5d03fc87a90df 100644 --- a/Validation/RecoParticleFlow/python/particleFlowDQM_cff.py +++ b/Validation/RecoParticleFlow/python/particleFlowDQM_cff.py @@ -1,4 +1,5 @@ import FWCore.ParameterSet.Config as cms +import Validation.RecoParticleFlow.defaults_cfi as default from Validation.RecoParticleFlow.defaults_cfi import ptbins, etabins, response_distribution_name, genjet_distribution_name,jetResponseDir,genjetDir #----- ----- ----- ----- ----- ----- ----- ----- @@ -94,12 +95,14 @@ def createGenJetPlots(ptbins, etabins): ) -#----- ----- ----- ----- ----- ----- ----- ----- -# -# Sequence -# if you add things here, you also have to fix DQMForPF_MiniAOD_cff.py -pfDQM = cms.Sequence( - pfJetAnalyzerDQM * - pfPuppiJetAnalyzerDQM +# PFCandidates +PFCandAnalyzerDQM = cms.EDProducer("PFCandidateAnalyzerDQM", + PFCandType = cms.InputTag("packedPFCandidates"), + etabins = cms.vdouble( default.etaBinsOffset ), + pdgKeys = cms.vuint32( default.pdgIDDict.keys() ), + pdgStrs = cms.vstring( default.pdgIDDict.values() ) ) + + +#----- ----- ----- ----- ----- ----- ----- ----- diff --git a/Validation/RecoParticleFlow/test/compare.py b/Validation/RecoParticleFlow/test/compare.py index 3d8999dab9cfe..e2830d9e3e276 100644 --- a/Validation/RecoParticleFlow/test/compare.py +++ b/Validation/RecoParticleFlow/test/compare.py @@ -76,6 +76,17 @@ def parse_args(): required=False, help="If enabled, do all offset plots" ) + parser.add_argument("--doMETPlots", + action='store_true', + required=False, + help="If enabled, do all JetMET plots" + ) + parser.add_argument("--doPFCandPlots", + action='store_true', + required=False, + help="If enabled, do all PFCandidate plots" + ) + parser.add_argument( "--offsetVar", type=str, action='store', default="npv", help="variable to bin offset eT" ) parser.add_argument( "--offsetDR", type=float, action='store', default=0.4, help="offset deltaR value" ) args = parser.parse_args() @@ -94,25 +105,26 @@ def parse_args(): folder, name, histograms = parse_plot_string(ss) plots += [(folder, name, histograms)] + # This needs to be also changed whenever changing binning if args.doResponsePlots: # Needs to add extra folders here if the DQM files have other folders of histograms - folderDirs = ["JetResponse/slimmedJets/JEC", "JetResponse/slimmedJets/noJEC", "JetResponse/slimmedJetsPuppi/JEC", "JetResponse/slimmedJetsPuppi/noJEC"] + JetFolderDirs = ["JetResponse/slimmedJets/JEC", "JetResponse/slimmedJets/noJEC", "JetResponse/slimmedJetsPuppi/JEC", "JetResponse/slimmedJetsPuppi/noJEC"] - for folderDir in folderDirs: - plots += [(folderDir, "reso_pt", ["preso_eta05", "preso_eta13", + for JetFolderDir in JetFolderDirs: + plots += [(JetFolderDir, "reso_pt", ["preso_eta05", "preso_eta13", "preso_eta21","preso_eta25","preso_eta30","preso_eta50"])] - plots += [(folderDir, "reso_pt_rms", ["preso_eta05_rms", + plots += [(JetFolderDir, "reso_pt_rms", ["preso_eta05_rms", "preso_eta13_rms","preso_eta21_rms","preso_eta25_rms","preso_eta30_rms", "preso_eta50_rms"])] - plots += [(folderDir, "response_pt", ["presponse_eta05", + plots += [(JetFolderDir, "response_pt", ["presponse_eta05", "presponse_eta13", "presponse_eta21", "presponse_eta25", "presponse_eta30", "presponse_eta50"])] for iptbin in range(len(ptbins)-1): pthistograms = [] for ietabin in range(len(etabins)-1): pthistograms += [response_distribution_name(iptbin, ietabin)] - plots += [(folderDir, "response_{0:.0f}_{1:.0f}".format(ptbins[iptbin], ptbins[iptbin+1]), pthistograms)] + plots += [(JetFolderDir, "response_{0:.0f}_{1:.0f}".format(ptbins[iptbin], ptbins[iptbin+1]), pthistograms)] if args.doOffsetPlots: if args.offsetVar == "npv" : @@ -125,16 +137,66 @@ def parse_args(): offsetHists += [ offset_name( args.offsetVar, ivar, itype ) ] plots += [("Offset/{0}Plots/{0}{1}".format(args.offsetVar, ivar), "{0}{1}".format(args.offsetVar, ivar), offsetHists)] - - return samples, plots, args.doOffsetPlots, args.offsetVar, args.offsetDR - -def addPlots(plotter, folder, name, section, histograms, opts, offset=False): + if args.doMETPlots: + doMETPlots(files, plots) + + + if args.doPFCandPlots: + doPFCandPlots(files, plots) + + return samples, plots, args.doOffsetPlots, args.offsetVar, args.offsetDR, args.doPFCandPlots + +# function that does METValidation from JetMET +def doMETPlots(files, plots): + #get the names of the histograms + #MetValidation + METHistograms = [] + f = ROOT.TFile(files[0]) + d = f.Get("DQMData/Run 1/JetMET/Run summary/METValidation/slimmedMETsPuppi") + for i in d.GetListOfKeys(): + METHistograms.append([i.GetName()]) + # append plots + METFolderDirs = ["METValidation/slimmedMETs","METValidation/slimmedMETsPuppi"] + for METFolderDir in METFolderDirs: + for METHistogram in METHistograms: + plots += [(METFolderDir, "", METHistogram)] + + #JetValidation + JetHistograms = [] + d = f.Get("DQMData/Run 1/JetMET/Run summary/JetValidation/slimmedJets") + for i in d.GetListOfKeys(): + JetHistograms.append([i.GetName()]) + JetValFolderDirs = ["JetValidation/slimmedJets", "JetValidation/slimmedJetsAK8", "JetValidation/slimmedJetsPuppi"] + for JetValFolderDir in JetValFolderDirs: + for JetHistogram in JetHistograms: + plots += [(JetValFolderDir, "", JetHistogram)] + +# does PFCandidate Plots +def doPFCandPlots(files, plots): + #we are going to hard code the end part of the histogram names because there's only 4 + hist_list = ["Charge", "Eta", "Phi", "Log10Pt", "PtLow","PtMid", "PtHigh"] + f = ROOT.TFile(files[0]) + d = f.Get("DQMData/Run 1/ParticleFlow/Run summary/PackedCandidates") + #get the name of the folders, which can use to complete plot name as well probably + PFFolderNames = [] + + for i in d.GetListOfKeys(): + PFFolderNames.append(i.GetName()) + + for PFFolderName in PFFolderNames: + for hist in hist_list: + plots += [(PFFolderName, "", [PFFolderName + hist])] + + +def addPlots(plotter, folder, name, section, histograms, opts, Offset=False): folders = [folder] - plots = [PlotGroup(name, [Plot(h, **opts) for h in histograms])] + #plots = [PlotGroup(name, [Plot(h, **opts) for h in histograms])] #KH print plots - if offset : + if Offset : + plots = [PlotGroup(name, [Plot(h, **opts) for h in histograms])] plotter.append("Offset", folders, PlotFolder(*plots, loopSubFolders=False, page="offset", section=section)) - else : + elif "JetResponse" in folder : + plots = [PlotGroup(name, [Plot(h, **opts) for h in histograms])] plotter.append("ParticleFlow/" + section, folders, PlotFolder(*plots, loopSubFolders=False, page="pf", section=section)) for plot in plots: plot.setProperties(ncols=3) @@ -142,6 +204,28 @@ def addPlots(plotter, folder, name, section, histograms, opts, offset=False): plot.setProperties(legendDh=0.005) plot.setProperties(legendDy=0.24) plot.setProperties(legendDx=0.05) + elif "JetMET" in folder: + for h in histograms: + plots = [PlotGroup(h, [Plot(h, **opts)])] + for plot in plots: + plot.setProperties(legendDw=-0.5) + plot.setProperties(legendDh=0.01) + plot.setProperties(legendDy=0.24) + plot.setProperties(legendDx=0.05) + plotter.append("JetMET" + section, folders, PlotFolder(*plots, loopSubFolders=False, page="JetMET", section=section)) + if "PackedCandidates" in folder: + for h in histograms: + if ("PtMid" in h or "PtHigh" in h): + plots = [PlotGroup(h, [Plot(h, ymin = pow(10,-1), ylog = True)])] + else: + plots = [PlotGroup(h, [Plot(h, **opts)])] + + for plot in plots: + plot.setProperties(legendDw=-0.5) + plot.setProperties(legendDh=0.01) + plot.setProperties(legendDy=0.24) + plot.setProperties(legendDx=0.05) + plotter.append("ParticleFlow/PackedCandidates/" + section, folders, PlotFolder(*plots, loopSubFolders=False, page="PackedCandidates", section= section)) def main(): @@ -163,22 +247,29 @@ def main(): for iptbin in range(len(ptbins)-1): plot_opts["response_{0:.0f}_{1:.0f}".format(ptbins[iptbin], ptbins[iptbin+1])] = {"stat": True} - samples, plots, doOffsetPlots, offsetVar, offsetDR = parse_args() + samples, plots, doOffsetPlots, offsetVar, offsetDR, doPFCandPlots = parse_args() plotter = Plotter() + for folder, name, histograms in plots: opts = plot_opts.get(name, {}) #fullfolder = "DQMData/Run 1/Physics/Run summary/{0}".format(folder) - fullfolder = "DQMData/Run 1/ParticleFlow/Run summary/{0}".format(folder) + #fullfolder = "DQMData/Run 1/ParticleFlow/Run summary/{0}".format(folder) + fullJetFolder = "DQMData/Run 1/ParticleFlow/Run summary/{0}".format(folder) + fullMETFolder = "DQMData/Run 1/JetMET/Run summary/{0}".format(folder) + fullPFCandFolder = "DQMData/Run 1/ParticleFlow/Run summary/PackedCandidates/{0}".format(folder) print "Booking histogram group {0}={1} from folder {2}".format(name, histograms, folder) - if "Offset/" in folder : + if "Offset/" in folder: opts = {'xtitle':'Default', 'ytitle':'Default'} - addPlots(plotter, fullfolder, name, folder, histograms, opts, True) - else : - addPlots(plotter, fullfolder, name, folder, histograms, opts) - + addPlots(plotter, fullJetFolder, name, folder, histograms, opts, True) + if "JetResponse" in folder: + addPlots(plotter, fullJetFolder, name, folder, histograms, opts) + if "METValidation" in folder or "JetValidation" in folder: + addPlots(plotter, fullMETFolder, name, folder, histograms, opts) + if doPFCandPlots: + addPlots(plotter, fullPFCandFolder, name, folder, histograms, opts) outputDir = "plots" # Plot output directory description = "Simple ParticleFlow comparison" diff --git a/Validation/RecoParticleFlow/test/datasets.py b/Validation/RecoParticleFlow/test/datasets.py index eaf3d4f95c934..503ec11dced55 100644 --- a/Validation/RecoParticleFlow/test/datasets.py +++ b/Validation/RecoParticleFlow/test/datasets.py @@ -129,10 +129,9 @@ def cache_das_filenames(self): #prefix = "root://xrootd-cms.infn.it//" tmpdir = "tmp" datasets = [ - Dataset("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_0_0_patch1-110X_mcRun3_2021_realistic_v6-v1/GEN-SIM-DIGI-RAW", "QCD_noPU", prefix, None, False, tmpdir), - Dataset("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_0_0_patch1-PU_110X_mcRun3_2021_realistic_v6-v1/GEN-SIM-DIGI-RAW", "QCD_PU", prefix, None, False, tmpdir), - Dataset("/RelValZMM_14/CMSSW_11_0_0_patch1-PU_110X_mcRun3_2021_realistic_v6-v1/GEN-SIM-DIGI-RAW", "ZMM_PU", prefix, None, False, tmpdir), - Dataset("/RelValNuGun/CMSSW_11_0_0_patch1-PU_110X_mcRun3_2021_realistic_v6-v1/GEN-SIM-DIGI-RAW", "NuGun_PU", prefix, None, False, tmpdir)] - + Dataset("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_1_0_pre5-111X_mcRun3_2021_realistic_v2-v1/GEN-SIM-DIGI-RAW", "QCD_noPU", prefix, None, False, tmpdir), + Dataset("/RelValQCD_FlatPt_15_3000HS_14/CMSSW_11_1_0_pre5-PU_111X_mcRun3_2021_realistic_v2_rsb-v1/GEN-SIM-DIGI-RAW", "QCD_PU", prefix, None, False, tmpdir), + Dataset("/RelValZMM_14/CMSSW_11_1_0_pre5-PU_111X_mcRun3_2021_realistic_v2_rsb-v1/GEN-SIM-DIGI-RAW", "ZMM_PU", prefix, None, False, tmpdir), + Dataset("/RelValNuGun/CMSSW_11_1_0_pre5-PU_111X_mcRun3_2021_realistic_v2_rsb-v1/GEN-SIM-DIGI-RAW", "NuGun_PU", prefix, None, False, tmpdir)] for ds in datasets: ds.cache_das_filenames()