Skip to content

Commit

Permalink
Phase I Deep CSV Training
Browse files Browse the repository at this point in the history
  • Loading branch information
mauro verzetti committed Apr 11, 2017
1 parent 3611c52 commit 2218370
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 37 deletions.
32 changes: 20 additions & 12 deletions PhysicsTools/PatAlgos/python/producersLayer1/jetProducer_cfi.py
Expand Up @@ -49,20 +49,18 @@
# CTagging
cms.InputTag('pfCombinedCvsLJetTags'),
cms.InputTag('pfCombinedCvsBJetTags'),
# The following code is commented-out to avoid breaking any unit test
# waiting for a set of AOD RelVals which have the jet tags in the event content
# DeepFlavour
# cms.InputTag('pfDeepCSVJetTags:probb'),
# cms.InputTag('pfDeepCSVJetTags:probc'),
# cms.InputTag('pfDeepCSVJetTags:probudsg'),
# cms.InputTag('pfDeepCSVJetTags:probbb'),
# cms.InputTag('pfDeepCSVJetTags:probcc'),
cms.InputTag('pfDeepCSVJetTags:probb'),
cms.InputTag('pfDeepCSVJetTags:probc'),
cms.InputTag('pfDeepCSVJetTags:probudsg'),
cms.InputTag('pfDeepCSVJetTags:probbb'),
cms.InputTag('pfDeepCSVJetTags:probcc'),
# DeepCMVA
# cms.InputTag('pfDeepCMVAJetTags:probb'),
# cms.InputTag('pfDeepCMVAJetTags:probc'),
# cms.InputTag('pfDeepCMVAJetTags:probudsg'),
# cms.InputTag('pfDeepCMVAJetTags:probbb'),
# cms.InputTag('pfDeepCMVAJetTags:probcc'),
cms.InputTag('pfDeepCMVAJetTags:probb'),
cms.InputTag('pfDeepCMVAJetTags:probc'),
cms.InputTag('pfDeepCMVAJetTags:probudsg'),
cms.InputTag('pfDeepCMVAJetTags:probbb'),
cms.InputTag('pfDeepCMVAJetTags:probcc'),
),
# clone tag infos ATTENTION: these take lots of space!
# usually the discriminators from the default algos
Expand Down Expand Up @@ -101,4 +99,14 @@
resolutions = cms.PSet()
)

from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel
_phaseI_taggers = cms.VInputTag(
*[i for i in _patJets.discriminatorSources if i.value() != 'pfDeepCSVJetTags:probcc']
)
phase1Pixel.toModify(
_patJets,
discriminatorSources = _phaseI_taggers
)


