Skip to content

Commit

Permalink
Merge pull request #9120 from cms-btv-pog/BoostedDoubleSVTagger_from-…
Browse files Browse the repository at this point in the history
…CMSSW_7_5_X_2015-05-16-1100

Boosted double SV tagger
  • Loading branch information
cmsbuild committed Jun 4, 2015
2 parents 0fdbc68 + a14d75b commit ae955dc
Show file tree
Hide file tree
Showing 24 changed files with 529 additions and 0 deletions.
10 changes: 10 additions & 0 deletions PhysicsTools/PatAlgos/python/recoLayer0/bTagging_cff.py
Expand Up @@ -12,12 +12,20 @@
, 'inclusiveSecondaryVertexFinderFilteredNegativeTagInfos'
# new candidate-based framework (supported with RECO/AOD/MiniAOD)
, 'pfImpactParameterTagInfos'
, 'pfImpactParameterTagInfosAK8'
, 'pfImpactParameterTagInfosCA15'
, 'pfSecondaryVertexTagInfos'
, 'pfSecondaryVertexNegativeTagInfos'
, 'pfInclusiveSecondaryVertexFinderTagInfos'
, 'pfInclusiveSecondaryVertexFinderTagInfosAK8'
, 'pfInclusiveSecondaryVertexFinderTagInfosCA15'
, 'pfInclusiveSecondaryVertexFinderNegativeTagInfos'
, 'softPFMuonsTagInfos'
, 'softPFMuonsTagInfosAK8'
, 'softPFMuonsTagInfosCA15'
, 'softPFElectronsTagInfos'
, 'softPFElectronsTagInfosAK8'
, 'softPFElectronsTagInfosCA15'
#, 'pfInclusiveSecondaryVertexFinderCtagLTagInfos'
#, 'pfInclusiveSecondaryVertexFinderCtagLNegativeTagInfos'
# TopTagInfos (unrelated to b tagging)
Expand Down Expand Up @@ -122,4 +130,6 @@
, 'pfNegativeCombinedSecondaryVertexSoftLeptonBJetTags' : ['pfImpactParameterTagInfos', 'pfInclusiveSecondaryVertexFinderNegativeTagInfos', 'softPFMuonsTagInfos', 'softPFElectronsTagInfos']
#, 'pfCombinedSecondaryVertexSoftLeptonCtagLJetTags' : ['pfImpactParameterTagInfos', 'pfInclusiveSecondaryVertexFinderCtagLTagInfos', 'softPFMuonsTagInfos', 'softPFElectronsTagInfos']
#, 'pfNegativeCombinedSecondaryVertexSoftLeptonCtagLJetTags' : ['pfImpactParameterTagInfos', 'pfInclusiveSecondaryVertexFinderCtagLNegativeTagInfos', 'softPFMuonsTagInfos', 'softPFElectronsTagInfos']
, 'pfBoostedDoubleSecondaryVertexAK8BJetTags' : ['pfImpactParameterTagInfosAK8', 'pfInclusiveSecondaryVertexFinderTagInfosAK8', 'softPFMuonsTagInfosAK8', 'softPFElectronsTagInfosAK8']
, 'pfBoostedDoubleSecondaryVertexCA15BJetTags' : ['pfImpactParameterTagInfosCA15', 'pfInclusiveSecondaryVertexFinderTagInfosCA15', 'softPFMuonsTagInfosCA15', 'softPFElectronsTagInfosCA15']
}
26 changes: 26 additions & 0 deletions PhysicsTools/PatAlgos/python/tools/jetTools.py
Expand Up @@ -413,12 +413,30 @@ def toolCode(self, process):
if explicitJTA:
_btagInfo = getattr(process, btagInfo+_labelName+postfix)
_btagInfo.explicitJTA = cms.bool(explicitJTA)
if btagInfo == 'pfImpactParameterTagInfosAK8':
setattr(process, btagInfo+_labelName+postfix, btag.pfImpactParameterTagInfosAK8.clone(jets = jetSource,primaryVertex=pvSource,candidates=pfCandidates))
if explicitJTA:
_btagInfo = getattr(process, btagInfo+_labelName+postfix)
_btagInfo.explicitJTA = cms.bool(explicitJTA)
if btagInfo == 'pfImpactParameterTagInfosCA15':
setattr(process, btagInfo+_labelName+postfix, btag.pfImpactParameterTagInfosCA15.clone(jets = jetSource,primaryVertex=pvSource,candidates=pfCandidates))
if explicitJTA:
_btagInfo = getattr(process, btagInfo+_labelName+postfix)
_btagInfo.explicitJTA = cms.bool(explicitJTA)
if btagInfo == 'pfSecondaryVertexTagInfos':
setattr(process, btagInfo+_labelName+postfix, btag.pfSecondaryVertexTagInfos.clone(trackIPTagInfos = cms.InputTag('pfImpactParameterTagInfos'+_labelName+postfix)))
if btagInfo == 'pfInclusiveSecondaryVertexFinderTagInfos':
setattr(process, btagInfo+_labelName+postfix, btag.pfInclusiveSecondaryVertexFinderTagInfos.clone(trackIPTagInfos = cms.InputTag('pfImpactParameterTagInfos'+_labelName+postfix), extSVCollection=svSource))
if svClustering:
setupSVClustering(getattr(process, btagInfo+_labelName+postfix), _algo, rParam, fatJets, groomedFatJets)
if btagInfo == 'pfInclusiveSecondaryVertexFinderTagInfosAK8':
setattr(process, btagInfo+_labelName+postfix, btag.pfInclusiveSecondaryVertexFinderTagInfosAK8.clone(trackIPTagInfos = cms.InputTag('pfImpactParameterTagInfosAK8'+_labelName+postfix), extSVCollection=svSource))
if svClustering:
setupSVClustering(getattr(process, btagInfo+_labelName+postfix), _algo, rParam, fatJets, groomedFatJets)
if btagInfo == 'pfInclusiveSecondaryVertexFinderTagInfosCA15':
setattr(process, btagInfo+_labelName+postfix, btag.pfInclusiveSecondaryVertexFinderTagInfosCA15.clone(trackIPTagInfos = cms.InputTag('pfImpactParameterTagInfosCA15'+_labelName+postfix), extSVCollection=svSource))
if svClustering:
setupSVClustering(getattr(process, btagInfo+_labelName+postfix), _algo, rParam, fatJets, groomedFatJets)
if btagInfo == 'pfSecondaryVertexNegativeTagInfos':
setattr(process, btagInfo+_labelName+postfix, btag.pfSecondaryVertexNegativeTagInfos.clone(trackIPTagInfos = cms.InputTag('pfImpactParameterTagInfos'+_labelName+postfix)))
if btagInfo == 'pfInclusiveSecondaryVertexFinderNegativeTagInfos':
Expand Down Expand Up @@ -447,8 +465,16 @@ def toolCode(self, process):
setattr(process, btagInfo+_labelName+postfix, btag.softMuonTagInfos.clone(jets = jetSource, primaryVertex=pvSource))
if btagInfo == 'softPFMuonsTagInfos':
setattr(process, btagInfo+_labelName+postfix, btag.softPFMuonsTagInfos.clone(jets = jetSource, primaryVertex=pvSource, muons=muSource))
if btagInfo == 'softPFMuonsTagInfosAK8':
setattr(process, btagInfo+_labelName+postfix, btag.softPFMuonsTagInfosAK8.clone(jets = jetSource, primaryVertex=pvSource, muons=muSource))
if btagInfo == 'softPFMuonsTagInfosCA15':
setattr(process, btagInfo+_labelName+postfix, btag.softPFMuonsTagInfosCA15.clone(jets = jetSource, primaryVertex=pvSource, muons=muSource))
if btagInfo == 'softPFElectronsTagInfos':
setattr(process, btagInfo+_labelName+postfix, btag.softPFElectronsTagInfos.clone(jets = jetSource, primaryVertex=pvSource, electrons=elSource))
if btagInfo == 'softPFElectronsTagInfosAK8':
setattr(process, btagInfo+_labelName+postfix, btag.softPFElectronsTagInfosAK8.clone(jets = jetSource, primaryVertex=pvSource, electrons=elSource))
if btagInfo == 'softPFElectronsTagInfosCA15':
setattr(process, btagInfo+_labelName+postfix, btag.softPFElectronsTagInfosCA15.clone(jets = jetSource, primaryVertex=pvSource, electrons=elSource))
acceptedTagInfos.append(btagInfo)
elif hasattr(toptag, btagInfo) :
acceptedTagInfos.append(btagInfo)
Expand Down
12 changes: 12 additions & 0 deletions PhysicsTools/PatAlgos/test/patTuple_addBTagging_cfg.py
Expand Up @@ -116,6 +116,18 @@
)
process.patJetsAK4PF.addTagInfos = True

