Skip to content

Commit

Permalink
Merge pull request #23033 from jmduarte/double-b-rebased
Browse files Browse the repository at this point in the history
TensorFlow-based DeepDoubleB tagger integration
  • Loading branch information
cmsbuild authored Jun 2, 2018
2 parents 714c402 + a3fceea commit 7f00bb3
Show file tree
Hide file tree
Showing 52 changed files with 1,934 additions and 561 deletions.
44 changes: 44 additions & 0 deletions DataFormats/BTauReco/interface/BoostedDoubleSVTagInfoFeatures.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#ifndef DataFormats_BTauReco_BoostedDoubleSVTagInfoFeatures_h
#define DataFormats_BTauReco_BoostedDoubleSVTagInfoFeatures_h

namespace btagbtvdeep {

class BoostedDoubleSVTagInfoFeatures {

// Note: these variables are intended to match the variables defined in DataFormats/BTauReco/interface/TaggingVariable.h

public:
float jetNTracks; // tracks associated to jet
float jetNSecondaryVertices; // number of reconstructed possible secondary vertices in jet
float trackSip3dSig_0; // 1st largest track 3D signed impact parameter significance
float trackSip3dSig_1; // 2nd largest track 3D signed impact parameter significance
float trackSip3dSig_2; // 3rd largest track 3D signed impact parameter significance
float trackSip3dSig_3; // 4th largest track 3D signed impact parameter significance
float tau1_trackSip3dSig_0; // 1st largest track 3D signed impact parameter significance associated to the 1st N-subjettiness axis
float tau1_trackSip3dSig_1; // 2nd largest track 3D signed impact parameter significance associated to the 1st N-subjettiness axis
float tau2_trackSip3dSig_0; // 1st largest track 3D signed impact parameter significance associated to the 2nd N-subjettiness axis
float tau2_trackSip3dSig_1; // 2nd largest track 3D signed impact parameter significance associated to the 2nd N-subjettiness axis
float trackSip2dSigAboveBottom_0;// track 2D signed impact parameter significance of 1st track lifting mass above bottom
float trackSip2dSigAboveBottom_1;// track 2D signed impact parameter significance of 2nd track lifting mass above bottom
float trackSip2dSigAboveCharm; // track 2D signed impact parameter significance of first track lifting mass above charm
float tau1_trackEtaRel_0; // 1st smallest track pseudorapidity, relative to the jet axis, associated to the 1st N-subjettiness axis
float tau1_trackEtaRel_1; // 2nd smallest track pseudorapidity, relative to the jet axis, associated to the 1st N-subjettiness axis
float tau1_trackEtaRel_2; // 3rd smallest track pseudorapidity, relative to the jet axis, associated to the 1st N-subjettiness axis
float tau2_trackEtaRel_0; // 1st smallest track pseudorapidity, relative to the jet axis, associated to the 2nd N-subjettiness axis
float tau2_trackEtaRel_1; // 2nd smallest track pseudorapidity, relative to the jet axis, associated to the 2nd N-subjettiness axis
float tau2_trackEtaRel_2; // 3rd smallest track pseudorapidity, relative to the jet axis, associated to the 2nd N-subjettiness axis
float tau1_vertexMass; // mass of track sum at secondary vertex associated to the 1st N-subjettiness axis
float tau1_vertexEnergyRatio; // ratio of energy at secondary vertex over total energy associated to the 1st N-subjettiness axis
float tau1_flightDistance2dSig; // transverse distance significance between primary and secondary vertex associated to the 1st N-subjettiness axis
float tau1_vertexDeltaR; // pseudoangular distance between the 1st N-subjettiness axis and secondary vertex direction
float tau2_vertexMass; // mass of track sum at secondary vertex associated to the 2nd N-subjettiness axis
float tau2_vertexEnergyRatio; // ratio of energy at secondary vertex over total energy associated to the 2nd N-subjettiness axis
float tau2_flightDistance2dSig; // transverse distance significance between primary and secondary vertex associated to the 2nd N-subjettiness axis
float tau2_vertexDeltaR; // pseudoangular distance between the 2nd N-subjettiness axis and secondary vertex direction (NOT USED!)
float z_ratio; // z ratio

};

}

