Skip to content

Commit

Permalink
Merge pull request #8175 from rappoccio/MiniAODSubstructurePiecesAugm…
Browse files Browse the repository at this point in the history
…ented

Mini aod substructure pieces overhaul, rebase of #7659
  • Loading branch information
cmsbuild committed Mar 15, 2015
2 parents 592ca91 + e9e2456 commit d1dbe7d
Show file tree
Hide file tree
Showing 13 changed files with 440 additions and 51 deletions.
28 changes: 28 additions & 0 deletions DataFormats/PatCandidates/interface/Jet.h
Expand Up @@ -71,6 +71,7 @@ namespace pat {
typedef std::vector<edm::FwdPtr<reco::BaseTagInfo> > TagInfoFwdPtrCollection;
typedef std::vector<edm::FwdPtr<reco::PFCandidate> > PFCandidateFwdPtrCollection;
typedef std::vector<edm::FwdPtr<CaloTower> > CaloTowerFwdPtrCollection;
typedef std::vector<edm::Ptr<pat::Jet> > JetPtrCollection;


class Jet : public PATObject<reco::Jet> {
Expand Down Expand Up @@ -481,6 +482,29 @@ 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::JetPtrCollection const & subjets( unsigned int index = 0 ) const;


/// String access to subjet list
pat::JetPtrCollection const & subjets( std::string label ) const ;

/// Add new set of subjets
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(); }

/// Number of subjet collections
unsigned int nSubjetCollections( ) const { return subjetCollections_.size(); }

/// Subjet collection names
std::vector<std::string> const & subjetCollectionNames() const { return subjetLabels_; }



protected:

// ---- for content embedding ----
Expand All @@ -497,6 +521,10 @@ namespace pat {
reco::PFCandidateFwdPtrVector pfCandidatesFwdPtr_; // Refactorized content embedding


// ---- Jet Substructure ----
std::vector< pat::JetPtrCollection> subjetCollections_;
std::vector< std::string> subjetLabels_;

// ---- MC info ----

std::vector<reco::GenJet> genJet_;
Expand Down
31 changes: 31 additions & 0 deletions DataFormats/PatCandidates/src/Jet.cc
Expand Up @@ -564,3 +564,34 @@ void Jet::cachePFCandidates() const {
// Set the cache
pfCandidatesTemp_.set(std::move(pfCandidatesTemp));
}




/// Access to subjet list
pat::JetPtrCollection 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::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() );
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::JetPtrCollection const & pieces, std::string label ) {
subjetCollections_.push_back( pieces );
subjetLabels_.push_back( label );
}
10 changes: 8 additions & 2 deletions DataFormats/PatCandidates/src/classes_def_objects.xml
Expand Up @@ -194,8 +194,8 @@
<![CDATA[superClusterRelinked_.reset();]]>
</ioread>

<class name="pat::Jet" ClassVersion="14">
<version ClassVersion="15" checksum="1826981639"/>
<class name="pat::Jet" ClassVersion="15">
<version ClassVersion="15" checksum="727883729"/>
<version ClassVersion="14" checksum="1304049301"/>
<version ClassVersion="13" checksum="130552029"/>
<field name="caloTowersTemp_" transient="true"/>
Expand Down Expand Up @@ -466,6 +466,12 @@
<class name="edm::Association<std::vector<pat::PackedGenParticle> >" />
<class name="edm::Wrapper<edm::Association<std::vector<pat::PackedGenParticle> > >"/>

<!--- vectors of Ptrs -->
<class name="std::vector<edm::Ptr<pat::Jet> >" />
<class name="std::vector< std::vector<edm::Ptr<pat::Jet> > >" />
<class name="edm::Wrapper< std::vector<edm::Ptr<pat::Jet> > >" />
<class name="edm::Wrapper< std::vector< std::vector<edm::Ptr<pat::Jet> > > >" />

