From 7a0e4dc72f5163d2eede7029ffeb095782ddeeb2 Mon Sep 17 00:00:00 2001 From: Huilin Qu Date: Mon, 3 Sep 2018 17:48:24 +0200 Subject: [PATCH] Style and performance improvements. --- .../interface/DeepBoostedJetFeatures.h | 15 ++ DataFormats/PatCandidates/interface/Jet.h | 2 +- .../python/recoLayer0/bTagging_cff.py | 108 ++-------- .../python/slimming/applyDeepBtagging_cff.py | 56 +---- .../PatAlgos/python/tools/jetTools.py | 16 +- .../plugins/DeepBoostedJetTagInfoProducer.cc | 196 ++++++++++-------- .../plugins/DeepBoostedJetTagsProducer.cc | 162 +++++++-------- .../pfDeepBoostedJetPreprocessParams_cfi.py | 2 +- .../python/pfDeepBoostedJetTags_cfi.py | 27 --- .../python/pfDeepBoostedJet_cff.py | 32 ++- 10 files changed, 248 insertions(+), 368 deletions(-) delete mode 100644 RecoBTag/DeepBoostedJet/python/pfDeepBoostedJetTags_cfi.py diff --git a/DataFormats/BTauReco/interface/DeepBoostedJetFeatures.h b/DataFormats/BTauReco/interface/DeepBoostedJetFeatures.h index d22ae84fb7c26..508555d3d704e 100644 --- a/DataFormats/BTauReco/interface/DeepBoostedJetFeatures.h +++ b/DataFormats/BTauReco/interface/DeepBoostedJetFeatures.h @@ -20,6 +20,10 @@ class DeepBoostedJetFeatures { feature_map_[name]; } + void reserve(const std::string& name, unsigned capacity){ + feature_map_[name].reserve(capacity); + } + void fill(const std::string& name, float value){ auto item = feature_map_.find(name); if (item != feature_map_.end()){ @@ -34,6 +38,17 @@ class DeepBoostedJetFeatures { feature_map_[name] = vec; } + void check_consistency(const std::vector &names) const { + if (names.empty()) return; + const auto ref_len = get(names.front()).size(); + for (unsigned i=1; i& get(const std::string& name) const { auto item = feature_map_.find(name); if (item != feature_map_.end()){ diff --git a/DataFormats/PatCandidates/interface/Jet.h b/DataFormats/PatCandidates/interface/Jet.h index 9b3d2c94b98c4..eeccc7897ce27 100644 --- a/DataFormats/PatCandidates/interface/Jet.h +++ b/DataFormats/PatCandidates/interface/Jet.h @@ -454,7 +454,7 @@ namespace pat { /// clear daughter references void clearDaughters() override { - reco::CompositePtrCandidate::clearDaughters(); + PATObject::clearDaughters(); daughtersTemp_.reset(); // need to reset daughtersTemp_ as well } diff --git a/PhysicsTools/PatAlgos/python/recoLayer0/bTagging_cff.py b/PhysicsTools/PatAlgos/python/recoLayer0/bTagging_cff.py index 32af1581a7971..fd7357fc8f300 100644 --- a/PhysicsTools/PatAlgos/python/recoLayer0/bTagging_cff.py +++ b/PhysicsTools/PatAlgos/python/recoLayer0/bTagging_cff.py @@ -191,102 +191,30 @@ , 'pfNegativeDeepFlavourJetTags:probg' : [["pfNegativeDeepFlavourTagInfos"], ['pfDeepCSVNegativeTagInfos', "pfImpactParameterTagInfos", 'pfInclusiveSecondaryVertexFinderNegativeTagInfos']] , 'pfDeepDoubleBJetTags:probQ' : [["pfDeepDoubleBTagInfos"], ['pfBoostedDoubleSVAK8TagInfos', "pfImpactParameterAK8TagInfos", 'pfInclusiveSecondaryVertexFinderAK8TagInfos']] , 'pfDeepDoubleBJetTags:probH' : [["pfDeepDoubleBTagInfos"], ['pfBoostedDoubleSVAK8TagInfos', "pfImpactParameterAK8TagInfos", 'pfInclusiveSecondaryVertexFinderAK8TagInfos']] - # DeepBoostedJetTagging - , 'pfDeepBoostedJetTags:probTbcq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probTbqq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probTbc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probTbq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probWcq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probWqq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probZbb' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probZcc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probZqq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probHbb' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probHcc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probHqqqq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probQCDbb' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probQCDcc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probQCDb' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probQCDc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfDeepBoostedJetTags:probQCDothers' : [["pfDeepBoostedJetTagInfos"]] - # DeepBoostedJetTagging - Mass-decorrelated - , 'pfMassDecorrelatedDeepBoostedJetTags:probTbcq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probTbqq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probTbc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probTbq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probWcq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probWqq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probZbb' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probZcc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probZqq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probHbb' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probHcc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probHqqqq' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probQCDbb' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probQCDcc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probQCDb' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probQCDc' : [["pfDeepBoostedJetTagInfos"]] - , 'pfMassDecorrelatedDeepBoostedJetTags:probQCDothers' : [["pfDeepBoostedJetTagInfos"]] } -#meta-taggers are simple arithmetic on top of other taggers, they are stored here -#such that in case you want them re-run also the parent tagger is re-run as well -_pfDeepBoostedJetTagsProbs = [ - 'pfDeepBoostedJetTags:probTbcq', - 'pfDeepBoostedJetTags:probTbqq', - 'pfDeepBoostedJetTags:probTbc', - 'pfDeepBoostedJetTags:probTbq', - 'pfDeepBoostedJetTags:probWcq', - 'pfDeepBoostedJetTags:probWqq', - 'pfDeepBoostedJetTags:probZbb', - 'pfDeepBoostedJetTags:probZcc', - 'pfDeepBoostedJetTags:probZqq', - 'pfDeepBoostedJetTags:probHbb', - 'pfDeepBoostedJetTags:probHcc', - 'pfDeepBoostedJetTags:probHqqqq', - 'pfDeepBoostedJetTags:probQCDbb', - 'pfDeepBoostedJetTags:probQCDcc', - 'pfDeepBoostedJetTags:probQCDb', - 'pfDeepBoostedJetTags:probQCDc', - 'pfDeepBoostedJetTags:probQCDothers', - ] -_pfMassDecorrelatedDeepBoostedJetTagsProbs = [ - 'pfMassDecorrelatedDeepBoostedJetTags:probTbcq', - 'pfMassDecorrelatedDeepBoostedJetTags:probTbqq', - 'pfMassDecorrelatedDeepBoostedJetTags:probTbc', - 'pfMassDecorrelatedDeepBoostedJetTags:probTbq', - 'pfMassDecorrelatedDeepBoostedJetTags:probWcq', - 'pfMassDecorrelatedDeepBoostedJetTags:probWqq', - 'pfMassDecorrelatedDeepBoostedJetTags:probZbb', - 'pfMassDecorrelatedDeepBoostedJetTags:probZcc', - 'pfMassDecorrelatedDeepBoostedJetTags:probZqq', - 'pfMassDecorrelatedDeepBoostedJetTags:probHbb', - 'pfMassDecorrelatedDeepBoostedJetTags:probHcc', - 'pfMassDecorrelatedDeepBoostedJetTags:probHqqqq', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDbb', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDcc', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDb', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDc', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDothers', - ] +# meta-taggers are simple arithmetic on top of other taggers, they are stored here +# such that in case you want them re-run also the parent tagger is re-run as well + supportedMetaDiscr = { 'pfDeepCSVDiscriminatorsJetTags:BvsAll' : ['pfDeepCSVJetTags:probudsg', 'pfDeepCSVJetTags:probb', 'pfDeepCSVJetTags:probc', 'pfDeepCSVJetTags:probbb'], 'pfDeepCSVDiscriminatorsJetTags:CvsB' : ['pfDeepCSVJetTags:probudsg', 'pfDeepCSVJetTags:probb', 'pfDeepCSVJetTags:probc', 'pfDeepCSVJetTags:probbb'], 'pfDeepCSVDiscriminatorsJetTags:CvsL' : ['pfDeepCSVJetTags:probudsg', 'pfDeepCSVJetTags:probb', 'pfDeepCSVJetTags:probc', 'pfDeepCSVJetTags:probbb'], - 'pfDeepCMVADiscriminatorsJetTags:BvsAll' : ['pfDeepCMVAJetTags:probudsg', 'pfDeepCMVAJetTags:probb', 'pfDeepCMVAJetTags:probc', 'pfDeepCMVAJetTags:probbb'], - 'pfDeepCMVADiscriminatorsJetTags:CvsB' : ['pfDeepCMVAJetTags:probudsg', 'pfDeepCMVAJetTags:probb', 'pfDeepCMVAJetTags:probc', 'pfDeepCMVAJetTags:probbb'], + 'pfDeepCMVADiscriminatorsJetTags:BvsAll' : ['pfDeepCMVAJetTags:probudsg', 'pfDeepCMVAJetTags:probb', 'pfDeepCMVAJetTags:probc', 'pfDeepCMVAJetTags:probbb'], + 'pfDeepCMVADiscriminatorsJetTags:CvsB' : ['pfDeepCMVAJetTags:probudsg', 'pfDeepCMVAJetTags:probb', 'pfDeepCMVAJetTags:probc', 'pfDeepCMVAJetTags:probbb'], 'pfDeepCMVADiscriminatorsJetTags:CvsL' : ['pfDeepCMVAJetTags:probudsg', 'pfDeepCMVAJetTags:probb', 'pfDeepCMVAJetTags:probc', 'pfDeepCMVAJetTags:probbb'], - 'pfDeepBoostedDiscriminatorsJetTags:TvsQCD' : _pfDeepBoostedJetTagsProbs, - 'pfDeepBoostedDiscriminatorsJetTags:WvsQCD' : _pfDeepBoostedJetTagsProbs, - 'pfDeepBoostedDiscriminatorsJetTags:ZvsQCD' : _pfDeepBoostedJetTagsProbs, - 'pfDeepBoostedDiscriminatorsJetTags:ZbbvsQCD' : _pfDeepBoostedJetTagsProbs, - 'pfDeepBoostedDiscriminatorsJetTags:HbbvsQCD' : _pfDeepBoostedJetTagsProbs, - 'pfDeepBoostedDiscriminatorsJetTags:H4qvsQCD' : _pfDeepBoostedJetTagsProbs, - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:TvsQCD' : _pfMassDecorrelatedDeepBoostedJetTagsProbs, - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:WvsQCD' : _pfMassDecorrelatedDeepBoostedJetTagsProbs, - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHbbvsQCD' : _pfMassDecorrelatedDeepBoostedJetTagsProbs, - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHccvsQCD' : _pfMassDecorrelatedDeepBoostedJetTagsProbs, - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:bbvsLight' : _pfMassDecorrelatedDeepBoostedJetTagsProbs, - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ccvsLight' : _pfMassDecorrelatedDeepBoostedJetTagsProbs, } +# ----------------------------------- +# setup DeepBoostedJet +from RecoBTag.DeepBoostedJet.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsProbs, _pfDeepBoostedJetTagsMetaDiscrs, \ + _pfMassDecorrelatedDeepBoostedJetTagsProbs, _pfMassDecorrelatedDeepBoostedJetTagsMetaDiscrs +# update supportedBtagDiscr +for disc in _pfDeepBoostedJetTagsProbs + _pfMassDecorrelatedDeepBoostedJetTagsProbs: + supportedBtagDiscr[disc] = [["pfDeepBoostedJetTagInfos"]] +# update supportedMetaDiscr +for disc in _pfDeepBoostedJetTagsMetaDiscrs: + supportedMetaDiscr[disc] = _pfDeepBoostedJetTagsProbs +for disc in _pfMassDecorrelatedDeepBoostedJetTagsMetaDiscrs: + supportedMetaDiscr[disc] = _pfMassDecorrelatedDeepBoostedJetTagsProbs +# ----------------------------------- diff --git a/PhysicsTools/PatAlgos/python/slimming/applyDeepBtagging_cff.py b/PhysicsTools/PatAlgos/python/slimming/applyDeepBtagging_cff.py index 2338407c2d7a8..a35b5ef32e9ba 100644 --- a/PhysicsTools/PatAlgos/python/slimming/applyDeepBtagging_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/applyDeepBtagging_cff.py @@ -42,6 +42,7 @@ def applyDeepBtagging( process, postfix="" ) : # delete module not used anymore (slimmedJets substitutes) delattr(process, 'selectedUpdatedPatJetsSlimmedDeepFlavour'+postfix) + from RecoBTag.DeepBoostedJet.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsAll as pfDeepBoostedJetTagsAll # update slimmed jets to include particle-based deep taggers (keep same name) # make clone for DeepTags-less slimmed AK8 jets, so output name is preserved @@ -61,60 +62,7 @@ def applyDeepBtagging( process, postfix="" ) : btagDiscriminators = [ 'pfDeepDoubleBJetTags:probQ', 'pfDeepDoubleBJetTags:probH', - - # DeepBoostedJet (Nominal) - 'pfDeepBoostedJetTags:probTbcq', - 'pfDeepBoostedJetTags:probTbqq', - 'pfDeepBoostedJetTags:probTbc', - 'pfDeepBoostedJetTags:probTbq', - 'pfDeepBoostedJetTags:probWcq', - 'pfDeepBoostedJetTags:probWqq', - 'pfDeepBoostedJetTags:probZbb', - 'pfDeepBoostedJetTags:probZcc', - 'pfDeepBoostedJetTags:probZqq', - 'pfDeepBoostedJetTags:probHbb', - 'pfDeepBoostedJetTags:probHcc', - 'pfDeepBoostedJetTags:probHqqqq', - 'pfDeepBoostedJetTags:probQCDbb', - 'pfDeepBoostedJetTags:probQCDcc', - 'pfDeepBoostedJetTags:probQCDb', - 'pfDeepBoostedJetTags:probQCDc', - 'pfDeepBoostedJetTags:probQCDothers', - # meta taggers - 'pfDeepBoostedDiscriminatorsJetTags:TvsQCD', - 'pfDeepBoostedDiscriminatorsJetTags:WvsQCD', - 'pfDeepBoostedDiscriminatorsJetTags:ZvsQCD', - 'pfDeepBoostedDiscriminatorsJetTags:ZbbvsQCD', - 'pfDeepBoostedDiscriminatorsJetTags:HbbvsQCD', - 'pfDeepBoostedDiscriminatorsJetTags:H4qvsQCD', - - # DeepBoostedJet (mass decorrelated) - 'pfMassDecorrelatedDeepBoostedJetTags:probTbcq', - 'pfMassDecorrelatedDeepBoostedJetTags:probTbqq', - 'pfMassDecorrelatedDeepBoostedJetTags:probTbc', - 'pfMassDecorrelatedDeepBoostedJetTags:probTbq', - 'pfMassDecorrelatedDeepBoostedJetTags:probWcq', - 'pfMassDecorrelatedDeepBoostedJetTags:probWqq', - 'pfMassDecorrelatedDeepBoostedJetTags:probZbb', - 'pfMassDecorrelatedDeepBoostedJetTags:probZcc', - 'pfMassDecorrelatedDeepBoostedJetTags:probZqq', - 'pfMassDecorrelatedDeepBoostedJetTags:probHbb', - 'pfMassDecorrelatedDeepBoostedJetTags:probHcc', - 'pfMassDecorrelatedDeepBoostedJetTags:probHqqqq', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDbb', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDcc', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDb', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDc', - 'pfMassDecorrelatedDeepBoostedJetTags:probQCDothers', - # meta taggers - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:TvsQCD', - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:WvsQCD', - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHbbvsQCD', - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHccvsQCD', - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:bbvsLight', - 'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ccvsLight', - - ], + ] + pfDeepBoostedJetTagsAll, postfix = 'SlimmedAK8DeepTags'+postfix, printWarning = False ) diff --git a/PhysicsTools/PatAlgos/python/tools/jetTools.py b/PhysicsTools/PatAlgos/python/tools/jetTools.py index 58d5e47ee6fae..cc1c70a0945fa 100644 --- a/PhysicsTools/PatAlgos/python/tools/jetTools.py +++ b/PhysicsTools/PatAlgos/python/tools/jetTools.py @@ -633,21 +633,21 @@ def setupBTagging(process, jetSource, pfCandidates, explicitJTA, pvSource, svSou if btagInfo == 'pfDeepBoostedJetTagInfos': if pfCandidates.value() == 'packedPFCandidates': jetSrcName = jetSource.value().lower() - if 'slimmed' in jetSrcName or 'updated' in jetSrcName or 'packed' in jetSrcName: - # case 1: update jets whose daughters are PackedCandidates, e.g., slimmedJetsAK8, packedPatJetsAK8, etc. + if 'slimmed' in jetSrcName or 'updated' in jetSrcName: + # case 1: update jets whose daughters are PackedCandidates, e.g., slimmedJetsAK8, etc. # daughters are links to original PackedCandidates, so NOT scaled by their puppi weights yet - has_puppi_weighted_daughters = cms.bool(False) - puppi_value_map = cms.InputTag("") - vertex_associator = cms.InputTag("") + has_puppi_weighted_daughters = False + puppi_value_map = "" + vertex_associator = "" else: raise ValueError("Cannot run pfDeepBoostedJetTagInfos on jet collection: %s." % jetSource.value()) elif pfCandidates.value() == 'particleFlow': raise ValueError("Running pfDeepBoostedJetTagInfos with reco::PFCandidates is currently not supported.") # case 2: running on new jet collection whose daughters are PFCandidates (e.g., cluster jets in RECO/AOD) # daughters are the particles used in jet clustering, so already scaled by their puppi weights - has_puppi_weighted_daughters = cms.bool(True) - puppi_value_map = cms.InputTag("puppi") - vertex_associator = cms.InputTag("primaryVertexAssociation", "original") +# has_puppi_weighted_daughters = True +# puppi_value_map = "puppi" +# vertex_associator = "primaryVertexAssociation:original" else: raise ValueError("Invalid pfCandidates collection: %s." % pfCandidates.value()) addToProcessAndTask(btagPrefix+btagInfo+labelName+postfix, diff --git a/RecoBTag/DeepBoostedJet/plugins/DeepBoostedJetTagInfoProducer.cc b/RecoBTag/DeepBoostedJet/plugins/DeepBoostedJetTagInfoProducer.cc index 56ebe0e92fd26..f043896539ea7 100644 --- a/RecoBTag/DeepBoostedJet/plugins/DeepBoostedJetTagInfoProducer.cc +++ b/RecoBTag/DeepBoostedJet/plugins/DeepBoostedJetTagInfoProducer.cc @@ -60,17 +60,81 @@ class DeepBoostedJetTagInfoProducer : public edm::stream::EDProducer<> edm::EDGetTokenT> pvasq_value_map_token_; edm::EDGetTokenT> pvas_token_; - edm::Handle vtxs; - edm::Handle svs; - edm::ESHandle track_builder; - edm::Handle> puppi_value_map; - edm::Handle> pvasq_value_map; - edm::Handle> pvas; - - std::vector feature_names_; + edm::Handle vtxs_; + edm::Handle svs_; + edm::ESHandle track_builder_; + edm::Handle> puppi_value_map_; + edm::Handle> pvasq_value_map_; + edm::Handle> pvas_; + + const static std::vector particle_features_; + const static std::vector sv_features_; const reco::Vertex *pv_ = nullptr; }; +const static std::vector DeepBoostedJetTagInfoProducer::particle_features_ { + "pfcand_puppiw", + "pfcand_hcalFrac", + "pfcand_VTX_ass", + "pfcand_lostInnerHits", + "pfcand_quality", + "pfcand_charge", + "pfcand_isEl", + "pfcand_isMu", + "pfcand_isChargedHad", + "pfcand_isGamma", + "pfcand_isNeutralHad", + "pfcand_phirel", + "pfcand_etarel", + "pfcand_deltaR", + "pfcand_abseta", + "pfcand_ptrel_log", + "pfcand_erel_log", + "pfcand_pt_log", + "pfcand_drminsv", + "pfcand_drsubjet1", + "pfcand_drsubjet2", + "pfcand_normchi2", + "pfcand_dz", + "pfcand_dzsig", + "pfcand_dxy", + "pfcand_dxysig", + "pfcand_dptdpt", + "pfcand_detadeta", + "pfcand_dphidphi", + "pfcand_dxydxy", + "pfcand_dzdz", + "pfcand_dxydz", + "pfcand_dphidxy", + "pfcand_dlambdadz", + "pfcand_btagEtaRel", + "pfcand_btagPtRatio", + "pfcand_btagPParRatio", + "pfcand_btagSip2dVal", + "pfcand_btagSip2dSig", + "pfcand_btagSip3dVal", + "pfcand_btagSip3dSig", + "pfcand_btagJetDistVal", +}; + +const static std::vector DeepBoostedJetTagInfoProducer::sv_features_ { + "sv_phirel", + "sv_etarel", + "sv_deltaR", + "sv_abseta", + "sv_mass", + "sv_ptrel_log", + "sv_erel_log", + "sv_pt_log", + "sv_ntracks", + "sv_normchi2", + "sv_dxy", + "sv_dxysig", + "sv_d3d", + "sv_d3dsig", + "sv_costhetasvpv", +}; + DeepBoostedJetTagInfoProducer::DeepBoostedJetTagInfoProducer(const edm::ParameterSet& iConfig) : has_puppi_weighted_daughters_(iConfig.getParameter("has_puppi_weighted_daughters")) , jet_radius_(iConfig.getParameter("jet_radius")) @@ -81,7 +145,6 @@ DeepBoostedJetTagInfoProducer::DeepBoostedJetTagInfoProducer(const edm::Paramete , sv_token_(consumes(iConfig.getParameter("secondary_vertices"))) , use_puppi_value_map_(false) , use_pvasq_value_map_(false) -, feature_names_(iConfig.getParameter>("feature_names")) { const auto & puppi_value_map_tag = iConfig.getParameter("puppi_value_map"); @@ -118,65 +181,6 @@ void DeepBoostedJetTagInfoProducer::fillDescriptions(edm::ConfigurationDescripti desc.add("jets", edm::InputTag("ak8PFJetsPuppi")); desc.add("puppi_value_map", edm::InputTag("puppi")); desc.add("vertex_associator", edm::InputTag("primaryVertexAssociation","original")); - desc.add>("feature_names", std::vector{ - "pfcand_puppiw", - "pfcand_hcalFrac", - "pfcand_VTX_ass", - "pfcand_lostInnerHits", - "pfcand_quality", - "pfcand_charge", - "pfcand_isEl", - "pfcand_isMu", - "pfcand_isChargedHad", - "pfcand_isGamma", - "pfcand_isNeutralHad", - "pfcand_phirel", - "pfcand_etarel", - "pfcand_deltaR", - "pfcand_abseta", - "pfcand_ptrel_log", - "pfcand_erel_log", - "pfcand_pt_log", - "pfcand_drminsv", - "pfcand_drsubjet1", - "pfcand_drsubjet2", - "pfcand_normchi2", - "pfcand_dz", - "pfcand_dzsig", - "pfcand_dxy", - "pfcand_dxysig", - "pfcand_dptdpt", - "pfcand_detadeta", - "pfcand_dphidphi", - "pfcand_dxydxy", - "pfcand_dzdz", - "pfcand_dxydz", - "pfcand_dphidxy", - "pfcand_dlambdadz", - "pfcand_btagEtaRel", - "pfcand_btagPtRatio", - "pfcand_btagPParRatio", - "pfcand_btagSip2dVal", - "pfcand_btagSip2dSig", - "pfcand_btagSip3dVal", - "pfcand_btagSip3dSig", - "pfcand_btagJetDistVal", - "sv_phirel", - "sv_etarel", - "sv_deltaR", - "sv_abseta", - "sv_mass", - "sv_ptrel_log", - "sv_erel_log", - "sv_pt_log", - "sv_ntracks", - "sv_normchi2", - "sv_dxy", - "sv_dxysig", - "sv_d3d", - "sv_d3dsig", - "sv_costhetasvpv", - }); descriptions.add("pfDeepBoostedJetTagInfos", desc); } @@ -188,26 +192,26 @@ void DeepBoostedJetTagInfoProducer::produce(edm::Event& iEvent, const edm::Event edm::Handle> jets; iEvent.getByToken(jet_token_, jets); - iEvent.getByToken(vtx_token_, vtxs); - if (vtxs->empty()){ + iEvent.getByToken(vtx_token_, vtxs_); + if (vtxs_->empty()){ // produce empty TagInfos in case no primary vertex iEvent.put(std::move(output_tag_infos)); return; // exit event } // primary vertex - pv_ = &vtxs->at(0); + pv_ = &vtxs_->at(0); - iEvent.getByToken(sv_token_, svs); + iEvent.getByToken(sv_token_, svs_); - iSetup.get().get("TransientTrackBuilder", track_builder); + iSetup.get().get("TransientTrackBuilder", track_builder_); if (use_puppi_value_map_) { - iEvent.getByToken(puppi_value_map_token_, puppi_value_map); + iEvent.getByToken(puppi_value_map_token_, puppi_value_map_); } if (use_pvasq_value_map_) { - iEvent.getByToken(pvasq_value_map_token_, pvasq_value_map); - iEvent.getByToken(pvas_token_, pvas); + iEvent.getByToken(pvasq_value_map_token_, pvasq_value_map_); + iEvent.getByToken(pvas_token_, pvas_); } for (std::size_t jet_n = 0; jet_n < jets->size(); jet_n++){ @@ -218,7 +222,8 @@ void DeepBoostedJetTagInfoProducer::produce(edm::Event& iEvent, const edm::Event // create jet features DeepBoostedJetFeatures features; // declare all the feature variables (init as empty vector) - for (const auto &name : feature_names_) { features.add(name); } + for (const auto &name : particle_features_) { features.add(name); } + for (const auto &name : sv_features_) { features.add(name); } // fill values only if above pt threshold and has daughters, otherwise left empty bool fill_vars = true; @@ -228,6 +233,9 @@ void DeepBoostedJetTagInfoProducer::produce(edm::Event& iEvent, const edm::Event if (fill_vars){ fillParticleFeatures(features, jet); fillSVFeatures(features, jet); + + features.check_consistency(particle_features_); + features.check_consistency(sv_features_); } // this should always be done even if features are not filled @@ -253,17 +261,21 @@ void DeepBoostedJetTagInfoProducer::fillParticleFeatures(DeepBoostedJetFeatures GlobalVector jet_ref_track_dir(jet.px(), jet.py(), jet.pz()); const float etasign = jet.eta()>0 ? 1 : -1; + std::map puppi_wgt_cache; auto puppiWgt = [&](const reco::CandidatePtr& cand){ const auto* pack_cand = dynamic_cast(&(*cand)); const auto* reco_cand = dynamic_cast(&(*cand)); + float wgt = 1.; if (pack_cand) { - return pack_cand->puppiWeight(); + wgt = pack_cand->puppiWeight(); } else if (reco_cand) { - if (use_puppi_value_map_){ return (*puppi_value_map)[cand]; } + if (use_puppi_value_map_){ wgt = (*puppi_value_map_)[cand]; } else { throw edm::Exception(edm::errors::InvalidReference) << "Puppi value map is missing"; } } else { throw edm::Exception(edm::errors::InvalidReference) << "Cannot convert to either pat::PackedCandidate or reco::PFCandidate"; } + puppi_wgt_cache[cand.key()] = wgt; + return wgt; }; std::vector daughters; @@ -274,11 +286,15 @@ void DeepBoostedJetTagInfoProducer::fillParticleFeatures(DeepBoostedJetFeatures } // sort by (Puppi-weighted) pt if (!has_puppi_weighted_daughters_) { - std::sort(daughters.begin(), daughters.end(), [&](const reco::CandidatePtr& a, const reco::CandidatePtr& b){ return puppiWgt(a)*a->pt() > puppiWgt(b)*b->pt(); }); + std::sort(daughters.begin(), daughters.end(), [&puppi_wgt_cache](const reco::CandidatePtr& a, const reco::CandidatePtr& b){ + return puppi_wgt_cache.at(a.key())*a->pt() > puppi_wgt_cache.at(b.key())*b->pt(); }); }else{ std::sort(daughters.begin(), daughters.end(), [](const reco::CandidatePtr& a, const reco::CandidatePtr& b){ return a->pt() > b->pt(); }); } + // reserve space + for (const auto &name : particle_features_) { fts.reserve(name, daughters.size()); } + auto useTrackProperties = [&](const reco::PFCandidate* reco_cand) { const auto* trk = reco_cand->bestTrack(); return trk!=nullptr && trk->pt()>min_pt_for_track_properties_; @@ -291,10 +307,9 @@ void DeepBoostedJetTagInfoProducer::fillParticleFeatures(DeepBoostedJetFeatures auto puppiP4 = cand->p4(); if (packed_cand){ if (!has_puppi_weighted_daughters_) { - puppiP4 *= packed_cand->puppiWeight(); + puppiP4 *= puppi_wgt_cache.at(cand.key()); } - fts.fill("pfcand_puppiw", packed_cand->puppiWeight()); fts.fill("pfcand_hcalFrac", packed_cand->hcalFraction()); fts.fill("pfcand_VTX_ass", packed_cand->pvAssociationQuality()); fts.fill("pfcand_lostInnerHits", packed_cand->lostInnerHits()); @@ -318,14 +333,13 @@ void DeepBoostedJetTagInfoProducer::fillParticleFeatures(DeepBoostedJetFeatures int pv_ass_quality = 0; // fallback value float vtx_ass = 0; if (use_pvasq_value_map_) { - pv_ass_quality = (*pvasq_value_map)[cand]; - const reco::VertexRef & PV_orig = (*pvas)[cand]; + pv_ass_quality = (*pvasq_value_map_)[cand]; + const reco::VertexRef & PV_orig = (*pvas_)[cand]; vtx_ass = vtx_ass_from_pfcand(*reco_cand, pv_ass_quality, PV_orig); } else { throw edm::Exception(edm::errors::InvalidReference) << "Vertex association missing"; } - fts.fill("pfcand_puppiw", puppiWgt(cand)); fts.fill("pfcand_hcalFrac", reco_cand->hcalEnergy()/(reco_cand->ecalEnergy()+reco_cand->hcalEnergy())); fts.fill("pfcand_VTX_ass", vtx_ass); fts.fill("pfcand_lostInnerHits", useTrackProperties(reco_cand) ? lost_inner_hits_from_pfcand(*reco_cand) : 0); @@ -350,6 +364,7 @@ void DeepBoostedJetTagInfoProducer::fillParticleFeatures(DeepBoostedJetFeatures } // basic kinematics + fts.fill("pfcand_puppiw", puppi_wgt_cache.at(cand.key())); fts.fill("pfcand_phirel", reco::deltaPhi(puppiP4, jet)); fts.fill("pfcand_etarel", etasign * (puppiP4.eta() - jet.eta())); fts.fill("pfcand_deltaR", reco::deltaR(puppiP4, jet)); @@ -360,7 +375,7 @@ void DeepBoostedJetTagInfoProducer::fillParticleFeatures(DeepBoostedJetFeatures fts.fill("pfcand_pt_log", catch_infs(std::log(puppiP4.pt()), -99)); double minDR = 999; - for (const auto &sv : *svs){ + for (const auto &sv : *svs_){ double dr = reco::deltaR(*cand, sv); if (dr < minDR) minDR = dr; } @@ -391,7 +406,7 @@ void DeepBoostedJetTagInfoProducer::fillParticleFeatures(DeepBoostedJetFeatures fts.fill("pfcand_dphidxy", cov(2,3)); fts.fill("pfcand_dlambdadz", cov(1,4)); - TrackInfoBuilder trkinfo(track_builder); + TrackInfoBuilder trkinfo(track_builder_); trkinfo.buildTrackInfo(&(*cand), jet_dir, jet_ref_track_dir, *pv_); fts.fill("pfcand_btagEtaRel", trkinfo.getTrackEtaRel()); fts.fill("pfcand_btagPtRatio", trkinfo.getTrackPtRatio()); @@ -429,8 +444,8 @@ void DeepBoostedJetTagInfoProducer::fillParticleFeatures(DeepBoostedJetFeatures void DeepBoostedJetTagInfoProducer::fillSVFeatures(DeepBoostedJetFeatures &fts, const reco::Jet &jet){ std::vector jetSVs; - for (const auto &sv : *svs){ - if (reco::deltaR(sv, jet) < jet_radius_) { + for (const auto &sv : *svs_){ + if (reco::deltaR2(sv, jet) < jet_radius_*jet_radius_) { jetSVs.push_back(&sv); } } @@ -439,6 +454,9 @@ void DeepBoostedJetTagInfoProducer::fillSVFeatures(DeepBoostedJetFeatures &fts, return sv_vertex_comparator(*sva, *svb, *pv_); }); + // reserve space + for (const auto &name : sv_features_) { fts.reserve(name, jetSVs.size()); } + const float etasign = jet.eta()>0 ? 1 : -1; for (const auto *sv : jetSVs){ diff --git a/RecoBTag/DeepBoostedJet/plugins/DeepBoostedJetTagsProducer.cc b/RecoBTag/DeepBoostedJet/plugins/DeepBoostedJetTagsProducer.cc index f7afdaa5dfe6d..f8c8773e37314 100644 --- a/RecoBTag/DeepBoostedJet/plugins/DeepBoostedJetTagsProducer.cc +++ b/RecoBTag/DeepBoostedJet/plugins/DeepBoostedJetTagsProducer.cc @@ -15,6 +15,8 @@ #include #include +#include +#include #include "PhysicsTools/MXNet/interface/Predictor.h" // Hold the mxnet model block (symbol + params) in the edm::GlobalCache. @@ -30,9 +32,9 @@ struct PreprocessParams { struct VarInfo { VarInfo() {} VarInfo(float median, float upper) : - center(median), scale(upper==median ? 1 : upper-median) {} + center(median), norm_factor(upper==median ? 1 : 1./(upper-median)) {} float center = 0; - float scale = 1; + float norm_factor = 1; }; unsigned var_length = 0; @@ -75,7 +77,7 @@ class DeepBoostedJetTagsProducer : public edm::stream::EDProducer src_; - std::vector>> flav_pairs_; + std::vector flav_names_; // names of the output scores std::vector input_names_; // names of each input group - the ordering is important! std::vector> input_shapes_; // shapes of each input group std::unordered_map prep_info_map_; // preprocessing info for each input group @@ -88,12 +90,11 @@ class DeepBoostedJetTagsProducer : public edm::stream::EDProducer(iConfig.getParameter("src"))) +, flav_names_(iConfig.getParameter>("flav_names")) , debug_(iConfig.getUntrackedParameter("debugMode", false)) { // load preprocessing info - input_shapes_.clear(); - prep_info_map_.clear(); const auto &prep_pset = iConfig.getParameterSet("preprocessParams"); input_names_ = prep_pset.getParameter>("input_names"); for (const auto &group_name : input_names_){ @@ -109,20 +110,24 @@ DeepBoostedJetTagsProducer::DeepBoostedJetTagsProducer(const edm::ParameterSet& double upper = var_pset.getParameter("upper"); prep_params.var_info_map[var_name] = PreprocessParams::VarInfo(median, upper); } + + // create data storage with a fixed size vector initilized w/ 0 + unsigned len = prep_params.var_length * prep_params.var_names.size(); + data_.emplace_back(len, 0); } if (debug_) { for (unsigned i=0; iblock)); predictor_->set_input_shapes(input_names_, input_shapes_); - // get output names from flav_table - const auto & flav_pset = iConfig.getParameter("flav_table"); - for (const auto& flav_pair : flav_pset.tbl()) { - const auto & flav_name = flav_pair.first; - flav_pairs_.emplace_back(flav_name, - flav_pset.getParameter>(flav_name)); - } - - for (const auto & flav_pair : flav_pairs_) { - produces(flav_pair.first); + // get output names from flav_names + for (const auto &flav_name : flav_names_) { + produces(flav_name); } } @@ -149,7 +147,6 @@ DeepBoostedJetTagsProducer::~DeepBoostedJetTagsProducer(){ void DeepBoostedJetTagsProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - // pfDeepBoostedJetTags edm::ParameterSetDescription desc; desc.add("src", edm::InputTag("pfDeepBoostedJetTagInfos")); @@ -160,27 +157,25 @@ void DeepBoostedJetTagsProducer::fillDescriptions(edm::ConfigurationDescriptions edm::FileInPath("RecoBTag/Combined/data/DeepBoostedJet/V01/full/resnet-symbol.json")); desc.add("param_path", edm::FileInPath("RecoBTag/Combined/data/DeepBoostedJet/V01/full/resnet-0000.params")); - { - edm::ParameterSetDescription psd0; - psd0.add>("probTbcq", {0}); - psd0.add>("probTbqq", {1}); - psd0.add>("probTbc", {2}); - psd0.add>("probTbq", {3}); - psd0.add>("probWcq", {4}); - psd0.add>("probWqq", {5}); - psd0.add>("probZbb", {6}); - psd0.add>("probZcc", {7}); - psd0.add>("probZqq", {8}); - psd0.add>("probHbb", {9}); - psd0.add>("probHcc", {10}); - psd0.add>("probHqqqq", {11}); - psd0.add>("probQCDbb", {12}); - psd0.add>("probQCDcc", {13}); - psd0.add>("probQCDb", {14}); - psd0.add>("probQCDc", {15}); - psd0.add>("probQCDothers", {16}); - desc.add("flav_table", psd0); - } + desc.add>("flav_names", std::vector{ + "probTbcq", + "probTbqq", + "probTbc", + "probTbq", + "probWcq", + "probWqq", + "probZbb", + "probZcc", + "probZqq", + "probHbb", + "probHcc", + "probHqqqq", + "probQCDbb", + "probQCDcc", + "probQCDb", + "probQCDc", + "probQCDothers", + }); desc.addOptionalUntracked("debugMode", false); descriptions.add("pfDeepBoostedJetTags", desc); @@ -214,106 +209,91 @@ void DeepBoostedJetTagsProducer::produce(edm::Event& iEvent, const edm::EventSet // initialize output collection std::vector> output_tags; - for (std::size_t i=0; i < flav_pairs_.size(); i++) { - if (!tag_infos->empty()) { - auto jet_ref = tag_infos->begin()->jet(); - output_tags.emplace_back(std::make_unique( - edm::makeRefToBaseProdFrom(jet_ref, iEvent))); - } else { + if (!tag_infos->empty()) { + auto jet_ref = tag_infos->begin()->jet(); + auto ref2prod = edm::makeRefToBaseProdFrom(jet_ref, iEvent); + for (std::size_t i=0; i < flav_names_.size(); i++) { + output_tags.emplace_back(std::make_unique(ref2prod)); + } + } else { + for (std::size_t i=0; i < flav_names_.size(); i++) { output_tags.emplace_back(std::make_unique()); } } for (unsigned jet_n=0; jet_nsize(); ++jet_n){ - const auto& taginfo = tag_infos->at(jet_n); - std::vector outputs(flav_pairs_.size(), 0); // init as all zeros + const auto& taginfo = (*tag_infos)[jet_n]; + std::vector outputs(flav_names_.size(), 0); // init as all zeros if (!taginfo.features().empty()){ // convert inputs make_inputs(taginfo); // run prediction and get outputs outputs = predictor_->predict(data_); + assert(outputs.size() == flav_names_.size()); } const auto & jet_ref = tag_infos->at(jet_n).jet(); - for (std::size_t flav_n=0; flav_n < flav_pairs_.size(); flav_n++) { - const auto & flav_pair = flav_pairs_.at(flav_n); - float o_sum = 0.; - for (const unsigned int & ind : flav_pair.second) { - o_sum += outputs.at(ind); - } - (*(output_tags.at(flav_n)))[jet_ref] = o_sum; + for (std::size_t flav_n=0; flav_n < flav_names_.size(); flav_n++) { + (*(output_tags[flav_n]))[jet_ref] = outputs[flav_n]; } } if (debug_){ - std::cerr << "=== " << iEvent.id().run() << ":" << iEvent.id().luminosityBlock() << ":" << iEvent.id().event() << " ===" << std::endl; + std::cout << "=== " << iEvent.id().run() << ":" << iEvent.id().luminosityBlock() << ":" << iEvent.id().event() << " ===" << std::endl; for (unsigned jet_n=0; jet_nsize(); ++jet_n){ const auto & jet_ref = tag_infos->at(jet_n).jet(); - std::cerr << " - Jet #" << jet_n << ", pt=" << jet_ref->pt() << ", eta=" << jet_ref->eta() << ", phi=" << jet_ref->phi() << std::endl; - for (std::size_t flav_n=0; flav_n < flav_pairs_.size(); ++flav_n) { - std::cerr << " " << flav_pairs_.at(flav_n).first << " = " << (*(output_tags.at(flav_n)))[jet_ref] << std::endl; + std::cout << " - Jet #" << jet_n << ", pt=" << jet_ref->pt() << ", eta=" << jet_ref->eta() << ", phi=" << jet_ref->phi() << std::endl; + for (std::size_t flav_n=0; flav_n < flav_names_.size(); ++flav_n) { + std::cout << " " << flav_names_.at(flav_n) << " = " << (*(output_tags.at(flav_n)))[jet_ref] << std::endl; } } } // put into the event - for (std::size_t i=0; i < flav_pairs_.size(); i++) { - iEvent.put(std::move(output_tags[i]), flav_pairs_.at(i).first); + for (std::size_t flav_n=0; flav_n < flav_names_.size(); ++flav_n) { + iEvent.put(std::move(output_tags[flav_n]), flav_names_[flav_n]); } } std::vector DeepBoostedJetTagsProducer::center_norm_pad( - const std::vector& input, float center, float scale, + const std::vector& input, float center, float norm_factor, unsigned target_length, float pad_value, float min, float max) { // do variable shifting/scaling/padding/clipping in one go - auto clip = [](float value, float low, float high){ - if (low >= high) throw cms::Exception("InvalidArgument") << "Error in clip: low >= high!"; - if (value < low) return low; - if (value > high) return high; - return value; - }; + assert(min<=pad_value && pad_value<=max); - pad_value = clip(pad_value, min, max); std::vector out(target_length, pad_value); for (unsigned i=0; i(raw_value.size()) != var_ref_len) - throw cms::Exception("InvalidArgument") << "Inconsistent variable length " << raw_value.size() << " for " << varname << ", should be " << var_ref_len; - } const auto &info = prep_params.get_info(varname); - float pad = 0; // pad w/ zero - auto val = center_norm_pad(raw_value, info.center, info.scale, prep_params.var_length, pad, -5, 5); - group_values.insert(group_values.end(), val.begin(), val.end()); + const float pad = 0; // pad w/ zero + auto val = center_norm_pad(raw_value, info.center, info.norm_factor, prep_params.var_length, pad, -5, 5); + std::copy(val.begin(), val.end(), group_values.begin()+curr_pos); + curr_pos += prep_params.var_length; if (debug_){ - std::cerr << " -- var=" << varname << ", center=" << info.center << ", scale=" << info.scale << ", pad=" << pad << std::endl; - std::cerr << "values (first 7 and last 3): " << val.at(0) << ", " << val.at(1) << ", " << val.at(2) << ", " << val.at(3) << ", " << val.at(4) << ", " << val.at(5) << ", " << val.at(6) << " ... " + std::cout << " -- var=" << varname << ", center=" << info.center << ", scale=" << info.norm_factor << ", pad=" << pad << std::endl; + std::cout << "values (first 7 and last 3): " << val.at(0) << ", " << val.at(1) << ", " << val.at(2) << ", " << val.at(3) << ", " << val.at(4) << ", " << val.at(5) << ", " << val.at(6) << " ... " << val.at(prep_params.var_length-3) << ", " << val.at(prep_params.var_length-2) << ", " << val.at(prep_params.var_length-1) << std::endl; } diff --git a/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJetPreprocessParams_cfi.py b/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJetPreprocessParams_cfi.py index 988d7df27ef4c..cb709a2794a95 100644 --- a/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJetPreprocessParams_cfi.py +++ b/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJetPreprocessParams_cfi.py @@ -306,4 +306,4 @@ 'sv_costhetasvpv' ) ) -) \ No newline at end of file +) diff --git a/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJetTags_cfi.py b/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJetTags_cfi.py deleted file mode 100644 index 95122666e95c4..0000000000000 --- a/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJetTags_cfi.py +++ /dev/null @@ -1,27 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -_pfDeepBoostedJetTags = cms.EDProducer('DeepBoostedJetTagsProducer', - src = cms.InputTag('pfDeepBoostedJetTagInfos'), - preprocessParams = cms.PSet(), - model_path = cms.FileInPath('RecoBTag/Combined/data/DeepBoostedJet/V01/full/resnet-symbol.json'), - param_path = cms.FileInPath('RecoBTag/Combined/data/DeepBoostedJet/V01/full/resnet-0000.params'), - flav_table = cms.PSet( - probTbcq = cms.vuint32(0), - probTbqq = cms.vuint32(1), - probTbc = cms.vuint32(2), - probTbq = cms.vuint32(3), - probWcq = cms.vuint32(4), - probWqq = cms.vuint32(5), - probZbb = cms.vuint32(6), - probZcc = cms.vuint32(7), - probZqq = cms.vuint32(8), - probHbb = cms.vuint32(9), - probHcc = cms.vuint32(10), - probHqqqq = cms.vuint32(11), - probQCDbb = cms.vuint32(12), - probQCDcc = cms.vuint32(13), - probQCDb = cms.vuint32(14), - probQCDc = cms.vuint32(15), - probQCDothers = cms.vuint32(16) - ) -) diff --git a/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJet_cff.py b/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJet_cff.py index 02f945be20409..d6931c90e6b1a 100644 --- a/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJet_cff.py +++ b/RecoBTag/DeepBoostedJet/python/pfDeepBoostedJet_cff.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms from RecoBTag.DeepBoostedJet.pfDeepBoostedJetTagInfos_cfi import pfDeepBoostedJetTagInfos -from RecoBTag.DeepBoostedJet.pfDeepBoostedJetTags_cfi import _pfDeepBoostedJetTags +from RecoBTag.DeepBoostedJet.pfDeepBoostedJetTags_cfi import pfDeepBoostedJetTags as _pfDeepBoostedJetTags from RecoBTag.DeepBoostedJet.pfDeepBoostedJetPreprocessParams_cfi import pfDeepBoostedJetPreprocessParams from RecoBTag.DeepBoostedJet.pfDeepBoostedDiscriminatorsJetTags_cfi import pfDeepBoostedDiscriminatorsJetTags from RecoBTag.DeepBoostedJet.pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags_cfi import pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags @@ -9,17 +9,17 @@ # nominal DeepAK8 pfDeepBoostedJetTags = _pfDeepBoostedJetTags.clone( preprocessParams = pfDeepBoostedJetPreprocessParams, - model_path = cms.FileInPath('RecoBTag/Combined/data/DeepBoostedJet/V01/full/resnet-symbol.json'), - param_path = cms.FileInPath('RecoBTag/Combined/data/DeepBoostedJet/V01/full/resnet-0000.params'), - debugMode = cms.untracked.bool(False), # debug + model_path = 'RecoBTag/Combined/data/DeepBoostedJet/V01/full/resnet-symbol.json', + param_path = 'RecoBTag/Combined/data/DeepBoostedJet/V01/full/resnet-0000.params', + debugMode = False, # debug ) # mass-decorrelated DeepAK8 pfMassDecorrelatedDeepBoostedJetTags = _pfDeepBoostedJetTags.clone( preprocessParams = pfDeepBoostedJetPreprocessParams, - model_path = cms.FileInPath('RecoBTag/Combined/data/DeepBoostedJet/V01/decorrelated/resnet-symbol.json'), - param_path = cms.FileInPath('RecoBTag/Combined/data/DeepBoostedJet/V01/decorrelated/resnet-0000.params'), - debugMode = cms.untracked.bool(False), # debug + model_path = 'RecoBTag/Combined/data/DeepBoostedJet/V01/decorrelated/resnet-symbol.json', + param_path = 'RecoBTag/Combined/data/DeepBoostedJet/V01/decorrelated/resnet-0000.params', + debugMode = False, # debug ) from CommonTools.PileupAlgos.Puppi_cff import puppi @@ -30,3 +30,21 @@ pfDeepBoostedJetTask = cms.Task(puppi, primaryVertexAssociation, pfDeepBoostedJetTagInfos, pfDeepBoostedJetTags, pfMassDecorrelatedDeepBoostedJetTags, pfDeepBoostedDiscriminatorsJetTags, pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags) + +# declare all the discriminators +# nominal: probs +_pfDeepBoostedJetTagsProbs = ['pfDeepBoostedJetTags:' + flav_name + for flav_name in pfDeepBoostedJetTags.flav_names] +# nominal: meta-taggers +_pfDeepBoostedJetTagsMetaDiscrs = ['pfDeepBoostedDiscriminatorsJetTags:' + disc.name.value() + for disc in pfDeepBoostedDiscriminatorsJetTags.discriminators] + +# mass-decorrelated: probs +_pfMassDecorrelatedDeepBoostedJetTagsProbs = ['pfMassDecorrelatedDeepBoostedJetTags:' + flav_name + for flav_name in pfMassDecorrelatedDeepBoostedJetTags.flav_names] +# mass-decorrelated: meta-taggers +_pfMassDecorrelatedDeepBoostedJetTagsMetaDiscrs = ['pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:' + disc.name.value() + for disc in pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags.discriminators] + +_pfDeepBoostedJetTagsAll = _pfDeepBoostedJetTagsProbs + _pfDeepBoostedJetTagsMetaDiscrs + \ + _pfMassDecorrelatedDeepBoostedJetTagsProbs + _pfMassDecorrelatedDeepBoostedJetTagsMetaDiscrs