#endif //DataFormats_BTauReco_BoostedDoubleSVTagInfoFeatures_h
1 change: 1 addition & 0 deletions DataFormats/BTauReco/interface/ChargedCandidateFeatures.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class ChargedCandidateFeatures {

float btagPf_trackEtaRel;
float btagPf_trackPtRel;
float btagPf_trackPtRatio;
float btagPf_trackPPar;
float btagPf_trackDeltaR;
float btagPf_trackPParRatio;
Expand Down
29 changes: 29 additions & 0 deletions DataFormats/BTauReco/interface/DeepDoubleBFeatures.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#ifndef DataFormats_BTauReco_DeepDoubleBFeatures_h
#define DataFormats_BTauReco_DeepDoubleBFeatures_h

#include <vector>

#include "DataFormats/BTauReco/interface/JetFeatures.h"
#include "DataFormats/BTauReco/interface/SecondaryVertexFeatures.h"
#include "DataFormats/BTauReco/interface/BoostedDoubleSVTagInfoFeatures.h"
#include "DataFormats/BTauReco/interface/ChargedCandidateFeatures.h"

namespace btagbtvdeep {

class DeepDoubleBFeatures {

public:
JetFeatures jet_features;
BoostedDoubleSVTagInfoFeatures tag_info_features;

std::vector<SecondaryVertexFeatures> sv_features;

std::vector<ChargedCandidateFeatures> c_pf_features;

std::size_t npv; // used by deep flavour
};


}

#endif //DataFormats_BTauReco_DeepDoubleBFeatures_h
19 changes: 19 additions & 0 deletions DataFormats/BTauReco/interface/DeepDoubleBTagInfo.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#ifndef DataFormats_BTauReco_DeepDoubleBTagInfo_h
#define DataFormats_BTauReco_DeepDoubleBTagInfo_h

#include "DataFormats/Common/interface/CMS_CLASS_VERSION.h"
#include "DataFormats/BTauReco/interface/BaseTagInfo.h"
#include "DataFormats/BTauReco/interface/DeepFlavourTagInfo.h"
#include "DataFormats/BTauReco/interface/DeepDoubleBFeatures.h"

#include "DataFormats/PatCandidates/interface/Jet.h"

namespace reco {

typedef FeaturesTagInfo<btagbtvdeep::DeepDoubleBFeatures> DeepDoubleBTagInfo;

DECLARE_EDM_REFS( DeepDoubleBTagInfo )

}

#endif // DataFormats_BTauReco_DeepDoubleBTagInfo_h
15 changes: 15 additions & 0 deletions DataFormats/BTauReco/src/classes.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include "DataFormats/BTauReco/interface/SecondaryVertexTagInfo.h"
#include "DataFormats/BTauReco/interface/CandSecondaryVertexTagInfo.h"
#include "DataFormats/BTauReco/interface/BoostedDoubleSVTagInfo.h"
#include "DataFormats/BTauReco/interface/BoostedDoubleSVTagInfoFeatures.h"
#include "DataFormats/BTauReco/interface/ShallowTagInfo.h"
#include "DataFormats/BTauReco/interface/SoftLeptonTagInfo.h"
#include "DataFormats/BTauReco/interface/CandSoftLeptonTagInfo.h"
Expand All @@ -53,6 +54,9 @@
#include "DataFormats/BTauReco/interface/ChargedCandidateFeatures.h"
#include "DataFormats/BTauReco/interface/DeepFlavourFeatures.h"
#include "DataFormats/BTauReco/interface/DeepFlavourTagInfo.h"
#include "DataFormats/BTauReco/interface/DeepDoubleBFeatures.h"
#include "DataFormats/BTauReco/interface/DeepDoubleBTagInfo.h"


namespace reco {
typedef TrackTauImpactParameterAssociationCollection::map_type TrackTauImpactParameterAssociationMapType;
Expand Down Expand Up @@ -412,5 +416,16 @@ namespace DataFormats_BTauReco {
reco::DeepFlavourTagInfoRefProd deep_flavour_tag_info_collection_ref_prod;
reco::DeepFlavourTagInfoRefVector deep_flavour_tag_info_collection_ref_vector;
edm::Wrapper<reco::DeepFlavourTagInfoCollection> deep_flavour_tag_info_collection_edm_wrapper;

btagbtvdeep::BoostedDoubleSVTagInfoFeatures boosted_double_sv_tag_info_features;
btagbtvdeep::DeepDoubleBFeatures deep_doubleb_features;
reco::DeepDoubleBTagInfo deep_doubleb_tag_info;
reco::DeepDoubleBTagInfoCollection deep_doubleb_tag_info_collection;
reco::DeepDoubleBTagInfoRef deep_doubleb_tag_info_collection_ref;
reco::DeepDoubleBTagInfoFwdRef deep_doubleb_tag_info_collection_fwd_ref;
reco::DeepDoubleBTagInfoRefProd deep_doubleb_tag_info_collection_ref_prod;
reco::DeepDoubleBTagInfoRefVector deep_doubleb_tag_info_collection_ref_vector;
edm::Wrapper<reco::DeepDoubleBTagInfoCollection> deep_doubleb_tag_info_collection_edm_wrapper;

};
}
19 changes: 18 additions & 1 deletion DataFormats/BTauReco/src/classes_def.xml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
<class name="reco::BoostedDoubleSVTagInfoRefProd"/>
<class name="reco::BoostedDoubleSVTagInfoRefVector"/>
<class name="edm::Wrapper<reco::BoostedDoubleSVTagInfoCollection>"/>
<class name="edm::Wrapper<std::vector<reco::BoostedDoubleSVTagInfo> >"/>

<class name="reco::ShallowTagInfo" ClassVersion="3">
<version ClassVersion="3" checksum="3904302444"/>
Expand Down Expand Up @@ -439,12 +440,20 @@
<class name="btagbtvdeep::NeutralCandidateFeatures" ClassVersion="3">
<version ClassVersion="3" checksum="938442516"/>
</class>
<class name="btagbtvdeep::ChargedCandidateFeatures" ClassVersion="3">
<class name="btagbtvdeep::ChargedCandidateFeatures" ClassVersion="4">
<version ClassVersion="4" checksum="2173116472"/>
<version ClassVersion="3" checksum="1302021141"/>
</class>
<class name="btagbtvdeep::DeepFlavourFeatures" ClassVersion="3">
<version ClassVersion="3" checksum="2487956635"/>
</class>
<class name="btagbtvdeep::DeepDoubleBFeatures" ClassVersion="3">
<version ClassVersion="3" checksum="2060552560"/>
</class>
<class name="btagbtvdeep::BoostedDoubleSVTagInfoFeatures" ClassVersion="3">
<version ClassVersion="3" checksum="683471882"/>
</class>


<class name="reco::DeepFlavourTagInfo"/>
<class name="reco::DeepFlavourTagInfoCollection"/>
Expand All @@ -454,4 +463,12 @@
<class name="reco::DeepFlavourTagInfoRefVector"/>
<class name="edm::Wrapper<reco::DeepFlavourTagInfoCollection>"/>

<class name="reco::DeepDoubleBTagInfo"/>
<class name="reco::DeepDoubleBTagInfoCollection"/>
<class name="reco::DeepDoubleBTagInfoRef"/>
<class name="reco::DeepDoubleBTagInfoFwdRef"/>
<class name="reco::DeepDoubleBTagInfoRefProd"/>
<class name="reco::DeepDoubleBTagInfoRefVector"/>
<class name="edm::Wrapper<reco::DeepDoubleBTagInfoCollection>"/>

</lcgdict>
4 changes: 4 additions & 0 deletions PhysicsTools/PatAlgos/python/recoLayer0/bTagging_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@
# DeepFlavour tag infos
, 'pfDeepFlavourTagInfos'
, 'pfNegativeDeepFlavourTagInfos'
# DeepDoubleB tag infos
, 'pfDeepDoubleBTagInfos'
]
# extend for "internal use" in PAT/MINIAOD (renaming)
supportedBtagInfos.append( 'caTopTagInfosPAT' )
Expand Down Expand Up @@ -185,6 +187,8 @@
, 'pfNegativeDeepFlavourJetTags:probc' : [["pfNegativeDeepFlavourTagInfos"], ['pfDeepCSVNegativeTagInfos', "pfImpactParameterTagInfos", 'pfInclusiveSecondaryVertexFinderNegativeTagInfos']]
, 'pfNegativeDeepFlavourJetTags:probuds' : [["pfNegativeDeepFlavourTagInfos"], ['pfDeepCSVNegativeTagInfos', "pfImpactParameterTagInfos", 'pfInclusiveSecondaryVertexFinderNegativeTagInfos']]
, 'pfNegativeDeepFlavourJetTags:probg' : [["pfNegativeDeepFlavourTagInfos"], ['pfDeepCSVNegativeTagInfos', "pfImpactParameterTagInfos", 'pfInclusiveSecondaryVertexFinderNegativeTagInfos']]
, 'pfDeepDoubleBJetTags:probQ' : [["pfDeepDoubleBTagInfos"], ['pfBoostedDoubleSVAK8TagInfos', "pfImpactParameterAK8TagInfos", 'pfInclusiveSecondaryVertexFinderAK8TagInfos']]
, 'pfDeepDoubleBJetTags:probH' : [["pfDeepDoubleBTagInfos"], ['pfBoostedDoubleSVAK8TagInfos', "pfImpactParameterAK8TagInfos", 'pfInclusiveSecondaryVertexFinderAK8TagInfos']]
}

