Skip to content

Commit

Permalink
adding puppi iso for muons
Browse files Browse the repository at this point in the history
  • Loading branch information
jshlee committed Apr 9, 2017
1 parent ee34ad3 commit 159826b
Show file tree
Hide file tree
Showing 8 changed files with 161 additions and 2 deletions.
31 changes: 31 additions & 0 deletions DataFormats/PatCandidates/interface/Muon.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,29 @@ namespace pat {
/// ecalIso() and hcalIso
float caloIso() const { return ecalIso()+hcalIso(); }

/// returns PUPPI isolations
float puppiChargedHadronIso() const {return puppiChargedHadronIso_; }
float puppiNeutralHadronIso() const {return puppiNeutralHadronIso_; }
float puppiPhotonIso() const {return puppiPhotonIso_; }
/// returns PUPPINoLeptons isolations
float puppiNoLeptonsChargedHadronIso() const {return puppiNoLeptonsChargedHadronIso_; }
float puppiNoLeptonsNeutralHadronIso() const {return puppiNoLeptonsNeutralHadronIso_; }
float puppiNoLeptonsPhotonIso() const {return puppiNoLeptonsPhotonIso_; }
/// sets PUPPI isolations
void setIsolationPUPPI(float chargedhadrons_, float neutralhadrons_, float photons_)
{
puppiChargedHadronIso_ = chargedhadrons_;
puppiNeutralHadronIso_ = neutralhadrons_;
puppiPhotonIso_ = photons_;
}
/// sets PUPPINoLeptons isolations
void setIsolationPUPPINoLeptons(float chargedhadrons_, float neutralhadrons_, float photons_)
{
puppiNoLeptonsChargedHadronIso_ = chargedhadrons_;
puppiNoLeptonsNeutralHadronIso_ = neutralhadrons_;
puppiNoLeptonsPhotonIso_ = photons_;
}

/// Muon High Level Selection
/// The user can choose to cache this info so they can drop the
/// global tracks. If the global track is present these should
Expand Down Expand Up @@ -299,6 +322,14 @@ namespace pat {
float ip_[IpTypeSize]; // dB and edB are the impact parameter at the primary vertex,
float eip_[IpTypeSize]; // and its uncertainty as recommended by the tracking group

/// PUPPI isolations
float puppiChargedHadronIso_;
float puppiNeutralHadronIso_;
float puppiPhotonIso_;
/// PUPPINoLeptons isolations
float puppiNoLeptonsChargedHadronIso_;
float puppiNoLeptonsNeutralHadronIso_;
float puppiNoLeptonsPhotonIso_;

float pfEcalEnergy_;
};
Expand Down
3 changes: 2 additions & 1 deletion DataFormats/PatCandidates/src/classes_def_objects.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@
</ioread>


<class name="pat::Muon" ClassVersion="19">
<class name="pat::Muon" ClassVersion="20">
<version ClassVersion="20" checksum="357097717"/>
<version ClassVersion="19" checksum="2754486523"/>
<version ClassVersion="18" checksum="1163602263"/>
<version ClassVersion="17" checksum="1509153359"/>
Expand Down
48 changes: 48 additions & 0 deletions PhysicsTools/PatAlgos/plugins/PATMuonProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/ParameterSet/interface/EmptyGroupDescription.h"

#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
#include "TrackingTools/Records/interface/TransientTrackRecord.h"
Expand Down Expand Up @@ -90,6 +91,17 @@ PATMuonProducer::PATMuonProducer(const edm::ParameterSet & iConfig) : useUserDat
if (addResolutions_) {
resolutionLoader_ = pat::helper::KinResolutionsLoader(iConfig.getParameter<edm::ParameterSet>("resolutions"));
}
// puppi
addPuppiIsolation_ = iConfig.getParameter<bool>("addPuppiIsolation");
if(addPuppiIsolation_){
PUPPIIsolation_charged_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationChargedHadrons"));
PUPPIIsolation_neutral_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationNeutralHadrons"));
PUPPIIsolation_photons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationPhotons"));
//puppiNoLeptons
PUPPINoLeptonsIsolation_charged_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationChargedHadrons"));
PUPPINoLeptonsIsolation_neutral_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationNeutralHadrons"));
PUPPINoLeptonsIsolation_photons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationPhotons"));
}
// read isoDeposit labels, for direct embedding
readIsolationLabels(iConfig, "isoDeposits", isoDepositLabels_, isoDepositTokens_);
// read isolation value labels, for direct embedding
Expand Down Expand Up @@ -142,6 +154,25 @@ void PATMuonProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSetu
iEvent.getByToken(isolationValueTokens_[j], isolationValues[j]);
}