patJets = _patJets.clone()
Expand Up @@ -62,7 +62,7 @@ def applySubstructure( process ) :
jetSource = cms.InputTag('ak8PFJetsPuppi'),
algo= 'AK', rParam = 0.8,
jetCorrections = ('AK8PFPuppi', cms.vstring(['L2Relative', 'L3Absolute']), 'None'),
btagDiscriminators = ([x.getModuleLabel() for x in patJetsDefault.discriminatorSources] + ['pfBoostedDoubleSecondaryVertexAK8BJetTags']),
btagDiscriminators = ([x.value() for x in patJetsDefault.discriminatorSources] + ['pfBoostedDoubleSecondaryVertexAK8BJetTags']),
genJetCollection = cms.InputTag('slimmedGenJetsAK8')
)
process.patJetsAK8Puppi.userData.userFloats.src = [] # start with empty list of user floats
Expand Down
13 changes: 10 additions & 3 deletions RecoBTag/Combined/plugins/DeepFlavourJetTagsProducer.cc
Expand Up @@ -76,6 +76,8 @@ class DeepFlavourJetTagsProducer : public edm::stream::EDProducer<> {
// ----------member data ---------------------------
const edm::EDGetTokenT< INFOS > src_;
edm::FileInPath nnconfig_;
bool check_sv_for_defaults_;
bool mean_padding_;
lwt::LightweightNeuralNetwork *neural_network_;
lwt::ValueMap inputs_; //typedef of unordered_map<string, float>
vector<string> outputs_;
Expand All @@ -97,6 +99,8 @@ class DeepFlavourJetTagsProducer : public edm::stream::EDProducer<> {
DeepFlavourJetTagsProducer::DeepFlavourJetTagsProducer(const edm::ParameterSet& iConfig) :
src_( consumes< INFOS >(iConfig.getParameter<edm::InputTag>("src")) ),
nnconfig_(iConfig.getParameter<edm::FileInPath>("NNConfig")),
check_sv_for_defaults_(iConfig.getParameter<bool>("checkSVForDefaults")),
mean_padding_(iConfig.getParameter<bool>("meanPadding")),
neural_network_(NULL),
inputs_(),
outputs_(),
Expand Down Expand Up @@ -134,7 +138,8 @@ DeepFlavourJetTagsProducer::DeepFlavourJetTagsProducer(const edm::ParameterSet&
<< ". Please check the spelling" << std::endl;
}
var.index = (tokens.size() == 2) ? stoi(tokens.at(1)) : -1;
var.default_value = -1*input.offset; //set default to -offset so that when scaling (val+offset)*scale the outcome is 0
var.default_value = (mean_padding_) ? 0. : -1*input.offset; //set default to -offset so that when scaling (val+offset)*scale the outcome is 0
//for mean padding it is set to zero so that undefined values are assigned -mean/scale

variables_.push_back(var);
}
Expand Down Expand Up @@ -184,9 +189,11 @@ DeepFlavourJetTagsProducer::produce(edm::Event& iEvent, const edm::EventSetup& i
TaggingVariableList vars = info.taggingVariables();
//if there are no tracks there's no point in doing it
bool notracks = (vars.get(reco::btau::jetNSelectedTracks) == 0);
bool novtx = (vars.get(reco::btau::jetNSecondaryVertices) == 0);
bool defaulted = (check_sv_for_defaults_) ? (notracks && novtx) : notracks;
lwt::ValueMap nnout; //returned value

if(!notracks) {
if(!defaulted) {
for(auto& var : variables_) {
if(var.index >= 0){
std::vector<float> vals = vars.getList(var.id, false);
Expand All @@ -207,7 +214,7 @@ DeepFlavourJetTagsProducer::produce(edm::Event& iEvent, const edm::EventSetup& i

//dump the NN output(s)
for(size_t i=0; i<outputs_.size(); ++i) {
(*output_tags[i])[key] = (notracks) ? -1 : nnout[outputs_[i]];
(*output_tags[i])[key] = (defaulted) ? -1 : nnout[outputs_[i]];
//std::cout << i << ": " << nnout[outputs_[i]] << std::endl;
}
}
Expand Down
4 changes: 2 additions & 2 deletions RecoBTag/Combined/python/deepFlavour_cff.py
Expand Up @@ -52,8 +52,8 @@
##
pfDeepFlavourTask = cms.Task(
pfDeepCSVTagInfos,
## pfDeepCMVATagInfos, #SKIP for the moment
pfDeepCMVATagInfos, #SKIP for the moment
pfDeepCSVJetTags
## , pfDeepCMVAJetTags
, pfDeepCMVAJetTags
)
pfDeepFlavour = cms.Sequence(pfDeepFlavourTask)
7 changes: 7 additions & 0 deletions RecoBTag/Combined/python/pfDeepCSVJetTags_cfi.py
Expand Up @@ -3,5 +3,12 @@
pfDeepCSVJetTags = cms.EDProducer(
'DeepFlavourJetTagsProducer',
src = cms.InputTag('pfDeepCSVTagInfos'),
checkSVForDefaults = cms.bool(False),
meanPadding = cms.bool(False),
NNConfig = cms.FileInPath('RecoBTag/Combined/data/DeepFlavourNoSL.json')
)

from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel
phase1Pixel.toModify(pfDeepCSVJetTags, NNConfig = cms.FileInPath('RecoBTag/Combined/data/DeepCSV_PhaseI.json'))
phase1Pixel.toModify(pfDeepCSVJetTags, checkSVForDefaults = cms.bool(True))
phase1Pixel.toModify(pfDeepCSVJetTags, meanPadding = cms.bool(True))
24 changes: 5 additions & 19 deletions RecoBTag/Combined/scripts/format_deepflavour_json.sh
@@ -1,23 +1,9 @@
#! /bin/env bash

sed -i 's|Jet_eta|jetEta|g' $1
sed -i 's|Jet_pt|jetPt|g' $1
#sed -i 's|jet_eta|jetEta|g' $1
sed -i 's|jet_eta|jetAbsEta|g' $1
sed -i 's|jet_pt|jetPt|g' $1
sed -i 's|TagVarCSV_||g' $1
sed -i 's|TagVarCSVTrk_||g' $1
sed -i 's|prob_|prob|g' $1

#bugfixes
sed -i 's|jetNTracks|jetNSelectedTracks|g' $1
sed -i 's|jetNSelectedTracksEtaRel|jetNTracksEtaRel|g' $1

python <<EOF
import json
with open('$1') as infile:
jmap = json.loads(infile.read())
for var in jmap['inputs']:
var['offset'] *= -1
var['scale'] = 1./var['scale']
with open('$1', 'w') as out:
out.write(json.dumps(jmap, indent=2, separators = (',', ': ')))
EOF
sed -i 's|trackJetDistVal|trackJetDist|g' $1

0 comments on commit 2218370

Please sign in to comment.