#meta-taggers are simple arithmetic on top of other taggers, they are stored here
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
# drop content created by MINIAOD DeepFlavour production
'drop recoBaseTagInfosOwned_slimmedJets_*_*',
'keep *_slimmedJetsAK8_*_*',
# drop content created by MINIAOD DeepDoubleB production
'drop recoBaseTagInfosOwned_slimmedJetsAK8_*_*',
'keep *_slimmedJetsPuppi_*_*',
'keep *_slimmedMETs_*_*',
'keep *_slimmedMETsNoHF_*_*',
Expand Down
76 changes: 76 additions & 0 deletions PhysicsTools/PatAlgos/python/slimming/applyDeepBtagging_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import FWCore.ParameterSet.Config as cms

from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask

def applyDeepBtagging( process, postfix="" ) :

task = getPatAlgosToolsTask(process)

from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection

process.load('PhysicsTools.PatAlgos.slimming.slimmedJets_cfi')

# update slimmed jets to include DeepFlavour (keep same name)
# make clone for DeepFlavour-less slimmed jets, so output name is preserved
addToProcessAndTask('slimmedJetsNoDeepFlavour', process.slimmedJets.clone(), process, task)
updateJetCollection(
process,
jetSource = cms.InputTag('slimmedJetsNoDeepFlavour'),
# updateJetCollection defaults to MiniAOD inputs but
# here it is made explicit (as in training or MINIAOD redoing)
pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
pfCandidates = cms.InputTag('packedPFCandidates'),
svSource = cms.InputTag('slimmedSecondaryVertices'),
muSource = cms.InputTag('slimmedMuons'),
elSource = cms.InputTag('slimmedElectrons'),
jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'),
btagDiscriminators = [
'pfDeepFlavourJetTags:probb',
'pfDeepFlavourJetTags:probbb',
'pfDeepFlavourJetTags:problepb',
'pfDeepFlavourJetTags:probc',
'pfDeepFlavourJetTags:probuds',
'pfDeepFlavourJetTags:probg',
],
postfix = 'SlimmedDeepFlavour'+postfix,
printWarning = False
)