//value maps for puppi isolation
edm::Handle<edm::ValueMap<float>> PUPPIIsolation_charged_hadrons;
edm::Handle<edm::ValueMap<float>> PUPPIIsolation_neutral_hadrons;
edm::Handle<edm::ValueMap<float>> PUPPIIsolation_photons;
//value maps for puppiNoLeptons isolation
edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_charged_hadrons;
edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_neutral_hadrons;
edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_photons;
if(addPuppiIsolation_){
//puppi
iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons);
iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons);
iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons);
//puppiNoLeptons
iEvent.getByToken(PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_charged_hadrons);
iEvent.getByToken(PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons);
iEvent.getByToken(PUPPINoLeptonsIsolation_photons_, PUPPINoLeptonsIsolation_photons);
}

// prepare the MC genMatchTokens_
GenAssociations genMatches(genMatchTokens_.size());
if (addGenMatch_) {
Expand Down Expand Up @@ -282,6 +313,14 @@ void PATMuonProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSetu

Muon aMuon(muonRef);
fillMuon( aMuon, muonRef, muonBaseRef, genMatches, deposits, isolationValues);
if (addPuppiIsolation_) {
aMuon.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[muonRef], (*PUPPIIsolation_neutral_hadrons)[muonRef], (*PUPPIIsolation_photons)[muonRef]);
aMuon.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[muonRef], (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonRef], (*PUPPINoLeptonsIsolation_photons)[muonRef]);
}
else {
aMuon.setIsolationPUPPI(-999., -999.,-999.);
aMuon.setIsolationPUPPINoLeptons(-999., -999.,-999.);
}

