Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Muon puppi iso miniAOD 91x #18275

Merged
merged 6 commits into from Apr 19, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
31 changes: 31 additions & 0 deletions DataFormats/PatCandidates/interface/Muon.h
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
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
Expand Up @@ -76,7 +76,10 @@ namespace citk {
puppiValueMapToken_ = mayConsume<edm::ValueMap<float>>(c.getParameter<edm::InputTag>("puppiValueMap")); //getting token for puppiValueMap
useValueMapForPUPPI = true;
}
else useValueMapForPUPPI = false;
else {
useValueMapForPUPPI = false;
usePUPPINoLepton = c.getParameter<bool>("usePUPPINoLepton");
}
const std::vector<edm::ParameterSet>& isoDefs =
c.getParameterSetVector("isolationConeDefinitions");
for( const auto& isodef : isoDefs ) {
Expand Down Expand Up @@ -202,6 +205,8 @@ void PFIsolationSumProducerForPUPPI::fillDescriptions(edm::ConfigurationDescript
descIsoConeDefinitions.add<std::vector<unsigned>>("miniAODVertexCodes", {2,3});
descIsoConeDefinitions.addOptional<double>("VetoConeSizeBarrel", 0.0);
descIsoConeDefinitions.addOptional<double>("VetoConeSizeEndcaps", 0.0);
descIsoConeDefinitions.addOptional<double>("VetoThreshold", 0.0);
descIsoConeDefinitions.addOptional<double>("VetoConeSize", 0.0);
descIsoConeDefinitions.addOptional<int>("vertexIndex",0);
descIsoConeDefinitions.addOptional<edm::InputTag>("particleBasedIsolation",edm::InputTag("no default"))->setComment("map for footprint removal that is used for photons");

Expand All @@ -212,7 +217,7 @@ void PFIsolationSumProducerForPUPPI::fillDescriptions(edm::ConfigurationDescript
isolationConeDefinitions.push_back(neutralHadrons);
isolationConeDefinitions.push_back(photons);
iDesc.addVPSet("isolationConeDefinitions", descIsoConeDefinitions, isolationConeDefinitions);
iDesc.addOptional<bool>("usePUPPINoLepton",false);
iDesc.add<bool>("usePUPPINoLepton",false);

descriptions.add("CITKPFIsolationSumProducerForPUPPI", iDesc);
}
Expand Down
62 changes: 62 additions & 0 deletions PhysicsTools/PatAlgos/plugins/PATMuonProducer.cc
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 @@ -244,6 +275,20 @@ void PATMuonProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSetu
if( embedPFCandidate_ ) aMuon.embedPFCandidate();
fillMuon( aMuon, muonBaseRef, pfBaseRef, genMatches, deposits, isolationValues );

if (addPuppiIsolation_) {
aMuon.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[muonBaseRef],
(*PUPPIIsolation_neutral_hadrons)[muonBaseRef],
(*PUPPIIsolation_photons)[muonBaseRef]);

aMuon.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[muonBaseRef],
(*PUPPINoLeptonsIsolation_neutral_hadrons)[muonBaseRef],
(*PUPPINoLeptonsIsolation_photons)[muonBaseRef]);
}
else {
aMuon.setIsolationPUPPI(-999., -999.,-999.);
aMuon.setIsolationPUPPINoLeptons(-999., -999.,-999.);
}

if (embedPfEcalEnergy_) {
aMuon.setPfEcalEnergy(pfmu.ecalEnergy());
}
Expand Down Expand Up @@ -282,6 +327,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 +565,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
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
Expand Up @@ -92,6 +92,7 @@

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


Expand Down
12 changes: 12 additions & 0 deletions PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py
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 Expand Up @@ -195,6 +203,10 @@ def miniAOD_customizeCommon(process):
task.add(process.caloJetMap)
process.patJets.userData.userFloats.src += [ cms.InputTag("caloJetMap:pt"), cms.InputTag("caloJetMap:emEnergyFraction") ]

#Muon object modifications
from PhysicsTools.PatAlgos.slimming.muonIsolationsPUPPI_cfi import makeInputForPUPPIIsolationMuon
makeInputForPUPPIIsolationMuon(process)

#EGM object modifications
from PhysicsTools.PatAlgos.slimming.egmIsolationsPUPPI_cfi import makeInputForPUPPIIsolationEgm
makeInputForPUPPIIsolationEgm(process)
Expand Down
17 changes: 17 additions & 0 deletions PhysicsTools/PatAlgos/python/slimming/muonIsolationsPUPPI_cfi.py
@@ -0,0 +1,17 @@
import FWCore.ParameterSet.Config as cms
from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask

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

def makeInputForPUPPIIsolationMuon(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/MuonIsolation/python/muonIsolationPUPPI_cff.py
@@ -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),# VetoConeSize is deltaR^2
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),# VetoConeSize is deltaR^2
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),# VetoConeSize is deltaR^2
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
)