# slimmedJets with DeepFlavour (remove DeepFlavour-less)
delattr(process, 'slimmedJets')
addToProcessAndTask('slimmedJets', getattr(process,'selectedUpdatedPatJetsSlimmedDeepFlavour'+postfix).clone(), process, task)
# delete module not used anymore (slimmedJets substitutes)
delattr(process, 'selectedUpdatedPatJetsSlimmedDeepFlavour'+postfix)



# update slimmed jets to include DeepFlavour (keep same name)
# make clone for DeepDoubleB-less slimmed AK8 jets, so output name is preserved
addToProcessAndTask('slimmedJetsAK8NoDeepDoubleB', process.slimmedJetsAK8.clone(), process, task)
updateJetCollection(
process,
jetSource = cms.InputTag('slimmedJetsAK8NoDeepDoubleB'),
# updateJetCollection defaults to MiniAOD inputs but
# here it is made explicit (as in training or MINIAOD redoing)
pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
pfCandidates = cms.InputTag('packedPFCandidates'),
svSource = cms.InputTag('slimmedSecondaryVertices'),
muSource = cms.InputTag('slimmedMuons'),
elSource = cms.InputTag('slimmedElectrons'),
rParam = 0.8,
jetCorrections = ('AK8PFPuppi', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'),
btagDiscriminators = [
'pfDeepDoubleBJetTags:probQ',
'pfDeepDoubleBJetTags:probH',
],
postfix = 'SlimmedAK8DeepDoubleB'+postfix,
printWarning = False
)

# slimmedJetsAK8 with DeepDoubleB (remove DeepDoubleB-less)
delattr(process, 'slimmedJetsAK8')
addToProcessAndTask('slimmedJetsAK8', getattr(process,'selectedUpdatedPatJetsSlimmedAK8DeepDoubleB'+postfix).clone(), process, task)
# delete module not used anymore (slimmedJetsAK8 substitutes)
delattr(process, 'selectedUpdatedPatJetsSlimmedAK8DeepDoubleB'+postfix)


41 changes: 3 additions & 38 deletions PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -390,50 +390,15 @@ def miniAOD_customizeCommon(process):

process.selectedPatJetsPuppi.cut = cms.string("pt > 15")

process.load('PhysicsTools.PatAlgos.slimming.slimmedJets_cfi')

# update slimmed jets to include DeepFlavour (keep same name)
from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
# make clone for DeepFlavour-less slimmed jets, so output name is preserved
process.slimmedJetsNoDeepFlavour = process.slimmedJets.clone()
task.add(process.slimmedJetsNoDeepFlavour)
updateJetCollection(
process,
jetSource = cms.InputTag('slimmedJetsNoDeepFlavour'),
# updateJetCollection defaults to MiniAOD inputs but
# here it is made explicit (as in training or MINIAOD redoing)
pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
pfCandidates = cms.InputTag('packedPFCandidates'),
svSource = cms.InputTag('slimmedSecondaryVertices'),
muSource = cms.InputTag('slimmedMuons'),
elSource = cms.InputTag('slimmedElectrons'),
jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'),
btagDiscriminators = [
'pfDeepFlavourJetTags:probb',
'pfDeepFlavourJetTags:probbb',
'pfDeepFlavourJetTags:problepb',
'pfDeepFlavourJetTags:probc',
'pfDeepFlavourJetTags:probuds',
'pfDeepFlavourJetTags:probg',
],
postfix = 'SlimmedDeepFlavour',
printWarning = False
)

# slimmedJets with DeepFlavour (remove DeepFlavour-less)
delattr(process, 'slimmedJets')
process.slimmedJets = process.selectedUpdatedPatJetsSlimmedDeepFlavour.clone()
# delete module not used anymore (slimmedJets substitutes)
delattr(process, 'selectedUpdatedPatJetsSlimmedDeepFlavour')

task.add(process.slimmedJets)
task.add(process.slimmedJetsAK8)
from PhysicsTools.PatAlgos.slimming.applyDeepBtagging_cff import applyDeepBtagging
applyDeepBtagging( process )

addToProcessAndTask('slimmedJetsPuppiNoMultiplicities', process.slimmedJetsNoDeepFlavour.clone(), process, task)
process.slimmedJetsPuppiNoMultiplicities.src = cms.InputTag("selectedPatJetsPuppi")
process.slimmedJetsPuppiNoMultiplicities.packedPFCandidates = cms.InputTag("packedPFCandidates")

from PhysicsTools.PatAlgos.patPuppiJetSpecificProducer_cfi import patPuppiJetSpecificProducer
from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
process.patPuppiJetSpecificProducer = patPuppiJetSpecificProducer.clone(
src=cms.InputTag("slimmedJetsPuppiNoMultiplicities"),
)
Expand Down
10 changes: 10 additions & 0 deletions PhysicsTools/PatAlgos/python/tools/jetTools.py
Original file line number Diff line number Diff line change
Expand Up @@ -619,6 +619,16 @@ def setupBTagging(process, jetSource, pfCandidates, explicitJTA, pvSource, svSou
vertex_associator = vertex_associator,
),
process, task)

if btagInfo == 'pfDeepDoubleBTagInfos':
addToProcessAndTask(btagPrefix+btagInfo+labelName+postfix,
btag.pfDeepDoubleBTagInfos.clone(
jets = jetSource,
vertices=pvSource,
secondary_vertices=svSource,
shallow_tag_infos = cms.InputTag(btagPrefix+'pfBoostedDoubleSVAK8TagInfos'+labelName+postfix),
),
process, task)

acceptedTagInfos.append(btagInfo)
elif hasattr(toptag, btagInfo) :
Expand Down
2 changes: 1 addition & 1 deletion RecoBTag/Configuration/python/RecoBTag_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from RecoBTag.Combined.combinedMVA_cff import *
from RecoBTag.CTagging.RecoCTagging_cff import *
from RecoBTag.Combined.deepFlavour_cff import *
from RecoBTag.DeepFlavour.pfDeepFlavour_cff import *
from RecoBTag.TensorFlow.pfDeepFlavour_cff import *
from RecoVertex.AdaptiveVertexFinder.inclusiveVertexing_cff import *

legacyBTaggingTask = cms.Task(
Expand Down
Loading

0 comments on commit 7f00bb3

Please sign in to comment.