From bb40baecbe27ea59e49984bd317f8001dcbebf3f Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Wed, 4 Feb 2015 15:24:44 -0600 Subject: [PATCH 01/17] Adding first prototype at a 'jet pieces' interface for substructure --- DataFormats/PatCandidates/interface/Jet.h | 24 ++++++++++++++ DataFormats/PatCandidates/src/Jet.cc | 31 +++++++++++++++++++ .../PatCandidates/src/classes_def_objects.xml | 5 +-- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/DataFormats/PatCandidates/interface/Jet.h b/DataFormats/PatCandidates/interface/Jet.h index 90837ce30d003..0ef445147aa33 100644 --- a/DataFormats/PatCandidates/interface/Jet.h +++ b/DataFormats/PatCandidates/interface/Jet.h @@ -71,6 +71,7 @@ namespace pat { typedef std::vector > TagInfoFwdPtrCollection; typedef std::vector > PFCandidateFwdPtrCollection; typedef std::vector > CaloTowerFwdPtrCollection; + typedef std::vector > JetFwdPtrCollection; class Jet : public PATObject { @@ -481,6 +482,25 @@ namespace pat { /// pipe operator (introduced to use pat::Jet with PFTopProjectors) friend std::ostream& reco::operator<<(std::ostream& out, const pat::Jet& obj); + + + /// Access to subjet list + pat::JetFwdPtrCollection const & subjets( unsigned int index = 0 ) const; + + + /// String access to subjet list + pat::JetFwdPtrCollection const & subjets( std::string label ) const ; + + /// Add new set of subjets + void addSubjets( pat::JetFwdPtrCollection const & pieces, std::string label = "" ); + + /// Check to see if the subjet collection exists + bool hasSubjets( std::string label ) const { return find( subjetLabels_.begin(), subjetLabels_.end(), label) != subjetLabels_.end(); } + + /// Number of subjet collections + unsigned int nSubjetCollections( ) const { return subjetCollections_.size(); } + + protected: // ---- for content embedding ---- @@ -497,6 +517,10 @@ namespace pat { reco::PFCandidateFwdPtrVector pfCandidatesFwdPtr_; // Refactorized content embedding + // ---- Jet Substructure ---- + std::vector< pat::JetFwdPtrCollection> subjetCollections_; + std::vector< std::string> subjetLabels_; + // ---- MC info ---- std::vector genJet_; diff --git a/DataFormats/PatCandidates/src/Jet.cc b/DataFormats/PatCandidates/src/Jet.cc index aabb5caa77c36..587f9fa704753 100644 --- a/DataFormats/PatCandidates/src/Jet.cc +++ b/DataFormats/PatCandidates/src/Jet.cc @@ -564,3 +564,34 @@ void Jet::cachePFCandidates() const { // Set the cache pfCandidatesTemp_.set(std::move(pfCandidatesTemp)); } + + + + +/// Access to subjet list +pat::JetFwdPtrCollection const & Jet::subjets( unsigned int index) const { + if ( index < subjetCollections_.size() ) + return subjetCollections_[index]; + else { + throw cms::Exception("OutOfRange") << "Index " << index << " is out of range" << std::endl; + } +} + + +/// String access to subjet list +pat::JetFwdPtrCollection const & Jet::subjets( std::string label ) const { + auto found = find( subjetLabels_.begin(), subjetLabels_.end(), label ); + if ( found != subjetLabels_.end() ){ + auto index = std::distance( found , subjetLabels_.begin() ); + return subjetCollections_[index]; + } + else { + throw cms::Exception("SubjetsNotFound") << "Label " << label << " does not match any subjet collection" << std::endl; + } +} + +/// Add new set of subjets +void Jet::addSubjets( pat::JetFwdPtrCollection const & pieces, std::string label ) { + subjetCollections_.push_back( pieces ); + subjetLabels_.push_back( label ); +} diff --git a/DataFormats/PatCandidates/src/classes_def_objects.xml b/DataFormats/PatCandidates/src/classes_def_objects.xml index 614cef1a82970..711d3a8870fde 100644 --- a/DataFormats/PatCandidates/src/classes_def_objects.xml +++ b/DataFormats/PatCandidates/src/classes_def_objects.xml @@ -134,8 +134,9 @@ - - + + + From 69457567fbdcfb5d6ee79b89b0ddfeaaf763c784 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Thu, 5 Feb 2015 10:26:11 -0600 Subject: [PATCH 02/17] Changing FwdPtr to Ptr as per Andrea's request. Also putting together the start of a workflow. --- DataFormats/PatCandidates/interface/Jet.h | 10 +- DataFormats/PatCandidates/src/Jet.cc | 6 +- .../PatCandidates/src/classes_def_objects.xml | 12 +- .../PatCandidates/src/classes_objects.h | 6 + .../PatAlgos/python/slimming/miniAOD_tools.py | 151 +++++++++++++++++- 5 files changed, 171 insertions(+), 14 deletions(-) diff --git a/DataFormats/PatCandidates/interface/Jet.h b/DataFormats/PatCandidates/interface/Jet.h index 0ef445147aa33..fbc147b6eb4ae 100644 --- a/DataFormats/PatCandidates/interface/Jet.h +++ b/DataFormats/PatCandidates/interface/Jet.h @@ -71,7 +71,7 @@ namespace pat { typedef std::vector > TagInfoFwdPtrCollection; typedef std::vector > PFCandidateFwdPtrCollection; typedef std::vector > CaloTowerFwdPtrCollection; - typedef std::vector > JetFwdPtrCollection; + typedef std::vector > JetPtrCollection; class Jet : public PATObject { @@ -485,14 +485,14 @@ namespace pat { /// Access to subjet list - pat::JetFwdPtrCollection const & subjets( unsigned int index = 0 ) const; + pat::JetPtrCollection const & subjets( unsigned int index = 0 ) const; /// String access to subjet list - pat::JetFwdPtrCollection const & subjets( std::string label ) const ; + pat::JetPtrCollection const & subjets( std::string label ) const ; /// Add new set of subjets - void addSubjets( pat::JetFwdPtrCollection const & pieces, std::string label = "" ); + void addSubjets( pat::JetPtrCollection const & pieces, std::string label = "" ); /// Check to see if the subjet collection exists bool hasSubjets( std::string label ) const { return find( subjetLabels_.begin(), subjetLabels_.end(), label) != subjetLabels_.end(); } @@ -518,7 +518,7 @@ namespace pat { // ---- Jet Substructure ---- - std::vector< pat::JetFwdPtrCollection> subjetCollections_; + std::vector< pat::JetPtrCollection> subjetCollections_; std::vector< std::string> subjetLabels_; // ---- MC info ---- diff --git a/DataFormats/PatCandidates/src/Jet.cc b/DataFormats/PatCandidates/src/Jet.cc index 587f9fa704753..ce92a7e6aa435 100644 --- a/DataFormats/PatCandidates/src/Jet.cc +++ b/DataFormats/PatCandidates/src/Jet.cc @@ -569,7 +569,7 @@ void Jet::cachePFCandidates() const { /// Access to subjet list -pat::JetFwdPtrCollection const & Jet::subjets( unsigned int index) const { +pat::JetPtrCollection const & Jet::subjets( unsigned int index) const { if ( index < subjetCollections_.size() ) return subjetCollections_[index]; else { @@ -579,7 +579,7 @@ pat::JetFwdPtrCollection const & Jet::subjets( unsigned int index) const { /// String access to subjet list -pat::JetFwdPtrCollection const & Jet::subjets( std::string label ) const { +pat::JetPtrCollection const & Jet::subjets( std::string label ) const { auto found = find( subjetLabels_.begin(), subjetLabels_.end(), label ); if ( found != subjetLabels_.end() ){ auto index = std::distance( found , subjetLabels_.begin() ); @@ -591,7 +591,7 @@ pat::JetFwdPtrCollection const & Jet::subjets( std::string label ) const { } /// Add new set of subjets -void Jet::addSubjets( pat::JetFwdPtrCollection const & pieces, std::string label ) { +void Jet::addSubjets( pat::JetPtrCollection const & pieces, std::string label ) { subjetCollections_.push_back( pieces ); subjetLabels_.push_back( label ); } diff --git a/DataFormats/PatCandidates/src/classes_def_objects.xml b/DataFormats/PatCandidates/src/classes_def_objects.xml index 711d3a8870fde..4bbbef501b22c 100644 --- a/DataFormats/PatCandidates/src/classes_def_objects.xml +++ b/DataFormats/PatCandidates/src/classes_def_objects.xml @@ -134,9 +134,9 @@ - - - + + + @@ -407,6 +407,12 @@ + + + + + + diff --git a/DataFormats/PatCandidates/src/classes_objects.h b/DataFormats/PatCandidates/src/classes_objects.h index f43ffe4c23bc5..b3ea94e742687 100644 --- a/DataFormats/PatCandidates/src/classes_objects.h +++ b/DataFormats/PatCandidates/src/classes_objects.h @@ -176,6 +176,12 @@ namespace DataFormats_PatCandidates { edm::Wrapper > > asso_pgp; + std::vector< edm::Ptr > vptr_jet; + std::vector< std::vector< edm::Ptr > > vvptr_jet; + edm::Wrapper< std::vector< edm::Ptr > > wvptr_jet; + edm::Wrapper< std::vector< std::vector< edm::Ptr > > > wvvptr_jet; + + }; } diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index a335795d7683e..0663fccc5d117 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -67,6 +67,7 @@ def miniAOD_customizeCommon(process): process.selectedPatTaus.cut = cms.string("pt > 18. && tauID('decayModeFinding')> 0.5") process.selectedPatPhotons.cut = cms.string("") + # add CMS top tagger from RecoJets.JetProducers.caTopTaggers_cff import caTopTagInfos process.caTopTagInfos = caTopTagInfos.clone() @@ -75,8 +76,8 @@ def miniAOD_customizeCommon(process): matched = cms.InputTag("cmsTopTagPFJetsCHS"), matchedTagInfos = cms.InputTag("caTopTagInfos"), distMax = cms.double(0.8) - ) - + ) + #add AK8 from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection addJetCollection(process, labelName = 'AK8', @@ -86,8 +87,10 @@ def miniAOD_customizeCommon(process): btagInfos = ['caTopTagInfosPAT'] ) process.patJetsAK8.userData.userFloats.src = [] # start with empty list of user floats - process.selectedPatJetsAK8.cut = cms.string("pt > 100") + process.selectedPatJetsAK8.cut = cms.string("pt > 150") process.patJetGenJetMatchAK8.matched = 'slimmedGenJets' + + ## AK8 groomed masses from RecoJets.Configuration.RecoPFJets_cff import ak8PFJetsCHSPruned, ak8PFJetsCHSSoftDrop, ak8PFJetsCHSFiltered, ak8PFJetsCHSTrimmed process.ak8PFJetsCHSPruned = ak8PFJetsCHSPruned.clone() @@ -112,6 +115,148 @@ def miniAOD_customizeCommon(process): + ## PATify pruned fat jets + addJetCollection( + process, + labelName = 'AK8PFCHSSoftDrop', + jetSource = cms.InputTag('ak8PFJetsCHSSoftDrop'), + btagDiscriminators = ['None'], + jetCorrections = ('AK8PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), + genJetCollection = cms.InputTag('ak8GenJetsNoNu'), + getJetMCFlavour = False # jet flavor disabled + ) + getattr(process,'patJetPartonMatchAK8PFCHSSoftDrop').matched = cms.InputTag('prunedGenParticles') + ## PATify soft drop subjets + addJetCollection( + process, + labelName = 'AK8PFCHSSoftDropSubjets', + jetSource = cms.InputTag('ak8PFJetsCHSSoftDrop','SubJets'), + algo = 'ak', # needed for subjet flavor clustering + rParam = 0.8, # needed for subjet flavor clustering + pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'), + pfCandidates = cms.InputTag('packedPFCandidates'), + svSource = cms.InputTag('slimmedSecondaryVertices'), + btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], + jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), + genJetCollection = cms.InputTag('ak8GenJetsNoNuSoftDrop','SubJets'), + explicitJTA = True, # needed for subjet b tagging + svClustering = True, # needed for subjet b tagging + fatJets=cms.InputTag('ak8PFJetsCHS'), # needed for subjet flavor clustering + groomedFatJets=cms.InputTag('ak8PFJetsCHSSoftDrop') # needed for subjet flavor clustering + ) + getattr(process,'patJetGenJetMatchAK8PFCHSSoftDropSubjets').matched = cms.InputTag('ak8GenJetsNoNuSoftDrop', 'SubJets') + getattr(process,'patJetPartonMatchAK8PFCHSSoftDropSubjets').matched = cms.InputTag('prunedGenParticles') + if hasattr(process,'pfInclusiveSecondaryVertexFinderTagInfosAK8PFCHSSoftDropSubjets'): + getattr(process,'pfInclusiveSecondaryVertexFinderTagInfosAK8PFCHSSoftDropSubjets').extSVCollection = cms.InputTag('slimmedSecondaryVertices') + getattr(process,'patJetsAK8PFCHSSoftDropSubjets').addAssociatedTracks = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD + getattr(process,'patJetsAK8PFCHSSoftDropSubjets').addJetCharge = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD + + + process.slimmedJetsAK8PFCHSSoftDropSubjets = cms.EDProducer("PATJetSlimmer", + src = cms.InputTag("selectedPatJetsAK8PFCHSSoftDropSubjets"), + packedPFCandidates = cms.InputTag("packedPFCandidates"), + dropJetVars = cms.string("1"), + dropDaughters = cms.string("0"), + dropTrackRefs = cms.string("1"), + dropSpecific = cms.string("1"), + dropTagInfos = cms.string("1"), + ) + + ## Establish references between PATified fat jets and subjets using the BoostedJetMerger + process.selectedPatJetsAK8PFCHSSoftDropPacked = cms.EDProducer("BoostedJetMerger", + jetSrc=cms.InputTag("selectedPatJetsAK8PFCHSSoftDrop"), + subjetSrc=cms.InputTag("slimmedJetsAK8PFCHSSoftDropSubjets") + ) + + addJetCollection( + process, + labelName = 'CMSTopTagCHS', + jetSource = cms.InputTag('cmsTopTagCHS'), + jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), + pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'), + pfCandidates = cms.InputTag('packedPFCandidates'), + svSource = cms.InputTag('slimmedSecondaryVertices'), + btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], + genJetCollection = cms.InputTag('ak8GenJetsNoNu'), + getJetMCFlavour = False + ) + getattr(process,'patJetPartons').particles = cms.InputTag('prunedGenParticles') + getattr(process,'patJetPartonMatchCMSTopTagCHS').matched = cms.InputTag('prunedGenParticles') + if hasattr(process,'pfInclusiveSecondaryVertexFinderTagInfosCMSTopTagCHS'): + getattr(process,'pfInclusiveSecondaryVertexFinderTagInfosCMSTopTagCHS').extSVCollection = cms.InputTag('slimmedSecondaryVertices') + process.patJetsCMSTopTagCHS.addTagInfos = True + process.patJetsCMSTopTagCHS.tagInfoSources = cms.VInputTag( + cms.InputTag('CATopTagInfos') + ) + getattr(process,'patJetsCMSTopTagCHS').addAssociatedTracks = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD + getattr(process,'patJetsCMSTopTagCHS').addJetCharge = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD + + addJetCollection( + process, + labelName = 'CMSTopTagCHSSubjets', + jetSource = cms.InputTag('cmsTopTagCHS','SubJets'), + pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'), + pfCandidates = cms.InputTag('packedPFCandidates'), + svSource = cms.InputTag('slimmedSecondaryVertices'), + btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], + jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), + explicitJTA = True, # needed for subjet b tagging + svClustering = True, # needed for subjet b tagging + getJetMCFlavour = False, + genJetCollection = cms.InputTag('ak8GenJetsNoNu'), + ) + + getattr(process,'patJetPartonMatchCMSTopTagCHSSubjets').matched = cms.InputTag('prunedGenParticles') + if hasattr(process,'pfInclusiveSecondaryVertexFinderTagInfosCMSTopTagCHSSubjets'): + getattr(process,'pfInclusiveSecondaryVertexFinderTagInfosCMSTopTagCHSSubjets').extSVCollection = cms.InputTag('slimmedSecondaryVertices') + getattr(process,'patJetsCMSTopTagCHSSubjets').addAssociatedTracks = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD + getattr(process,'patJetsCMSTopTagCHSSubjets').addJetCharge = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD + + + process.slimmedJetsCMSTopTagCHSSubjets = cms.EDProducer("PATJetSlimmer", + src = cms.InputTag("selectedPatJetsCMSTopTagCHSSubjets"), + packedPFCandidates = cms.InputTag("packedPFCandidates"), + dropJetVars = cms.string("1"), + dropDaughters = cms.string("0"), + dropTrackRefs = cms.string("1"), + dropSpecific = cms.string("1"), + dropTagInfos = cms.string("1"), + ) + + + + ## Establish references between PATified fat jets and subjets using the BoostedJetMerger + process.slimmedJetsAK8PFCHSPrunedPacked = cms.EDProducer("BoostedJetMerger", + jetSrc=cms.InputTag("selectedPatJetsCMSTopTagCHS"), + subjetSrc=cms.InputTag("slimmedJetsCMSTopTagCHSSubjets") + ) + + ## AK8 groomed jets + process.cmsTopTaggerMap = cms.EDProducer("TrivialDeltaRViewMatcher", + src = cms.InputTag("patJetsAK8"), + distMin = cms.double(0.8), + matched = cms.InputTag("patJetsCMSTopTagCHS"), + filter = cms.bool(True) + ) + + process.ak8PFJetsCHSSoftDropMap = cms.EDProducer("TrivialDeltaRViewMatcher", + src = cms.InputTag("slimmedJetsAK8PFCHSPrunedPacked"), + distMin = cms.double(0.8), + matched = cms.InputTag("ak8PFJetsCHSSoftDrop") + ) + + + + ## process.packedPatJetsAK8 = cms.EDProducer("JetSubstructurePacker", + ## src = cms.InputTag("selectedPatJetsAK8"), + ## groomingMaps = cms.VInputTag( cms.InputTag("ak8PFJetsCHSSoftDropMap"), + ## cms.InputTag("cmsTopTaggerMap"), + ## ) + ## ) + + + + # from PhysicsTools.PatAlgos.tools.trigTools import switchOnTriggerStandAlone switchOnTriggerStandAlone( process, outputModule = '' ) From 9f160f78a5191e149dde9d6a7d25e020f355fdd4 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Thu, 5 Feb 2015 11:16:22 -0600 Subject: [PATCH 03/17] Adding a version for comments, currently not working --- .../PatAlgos/python/slimming/miniAOD_tools.py | 47 ++----------------- 1 file changed, 5 insertions(+), 42 deletions(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index 0663fccc5d117..bfd5cc472d16b 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -122,7 +122,6 @@ def miniAOD_customizeCommon(process): jetSource = cms.InputTag('ak8PFJetsCHSSoftDrop'), btagDiscriminators = ['None'], jetCorrections = ('AK8PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), - genJetCollection = cms.InputTag('ak8GenJetsNoNu'), getJetMCFlavour = False # jet flavor disabled ) getattr(process,'patJetPartonMatchAK8PFCHSSoftDrop').matched = cms.InputTag('prunedGenParticles') @@ -133,24 +132,13 @@ def miniAOD_customizeCommon(process): jetSource = cms.InputTag('ak8PFJetsCHSSoftDrop','SubJets'), algo = 'ak', # needed for subjet flavor clustering rParam = 0.8, # needed for subjet flavor clustering - pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'), - pfCandidates = cms.InputTag('packedPFCandidates'), - svSource = cms.InputTag('slimmedSecondaryVertices'), btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), - genJetCollection = cms.InputTag('ak8GenJetsNoNuSoftDrop','SubJets'), explicitJTA = True, # needed for subjet b tagging svClustering = True, # needed for subjet b tagging fatJets=cms.InputTag('ak8PFJetsCHS'), # needed for subjet flavor clustering groomedFatJets=cms.InputTag('ak8PFJetsCHSSoftDrop') # needed for subjet flavor clustering ) - getattr(process,'patJetGenJetMatchAK8PFCHSSoftDropSubjets').matched = cms.InputTag('ak8GenJetsNoNuSoftDrop', 'SubJets') - getattr(process,'patJetPartonMatchAK8PFCHSSoftDropSubjets').matched = cms.InputTag('prunedGenParticles') - if hasattr(process,'pfInclusiveSecondaryVertexFinderTagInfosAK8PFCHSSoftDropSubjets'): - getattr(process,'pfInclusiveSecondaryVertexFinderTagInfosAK8PFCHSSoftDropSubjets').extSVCollection = cms.InputTag('slimmedSecondaryVertices') - getattr(process,'patJetsAK8PFCHSSoftDropSubjets').addAssociatedTracks = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD - getattr(process,'patJetsAK8PFCHSSoftDropSubjets').addJetCharge = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD - process.slimmedJetsAK8PFCHSSoftDropSubjets = cms.EDProducer("PATJetSlimmer", src = cms.InputTag("selectedPatJetsAK8PFCHSSoftDropSubjets"), @@ -171,48 +159,25 @@ def miniAOD_customizeCommon(process): addJetCollection( process, labelName = 'CMSTopTagCHS', - jetSource = cms.InputTag('cmsTopTagCHS'), + jetSource = cms.InputTag('cmsTopTagPFJetsCHS'), jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'), - pfCandidates = cms.InputTag('packedPFCandidates'), - svSource = cms.InputTag('slimmedSecondaryVertices'), - btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], - genJetCollection = cms.InputTag('ak8GenJetsNoNu'), - getJetMCFlavour = False + btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'] ) - getattr(process,'patJetPartons').particles = cms.InputTag('prunedGenParticles') - getattr(process,'patJetPartonMatchCMSTopTagCHS').matched = cms.InputTag('prunedGenParticles') - if hasattr(process,'pfInclusiveSecondaryVertexFinderTagInfosCMSTopTagCHS'): - getattr(process,'pfInclusiveSecondaryVertexFinderTagInfosCMSTopTagCHS').extSVCollection = cms.InputTag('slimmedSecondaryVertices') process.patJetsCMSTopTagCHS.addTagInfos = True process.patJetsCMSTopTagCHS.tagInfoSources = cms.VInputTag( - cms.InputTag('CATopTagInfos') + cms.InputTag('caTopTagInfosPAT') ) - getattr(process,'patJetsCMSTopTagCHS').addAssociatedTracks = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD - getattr(process,'patJetsCMSTopTagCHS').addJetCharge = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD addJetCollection( process, labelName = 'CMSTopTagCHSSubjets', - jetSource = cms.InputTag('cmsTopTagCHS','SubJets'), - pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'), - pfCandidates = cms.InputTag('packedPFCandidates'), - svSource = cms.InputTag('slimmedSecondaryVertices'), + jetSource = cms.InputTag('cmsTopTagPFJetsCHS','caTopSubJets'), btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), explicitJTA = True, # needed for subjet b tagging - svClustering = True, # needed for subjet b tagging - getJetMCFlavour = False, - genJetCollection = cms.InputTag('ak8GenJetsNoNu'), + svClustering = True # needed for subjet b tagging ) - getattr(process,'patJetPartonMatchCMSTopTagCHSSubjets').matched = cms.InputTag('prunedGenParticles') - if hasattr(process,'pfInclusiveSecondaryVertexFinderTagInfosCMSTopTagCHSSubjets'): - getattr(process,'pfInclusiveSecondaryVertexFinderTagInfosCMSTopTagCHSSubjets').extSVCollection = cms.InputTag('slimmedSecondaryVertices') - getattr(process,'patJetsCMSTopTagCHSSubjets').addAssociatedTracks = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD - getattr(process,'patJetsCMSTopTagCHSSubjets').addJetCharge = cms.bool(False) # needs to be disabled since there is no track collection present in MiniAOD - - process.slimmedJetsCMSTopTagCHSSubjets = cms.EDProducer("PATJetSlimmer", src = cms.InputTag("selectedPatJetsCMSTopTagCHSSubjets"), packedPFCandidates = cms.InputTag("packedPFCandidates"), @@ -222,8 +187,6 @@ def miniAOD_customizeCommon(process): dropSpecific = cms.string("1"), dropTagInfos = cms.string("1"), ) - - ## Establish references between PATified fat jets and subjets using the BoostedJetMerger process.slimmedJetsAK8PFCHSPrunedPacked = cms.EDProducer("BoostedJetMerger", From e2ce17e4d77ed9d5dc45a9917b05bef7d2012a74 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Thu, 5 Feb 2015 11:39:59 -0600 Subject: [PATCH 04/17] Disabling subjet flavor as per Dinko's suggestion --- .../PatAlgos/python/slimming/miniAOD_tools.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index bfd5cc472d16b..90d83364f06c7 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -161,21 +161,28 @@ def miniAOD_customizeCommon(process): labelName = 'CMSTopTagCHS', jetSource = cms.InputTag('cmsTopTagPFJetsCHS'), jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'] + btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], + getJetMCFlavour = False # ) process.patJetsCMSTopTagCHS.addTagInfos = True process.patJetsCMSTopTagCHS.tagInfoSources = cms.VInputTag( cms.InputTag('caTopTagInfosPAT') - ) + ) addJetCollection( process, labelName = 'CMSTopTagCHSSubjets', jetSource = cms.InputTag('cmsTopTagPFJetsCHS','caTopSubJets'), + algo = 'CA', # needed for subjet flavor clustering + rParam = 0.8, # needed for subjet flavor clustering btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), + genJetCollection = cms.InputTag('ak4GenJets'), # Using ak4GenJets for matching which is not entirely appropriate explicitJTA = True, # needed for subjet b tagging - svClustering = True # needed for subjet b tagging + svClustering = True, # needed for subjet b tagging + fatJets=cms.InputTag('ca8PFJetsCHS'), # needed for subjet flavor clustering + groomedFatJets=cms.InputTag('cmsTopTagPFJetsCHS') # needed for subjet flavor clustering + ) process.slimmedJetsCMSTopTagCHSSubjets = cms.EDProducer("PATJetSlimmer", From cd9be489ee36ac075760990e97c9eb162144c572 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Thu, 5 Feb 2015 16:18:10 -0600 Subject: [PATCH 05/17] First compiling and running version of packed substructure jets --- .../PatAlgos/python/slimming/miniAOD_tools.py | 61 ++++++++-------- .../python/slimming/slimmedGenJets_cfi.py | 9 +++ .../PatAlgos/python/slimming/slimming_cff.py | 8 ++- .../interface/JetSubstructurePacker.h | 52 ++++++++++++++ .../PatUtils/plugins/JetSubstructurePacker.cc | 70 +++++++++++++++++++ 5 files changed, 166 insertions(+), 34 deletions(-) create mode 100644 PhysicsTools/PatUtils/interface/JetSubstructurePacker.h create mode 100644 PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index 90d83364f06c7..ed70eb1749cc5 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -84,11 +84,12 @@ def miniAOD_customizeCommon(process): jetSource = cms.InputTag('ak8PFJetsCHS'), algo= 'AK', rParam = 0.8, jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - btagInfos = ['caTopTagInfosPAT'] + btagInfos = ['caTopTagInfosPAT'], + genJetCollection = cms.InputTag('slimmedGenJetsAK8') ) process.patJetsAK8.userData.userFloats.src = [] # start with empty list of user floats - process.selectedPatJetsAK8.cut = cms.string("pt > 150") - process.patJetGenJetMatchAK8.matched = 'slimmedGenJets' + process.selectedPatJetsAK8.cut = cms.string("pt > 50") + ## AK8 groomed masses @@ -114,7 +115,6 @@ def miniAOD_customizeCommon(process): process.patJetsAK8.userData.userFloats.src += ['NjettinessAK8:tau1','NjettinessAK8:tau2','NjettinessAK8:tau3'] - ## PATify pruned fat jets addJetCollection( process, @@ -136,10 +136,12 @@ def miniAOD_customizeCommon(process): jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), explicitJTA = True, # needed for subjet b tagging svClustering = True, # needed for subjet b tagging + genJetCollection = cms.InputTag('slimmedGenJets'), fatJets=cms.InputTag('ak8PFJetsCHS'), # needed for subjet flavor clustering groomedFatJets=cms.InputTag('ak8PFJetsCHSSoftDrop') # needed for subjet flavor clustering ) - + process.selectedPatJetsAK8PFCHSSoftDrop.cut = cms.string("pt > 200") + process.slimmedJetsAK8PFCHSSoftDropSubjets = cms.EDProducer("PATJetSlimmer", src = cms.InputTag("selectedPatJetsAK8PFCHSSoftDropSubjets"), packedPFCandidates = cms.InputTag("packedPFCandidates"), @@ -149,9 +151,10 @@ def miniAOD_customizeCommon(process): dropSpecific = cms.string("1"), dropTagInfos = cms.string("1"), ) + ## Establish references between PATified fat jets and subjets using the BoostedJetMerger - process.selectedPatJetsAK8PFCHSSoftDropPacked = cms.EDProducer("BoostedJetMerger", + process.slimmedJetsAK8PFCHSSoftDropPacked = cms.EDProducer("BoostedJetMerger", jetSrc=cms.InputTag("selectedPatJetsAK8PFCHSSoftDrop"), subjetSrc=cms.InputTag("slimmedJetsAK8PFCHSSoftDropSubjets") ) @@ -162,25 +165,27 @@ def miniAOD_customizeCommon(process): jetSource = cms.InputTag('cmsTopTagPFJetsCHS'), jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], + genJetCollection = cms.InputTag('slimmedGenJetsAK8'), getJetMCFlavour = False # ) process.patJetsCMSTopTagCHS.addTagInfos = True process.patJetsCMSTopTagCHS.tagInfoSources = cms.VInputTag( cms.InputTag('caTopTagInfosPAT') - ) + ) + process.selectedPatJetsCMSTopTagCHS.cut = cms.string("pt > 200") addJetCollection( process, labelName = 'CMSTopTagCHSSubjets', jetSource = cms.InputTag('cmsTopTagPFJetsCHS','caTopSubJets'), - algo = 'CA', # needed for subjet flavor clustering + algo = 'AK', # needed for subjet flavor clustering rParam = 0.8, # needed for subjet flavor clustering btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), - genJetCollection = cms.InputTag('ak4GenJets'), # Using ak4GenJets for matching which is not entirely appropriate + genJetCollection = cms.InputTag('slimmedGenJets'), # Using ak4GenJets for matching which is not entirely appropriate explicitJTA = True, # needed for subjet b tagging svClustering = True, # needed for subjet b tagging - fatJets=cms.InputTag('ca8PFJetsCHS'), # needed for subjet flavor clustering + fatJets=cms.InputTag('ak8PFJetsCHS'), # needed for subjet flavor clustering groomedFatJets=cms.InputTag('cmsTopTagPFJetsCHS') # needed for subjet flavor clustering ) @@ -196,33 +201,24 @@ def miniAOD_customizeCommon(process): ) ## Establish references between PATified fat jets and subjets using the BoostedJetMerger - process.slimmedJetsAK8PFCHSPrunedPacked = cms.EDProducer("BoostedJetMerger", + process.slimmedJetsCMSTopTagCHSPacked = cms.EDProducer("BoostedJetMerger", jetSrc=cms.InputTag("selectedPatJetsCMSTopTagCHS"), subjetSrc=cms.InputTag("slimmedJetsCMSTopTagCHSSubjets") ) - ## AK8 groomed jets - process.cmsTopTaggerMap = cms.EDProducer("TrivialDeltaRViewMatcher", - src = cms.InputTag("patJetsAK8"), - distMin = cms.double(0.8), - matched = cms.InputTag("patJetsCMSTopTagCHS"), - filter = cms.bool(True) - ) - - process.ak8PFJetsCHSSoftDropMap = cms.EDProducer("TrivialDeltaRViewMatcher", - src = cms.InputTag("slimmedJetsAK8PFCHSPrunedPacked"), - distMin = cms.double(0.8), - matched = cms.InputTag("ak8PFJetsCHSSoftDrop") - ) - - - ## process.packedPatJetsAK8 = cms.EDProducer("JetSubstructurePacker", - ## src = cms.InputTag("selectedPatJetsAK8"), - ## groomingMaps = cms.VInputTag( cms.InputTag("ak8PFJetsCHSSoftDropMap"), - ## cms.InputTag("cmsTopTaggerMap"), - ## ) - ## ) + process.packedPatJetsAK8 = cms.EDProducer("JetSubstructurePacker", + jetSrc = cms.InputTag("selectedPatJetsAK8"), + distMin = cms.double(0.8), + algoTags = cms.VInputTag( + cms.InputTag("slimmedJetsCMSTopTagCHSPacked"), + cms.InputTag("slimmedJetsAK8PFCHSSoftDropPacked"), + ), + algoLabels = cms.vstring( + 'CMSTopTag', + 'SoftDrop', + ) + ) @@ -302,6 +298,7 @@ def miniAOD_customizeMC(process): process.patJetPartonMatch.matched = "prunedGenParticles" process.patJetPartonMatch.mcStatus = [ 3, 23 ] process.patJetGenJetMatch.matched = "slimmedGenJets" + process.patJetGenJetMatchAK8.matched = "slimmedGenJetsAK8" process.patMuons.embedGenMatch = False process.patElectrons.embedGenMatch = False process.patPhotons.embedGenMatch = False diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py index 4146f34f29d10..b37f0bf115bb9 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py @@ -7,3 +7,12 @@ clearDaughters = cms.bool(False), #False means rekeying dropSpecific = cms.bool(False), ) + + +slimmedGenJetsAK8 = cms.EDProducer("PATGenJetSlimmer", + src = cms.InputTag("ak8GenJets"), + packedGenParticles = cms.InputTag("packedGenParticles"), + cut = cms.string("pt > 8"), + clearDaughters = cms.bool(False), #False means rekeying + dropSpecific = cms.bool(False), +) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index d5d2daba950ae..9e74e1e2cfba6 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -26,6 +26,10 @@ 'keep *_slimmedJets*_*_*', 'keep *_slimmedMETs*_*_*', 'keep *_slimmedSecondaryVertices*_*_*', + 'keep *_cmsTopTaggerMap_*_*', + 'keep *_slimmedJetsAK8PFCHSSoftDropSubjets_*_*', + 'keep *_slimmedJetsCMSTopTagCHSSubjets_*_*', + 'keep *_packedPatJetsAK8_*_*', ## add extra METs 'keep recoPhotonCores_reducedEgamma_*_*', @@ -52,7 +56,7 @@ 'keep L1GlobalTriggerReadoutRecord_gtDigis_*_*', 'keep *_TriggerResults_*_HLT', 'keep *_TriggerResults_*_PAT', # for MET filters - 'keep patPackedCandidates_lostTracks_*_*', + 'keep patPackedCandidates_lostTracks_*_*', 'keep HcalNoiseSummary_hcalnoise__*', 'keep *_caTopTagInfosPAT_*_*' ) @@ -61,7 +65,7 @@ outputCommands = cms.untracked.vstring(MicroEventContent.outputCommands) ) MicroEventContentMC.outputCommands += [ - 'keep *_slimmedGenJets_*_*', + 'keep *_slimmedGenJets*_*_*', 'keep patPackedGenParticles_packedGenParticles_*_*', 'keep recoGenParticles_prunedGenParticles_*_*', 'keep LHEEventProduct_*_*_*', diff --git a/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h b/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h new file mode 100644 index 0000000000000..7f071682f747b --- /dev/null +++ b/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h @@ -0,0 +1,52 @@ +// -*- C++ -*- +// +// Package: JetSubstructurePacker +// Class: JetSubstructurePacker +// +// \class JetSubstructurePacker JetSubstructurePacker.h PhysicsTools/PatUtils/interface/JetSubstructurePacker.h +// Description: Class to pack subjet information from various pat::Jet collections into a single one. +// +// Original Author: "Salvatore Rappoccio" +// $Id: JetSubstructurePacker.cc,v 1.1 2013/03/07 20:13:55 srappocc Exp $ +// +// + + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/PatCandidates/interface/Jet.h" +#include "DataFormats/Common/interface/View.h" +#include "DataFormats/Candidate/interface/CandidateFwd.h" +#include "FWCore/Utilities/interface/transform.h" +// +// class decleration +// + + +class JetSubstructurePacker : public edm::stream::EDProducer<> { + public: + + explicit JetSubstructurePacker(const edm::ParameterSet&); + ~JetSubstructurePacker(); + + private: + virtual void produce(edm::Event&, const edm::EventSetup&) override; + + // ----------member data --------------------------- + + // data labels + float distMin_; + edm::EDGetTokenT > jetToken_; + std::vector algoLabels_; + std::vector algoTags_; + std::vector< edm::EDGetTokenT< edm::View > > algoTokens_; +}; diff --git a/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc b/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc new file mode 100644 index 0000000000000..33bc2a1fb332a --- /dev/null +++ b/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc @@ -0,0 +1,70 @@ +#include "PhysicsTools/PatUtils/interface/JetSubstructurePacker.h" +#include "DataFormats/Math/interface/deltaR.h" + +JetSubstructurePacker::JetSubstructurePacker(const edm::ParameterSet& iConfig) : + distMin_( iConfig.getParameter("distMin") ), + jetToken_(consumes >( iConfig.getParameter("jetSrc") )), + algoLabels_( iConfig.getParameter< std::vector > ("algoLabels") ), + algoTags_ (iConfig.getParameter > ( "algoTags" )) +{ + algoTokens_ =edm::vector_transform(algoTags_, [this](edm::InputTag const & tag){return consumes< edm::View >(tag);}); + //register products + produces > (); +} + + +JetSubstructurePacker::~JetSubstructurePacker() +{ +} + + +// ------------ method called to produce the data ------------ +void +JetSubstructurePacker::produce(edm::Event& iEvent, const edm::EventSetup&) +{ + + std::auto_ptr< std::vector > outputs( new std::vector ); + + edm::Handle< edm::View > jetHandle; + std::vector< edm::Handle< edm::View > > algoHandles; + + iEvent.getByToken( jetToken_, jetHandle ); + algoHandles.resize( algoTags_.size() ); + for ( size_t i = 0; i < algoTags_.size(); ++i ) { + iEvent.getByToken( algoTokens_[i], algoHandles[i] ); + } + + // Loop over the input jets that will be modified. + for ( auto const & ijet : *jetHandle ) { + // Copy the jet. + outputs->push_back( ijet ); + + // Loop over the substructure collections + unsigned int index = 0; + for ( auto const & ialgoHandle : algoHandles ) { + std::vector< edm::Ptr > nextSubjets; + float dRMin = distMin_; + + for ( auto const & jjet : *ialgoHandle ) { + + if ( reco::deltaR( ijet, jjet ) < dRMin ) { + for ( size_t ida = 0; ida < jjet.numberOfDaughters(); ++ida ) { + + edm::Ptr candPtr = jjet.daughterPtr( ida); + nextSubjets.push_back( edm::Ptr ( candPtr.id(), candPtr.key(), candPtr.productGetter() ) ); + } + } + break; + } + + outputs->back().addSubjets( nextSubjets, algoLabels_[index] ); + ++index; + } + } + + iEvent.put(outputs); + +} + +//define this as a plug-in +DEFINE_FWK_MODULE(JetSubstructurePacker); From 73f9400c6ec62edfc968a97538211ff683047031 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Thu, 5 Feb 2015 19:24:28 -0600 Subject: [PATCH 06/17] Fixing the Ptr constructor --- PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc b/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc index 33bc2a1fb332a..074f80608a788 100644 --- a/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc +++ b/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc @@ -51,7 +51,7 @@ JetSubstructurePacker::produce(edm::Event& iEvent, const edm::EventSetup&) for ( size_t ida = 0; ida < jjet.numberOfDaughters(); ++ida ) { edm::Ptr candPtr = jjet.daughterPtr( ida); - nextSubjets.push_back( edm::Ptr ( candPtr.id(), candPtr.key(), candPtr.productGetter() ) ); + nextSubjets.push_back( edm::Ptr ( candPtr ) ); } } break; From 66a6712269292e6c6a718bc52c861db71b515002 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Thu, 5 Feb 2015 21:28:22 -0600 Subject: [PATCH 07/17] Adding a print method to pat::Jet and adjusting event content --- DataFormats/PatCandidates/interface/Jet.h | 4 ++++ PhysicsTools/PatAlgos/python/slimming/slimming_cff.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/DataFormats/PatCandidates/interface/Jet.h b/DataFormats/PatCandidates/interface/Jet.h index fbc147b6eb4ae..3604ec8d83c26 100644 --- a/DataFormats/PatCandidates/interface/Jet.h +++ b/DataFormats/PatCandidates/interface/Jet.h @@ -500,6 +500,10 @@ namespace pat { /// Number of subjet collections unsigned int nSubjetCollections( ) const { return subjetCollections_.size(); } + /// Subjet collection names + std::vector const & subjetCollectionNames() const { return subjetLabels_; } + + protected: diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index 9e74e1e2cfba6..4860eb8cbae1b 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -23,7 +23,7 @@ 'keep *_slimmedElectrons_*_*', 'keep *_slimmedMuons*_*_*', 'keep *_slimmedTaus*_*_*', - 'keep *_slimmedJets*_*_*', + 'keep *_slimmedJets_*_*', 'keep *_slimmedMETs*_*_*', 'keep *_slimmedSecondaryVertices*_*_*', 'keep *_cmsTopTaggerMap_*_*', From 4b25c41ad0c7ef098bafec7a0f1fba0757a15ec9 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Fri, 6 Feb 2015 09:54:52 -0600 Subject: [PATCH 08/17] Refactorizing the python for substructure to a function to clean up the top level --- .../python/slimming/applySubstructure_cfi.py | 158 ++++++++++++++++++ .../PatAlgos/python/slimming/miniAOD_tools.py | 156 +---------------- 2 files changed, 161 insertions(+), 153 deletions(-) create mode 100644 PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py diff --git a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py new file mode 100644 index 0000000000000..718d95d11349b --- /dev/null +++ b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py @@ -0,0 +1,158 @@ +import FWCore.ParameterSet.Config as cms + +def applySubstructure( process ) : + + from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection + + # add CMS top tagger + from RecoJets.JetProducers.caTopTaggers_cff import caTopTagInfos + process.caTopTagInfos = caTopTagInfos.clone() + process.caTopTagInfosPAT = cms.EDProducer("RecoJetDeltaRTagInfoValueMapProducer", + src = cms.InputTag("ak8PFJetsCHS"), + matched = cms.InputTag("cmsTopTagPFJetsCHS"), + matchedTagInfos = cms.InputTag("caTopTagInfos"), + distMax = cms.double(0.8) + ) + + #add AK8 + addJetCollection(process, labelName = 'AK8', + jetSource = cms.InputTag('ak8PFJetsCHS'), + algo= 'AK', rParam = 0.8, + jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), + btagInfos = ['caTopTagInfosPAT'], + genJetCollection = cms.InputTag('slimmedGenJetsAK8') + ) + process.patJetsAK8.userData.userFloats.src = [] # start with empty list of user floats + process.selectedPatJetsAK8.cut = cms.string("pt > 50") + + + + ## AK8 groomed masses + from RecoJets.Configuration.RecoPFJets_cff import ak8PFJetsCHSPruned, ak8PFJetsCHSSoftDrop, ak8PFJetsCHSFiltered, ak8PFJetsCHSTrimmed + process.ak8PFJetsCHSPruned = ak8PFJetsCHSPruned.clone() + process.ak8PFJetsCHSSoftDrop = ak8PFJetsCHSSoftDrop.clone() + process.ak8PFJetsCHSTrimmed = ak8PFJetsCHSTrimmed.clone() + process.ak8PFJetsCHSFiltered = ak8PFJetsCHSFiltered.clone() + process.load("RecoJets.JetProducers.ak8PFJetsCHS_groomingValueMaps_cfi") + process.patJetsAK8.userData.userFloats.src += ['ak8PFJetsCHSPrunedMass','ak8PFJetsCHSSoftDropMass','ak8PFJetsCHSTrimmedMass','ak8PFJetsCHSFilteredMass'] + + # Add AK8 top tagging variables + process.patJetsAK8.tagInfoSources = cms.VInputTag(cms.InputTag("caTopTagInfosPAT")) + process.patJetsAK8.addTagInfos = cms.bool(True) + + + + # add Njetiness + process.load('RecoJets.JetProducers.nJettinessAdder_cfi') + process.NjettinessAK8 = process.Njettiness.clone() + process.NjettinessAK8.src = cms.InputTag("ak8PFJetsCHS") + process.NjettinessAK8.cone = cms.double(0.8) + process.patJetsAK8.userData.userFloats.src += ['NjettinessAK8:tau1','NjettinessAK8:tau2','NjettinessAK8:tau3'] + + + ## PATify pruned fat jets + addJetCollection( + process, + labelName = 'AK8PFCHSSoftDrop', + jetSource = cms.InputTag('ak8PFJetsCHSSoftDrop'), + btagDiscriminators = ['None'], + jetCorrections = ('AK8PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), + getJetMCFlavour = False # jet flavor disabled + ) + getattr(process,'patJetPartonMatchAK8PFCHSSoftDrop').matched = cms.InputTag('prunedGenParticles') + ## PATify soft drop subjets + addJetCollection( + process, + labelName = 'AK8PFCHSSoftDropSubjets', + jetSource = cms.InputTag('ak8PFJetsCHSSoftDrop','SubJets'), + algo = 'ak', # needed for subjet flavor clustering + rParam = 0.8, # needed for subjet flavor clustering + btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], + jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), + explicitJTA = True, # needed for subjet b tagging + svClustering = True, # needed for subjet b tagging + genJetCollection = cms.InputTag('slimmedGenJets'), + fatJets=cms.InputTag('ak8PFJetsCHS'), # needed for subjet flavor clustering + groomedFatJets=cms.InputTag('ak8PFJetsCHSSoftDrop') # needed for subjet flavor clustering + ) + process.selectedPatJetsAK8PFCHSSoftDrop.cut = cms.string("pt > 200") + + process.slimmedJetsAK8PFCHSSoftDropSubjets = cms.EDProducer("PATJetSlimmer", + src = cms.InputTag("selectedPatJetsAK8PFCHSSoftDropSubjets"), + packedPFCandidates = cms.InputTag("packedPFCandidates"), + dropJetVars = cms.string("1"), + dropDaughters = cms.string("0"), + dropTrackRefs = cms.string("1"), + dropSpecific = cms.string("1"), + dropTagInfos = cms.string("1"), + ) + + + ## Establish references between PATified fat jets and subjets using the BoostedJetMerger + process.slimmedJetsAK8PFCHSSoftDropPacked = cms.EDProducer("BoostedJetMerger", + jetSrc=cms.InputTag("selectedPatJetsAK8PFCHSSoftDrop"), + subjetSrc=cms.InputTag("slimmedJetsAK8PFCHSSoftDropSubjets") + ) + + addJetCollection( + process, + labelName = 'CMSTopTagCHS', + jetSource = cms.InputTag('cmsTopTagPFJetsCHS'), + jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), + btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], + genJetCollection = cms.InputTag('slimmedGenJetsAK8'), + getJetMCFlavour = False # + ) + process.patJetsCMSTopTagCHS.addTagInfos = True + process.patJetsCMSTopTagCHS.tagInfoSources = cms.VInputTag( + cms.InputTag('caTopTagInfosPAT') + ) + process.selectedPatJetsCMSTopTagCHS.cut = cms.string("pt > 200") + + addJetCollection( + process, + labelName = 'CMSTopTagCHSSubjets', + jetSource = cms.InputTag('cmsTopTagPFJetsCHS','caTopSubJets'), + algo = 'AK', # needed for subjet flavor clustering + rParam = 0.8, # needed for subjet flavor clustering + btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], + jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), + genJetCollection = cms.InputTag('slimmedGenJets'), # Using ak4GenJets for matching which is not entirely appropriate + explicitJTA = True, # needed for subjet b tagging + svClustering = True, # needed for subjet b tagging + fatJets=cms.InputTag('ak8PFJetsCHS'), # needed for subjet flavor clustering + groomedFatJets=cms.InputTag('cmsTopTagPFJetsCHS') # needed for subjet flavor clustering + + ) + + process.slimmedJetsCMSTopTagCHSSubjets = cms.EDProducer("PATJetSlimmer", + src = cms.InputTag("selectedPatJetsCMSTopTagCHSSubjets"), + packedPFCandidates = cms.InputTag("packedPFCandidates"), + dropJetVars = cms.string("1"), + dropDaughters = cms.string("0"), + dropTrackRefs = cms.string("1"), + dropSpecific = cms.string("1"), + dropTagInfos = cms.string("1"), + ) + + ## Establish references between PATified fat jets and subjets using the BoostedJetMerger + process.slimmedJetsCMSTopTagCHSPacked = cms.EDProducer("BoostedJetMerger", + jetSrc=cms.InputTag("selectedPatJetsCMSTopTagCHS"), + subjetSrc=cms.InputTag("slimmedJetsCMSTopTagCHSSubjets") + ) + + + process.packedPatJetsAK8 = cms.EDProducer("JetSubstructurePacker", + jetSrc = cms.InputTag("selectedPatJetsAK8"), + distMin = cms.double(0.8), + algoTags = cms.VInputTag( + cms.InputTag("slimmedJetsCMSTopTagCHSPacked"), + cms.InputTag("slimmedJetsAK8PFCHSSoftDropPacked"), + ), + algoLabels = cms.vstring( + 'CMSTopTag', + 'SoftDrop', + ) + ) + + diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index ed70eb1749cc5..3dee5f15d7815 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -67,162 +67,12 @@ def miniAOD_customizeCommon(process): process.selectedPatTaus.cut = cms.string("pt > 18. && tauID('decayModeFinding')> 0.5") process.selectedPatPhotons.cut = cms.string("") - - # add CMS top tagger - from RecoJets.JetProducers.caTopTaggers_cff import caTopTagInfos - process.caTopTagInfos = caTopTagInfos.clone() - process.caTopTagInfosPAT = cms.EDProducer("RecoJetDeltaRTagInfoValueMapProducer", - src = cms.InputTag("ak8PFJetsCHS"), - matched = cms.InputTag("cmsTopTagPFJetsCHS"), - matchedTagInfos = cms.InputTag("caTopTagInfos"), - distMax = cms.double(0.8) - ) - - #add AK8 from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection - addJetCollection(process, labelName = 'AK8', - jetSource = cms.InputTag('ak8PFJetsCHS'), - algo= 'AK', rParam = 0.8, - jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - btagInfos = ['caTopTagInfosPAT'], - genJetCollection = cms.InputTag('slimmedGenJetsAK8') - ) - process.patJetsAK8.userData.userFloats.src = [] # start with empty list of user floats - process.selectedPatJetsAK8.cut = cms.string("pt > 50") - - - - ## AK8 groomed masses - from RecoJets.Configuration.RecoPFJets_cff import ak8PFJetsCHSPruned, ak8PFJetsCHSSoftDrop, ak8PFJetsCHSFiltered, ak8PFJetsCHSTrimmed - process.ak8PFJetsCHSPruned = ak8PFJetsCHSPruned.clone() - process.ak8PFJetsCHSSoftDrop = ak8PFJetsCHSSoftDrop.clone() - process.ak8PFJetsCHSTrimmed = ak8PFJetsCHSTrimmed.clone() - process.ak8PFJetsCHSFiltered = ak8PFJetsCHSFiltered.clone() - process.load("RecoJets.JetProducers.ak8PFJetsCHS_groomingValueMaps_cfi") - process.patJetsAK8.userData.userFloats.src += ['ak8PFJetsCHSPrunedMass','ak8PFJetsCHSSoftDropMass','ak8PFJetsCHSTrimmedMass','ak8PFJetsCHSFilteredMass'] - - # Add AK8 top tagging variables - process.patJetsAK8.tagInfoSources = cms.VInputTag(cms.InputTag("caTopTagInfosPAT")) - process.patJetsAK8.addTagInfos = cms.bool(True) - - - - # add Njetiness - process.load('RecoJets.JetProducers.nJettinessAdder_cfi') - process.NjettinessAK8 = process.Njettiness.clone() - process.NjettinessAK8.src = cms.InputTag("ak8PFJetsCHS") - process.NjettinessAK8.cone = cms.double(0.8) - process.patJetsAK8.userData.userFloats.src += ['NjettinessAK8:tau1','NjettinessAK8:tau2','NjettinessAK8:tau3'] - - - ## PATify pruned fat jets - addJetCollection( - process, - labelName = 'AK8PFCHSSoftDrop', - jetSource = cms.InputTag('ak8PFJetsCHSSoftDrop'), - btagDiscriminators = ['None'], - jetCorrections = ('AK8PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), - getJetMCFlavour = False # jet flavor disabled - ) - getattr(process,'patJetPartonMatchAK8PFCHSSoftDrop').matched = cms.InputTag('prunedGenParticles') - ## PATify soft drop subjets - addJetCollection( - process, - labelName = 'AK8PFCHSSoftDropSubjets', - jetSource = cms.InputTag('ak8PFJetsCHSSoftDrop','SubJets'), - algo = 'ak', # needed for subjet flavor clustering - rParam = 0.8, # needed for subjet flavor clustering - btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], - jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), - explicitJTA = True, # needed for subjet b tagging - svClustering = True, # needed for subjet b tagging - genJetCollection = cms.InputTag('slimmedGenJets'), - fatJets=cms.InputTag('ak8PFJetsCHS'), # needed for subjet flavor clustering - groomedFatJets=cms.InputTag('ak8PFJetsCHSSoftDrop') # needed for subjet flavor clustering - ) - process.selectedPatJetsAK8PFCHSSoftDrop.cut = cms.string("pt > 200") - - process.slimmedJetsAK8PFCHSSoftDropSubjets = cms.EDProducer("PATJetSlimmer", - src = cms.InputTag("selectedPatJetsAK8PFCHSSoftDropSubjets"), - packedPFCandidates = cms.InputTag("packedPFCandidates"), - dropJetVars = cms.string("1"), - dropDaughters = cms.string("0"), - dropTrackRefs = cms.string("1"), - dropSpecific = cms.string("1"), - dropTagInfos = cms.string("1"), - ) - - - ## Establish references between PATified fat jets and subjets using the BoostedJetMerger - process.slimmedJetsAK8PFCHSSoftDropPacked = cms.EDProducer("BoostedJetMerger", - jetSrc=cms.InputTag("selectedPatJetsAK8PFCHSSoftDrop"), - subjetSrc=cms.InputTag("slimmedJetsAK8PFCHSSoftDropSubjets") - ) - - addJetCollection( - process, - labelName = 'CMSTopTagCHS', - jetSource = cms.InputTag('cmsTopTagPFJetsCHS'), - jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'), - btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], - genJetCollection = cms.InputTag('slimmedGenJetsAK8'), - getJetMCFlavour = False # - ) - process.patJetsCMSTopTagCHS.addTagInfos = True - process.patJetsCMSTopTagCHS.tagInfoSources = cms.VInputTag( - cms.InputTag('caTopTagInfosPAT') - ) - process.selectedPatJetsCMSTopTagCHS.cut = cms.string("pt > 200") - - addJetCollection( - process, - labelName = 'CMSTopTagCHSSubjets', - jetSource = cms.InputTag('cmsTopTagPFJetsCHS','caTopSubJets'), - algo = 'AK', # needed for subjet flavor clustering - rParam = 0.8, # needed for subjet flavor clustering - btagDiscriminators = ['pfCombinedSecondaryVertexBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags'], - jetCorrections = ('AK4PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), - genJetCollection = cms.InputTag('slimmedGenJets'), # Using ak4GenJets for matching which is not entirely appropriate - explicitJTA = True, # needed for subjet b tagging - svClustering = True, # needed for subjet b tagging - fatJets=cms.InputTag('ak8PFJetsCHS'), # needed for subjet flavor clustering - groomedFatJets=cms.InputTag('cmsTopTagPFJetsCHS') # needed for subjet flavor clustering - - ) - - process.slimmedJetsCMSTopTagCHSSubjets = cms.EDProducer("PATJetSlimmer", - src = cms.InputTag("selectedPatJetsCMSTopTagCHSSubjets"), - packedPFCandidates = cms.InputTag("packedPFCandidates"), - dropJetVars = cms.string("1"), - dropDaughters = cms.string("0"), - dropTrackRefs = cms.string("1"), - dropSpecific = cms.string("1"), - dropTagInfos = cms.string("1"), - ) - - ## Establish references between PATified fat jets and subjets using the BoostedJetMerger - process.slimmedJetsCMSTopTagCHSPacked = cms.EDProducer("BoostedJetMerger", - jetSrc=cms.InputTag("selectedPatJetsCMSTopTagCHS"), - subjetSrc=cms.InputTag("slimmedJetsCMSTopTagCHSSubjets") - ) - - - process.packedPatJetsAK8 = cms.EDProducer("JetSubstructurePacker", - jetSrc = cms.InputTag("selectedPatJetsAK8"), - distMin = cms.double(0.8), - algoTags = cms.VInputTag( - cms.InputTag("slimmedJetsCMSTopTagCHSPacked"), - cms.InputTag("slimmedJetsAK8PFCHSSoftDropPacked"), - ), - algoLabels = cms.vstring( - 'CMSTopTag', - 'SoftDrop', - ) - ) - + from PhysicsTools.PatAlgos.slimming.applySubstructure_cfi import applySubstructure + applySubstructure( process ) - + # from PhysicsTools.PatAlgos.tools.trigTools import switchOnTriggerStandAlone switchOnTriggerStandAlone( process, outputModule = '' ) From 94aab926d0e975a2deb68d9a0db3c95e98d35790 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Mon, 9 Feb 2015 22:37:40 +0100 Subject: [PATCH 09/17] Fixing checksum --- DataFormats/PatCandidates/src/classes_def_objects.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/DataFormats/PatCandidates/src/classes_def_objects.xml b/DataFormats/PatCandidates/src/classes_def_objects.xml index 4bbbef501b22c..73493f8e3c88b 100644 --- a/DataFormats/PatCandidates/src/classes_def_objects.xml +++ b/DataFormats/PatCandidates/src/classes_def_objects.xml @@ -135,8 +135,7 @@ - - + From a735126dfb57b26c15d4d3f689bef65f89837af4 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Mon, 9 Feb 2015 22:45:37 +0100 Subject: [PATCH 10/17] Changing matched gen particles to be conssitent with others --- PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py index 718d95d11349b..1a194f4cacfb9 100644 --- a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py @@ -59,7 +59,7 @@ def applySubstructure( process ) : jetCorrections = ('AK8PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute'], 'None'), getJetMCFlavour = False # jet flavor disabled ) - getattr(process,'patJetPartonMatchAK8PFCHSSoftDrop').matched = cms.InputTag('prunedGenParticles') + ## PATify soft drop subjets addJetCollection( process, From 4329c3e8791386b03d7c05e9293dd7089f5acd4f Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Mon, 9 Feb 2015 22:50:20 +0100 Subject: [PATCH 11/17] Changing distMin to distMax for Dinko --- .../PatAlgos/python/slimming/applySubstructure_cfi.py | 2 +- PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py index 1a194f4cacfb9..8450ca23a239d 100644 --- a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py @@ -144,7 +144,7 @@ def applySubstructure( process ) : process.packedPatJetsAK8 = cms.EDProducer("JetSubstructurePacker", jetSrc = cms.InputTag("selectedPatJetsAK8"), - distMin = cms.double(0.8), + distMax = cms.double(0.8), algoTags = cms.VInputTag( cms.InputTag("slimmedJetsCMSTopTagCHSPacked"), cms.InputTag("slimmedJetsAK8PFCHSSoftDropPacked"), diff --git a/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc b/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc index 074f80608a788..72690e7b89e10 100644 --- a/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc +++ b/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc @@ -2,7 +2,7 @@ #include "DataFormats/Math/interface/deltaR.h" JetSubstructurePacker::JetSubstructurePacker(const edm::ParameterSet& iConfig) : - distMin_( iConfig.getParameter("distMin") ), + distMax_( iConfig.getParameter("distMax") ), jetToken_(consumes >( iConfig.getParameter("jetSrc") )), algoLabels_( iConfig.getParameter< std::vector > ("algoLabels") ), algoTags_ (iConfig.getParameter > ( "algoTags" )) @@ -43,7 +43,7 @@ JetSubstructurePacker::produce(edm::Event& iEvent, const edm::EventSetup&) unsigned int index = 0; for ( auto const & ialgoHandle : algoHandles ) { std::vector< edm::Ptr > nextSubjets; - float dRMin = distMin_; + float dRMin = distMax_; for ( auto const & jjet : *ialgoHandle ) { From 5582fab5b4eddd0f3a7e33f2d8f7f6473f6be9ce Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Mon, 9 Feb 2015 23:05:26 +0100 Subject: [PATCH 12/17] Changing distMin to distMax in header --- PhysicsTools/PatUtils/interface/JetSubstructurePacker.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h b/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h index 7f071682f747b..d8d17e4e26f58 100644 --- a/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h +++ b/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h @@ -44,7 +44,7 @@ class JetSubstructurePacker : public edm::stream::EDProducer<> { // ----------member data --------------------------- // data labels - float distMin_; + float distMax_; edm::EDGetTokenT > jetToken_; std::vector algoLabels_; std::vector algoTags_; From 7d2aaf52a75f8f2349a03cc758a7b5d1462f62f5 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Mon, 9 Feb 2015 23:10:42 +0100 Subject: [PATCH 13/17] Committed wrong file --- DataFormats/PatCandidates/src/classes_def_objects.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/PatCandidates/src/classes_def_objects.xml b/DataFormats/PatCandidates/src/classes_def_objects.xml index 73493f8e3c88b..f53a1358ff7df 100644 --- a/DataFormats/PatCandidates/src/classes_def_objects.xml +++ b/DataFormats/PatCandidates/src/classes_def_objects.xml @@ -134,7 +134,7 @@ - + From 9ed7980e44b4870e58680758ebd9416afc1a7b7d Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Tue, 10 Feb 2015 18:20:49 +0100 Subject: [PATCH 14/17] Slimming subjets --- .../PatAlgos/python/slimming/slimming_cff.py | 4 ++-- PhysicsTools/PatUtils/plugins/BoostedJetMerger.cc | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index 4860eb8cbae1b..0314963deeda2 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -27,8 +27,8 @@ 'keep *_slimmedMETs*_*_*', 'keep *_slimmedSecondaryVertices*_*_*', 'keep *_cmsTopTaggerMap_*_*', - 'keep *_slimmedJetsAK8PFCHSSoftDropSubjets_*_*', - 'keep *_slimmedJetsCMSTopTagCHSSubjets_*_*', + #'keep *_slimmedJetsAK8PFCHSSoftDropSubjets_*_*', + #'keep *_slimmedJetsCMSTopTagCHSSubjets_*_*', 'keep *_packedPatJetsAK8_*_*', ## add extra METs diff --git a/PhysicsTools/PatUtils/plugins/BoostedJetMerger.cc b/PhysicsTools/PatUtils/plugins/BoostedJetMerger.cc index 30f818c141b0a..3097e80f04002 100644 --- a/PhysicsTools/PatUtils/plugins/BoostedJetMerger.cc +++ b/PhysicsTools/PatUtils/plugins/BoostedJetMerger.cc @@ -7,6 +7,7 @@ BoostedJetMerger::BoostedJetMerger(const edm::ParameterSet& iConfig) : { //register products produces > (); + produces > ("SubJets"); } @@ -21,6 +22,9 @@ BoostedJetMerger::produce(edm::Event& iEvent, const edm::EventSetup&) { std::auto_ptr< std::vector > outputs( new std::vector ); + std::auto_ptr< std::vector > outputSubjets( new std::vector ); + + edm::RefProd< std::vector > h_subJetsOut = iEvent.getRefBeforePut< std::vector >( "SubJets" ); edm::Handle< edm::View > jetHandle; edm::Handle< edm::View > subjetHandle; @@ -40,8 +44,12 @@ BoostedJetMerger::produce(edm::Event& iEvent, const edm::EventSetup&) subjetHandle->end(), FindCorrectedSubjet(subjet) ); if ( ifound != subjetHandle->end() ) { - nextSubjets.push_back( subjetHandle->ptrAt( ifound - subjetHandle->begin() ) ); + outputSubjets->push_back( *ifound ); + + edm::Ref > subjetRef ( h_subJetsOut, outputSubjets->size() - 1); + edm::Ptr< pat::Jet > subjetPtr ( h_subJetsOut.id(), subjetRef.key(), h_subJetsOut.productGetter() ); + nextSubjets.push_back( subjetPtr ); } } outputs->back().clearDaughters(); @@ -53,7 +61,9 @@ BoostedJetMerger::produce(edm::Event& iEvent, const edm::EventSetup&) } + iEvent.put(outputs); + iEvent.put(outputSubjets, "SubJets"); } From a573f9f8bf685284ab560588f3dc2335c9b674ae Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Tue, 10 Feb 2015 21:24:21 +0100 Subject: [PATCH 15/17] Add the slimmed subjets --- PhysicsTools/PatAlgos/python/slimming/slimming_cff.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index 0314963deeda2..176d82227ad13 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -29,6 +29,8 @@ 'keep *_cmsTopTaggerMap_*_*', #'keep *_slimmedJetsAK8PFCHSSoftDropSubjets_*_*', #'keep *_slimmedJetsCMSTopTagCHSSubjets_*_*', + 'keep *_slimmedJetsAK8PFCHSSoftDropPacked_SubJets_*', + 'keep *_slimmedJetsCMSTopTagCHSPacked_SubJets_*', 'keep *_packedPatJetsAK8_*_*', ## add extra METs From 54680285450da7e65b44a105f1bd852ee9a1a426 Mon Sep 17 00:00:00 2001 From: Dinko Ferencek Date: Thu, 12 Feb 2015 14:22:36 +0100 Subject: [PATCH 16/17] applied additional slimming of substructure info --- .../PatAlgos/python/slimming/applySubstructure_cfi.py | 2 +- PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py | 2 +- PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py | 4 ++-- PhysicsTools/PatAlgos/python/slimming/slimming_cff.py | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py index 8450ca23a239d..c4ee4a7ef726a 100644 --- a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py @@ -23,7 +23,7 @@ def applySubstructure( process ) : genJetCollection = cms.InputTag('slimmedGenJetsAK8') ) process.patJetsAK8.userData.userFloats.src = [] # start with empty list of user floats - process.selectedPatJetsAK8.cut = cms.string("pt > 50") + process.selectedPatJetsAK8.cut = cms.string("pt > 200") diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py index b37f0bf115bb9..3d9ea9ade2f02 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py @@ -12,7 +12,7 @@ slimmedGenJetsAK8 = cms.EDProducer("PATGenJetSlimmer", src = cms.InputTag("ak8GenJets"), packedGenParticles = cms.InputTag("packedGenParticles"), - cut = cms.string("pt > 8"), + cut = cms.string("pt > 150"), clearDaughters = cms.bool(False), #False means rekeying dropSpecific = cms.bool(False), ) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py index 0cb604c10f77d..a10b88f68389d 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py @@ -10,10 +10,10 @@ dropTagInfos = cms.string("1"), ) slimmedJetsAK8 = cms.EDProducer("PATJetSlimmer", - src = cms.InputTag("selectedPatJetsAK8"), + src = cms.InputTag("packedPatJetsAK8"), packedPFCandidates = cms.InputTag("packedPFCandidates"), dropJetVars = cms.string("1"), - dropDaughters = cms.string("0"), + dropDaughters = cms.string("1"), dropTrackRefs = cms.string("1"), dropSpecific = cms.string("0"), dropTagInfos = cms.string("0"), diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index 176d82227ad13..ba00aab01dbfa 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -24,6 +24,7 @@ 'keep *_slimmedMuons*_*_*', 'keep *_slimmedTaus*_*_*', 'keep *_slimmedJets_*_*', + 'keep *_slimmedJetsAK8_*_*', 'keep *_slimmedMETs*_*_*', 'keep *_slimmedSecondaryVertices*_*_*', 'keep *_cmsTopTaggerMap_*_*', @@ -31,7 +32,7 @@ #'keep *_slimmedJetsCMSTopTagCHSSubjets_*_*', 'keep *_slimmedJetsAK8PFCHSSoftDropPacked_SubJets_*', 'keep *_slimmedJetsCMSTopTagCHSPacked_SubJets_*', - 'keep *_packedPatJetsAK8_*_*', + #'keep *_packedPatJetsAK8_*_*', ## add extra METs 'keep recoPhotonCores_reducedEgamma_*_*', From e9e245688bf62fa13b4d47011d9421f4bf6583d9 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Tue, 10 Mar 2015 13:34:12 +0100 Subject: [PATCH 17/17] AK8 constituents not in subjets added as daughters in addition to the subjets, so that alternative reclusterings are possible --- .../PatAlgos/plugins/PATJetSlimmer.cc | 5 ++- .../python/slimming/applySubstructure_cfi.py | 8 +++- .../python/slimming/slimmedJets_cfi.py | 4 +- .../interface/JetSubstructurePacker.h | 3 ++ .../PatUtils/plugins/JetSubstructurePacker.cc | 40 ++++++++++++++++++- 5 files changed, 55 insertions(+), 5 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATJetSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATJetSlimmer.cc index 1633109a12f27..7eeff2f0cd077 100644 --- a/PhysicsTools/PatAlgos/plugins/PATJetSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATJetSlimmer.cc @@ -32,7 +32,7 @@ namespace pat { private: edm::EDGetTokenT> pf2pc_; edm::EDGetTokenT > jets_; - StringCutObjectSelector dropJetVars_,dropDaughters_,dropTrackRefs_,dropSpecific_,dropTagInfos_; + StringCutObjectSelector dropJetVars_,dropDaughters_,rekeyDaughters_,dropTrackRefs_,dropSpecific_,dropTagInfos_; }; } // namespace @@ -43,6 +43,7 @@ pat::PATJetSlimmer::PATJetSlimmer(const edm::ParameterSet & iConfig) : jets_(consumes >(iConfig.getParameter("src"))), dropJetVars_(iConfig.getParameter("dropJetVars")), dropDaughters_(iConfig.getParameter("dropDaughters")), + rekeyDaughters_(iConfig.getParameter("rekeyDaughters")), dropTrackRefs_(iConfig.getParameter("dropTrackRefs")), dropSpecific_(iConfig.getParameter("dropSpecific")), dropTagInfos_(iConfig.getParameter("dropTagInfos")) @@ -83,7 +84,7 @@ pat::PATJetSlimmer::produce(edm::Event & iEvent, const edm::EventSetup & iSetup) jet.clearDaughters(); jet.pfCandidatesFwdPtr_.clear(); jet.caloTowersFwdPtr_.clear(); - } else { //rekey + } else if (rekeyDaughters_(*it)) { //rekey //copy old reco::CompositePtrCandidate::daughters old = jet.daughterPtrVector(); jet.clearDaughters(); diff --git a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py index c4ee4a7ef726a..f4dd619b22331 100644 --- a/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py @@ -82,6 +82,7 @@ def applySubstructure( process ) : packedPFCandidates = cms.InputTag("packedPFCandidates"), dropJetVars = cms.string("1"), dropDaughters = cms.string("0"), + rekeyDaughters = cms.string("1"), dropTrackRefs = cms.string("1"), dropSpecific = cms.string("1"), dropTagInfos = cms.string("1"), @@ -130,6 +131,7 @@ def applySubstructure( process ) : packedPFCandidates = cms.InputTag("packedPFCandidates"), dropJetVars = cms.string("1"), dropDaughters = cms.string("0"), + rekeyDaughters = cms.string("1"), dropTrackRefs = cms.string("1"), dropSpecific = cms.string("1"), dropTagInfos = cms.string("1"), @@ -152,7 +154,11 @@ def applySubstructure( process ) : algoLabels = cms.vstring( 'CMSTopTag', 'SoftDrop', - ) + ), + fixDaughters = cms.bool(True), + packedPFCandidates = cms.InputTag("packedPFCandidates"), ) + # switch off daughter re-keying since it's done in the JetSubstructurePacker (and can't be done afterwards) + process.slimmedJetsAK8.rekeyDaughters = "0" diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py index a10b88f68389d..28949cf8d0eb1 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedJets_cfi.py @@ -5,6 +5,7 @@ packedPFCandidates = cms.InputTag("packedPFCandidates"), dropJetVars = cms.string("1"), dropDaughters = cms.string("0"), + rekeyDaughters = cms.string("1"), dropTrackRefs = cms.string("1"), dropSpecific = cms.string("0"), dropTagInfos = cms.string("1"), @@ -13,7 +14,8 @@ src = cms.InputTag("packedPatJetsAK8"), packedPFCandidates = cms.InputTag("packedPFCandidates"), dropJetVars = cms.string("1"), - dropDaughters = cms.string("1"), + dropDaughters = cms.string("0"), + rekeyDaughters = cms.string("1"), dropTrackRefs = cms.string("1"), dropSpecific = cms.string("0"), dropTagInfos = cms.string("0"), diff --git a/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h b/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h index d8d17e4e26f58..c2d68b712d68d 100644 --- a/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h +++ b/PhysicsTools/PatUtils/interface/JetSubstructurePacker.h @@ -27,6 +27,7 @@ #include "DataFormats/Common/interface/View.h" #include "DataFormats/Candidate/interface/CandidateFwd.h" #include "FWCore/Utilities/interface/transform.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" // // class decleration // @@ -49,4 +50,6 @@ class JetSubstructurePacker : public edm::stream::EDProducer<> { std::vector algoLabels_; std::vector algoTags_; std::vector< edm::EDGetTokenT< edm::View > > algoTokens_; + bool fixDaughters_; + edm::EDGetTokenT> pf2pc_; }; diff --git a/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc b/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc index 72690e7b89e10..45dd6ab0c1ded 100644 --- a/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc +++ b/PhysicsTools/PatUtils/plugins/JetSubstructurePacker.cc @@ -1,13 +1,16 @@ #include "PhysicsTools/PatUtils/interface/JetSubstructurePacker.h" #include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/Common/interface/RefToPtr.h" JetSubstructurePacker::JetSubstructurePacker(const edm::ParameterSet& iConfig) : distMax_( iConfig.getParameter("distMax") ), jetToken_(consumes >( iConfig.getParameter("jetSrc") )), algoLabels_( iConfig.getParameter< std::vector > ("algoLabels") ), - algoTags_ (iConfig.getParameter > ( "algoTags" )) + algoTags_ (iConfig.getParameter > ( "algoTags" )), + fixDaughters_(iConfig.getParameter("fixDaughters")) { algoTokens_ =edm::vector_transform(algoTags_, [this](edm::InputTag const & tag){return consumes< edm::View >(tag);}); + if (fixDaughters_) pf2pc_ = consumes >(iConfig.getParameter("packedPFCandidates")); //register products produces > (); } @@ -28,6 +31,9 @@ JetSubstructurePacker::produce(edm::Event& iEvent, const edm::EventSetup&) edm::Handle< edm::View > jetHandle; std::vector< edm::Handle< edm::View > > algoHandles; + edm::Handle > pf2pc; + if (fixDaughters_) iEvent.getByToken(pf2pc_,pf2pc); + iEvent.getByToken( jetToken_, jetHandle ); algoHandles.resize( algoTags_.size() ); for ( size_t i = 0; i < algoTags_.size(); ++i ) { @@ -60,6 +66,38 @@ JetSubstructurePacker::produce(edm::Event& iEvent, const edm::EventSetup&) outputs->back().addSubjets( nextSubjets, algoLabels_[index] ); ++index; } + + // fix daughters + if (fixDaughters_) { + std::vector daughtersInSubjets; + std::vector daughtersNew; + //std::cout << "Jet with pt " << outputs->back().pt() << ", " << outputs->back().numberOfDaughters() << " daughters, " << outputs->back().subjets().size() << ", subjets" << std::endl; + for ( const edm::Ptr & subjet : outputs->back().subjets()) { + const std::vector & sjdaus = subjet->daughterPtrVector(); + daughtersInSubjets.insert(daughtersInSubjets.end(), sjdaus.begin(), sjdaus.end()); + daughtersNew.push_back( edm::Ptr(subjet) ); + //std::cout << " found " << subjet->numberOfDaughters() << " daughters in a subjet" << std::endl; + } + //if (!daughtersInSubjets.empty()) std::cout << " subjet daughters are from collection " << daughtersInSubjets.front().id() << std::endl; + //std::cout << " in total, " << daughtersInSubjets.size() << " daughters from subjets" << std::endl; + for (edm::Ptr dau : outputs->back().daughterPtrVector()) { + //if (!pf2pc->contains(dau.id())) { + // std::cout << " daughter from collection " << dau.id() << " not in the value map!" << std::endl; + // std::cout << " map expects collection " << pf2pc->ids().front().first << std::endl; + // continue; + //} + reco::CandidatePtr rekeyed = edm::refToPtr((*pf2pc)[dau]); + if (std::find(daughtersInSubjets.begin(), daughtersInSubjets.end(), rekeyed) == daughtersInSubjets.end()) { + daughtersNew.push_back( rekeyed ); + } + } + //std::cout << " in total, " << daughtersNew.size() << " daughters including subjets" << std::endl; + //if (daughtersNew.size() + daughtersInSubjets.size() - outputs->back().subjets().size() == outputs->back().numberOfDaughters()) { + // std::cout << " it all adds up to the original number of daughters" << std::endl; + //} + outputs->back().clearDaughters(); + for (const auto & dau : daughtersNew) outputs->back().addDaughter(dau); + } } iEvent.put(outputs);