diff --git a/Configuration/StandardSequences/python/Harvesting_cff.py b/Configuration/StandardSequences/python/Harvesting_cff.py index 318516561d254..3d23b8c52feb7 100644 --- a/Configuration/StandardSequences/python/Harvesting_cff.py +++ b/Configuration/StandardSequences/python/Harvesting_cff.py @@ -9,6 +9,7 @@ from Validation.RecoHI.HarvestingHI_cff import * from Validation.RecoJets.JetPostProcessor_cff import * from Validation.RecoMET.METPostProcessor_cff import * +from DQMOffline.RecoB.bTagMiniDQM_cff import * dqmHarvesting = cms.Path(DQMOffline_SecondStep*DQMOffline_Certification) @@ -66,5 +67,5 @@ alcaHarvesting = cms.Path() #alcaHarvesting = cms.Sequence() -validationHarvestingMiniAOD = cms.Path(JetPostProcessor*METPostProcessorHarvesting*postValidationMiniAOD) +validationHarvestingMiniAOD = cms.Path(JetPostProcessor*METPostProcessorHarvesting*bTagMiniValidationHarvesting*postValidationMiniAOD) #validationHarvestingMiniAOD = cms.Sequence(JetPostProcessor*METPostProcessorHarvesting*postValidationMiniAOD) diff --git a/Configuration/StandardSequences/python/Validation_cff.py b/Configuration/StandardSequences/python/Validation_cff.py index 1ce85a85ddca9..193c582d9cfc4 100644 --- a/Configuration/StandardSequences/python/Validation_cff.py +++ b/Configuration/StandardSequences/python/Validation_cff.py @@ -31,6 +31,7 @@ from Validation.RecoEgamma.photonMiniAODValidationSequence_cff import * from Validation.RecoEgamma.egammaValidationMiniAOD_cff import * from Validation.RecoTau.RecoTauValidation_cff import * +from DQMOffline.RecoB.bTagMiniDQM_cff import * prevalidationNoHLT = cms.Sequence( cms.SequencePlaceholder("mix") * globalPrevalidation * metPreValidSeq * jetPreValidSeq ) prevalidation = cms.Sequence( cms.SequencePlaceholder("mix") * globalPrevalidation * hltassociation * metPreValidSeq * jetPreValidSeq ) @@ -66,7 +67,7 @@ validationLiteTracking.replace(globalValidation,globalValidationLiteTracking) validationLiteTracking.remove(condDataValidation) -validationMiniAOD = cms.Sequence(type0PFMEtCorrectionPFCandToVertexAssociationForValidationMiniAOD * JetValidationMiniAOD * METValidationMiniAOD * tauValidationSequenceMiniAOD) +validationMiniAOD = cms.Sequence(type0PFMEtCorrectionPFCandToVertexAssociationForValidationMiniAOD * JetValidationMiniAOD * METValidationMiniAOD * tauValidationSequenceMiniAOD * bTagMiniValidationSource) prevalidation_preprod = cms.Sequence( preprodPrevalidation ) diff --git a/DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py b/DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py index f16d0889589ce..17b0fd237ab42 100644 --- a/DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py +++ b/DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py @@ -224,7 +224,8 @@ from PhysicsTools.NanoAOD.nanoDQM_cff import * from Validation.RecoParticleFlow.DQMForPF_MiniAOD_cff import * +from DQMOffline.RecoB.bTagMiniDQM_cff import * -DQMHarvestMiniAOD = cms.Sequence( dataCertificationJetMETSequence * muonQualityTests_miniAOD * DQMHarvestPF ) +DQMHarvestMiniAOD = cms.Sequence( dataCertificationJetMETSequence * muonQualityTests_miniAOD * DQMHarvestPF * bTagMiniDQMHarvesting) DQMHarvestNanoAOD = cms.Sequence( nanoHarvest ) diff --git a/DQMOffline/Configuration/python/DQMOffline_cff.py b/DQMOffline/Configuration/python/DQMOffline_cff.py index 70c2b24d6202c..1d2ad39ad424d 100644 --- a/DQMOffline/Configuration/python/DQMOffline_cff.py +++ b/DQMOffline/Configuration/python/DQMOffline_cff.py @@ -245,10 +245,11 @@ from Validation.RecoParticleFlow.miniAODDQM_cff import * # On MiniAOD vs RECO from Validation.RecoParticleFlow.DQMForPF_MiniAOD_cff import * # MiniAOD PF variables from DQM.TrackingMonitor.tracksDQMMiniAOD_cff import * +from DQMOffline.RecoB.bTagMiniDQM_cff import * from DQMOffline.Muon.miniAOD_cff import * from DQM.Physics.DQMTopMiniAOD_cff import * -DQMOfflineMiniAOD = cms.Sequence(jetMETDQMOfflineRedoProductsMiniAOD*muonMonitors_miniAOD*MuonMiniAOD*DQMOfflinePF) +DQMOfflineMiniAOD = cms.Sequence(jetMETDQMOfflineRedoProductsMiniAOD*bTagMiniDQMSource*muonMonitors_miniAOD*MuonMiniAOD*DQMOfflinePF) #Post sequences are automatically placed in the EndPath by ConfigBuilder if PAT is run. #miniAOD DQM sequences need to access the filter results. diff --git a/DQMOffline/RecoB/plugins/BuildFile.xml b/DQMOffline/RecoB/plugins/BuildFile.xml index a2849b075a367..c43ed279fba3a 100644 --- a/DQMOffline/RecoB/plugins/BuildFile.xml +++ b/DQMOffline/RecoB/plugins/BuildFile.xml @@ -6,6 +6,7 @@ + @@ -13,7 +14,7 @@ - + diff --git a/DQMOffline/RecoB/plugins/MiniAODTaggerAnalyzer.cc b/DQMOffline/RecoB/plugins/MiniAODTaggerAnalyzer.cc new file mode 100644 index 0000000000000..b9e28b7ba2006 --- /dev/null +++ b/DQMOffline/RecoB/plugins/MiniAODTaggerAnalyzer.cc @@ -0,0 +1,85 @@ +#include "DQMOffline/RecoB/plugins/MiniAODTaggerAnalyzer.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/Event.h" + +MiniAODTaggerAnalyzer::MiniAODTaggerAnalyzer(const edm::ParameterSet& pSet) + : jetToken_(consumes >(pSet.getParameter("JetTag"))), + discrParameters_(pSet.getParameter("parameters")), + + folder_(pSet.getParameter("folder")), + discrNumerator_(pSet.getParameter("numerator")), + discrDenominator_(pSet.getParameter("denominator")), + + mclevel_(pSet.getParameter("MClevel")), + doCTagPlots_(pSet.getParameter("CTagPlots")), + dodifferentialPlots_(pSet.getParameter("differentialPlots")), + discrCut_(pSet.getParameter("discrCut")), + + etaActive_(pSet.getParameter("etaActive")), + etaMin_(pSet.getParameter("etaMin")), + etaMax_(pSet.getParameter("etaMax")), + ptActive_(pSet.getParameter("ptActive")), + ptMin_(pSet.getParameter("ptMin")), + ptMax_(pSet.getParameter("ptMax")) + +{} + +MiniAODTaggerAnalyzer::~MiniAODTaggerAnalyzer() {} + +void MiniAODTaggerAnalyzer::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& es) { + jetTagPlotter_ = std::make_unique(folder_, + EtaPtBin(etaActive_, etaMin_, etaMax_, ptActive_, ptMin_, ptMax_), + discrParameters_, + mclevel_, + false, + ibook, + doCTagPlots_, + dodifferentialPlots_, + discrCut_); +} + +void MiniAODTaggerAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + edm::Handle > jetCollection; + iEvent.getByToken(jetToken_, jetCollection); + + // Loop over the pat::Jets + for (std::vector::const_iterator jet = jetCollection->begin(); jet != jetCollection->end(); ++jet) { + // fill numerator + float numerator = 0; + for (const auto& discrLabel : discrNumerator_) { + numerator += jet->bDiscriminator(discrLabel); + } + + // fill denominator + float denominator; + if (discrDenominator_.empty()) { + denominator = 1; // no division performed + } else { + denominator = 0; + + for (const auto& discrLabel : discrDenominator_) { + denominator += jet->bDiscriminator(discrLabel); + } + } + + const float jec = 1.; // JEC not implemented! + + // only add to histograms when discriminator values are valid + if (numerator >= 0 && denominator > 0) { + reco::Jet recoJet = *jet; + if (jetTagPlotter_->etaPtBin().inBin(recoJet, jec)) { + jetTagPlotter_->analyzeTag(recoJet, jec, numerator / denominator, jet->partonFlavour()); + } + } + } + + // fill JetMultiplicity + if (mclevel_ > 0) { + jetTagPlotter_->analyzeTag(1.); + } else { + jetTagPlotter_->analyzeTag(); + } +} + +//define this as a plug-in +DEFINE_FWK_MODULE(MiniAODTaggerAnalyzer); diff --git a/DQMOffline/RecoB/plugins/MiniAODTaggerAnalyzer.h b/DQMOffline/RecoB/plugins/MiniAODTaggerAnalyzer.h new file mode 100644 index 0000000000000..a39be8262e530 --- /dev/null +++ b/DQMOffline/RecoB/plugins/MiniAODTaggerAnalyzer.h @@ -0,0 +1,49 @@ +#ifndef MiniAODTaggerAnalyzer_H +#define MiniAODTaggerAnalyzer_H + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DataFormats/PatCandidates/interface/Jet.h" +#include "DQMOffline/RecoB/interface/JetTagPlotter.h" + +/** \class MiniAODTaggerAnalyzer + * + * Tagger analyzer to run on MiniAOD + * + */ + +class MiniAODTaggerAnalyzer : public DQMEDAnalyzer { +public: + explicit MiniAODTaggerAnalyzer(const edm::ParameterSet& pSet); + ~MiniAODTaggerAnalyzer() override; + + void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override; + +private: + void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override; + typedef std::vector vstring; + + // using JetTagPlotter object for all the hard work ;) + std::unique_ptr jetTagPlotter_; + + const edm::EDGetTokenT > jetToken_; + const edm::ParameterSet discrParameters_; + + const std::string folder_; + const vstring discrNumerator_; + const vstring discrDenominator_; + + const int mclevel_; + const bool doCTagPlots_; + const bool dodifferentialPlots_; + const double discrCut_; + + const bool etaActive_; + const double etaMin_; + const double etaMax_; + const bool ptActive_; + const double ptMin_; + const double ptMax_; +}; + +#endif diff --git a/DQMOffline/RecoB/plugins/MiniAODTaggerHarvester.cc b/DQMOffline/RecoB/plugins/MiniAODTaggerHarvester.cc new file mode 100644 index 0000000000000..df18933121786 --- /dev/null +++ b/DQMOffline/RecoB/plugins/MiniAODTaggerHarvester.cc @@ -0,0 +1,40 @@ +#include "DQMOffline/RecoB/plugins/MiniAODTaggerHarvester.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/Event.h" + +MiniAODTaggerHarvester::MiniAODTaggerHarvester(const edm::ParameterSet& pSet) + : folder_(pSet.getParameter("folder")), + discrParameters_(pSet.getParameter("parameters")), + + mclevel_(pSet.getParameter("MClevel")), + doCTagPlots_(pSet.getParameter("CTagPlots")), + dodifferentialPlots_(pSet.getParameter("differentialPlots")), + discrCut_(pSet.getParameter("discrCut")), + + etaActive_(pSet.getParameter("etaActive")), + etaMin_(pSet.getParameter("etaMin")), + etaMax_(pSet.getParameter("etaMax")), + ptActive_(pSet.getParameter("ptActive")), + ptMin_(pSet.getParameter("ptMin")), + ptMax_(pSet.getParameter("ptMax")) + +{} + +MiniAODTaggerHarvester::~MiniAODTaggerHarvester() {} + +void MiniAODTaggerHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& iget) { + jetTagPlotter_ = std::make_unique(folder_, + EtaPtBin(etaActive_, etaMin_, etaMax_, ptActive_, ptMin_, ptMax_), + discrParameters_, + mclevel_, + true, + ibook, + doCTagPlots_, + dodifferentialPlots_, + discrCut_); + + jetTagPlotter_->finalize(ibook, iget); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(MiniAODTaggerHarvester); diff --git a/DQMOffline/RecoB/plugins/MiniAODTaggerHarvester.h b/DQMOffline/RecoB/plugins/MiniAODTaggerHarvester.h new file mode 100644 index 0000000000000..de535377473e9 --- /dev/null +++ b/DQMOffline/RecoB/plugins/MiniAODTaggerHarvester.h @@ -0,0 +1,40 @@ +#ifndef MiniAODTaggerHarvester_H +#define MiniAODTaggerHarvester_H + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "DQMServices/Core/interface/DQMEDHarvester.h" +#include "DQMOffline/RecoB/interface/JetTagPlotter.h" + +/** \class MiniAODTaggerHarvester + * + * Tagger harvester to run on MiniAOD + * + */ + +class MiniAODTaggerHarvester : public DQMEDHarvester { +public: + explicit MiniAODTaggerHarvester(const edm::ParameterSet& pSet); + ~MiniAODTaggerHarvester() override; + +private: + void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; + + std::unique_ptr jetTagPlotter_; + + const std::string folder_; + const edm::ParameterSet discrParameters_; + + const int mclevel_; + const bool doCTagPlots_; + const bool dodifferentialPlots_; + const double discrCut_; + + const bool etaActive_; + const double etaMin_; + const double etaMax_; + const bool ptActive_; + const double ptMin_; + const double ptMax_; +}; + +#endif diff --git a/DQMOffline/RecoB/python/bTagCommon_cff.py b/DQMOffline/RecoB/python/bTagCommon_cff.py index 109cbd6ab014f..84dee731be624 100644 --- a/DQMOffline/RecoB/python/bTagCommon_cff.py +++ b/DQMOffline/RecoB/python/bTagCommon_cff.py @@ -50,29 +50,5 @@ folder = cms.string("JP") ), - cms.PSet( - bTagGenericAnalysisBlock, - label = cms.InputTag("pfDeepCSVDiscriminatorsJetTags:BvsAll"), - folder = cms.string("deepCSV_BvsAll"), - differentialPlots = cms.bool(True), - discrCut = cms.double(0.1522) - ), - cms.PSet( - cTagGenericAnalysisBlock, - label = cms.InputTag("pfDeepCSVDiscriminatorsJetTags:CvsL"), - folder = cms.string("deepCSV_CvsL"), - doCTagPlots = cms.bool(True), - differentialPlots = cms.bool(True), - discrCut = cms.double(0.15) - ), - cms.PSet( - cTagGenericAnalysisBlock, - label = cms.InputTag("pfDeepCSVDiscriminatorsJetTags:CvsB"), - folder = cms.string("deepCSV_CvsB"), - doCTagPlots = cms.bool(True), - differentialPlots = cms.bool(True), - discrCut = cms.double(0.28) - ), - ) ) diff --git a/DQMOffline/RecoB/python/bTagMiniDQMDeepCSV.py b/DQMOffline/RecoB/python/bTagMiniDQMDeepCSV.py new file mode 100644 index 0000000000000..4b4aa01dbd327 --- /dev/null +++ b/DQMOffline/RecoB/python/bTagMiniDQMDeepCSV.py @@ -0,0 +1,55 @@ +import FWCore.ParameterSet.Config as cms + +from DQMOffline.RecoB.bTagGenericAnalysis_cff import bTagGenericAnalysisBlock +from DQMOffline.RecoB.cTagGenericAnalysis_cff import cTagGenericAnalysisBlock + + +# recommendation for UL18: https://twiki.cern.ch/twiki/bin/view/CMS/BtagRecommendation106XUL18 +deepCSVWP = { + 'BvsAll': 0.1208, # loose + 'CvsL': 0.153, # medium + 'CvsB': 0.363, # medium +} + + +DeepCSVDiscriminators = { + 'BvsAll': cms.PSet( + bTagGenericAnalysisBlock, + + folder = cms.string('DeepCSV_BvsAll'), + CTagPlots = cms.bool(False), + discrCut = cms.double(deepCSVWP['BvsAll']), + numerator = cms.vstring( + 'pfDeepCSVJetTags:probb', + 'pfDeepCSVJetTags:probbb', + ), + denominator = cms.vstring(), + ), + + 'CvsL': cms.PSet( + cTagGenericAnalysisBlock, + + folder = cms.string('DeepCSV_CvsL'), + CTagPlots = cms.bool(True), + discrCut = cms.double(deepCSVWP['CvsL']), + numerator = cms.vstring('pfDeepCSVJetTags:probc'), + denominator = cms.vstring( + 'pfDeepCSVJetTags:probc', + 'pfDeepCSVJetTags:probudsg', + ), + ), + + 'CvsB': cms.PSet( + cTagGenericAnalysisBlock, + + folder = cms.string('DeepCSV_CvsB'), + CTagPlots = cms.bool(True), + discrCut = cms.double(deepCSVWP['CvsB']), + numerator = cms.vstring('pfDeepCSVJetTags:probc'), + denominator = cms.vstring( + 'pfDeepCSVJetTags:probc', + 'pfDeepCSVJetTags:probb', + 'pfDeepCSVJetTags:probbb', + ), + ), +} diff --git a/DQMOffline/RecoB/python/bTagMiniDQMDeepFlavour.py b/DQMOffline/RecoB/python/bTagMiniDQMDeepFlavour.py new file mode 100644 index 0000000000000..59d29ef737a8f --- /dev/null +++ b/DQMOffline/RecoB/python/bTagMiniDQMDeepFlavour.py @@ -0,0 +1,58 @@ +import FWCore.ParameterSet.Config as cms + +from DQMOffline.RecoB.bTagGenericAnalysis_cff import bTagGenericAnalysisBlock +from DQMOffline.RecoB.cTagGenericAnalysis_cff import cTagGenericAnalysisBlock + + +# recommendation for UL18: https://twiki.cern.ch/twiki/bin/view/CMS/BtagRecommendation106XUL18 +deepFlavourWP = { + 'BvsAll': 0.0490, # loose + 'CvsL': 0.099, # medium + 'CvsB': 0.325, # medium +} + + +DeepFlavourDiscriminators = { + 'BvsAll': cms.PSet( + bTagGenericAnalysisBlock, + + folder = cms.string('DeepFlavour_BvsAll'), + CTagPlots = cms.bool(False), + discrCut = cms.double(deepFlavourWP['BvsAll']), + numerator = cms.vstring( + 'pfDeepFlavourJetTags:probb', + 'pfDeepFlavourJetTags:probbb', + 'pfDeepFlavourJetTags:problepb', + ), + denominator = cms.vstring(), + ), + + 'CvsL': cms.PSet( + cTagGenericAnalysisBlock, + + folder = cms.string('DeepFlavour_CvsL'), + CTagPlots = cms.bool(True), + discrCut = cms.double(deepFlavourWP['CvsL']), + numerator = cms.vstring('pfDeepFlavourJetTags:probc'), + denominator = cms.vstring( + 'pfDeepFlavourJetTags:probc', + 'pfDeepFlavourJetTags:probuds', + 'pfDeepFlavourJetTags:probg', + ), + ), + + 'CvsB': cms.PSet( + cTagGenericAnalysisBlock, + + folder = cms.string('DeepFlavour_CvsB'), + CTagPlots = cms.bool(True), + discrCut = cms.double(deepFlavourWP['CvsB']), + numerator = cms.vstring('pfDeepFlavourJetTags:probc'), + denominator = cms.vstring( + 'pfDeepFlavourJetTags:probc', + 'pfDeepFlavourJetTags:probb', + 'pfDeepFlavourJetTags:probbb', + 'pfDeepFlavourJetTags:problepb', + ), + ), +} diff --git a/DQMOffline/RecoB/python/bTagMiniDQM_cff.py b/DQMOffline/RecoB/python/bTagMiniDQM_cff.py new file mode 100644 index 0000000000000..f5f96ca1caa7a --- /dev/null +++ b/DQMOffline/RecoB/python/bTagMiniDQM_cff.py @@ -0,0 +1,96 @@ +import FWCore.ParameterSet.Config as cms +from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer +from DQMServices.Core.DQMEDHarvester import DQMEDHarvester + +from DQMOffline.RecoB.bTagMiniDQMDeepFlavour import * +from DQMOffline.RecoB.bTagMiniDQMDeepCSV import * + + +bTagMiniDQMGlobal = cms.PSet( + JetTag = cms.InputTag('slimmedJets'), + MClevel = cms.int32(0), + differentialPlots = cms.bool(True), + + ptActive = cms.bool(False), + ptMin = cms.double(30.), + ptMax = cms.double(40000.), +) + + +# Eta regions +Etaregions = { + 'Global': cms.PSet( + etaActive = cms.bool(False), + etaMin = cms.double(0.), + etaMax = cms.double(2.5), + ), + + 'Barrel': cms.PSet( + etaActive = cms.bool(True), + etaMin = cms.double(0.), + etaMax = cms.double(1.4), + ), + + 'Endcap': cms.PSet( + etaActive = cms.bool(True), + etaMin = cms.double(1.4), + etaMax = cms.double(2.5), + ), +} + + +def addSequences(Analyzer, Harvester, discriminators, regions, globalPSet, label='bTag'): + for discr in discriminators.keys(): + for region in regions.keys(): + name = label + discr + region + + globals()[name + 'Analyzer'] = DQMEDAnalyzer('MiniAODTaggerAnalyzer', cms.PSet(globalPSet, discriminators[discr], regions[region])) + globals()[name + 'Harvester'] = DQMEDHarvester('MiniAODTaggerHarvester', cms.PSet(globalPSet, discriminators[discr], regions[region])) + + Analyzer.insert(-1, globals()[name + 'Analyzer']) + Harvester.insert(-1, globals()[name + 'Harvester']) + + + +bTagMiniDQMSource = cms.Sequence() +bTagMiniDQMHarvesting = cms.Sequence() + +addSequences(bTagMiniDQMSource, + bTagMiniDQMHarvesting, + discriminators=DeepFlavourDiscriminators, + regions=Etaregions, + globalPSet=bTagMiniDQMGlobal, + label='bTagDeepFlavourDQM') + +addSequences(bTagMiniDQMSource, + bTagMiniDQMHarvesting, + discriminators=DeepCSVDiscriminators, + regions=Etaregions, + globalPSet=bTagMiniDQMGlobal, + label='bTagDeepCSVDQM') + + + +# Validation addSequences + +bTagMiniValidationGlobal = bTagMiniDQMGlobal.clone( + MClevel = cms.int32(1) # produce flavour plots for b, c ,light (dusg) +) + +bTagMiniValidationSource = cms.Sequence() +bTagMiniValidationHarvesting = cms.Sequence() + + +addSequences(bTagMiniValidationSource, + bTagMiniValidationHarvesting, + discriminators=DeepFlavourDiscriminators, + regions={'Global': Etaregions['Global']}, # only for global Eta range + globalPSet=bTagMiniValidationGlobal, + label='bTagDeepFlavourValidation') + +addSequences(bTagMiniValidationSource, + bTagMiniValidationHarvesting, + discriminators=DeepCSVDiscriminators, + regions={'Global': Etaregions['Global']}, # only for global Eta range + globalPSet=bTagMiniValidationGlobal, + label='bTagDeepCSVValidation') diff --git a/DQMOffline/RecoB/python/dqmAnalyzer_cff.py b/DQMOffline/RecoB/python/dqmAnalyzer_cff.py index 732f4db6329e9..379fa3011951d 100644 --- a/DQMOffline/RecoB/python/dqmAnalyzer_cff.py +++ b/DQMOffline/RecoB/python/dqmAnalyzer_cff.py @@ -1,15 +1,12 @@ import FWCore.ParameterSet.Config as cms -from RecoBTag.Combined.pfDeepCSVDiscriminatorsJetTags_cfi import pfDeepCSVDiscriminatorsJetTags - - ######### DATA ############ from DQMOffline.RecoB.bTagAnalysisData_cfi import * bTagAnalysis.ptRanges = cms.vdouble(0.0) bTagAnalysis.doJetID = True bTagAnalysis.doJEC = True #Residual correction will be added inside the c++ code only for data (checking the presence of genParticles collection), not explicit here as this sequence also ran on MC FullSim -bTagPlotsDATA = cms.Sequence(pfDeepCSVDiscriminatorsJetTags * bTagAnalysis) +bTagPlotsDATA = cms.Sequence(bTagAnalysis) ## customizations for the pp_on_AA eras from Configuration.Eras.Modifier_pp_on_XeXe_2017_cff import pp_on_XeXe_2017 @@ -56,7 +53,7 @@ bTagValidation.doJEC = True bTagValidation.genJetsMatched = cms.InputTag("newpatJetGenJetMatch") #to run on fastsim -prebTagSequenceMC = cms.Sequence(ak4GenJetsForPUid*newpatJetGenJetMatch*selectedHadronsAndPartons*myak4JetFlavourInfos*pfDeepCSVDiscriminatorsJetTags) +prebTagSequenceMC = cms.Sequence(ak4GenJetsForPUid*newpatJetGenJetMatch*selectedHadronsAndPartons*myak4JetFlavourInfos) bTagPlotsMC = cms.Sequence(bTagValidation) ## customizations for the pp_on_AA eras