# uncomment the following lines to add ak8PFJetsCHS with new b-tags to your PAT output
addJetCollection(
process,
labelName = 'AK8PFCHS',
jetSource = cms.InputTag('ak8PFJetsCHS'),
jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'Type-2'),
algo = 'AK',
rParam = 0.8,
btagDiscriminators = ['pfBoostedDoubleSecondaryVertexAK8BJetTags']
)
process.patJetsAK8PFCHS.addTagInfos = True

# uncomment the following lines to add subjets of ak8PFJetsCHSSoftDrop with new b-tags to your PAT output
addJetCollection(
process,
Expand Down
2 changes: 2 additions & 0 deletions RecoBTag/ImpactParameter/python/impactParameter_cff.py
Expand Up @@ -3,6 +3,8 @@
from TrackingTools.TransientTrack.TransientTrackBuilder_cfi import *
from RecoBTag.ImpactParameter.impactParameterTagInfos_cfi import *
from RecoBTag.ImpactParameter.pfImpactParameterTagInfos_cfi import *
from RecoBTag.ImpactParameter.pfImpactParameterTagInfosAK8_cfi import *
from RecoBTag.ImpactParameter.pfImpactParameterTagInfosCA15_cfi import *
from RecoBTau.JetTagComputer.jetTagRecord_cfi import *
# MVA
from RecoBTag.ImpactParameter.impactParameterMVAComputer_cfi import *
Expand Down
@@ -0,0 +1,10 @@
import FWCore.ParameterSet.Config as cms

from RecoBTag.ImpactParameter.pfImpactParameterTagInfos_cfi import *

pfImpactParameterTagInfosAK8 = pfImpactParameterTagInfos.clone(
computeProbabilities = cms.bool(False),
computeGhostTrack = cms.bool(False),
jets = cms.InputTag("ak8PFJetsCHS"),
maxDeltaR = cms.double(0.8)
)
@@ -0,0 +1,10 @@
import FWCore.ParameterSet.Config as cms

from RecoBTag.ImpactParameter.pfImpactParameterTagInfos_cfi import *

pfImpactParameterTagInfosCA15 = pfImpactParameterTagInfos.clone(
computeProbabilities = cms.bool(False),
computeGhostTrack = cms.bool(False),
jets = cms.InputTag("ca15PFJetsCHS"),
maxDeltaR = cms.double(1.5)
)
4 changes: 4 additions & 0 deletions RecoBTag/SecondaryVertex/BuildFile.xml
@@ -1,12 +1,16 @@
<use name="FWCore/ParameterSet"/>
<use name="FWCore/Utilities"/>
<use name="CommonTools/Utils"/>
<use name="DataFormats/Math"/>
<use name="DataFormats/TrackReco"/>
<use name="DataFormats/VertexReco"/>
<use name="DataFormats/BTauReco"/>
<use name="DataFormats/PatCandidates"/>
<use name="RecoVertex/VertexTools"/>
<use name="RecoBTau/JetTagComputer"/>
<use name="rootmath"/>
<use name="fastjet"/>
<use name="fastjet-contrib"/>
<export>
<lib name="1"/>
</export>
@@ -0,0 +1,44 @@
#ifndef RecoBTag_SecondaryVertex_CandidateBoostedDoubleSecondaryVertexComputer_h
#define RecoBTag_SecondaryVertex_CandidateBoostedDoubleSecondaryVertexComputer_h

#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "RecoBTau/JetTagComputer/interface/JetTagComputer.h"
#include "DataFormats/JetReco/interface/JetCollection.h"
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/VertexReco/interface/VertexFwd.h"
#include "DataFormats/Candidate/interface/VertexCompositePtrCandidate.h"
#include "RecoBTag/SecondaryVertex/interface/MvaBoostedDoubleSecondaryVertexEstimator.h"
#include "RecoBTag/SecondaryVertex/interface/TrackKinematics.h"

#include "fastjet/PseudoJet.hh"
#include "fastjet/contrib/Njettiness.hh"

#include <mutex>


class CandidateBoostedDoubleSecondaryVertexComputer : public JetTagComputer {

public:
CandidateBoostedDoubleSecondaryVertexComputer(const edm::ParameterSet & parameters);

float discriminator(const TagInfoHelper & tagInfos) const override;

private:
void calcNsubjettiness(const reco::JetBaseRef & jet, float & tau1, float & tau2, std::vector<fastjet::PseudoJet> & currentAxes) const;
void setTracksPVBase(const reco::TrackRef & trackRef, const reco::VertexRef & vertexRef, float & PVweight) const;
void setTracksPV(const reco::CandidatePtr & trackRef, const reco::VertexRef & vertexRef, float & PVweight) const;
void vertexKinematics(const reco::VertexCompositePtrCandidate & vertex, reco::TrackKinematics & vertexKinematics) const;

const double beta_ ;
const double R0_;
// N-subjettiness calculator
fastjet::contrib::Njettiness njettiness_;

const double maxSVDeltaRToJet_;

edm::FileInPath weightFile_;
mutable std::mutex m_mutex;
[[cms::thread_guard("m_mutex")]] std::unique_ptr<MvaBoostedDoubleSecondaryVertexEstimator> mvaID;
};

#endif // RecoBTag_SecondaryVertex_CandidateBoostedDoubleSecondaryVertexComputer_h
@@ -0,0 +1,29 @@
#ifndef RecoBTag_SecondaryVertex_MvaBoostedDoubleSecondaryVertexEstimator_h
#define RecoBTag_SecondaryVertex_MvaBoostedDoubleSecondaryVertexEstimator_h

#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include <TROOT.h>
#include "TMVA/Factory.h"
#include "TMVA/Tools.h"
#include "TMVA/Reader.h"

class MvaBoostedDoubleSecondaryVertexEstimator {

public:
MvaBoostedDoubleSecondaryVertexEstimator(const std::string &);
~MvaBoostedDoubleSecondaryVertexEstimator();

float mvaValue(float, float, float, float, float, float, float, float, float, float);

private:

TMVA::Reader* TMVAReader;

float mva_PFLepton_ptrel, mva_z_ratio, mva_tau_dot, mva_SV_mass_0, mva_SV_EnergyRatio_0,
mva_SV_EnergyRatio_1, mva_PFLepton_IP2D, mva_tau21, mva_nSL, mva_jetNTracksEtaRel;
float mva_massGroomed, mva_flavour, mva_nbHadrons, mva_ptGroomed, mva_etaGroomed;
};

#endif // RecoBTag_SecondaryVertex_MvaBoostedDoubleSecondaryVertexEstimator_h

4 changes: 4 additions & 0 deletions RecoBTag/SecondaryVertex/plugins/JetTagESProducers.cc
Expand Up @@ -8,6 +8,7 @@
#include "RecoBTau/JetTagComputer/interface/JetTagComputerESProducer.h"
#include "RecoBTau/JetTagComputer/interface/GenericMVAJetTagComputerWrapper.h"

#include "RecoBTag/SecondaryVertex/interface/CandidateBoostedDoubleSecondaryVertexComputer.h"
#include "RecoBTag/SecondaryVertex/interface/CombinedSVComputer.h"
#include "RecoBTag/SecondaryVertex/interface/CombinedSVSoftLeptonComputer.h"
#include "RecoBTag/SecondaryVertex/interface/GhostTrackComputer.h"
Expand Down Expand Up @@ -75,3 +76,6 @@ DEFINE_FWK_EVENTSETUP_MODULE(SimpleSecondaryVertexESProducer);

typedef JetTagComputerESProducer<CandidateCombinedSVSoftLeptonJetTagComputer> CandidateCombinedSecondaryVertexSoftLeptonCtagLESProducer;
DEFINE_FWK_EVENTSETUP_MODULE(CandidateCombinedSecondaryVertexSoftLeptonCtagLESProducer);

typedef JetTagComputerESProducer<CandidateBoostedDoubleSecondaryVertexComputer> CandidateBoostedDoubleSecondaryVertexESProducer;
DEFINE_FWK_EVENTSETUP_MODULE(CandidateBoostedDoubleSecondaryVertexESProducer);
@@ -0,0 +1,8 @@
import FWCore.ParameterSet.Config as cms

candidateBoostedDoubleSecondaryVertexAK8Computer = cms.ESProducer("CandidateBoostedDoubleSecondaryVertexESProducer",
beta = cms.double(1.0),
R0 = cms.double(0.8),
maxSVDeltaRToJet = cms.double(0.7),
weightFile = cms.FileInPath('RecoBTag/SecondaryVertex/data/BoostedDoubleSV_AK8_BDT.weights.xml.gz')
)
@@ -0,0 +1,8 @@
import FWCore.ParameterSet.Config as cms

candidateBoostedDoubleSecondaryVertexCA15Computer = cms.ESProducer("CandidateBoostedDoubleSecondaryVertexESProducer",
beta = cms.double(1.0),
R0 = cms.double(1.5),
maxSVDeltaRToJet = cms.double(1.3),
weightFile = cms.FileInPath('RecoBTag/SecondaryVertex/data/BoostedDoubleSV_CA15_BDT.weights.xml.gz')
)
@@ -0,0 +1,9 @@
import FWCore.ParameterSet.Config as cms

pfBoostedDoubleSecondaryVertexAK8BJetTags = cms.EDProducer("JetTagProducer",
jetTagComputer = cms.string('candidateBoostedDoubleSecondaryVertexAK8Computer'),
tagInfos = cms.VInputTag(cms.InputTag("pfImpactParameterTagInfosAK8"),
cms.InputTag("pfInclusiveSecondaryVertexFinderTagInfosAK8"),
cms.InputTag("softPFMuonsTagInfosAK8"),
cms.InputTag("softPFElectronsTagInfosAK8"))
)
@@ -0,0 +1,9 @@
import FWCore.ParameterSet.Config as cms

pfBoostedDoubleSecondaryVertexCA15BJetTags = cms.EDProducer("JetTagProducer",
jetTagComputer = cms.string('candidateBoostedDoubleSecondaryVertexCA15Computer'),
tagInfos = cms.VInputTag(cms.InputTag("pfImpactParameterTagInfosCA15"),
cms.InputTag("pfInclusiveSecondaryVertexFinderTagInfosCA15"),
cms.InputTag("softPFMuonsTagInfosCA15"),
cms.InputTag("softPFElectronsTagInfosCA15"))
)
@@ -0,0 +1,10 @@
import FWCore.ParameterSet.Config as cms

from RecoBTag.SecondaryVertex.pfInclusiveSecondaryVertexFinderTagInfos_cfi import *

pfInclusiveSecondaryVertexFinderTagInfosAK8 = pfInclusiveSecondaryVertexFinderTagInfos.clone(
trackIPTagInfos = cms.InputTag("pfImpactParameterTagInfosAK8"),
extSVDeltaRToJet = cms.double(0.8)
)
pfInclusiveSecondaryVertexFinderTagInfosAK8.trackSelection.jetDeltaRMax = cms.double(0.8) # plays no role since using IVF vertices
pfInclusiveSecondaryVertexFinderTagInfosAK8.vertexCuts.maxDeltaRToJetAxis = cms.double(0.8)
@@ -0,0 +1,10 @@
import FWCore.ParameterSet.Config as cms

from RecoBTag.SecondaryVertex.pfInclusiveSecondaryVertexFinderTagInfos_cfi import *

pfInclusiveSecondaryVertexFinderTagInfosCA15 = pfInclusiveSecondaryVertexFinderTagInfos.clone(
trackIPTagInfos = cms.InputTag("pfImpactParameterTagInfosCA15"),
extSVDeltaRToJet = cms.double(1.5)
)
pfInclusiveSecondaryVertexFinderTagInfosCA15.trackSelection.jetDeltaRMax = cms.double(1.5) # plays no role since using IVF vertices
pfInclusiveSecondaryVertexFinderTagInfosCA15.vertexCuts.maxDeltaRToJetAxis = cms.double(1.5)
6 changes: 6 additions & 0 deletions RecoBTag/SecondaryVertex/python/secondaryVertex_cff.py
Expand Up @@ -62,6 +62,8 @@
from RecoBTag.SecondaryVertex.candidateCombinedSecondaryVertexV2Computer_cfi import *
from RecoBTag.SecondaryVertex.candidateCombinedSecondaryVertexSoftLeptonComputer_cfi import *
from RecoBTag.SecondaryVertex.candidateCombinedSecondaryVertexSoftLeptonCtagLComputer_cfi import *
from RecoBTag.SecondaryVertex.candidateBoostedDoubleSecondaryVertexAK8Computer_cfi import *
from RecoBTag.SecondaryVertex.candidateBoostedDoubleSecondaryVertexCA15Computer_cfi import *
from RecoBTag.SecondaryVertex.pfSecondaryVertexTagInfos_cfi import *
from RecoBTag.SecondaryVertex.pfSimpleSecondaryVertexHighEffBJetTags_cfi import *
from RecoBTag.SecondaryVertex.pfSimpleSecondaryVertexHighPurBJetTags_cfi import *
Expand All @@ -73,6 +75,10 @@
from RecoBTag.SecondaryVertex.pfCombinedSecondaryVertexSoftLeptonBJetTags_cfi import *
from RecoBTag.SecondaryVertex.pfInclusiveSecondaryVertexFinderCtagLTagInfos_cfi import *
from RecoBTag.SecondaryVertex.pfCombinedSecondaryVertexSoftLeptonCtagLJetTags_cfi import *
from RecoBTag.SecondaryVertex.pfInclusiveSecondaryVertexFinderTagInfosAK8_cfi import *
from RecoBTag.SecondaryVertex.pfBoostedDoubleSecondaryVertexAK8BJetTags_cfi import *
from RecoBTag.SecondaryVertex.pfInclusiveSecondaryVertexFinderTagInfosCA15_cfi import *
from RecoBTag.SecondaryVertex.pfBoostedDoubleSecondaryVertexCA15BJetTags_cfi import *

# Negative taggers
from RecoBTag.SecondaryVertex.pfSecondaryVertexNegativeTagInfos_cfi import *
Expand Down

0 comments on commit ae955dc

Please sign in to comment.