-
Notifications
You must be signed in to change notification settings - Fork 4.6k
BTV OfflineDQM preparations for Run 3 #35985
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 23 commits
8a4c9c8
3aea6b7
1b3b533
0365c0b
533e06a
280040f
0e53310
f686f58
e57ad02
826273d
cf6d945
6dfddb9
b88fb50
e6a81d9
6eca77f
87b4db8
198558a
e3cd8d7
4d6881d
e6c4ea3
8eab003
a0b411a
db43d9e
696c60c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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<std::vector<pat::Jet> >(pSet.getParameter<edm::InputTag>("JetTag"))), | ||
| disrParameters_(pSet.getParameter<edm::ParameterSet>("parameters")), | ||
|
|
||
| folder_(pSet.getParameter<std::string>("folder")), | ||
| discrNumerator_(pSet.getParameter<vstring>("numerator")), | ||
| discrDenominator_(pSet.getParameter<vstring>("denominator")), | ||
|
|
||
| mclevel_(pSet.getParameter<int>("MClevel")), | ||
| doCTagPlots_(pSet.getParameter<bool>("CTagPlots")), | ||
| dodifferentialPlots_(pSet.getParameter<bool>("differentialPlots")), | ||
| discrCut_(pSet.getParameter<double>("discrCut")), | ||
|
|
||
| etaActive_(pSet.getParameter<bool>("etaActive")), | ||
| etaMin_(pSet.getParameter<double>("etaMin")), | ||
| etaMax_(pSet.getParameter<double>("etaMax")), | ||
| ptActive_(pSet.getParameter<bool>("ptActive")), | ||
| ptMin_(pSet.getParameter<double>("ptMin")), | ||
| ptMax_(pSet.getParameter<double>("ptMax")) | ||
|
|
||
| {} | ||
|
|
||
| MiniAODTaggerAnalyzer::~MiniAODTaggerAnalyzer() {} | ||
|
|
||
| void MiniAODTaggerAnalyzer::bookHistograms(DQMStore::IBooker& ibook, edm::Run const& run, edm::EventSetup const& es) { | ||
| jetTagPlotter_ = std::make_unique<JetTagPlotter>(folder_, | ||
| EtaPtBin(etaActive_, etaMin_, etaMax_, ptActive_, ptMin_, ptMax_), | ||
| disrParameters_, | ||
| mclevel_, | ||
| false, | ||
| ibook, | ||
| doCTagPlots_, | ||
| dodifferentialPlots_, | ||
| discrCut_); | ||
| } | ||
|
|
||
| void MiniAODTaggerAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { | ||
| edm::Handle<std::vector<pat::Jet> > jetCollection; | ||
| iEvent.getByToken(jetToken_, jetCollection); | ||
|
|
||
| // Loop over the pat::Jets | ||
| for (std::vector<pat::Jet>::const_iterator jet = jetCollection->begin(); jet != jetCollection->end(); ++jet) { | ||
| // fill numerator | ||
| float numerator = 0; | ||
| for (const auto& discrLabel : discrNumerator_) { | ||
| numerator = numerator + jet->bDiscriminator(discrLabel); | ||
marco-link marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
|
|
||
| // fill denominator | ||
| float denominator; | ||
| if (discrDenominator_.empty()) { | ||
marco-link marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| denominator = 1; | ||
|
||
| } else { | ||
| denominator = 0; | ||
|
|
||
| for (const auto& discrLabel : discrDenominator_) { | ||
| denominator = denominator + jet->bDiscriminator(discrLabel); | ||
marco-link marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
| } | ||
|
|
||
| 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); | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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<std::string> vstring; | ||
|
|
||
| // using JetTagPlotter object for all the hard work ;) | ||
| std::unique_ptr<JetTagPlotter> jetTagPlotter_; | ||
|
|
||
| const edm::EDGetTokenT<std::vector<pat::Jet> > jetToken_; | ||
| const edm::ParameterSet disrParameters_; | ||
|
|
||
| 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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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<std::string>("folder")), | ||
| disrParameters_(pSet.getParameter<edm::ParameterSet>("parameters")), | ||
|
|
||
| mclevel_(pSet.getParameter<int>("MClevel")), | ||
| doCTagPlots_(pSet.getParameter<bool>("CTagPlots")), | ||
| dodifferentialPlots_(pSet.getParameter<bool>("differentialPlots")), | ||
| discrCut_(pSet.getParameter<double>("discrCut")), | ||
|
|
||
| etaActive_(pSet.getParameter<bool>("etaActive")), | ||
| etaMin_(pSet.getParameter<double>("etaMin")), | ||
| etaMax_(pSet.getParameter<double>("etaMax")), | ||
| ptActive_(pSet.getParameter<bool>("ptActive")), | ||
| ptMin_(pSet.getParameter<double>("ptMin")), | ||
| ptMax_(pSet.getParameter<double>("ptMax")) | ||
|
|
||
| {} | ||
|
|
||
| MiniAODTaggerHarvester::~MiniAODTaggerHarvester() {} | ||
|
|
||
| void MiniAODTaggerHarvester::dqmEndJob(DQMStore::IBooker& ibook, DQMStore::IGetter& iget) { | ||
| jetTagPlotter_ = std::make_unique<JetTagPlotter>(folder_, | ||
| EtaPtBin(etaActive_, etaMin_, etaMax_, ptActive_, ptMin_, ptMax_), | ||
| disrParameters_, | ||
| mclevel_, | ||
| true, | ||
| ibook, | ||
| doCTagPlots_, | ||
| dodifferentialPlots_, | ||
| discrCut_); | ||
|
|
||
| jetTagPlotter_->finalize(ibook, iget); | ||
| } | ||
|
|
||
| //define this as a plug-in | ||
| DEFINE_FWK_MODULE(MiniAODTaggerHarvester); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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> jetTagPlotter_; | ||
|
|
||
| const std::string folder_; | ||
| const edm::ParameterSet disrParameters_; | ||
|
|
||
| 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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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', | ||
| ), | ||
| ), | ||
| } |
Uh oh!
There was an error while loading. Please reload this page.