// Isolation
if (isolator_.enabled()) {
Expand Down Expand Up @@ -512,6 +551,15 @@ void PATMuonProducer::fillDescriptions(edm::ConfigurationDescriptions & descript
isolationValuesPSet.addOptional<edm::InputTag>("pfPhotons");
iDesc.addOptional("isolationValues", isolationValuesPSet);

iDesc.ifValue(edm::ParameterDescription<bool>("addPuppiIsolation", false, true),
true >> (edm::ParameterDescription<edm::InputTag>("puppiIsolationChargedHadrons", edm::InputTag("muonPUPPIIsolation","h+-DR030-ThresholdVeto000-ConeVeto000"), true) and
edm::ParameterDescription<edm::InputTag>("puppiIsolationNeutralHadrons", edm::InputTag("muonPUPPIIsolation","h0-DR030-ThresholdVeto000-ConeVeto001"), true) and
edm::ParameterDescription<edm::InputTag>("puppiIsolationPhotons", edm::InputTag("muonPUPPIIsolation","gamma-DR030-ThresholdVeto000-ConeVeto001"), true) and
edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationChargedHadrons", edm::InputTag("muonPUPPINoLeptonsIsolation","h+-DR030-ThresholdVeto000-ConeVeto000"), true) and
edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationNeutralHadrons", edm::InputTag("muonPUPPINoLeptonsIsolation","h0-DR030-ThresholdVeto000-ConeVeto001"), true) and
edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationPhotons", edm::InputTag("muonPUPPINoLeptonsIsolation","gamma-DR030-ThresholdVeto000-ConeVeto001"), true)) or
false >> edm::EmptyGroupDescription());

// Efficiency configurables
edm::ParameterSetDescription efficienciesPSet;
efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
Expand Down
12 changes: 11 additions & 1 deletion PhysicsTools/PatAlgos/plugins/PATMuonProducer.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,17 @@ namespace pat {
bool useUserData_;
/// add ecal PF energy
bool embedPfEcalEnergy_;

/// add puppi isolation
bool addPuppiIsolation_;
//PUPPI isolation tokens
edm::EDGetTokenT<edm::ValueMap<float> > PUPPIIsolation_charged_hadrons_;
edm::EDGetTokenT<edm::ValueMap<float> > PUPPIIsolation_neutral_hadrons_;
edm::EDGetTokenT<edm::ValueMap<float> > PUPPIIsolation_photons_;
//PUPPINoLeptons isolation tokens
edm::EDGetTokenT<edm::ValueMap<float> > PUPPINoLeptonsIsolation_charged_hadrons_;
edm::EDGetTokenT<edm::ValueMap<float> > PUPPINoLeptonsIsolation_neutral_hadrons_;
edm::EDGetTokenT<edm::ValueMap<float> > PUPPINoLeptonsIsolation_photons_;

/// --- tools ---
/// comparator for pt ordering
GreaterByPt<Muon> pTComparator_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@

# ecal PF energy
embedPfEcalEnergy = cms.bool(True),
addPuppiIsolation = cms.bool(False)
)


Expand Down
8 changes: 8 additions & 0 deletions PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@ def miniAOD_customizeCommon(process):
process.patMuons.embedPickyMuon = False # no, use best track
process.patMuons.embedTpfmsMuon = False # no, use best track
process.patMuons.embedDytMuon = False # no, use best track
process.patMuons.addPuppiIsolation = cms.bool(True)
process.patMuons.puppiIsolationChargedHadrons = cms.InputTag("muonPUPPIIsolation","h+-DR040-ThresholdVeto000-ConeVeto000")
process.patMuons.puppiIsolationNeutralHadrons = cms.InputTag("muonPUPPIIsolation","h0-DR040-ThresholdVeto000-ConeVeto001")
process.patMuons.puppiIsolationPhotons = cms.InputTag("muonPUPPIIsolation","gamma-DR040-ThresholdVeto000-ConeVeto001")
process.patMuons.puppiNoLeptonsIsolationChargedHadrons = cms.InputTag("muonPUPPINoLeptonsIsolation","h+-DR040-ThresholdVeto000-ConeVeto000")
process.patMuons.puppiNoLeptonsIsolationNeutralHadrons = cms.InputTag("muonPUPPINoLeptonsIsolation","h0-DR040-ThresholdVeto000-ConeVeto001")
process.patMuons.puppiNoLeptonsIsolationPhotons = cms.InputTag("muonPUPPINoLeptonsIsolation","gamma-DR040-ThresholdVeto000-ConeVeto001")

#
# disable embedding of electron and photon associated objects already stored by the ReducedEGProducer
process.patElectrons.embedGsfElectronCore = False ## process.patElectrons.embed in AOD externally stored gsf electron core
Expand Down
17 changes: 17 additions & 0 deletions PhysicsTools/PatAlgos/python/slimming/muonIsolationsPUPPI_cfi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import FWCore.ParameterSet.Config as cms
from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask

from RecoMuon.MuonIsolationProducers.muonIsolationPUPPI_cff import muonIsolationMiniAODPUPPI as _muonIsolationMiniAODPUPPI
from RecoMuon.MuonIsolationProducers.muonIsolationPUPPI_cff import muonIsolationMiniAODPUPPINoLeptons as _muonIsolationMiniAODPUPPINoLeptons

def makeInputForPUPPIIsolationEgm(process):

task = getPatAlgosToolsTask(process)

addToProcessAndTask('muonPUPPIIsolation', _muonIsolationMiniAODPUPPI.clone(), process, task)
process.muonPUPPIIsolation.srcToIsolate = cms.InputTag("muons")
process.muonPUPPIIsolation.srcForIsolationCone = cms.InputTag("packedPFCandidates")

addToProcessAndTask('muonPUPPINoLeptonsIsolation', _muonIsolationMiniAODPUPPINoLeptons.clone(), process, task)
process.muonPUPPINoLeptonsIsolation.srcToIsolate = cms.InputTag("muons")
process.muonPUPPINoLeptonsIsolation.srcForIsolationCone = cms.InputTag("packedPFCandidates")
43 changes: 43 additions & 0 deletions RecoMuon/MuonIsolationProducers/python/muonIsolationPUPPI_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import FWCore.ParameterSet.Config as cms

IsoConeDefinitions = cms.VPSet(
cms.PSet( isolationAlgo = cms.string('MuonPFIsolationWithConeVeto'),
coneSize = cms.double(0.4),
VetoThreshold = cms.double(0.0),
VetoConeSize = cms.double(0.0001),
isolateAgainst = cms.string('h+'),
miniAODVertexCodes = cms.vuint32(2,3) ),
cms.PSet( isolationAlgo = cms.string('MuonPFIsolationWithConeVeto'),
coneSize = cms.double(0.4),
VetoThreshold = cms.double(0.0),
VetoConeSize = cms.double(0.01),
isolateAgainst = cms.string('h0'),
miniAODVertexCodes = cms.vuint32(2,3) ),
cms.PSet( isolationAlgo = cms.string('MuonPFIsolationWithConeVeto'),
coneSize = cms.double(0.4),
VetoThreshold = cms.double(0.0),
VetoConeSize = cms.double(0.01),
isolateAgainst = cms.string('gamma'),
miniAODVertexCodes = cms.vuint32(2,3) ),
)

muonIsolationAODPUPPI = cms.EDProducer( "CITKPFIsolationSumProducerForPUPPI",
srcToIsolate = cms.InputTag("muons"),
srcForIsolationCone = cms.InputTag(''),
isolationConeDefinitions = IsoConeDefinitions
)

muonIsolationMiniAODPUPPI = cms.EDProducer( "CITKPFIsolationSumProducerForPUPPI",
srcToIsolate = cms.InputTag("slimmedMuons"),
srcForIsolationCone = cms.InputTag('packedPFCandidates'),
puppiValueMap = cms.InputTag(''),
isolationConeDefinitions = IsoConeDefinitions
)

muonIsolationMiniAODPUPPINoLeptons = cms.EDProducer( "CITKPFIsolationSumProducerForPUPPI",
srcToIsolate = cms.InputTag("slimmedMuons"),
srcForIsolationCone = cms.InputTag('packedPFCandidates'),
puppiValueMap = cms.InputTag(''),
usePUPPINoLepton = cms.bool(True),
isolationConeDefinitions = IsoConeDefinitions
)

0 comments on commit 159826b

Please sign in to comment.