</selection>
<exclusion>
</exclusion>
Expand Down
6 changes: 6 additions & 0 deletions DataFormats/PatCandidates/src/classes_objects.h
Expand Up @@ -176,6 +176,12 @@ namespace DataFormats_PatCandidates {
edm::Wrapper<edm::Association<std::vector<pat::PackedGenParticle> > > asso_pgp;


std::vector< edm::Ptr<pat::Jet> > vptr_jet;
std::vector< std::vector< edm::Ptr<pat::Jet> > > vvptr_jet;
edm::Wrapper< std::vector< edm::Ptr<pat::Jet> > > wvptr_jet;
edm::Wrapper< std::vector< std::vector< edm::Ptr<pat::Jet> > > > wvvptr_jet;


};

}
5 changes: 3 additions & 2 deletions PhysicsTools/PatAlgos/plugins/PATJetSlimmer.cc
Expand Up @@ -32,7 +32,7 @@ namespace pat {
private:
edm::EDGetTokenT<edm::Association<pat::PackedCandidateCollection>> pf2pc_;
edm::EDGetTokenT<edm::View<pat::Jet> > jets_;
StringCutObjectSelector<pat::Jet> dropJetVars_,dropDaughters_,dropTrackRefs_,dropSpecific_,dropTagInfos_;
StringCutObjectSelector<pat::Jet> dropJetVars_,dropDaughters_,rekeyDaughters_,dropTrackRefs_,dropSpecific_,dropTagInfos_;
};

} // namespace
Expand All @@ -43,6 +43,7 @@ pat::PATJetSlimmer::PATJetSlimmer(const edm::ParameterSet & iConfig) :
jets_(consumes<edm::View<pat::Jet> >(iConfig.getParameter<edm::InputTag>("src"))),
dropJetVars_(iConfig.getParameter<std::string>("dropJetVars")),
dropDaughters_(iConfig.getParameter<std::string>("dropDaughters")),
rekeyDaughters_(iConfig.getParameter<std::string>("rekeyDaughters")),
dropTrackRefs_(iConfig.getParameter<std::string>("dropTrackRefs")),
dropSpecific_(iConfig.getParameter<std::string>("dropSpecific")),
dropTagInfos_(iConfig.getParameter<std::string>("dropTagInfos"))
Expand Down Expand Up @@ -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();
Expand Down
164 changes: 164 additions & 0 deletions PhysicsTools/PatAlgos/python/slimming/applySubstructure_cfi.py
@@ -0,0 +1,164 @@
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 > 200")



## 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
)

## 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"),
rekeyDaughters = cms.string("1"),
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"),
rekeyDaughters = cms.string("1"),
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"),
distMax = cms.double(0.8),
algoTags = cms.VInputTag(
cms.InputTag("slimmedJetsCMSTopTagCHSPacked"),
cms.InputTag("slimmedJetsAK8PFCHSSoftDropPacked"),
),
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"

46 changes: 4 additions & 42 deletions PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py
Expand Up @@ -67,51 +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']
)
process.patJetsAK8.userData.userFloats.src = [] # start with empty list of user floats
process.selectedPatJetsAK8.cut = cms.string("pt > 100")
process.patJetGenJetMatchAK8.matched = 'slimmedGenJets'
## 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']


from PhysicsTools.PatAlgos.slimming.applySubstructure_cfi import applySubstructure
applySubstructure( process )


#
from PhysicsTools.PatAlgos.tools.trigTools import switchOnTriggerStandAlone
switchOnTriggerStandAlone( process, outputModule = '' )
Expand Down Expand Up @@ -238,6 +199,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
Expand Down
9 changes: 9 additions & 0 deletions PhysicsTools/PatAlgos/python/slimming/slimmedGenJets_cfi.py
Expand Up @@ -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 > 150"),
clearDaughters = cms.bool(False), #False means rekeying
dropSpecific = cms.bool(False),
)

0 comments on commit d1dbe7d

Please sign in to comment.