Skip to content

Commit

Permalink
workaround for dz on 92X (requires a 94X IB with cms-sw/cmssw#20367)
Browse files Browse the repository at this point in the history
  • Loading branch information
gpetruc committed Sep 13, 2017
1 parent 5591bde commit ef63009
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 5 deletions.
89 changes: 89 additions & 0 deletions plugins/LeptonUpdater.cc
@@ -0,0 +1,89 @@
#include "FWCore/Framework/interface/global/EDProducer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "DataFormats/Common/interface/View.h"

#include "DataFormats/PatCandidates/interface/Muon.h"
#include "DataFormats/PatCandidates/interface/Electron.h"

namespace pat {


template<typename T>
class LeptonUpdater : public edm::global::EDProducer<> {

public:

explicit LeptonUpdater(const edm::ParameterSet & iConfig) :
src_(consumes<std::vector<T>>(iConfig.getParameter<edm::InputTag>("src"))),
vertices_(consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("vertices")))
{
produces<std::vector<T>>();
}

~LeptonUpdater() {}

void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const ;

static void fillDescriptions(edm::ConfigurationDescriptions & descriptions) {
edm::ParameterSetDescription desc;
desc.add<edm::InputTag>("src")->setComment("Lepton collection");
desc.add<edm::InputTag>("vertices")->setComment("Vertex collection");
if (typeid(T) == typeid(pat::Muon)) descriptions.add("muonsUpdated", desc);
else if (typeid(T) == typeid(pat::Electron)) descriptions.add("electronsUpdated", desc);
}

void setDZ(T & lep, const reco::Vertex & pv) const {}

private:
// configurables
edm::EDGetTokenT<std::vector<T>> src_;
edm::EDGetTokenT<std::vector<reco::Vertex>> vertices_;
};

// must do the specialization within the namespace otherwise gcc complains
//
template<>
void LeptonUpdater<pat::Electron>::setDZ(pat::Electron & anElectron, const reco::Vertex & pv) const {
auto track = anElectron.gsfTrack();
anElectron.setDB( track->dz(pv.position()), std::hypot(track->dzError(), pv.zError()), pat::Electron::PVDZ );
}

template<>
void LeptonUpdater<pat::Muon>::setDZ(pat::Muon & aMuon, const reco::Vertex & pv) const {
auto track = aMuon.muonBestTrack();
aMuon.setDB( track->dz(pv.position()), std::hypot(track->dzError(), pv.zError()), pat::Muon::PVDZ );
}

} // namespace

template<typename T>
void pat::LeptonUpdater<T>::produce(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const {
edm::Handle<std::vector<T>> src;
iEvent.getByToken(src_, src);

edm::Handle<std::vector<reco::Vertex>> vertices;
iEvent.getByToken(vertices_, vertices);
const reco::Vertex & pv = vertices->front();

std::unique_ptr<std::vector<T>> out(new std::vector<T>(*src));

for (unsigned int i = 0, n = src->size(); i < n; ++i) {
T & lep = (*out)[i];
setDZ(lep, pv);
}

iEvent.put(std::move(out));
}



typedef pat::LeptonUpdater<pat::Electron> PATElectronUpdater;
typedef pat::LeptonUpdater<pat::Muon> PATMuonUpdater;

#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(PATElectronUpdater);
DEFINE_FWK_MODULE(PATMuonUpdater);
16 changes: 16 additions & 0 deletions python/adaptFrom92X_cff.py
@@ -0,0 +1,16 @@
import FWCore.ParameterSet.Config as cms

slimmedMuons = cms.EDProducer("PATMuonUpdater",
src = cms.InputTag("slimmedMuons", processName = cms.InputTag.skipCurrentProcess()),
vertices = cms.InputTag("offlineSlimmedPrimaryVertices")
)
slimmedElectrons = cms.EDProducer("PATElectronUpdater",
src = cms.InputTag("slimmedElectrons", processName = cms.InputTag.skipCurrentProcess()),
vertices = cms.InputTag("offlineSlimmedPrimaryVertices")
)

adapt_nano = cms.Sequence( slimmedMuons + slimmedElectrons )

# this part below is not elegant, but probably electronMVAValueMapProducer.srcMiniAOD should not have a 'skipCurrentProcess' by default!
import RecoEgamma.ElectronIdentification.ElectronMVAValueMapProducer_cfi
RecoEgamma.ElectronIdentification.ElectronMVAValueMapProducer_cfi.electronMVAValueMapProducer.srcMiniAOD = cms.InputTag("slimmedElectrons")
4 changes: 2 additions & 2 deletions python/electrons_cff.py
Expand Up @@ -103,8 +103,8 @@
#ptErr = Var("gsfTrack().ptError()",float,doc="pt error of the GSF track",precision=6),
energyErr = Var("p4Error('P4_COMBINATION')*userFloat('eCorr')",float,doc="energy error of the cluster-track combination",precision=6),
eCorr = Var("userFloat('eCorr')",float,doc="ratio of the calibrated energy/miniaod energy"),
#dz = Var("abs(dB('PVDZ'))",float,doc="dz (with sign) wrt first PV, in cm",precision=10),
#dzErr = Var("abs(edB('PVDZ'))",float,doc="dz uncertainty, in cm",precision=6),
dz = Var("abs(dB('PVDZ'))",float,doc="dz (with sign) wrt first PV, in cm",precision=10),
dzErr = Var("abs(edB('PVDZ'))",float,doc="dz uncertainty, in cm",precision=6),
dxy = Var("dB('PV2D')",float,doc="dxy (with sign) wrt first PV, in cm",precision=10),
dxyErr = Var("edB('PV2D')",float,doc="dxy uncertainty, in cm",precision=6),
ip3d = Var("abs(dB('PV3D'))",float,doc="3D impact parameter wrt first PV, in cm",precision=10),
Expand Down
4 changes: 2 additions & 2 deletions python/muons_cff.py
Expand Up @@ -39,8 +39,8 @@
extension = cms.bool(False), # this is the main table for the muons
variables = cms.PSet(CandVars,
ptErr = Var("bestTrack().ptError()", float, doc = "ptError of the muon track", precision=6),
#dz = Var("abs(dB('PVDZ'))",float,doc="dz (with sign) wrt first PV, in cm",precision=10),
#dzErr = Var("abs(edB('PVDZ'))",float,doc="dz uncertainty, in cm",precision=6),
dz = Var("abs(dB('PVDZ'))",float,doc="dz (with sign) wrt first PV, in cm",precision=10),
dzErr = Var("abs(edB('PVDZ'))",float,doc="dz uncertainty, in cm",precision=6),
dxy = Var("dB('PV2D')",float,doc="dxy (with sign) wrt first PV, in cm",precision=10),
dxyErr = Var("edB('PV2D')",float,doc="dxy uncertainty, in cm",precision=6),
ip3d = Var("abs(dB('PV3D'))",float,doc="3D impact parameter wrt first PV, in cm",precision=10),
Expand Down
3 changes: 2 additions & 1 deletion test/nano_cfg.py
Expand Up @@ -23,6 +23,7 @@
'/store/mc/RunIISummer17MiniAOD/TT_TuneCUETP8M2T4_13TeV-powheg-pythia8/MINIAODSIM/92X_upgrade2017_realistic_v10_ext1-v1/110000/187F7EDA-0986-E711-ABB3-02163E014C21.root'
]

process.load("PhysicsTools.NanoAOD.adaptFrom92X_cff")
process.load("PhysicsTools.NanoAOD.nano_cff")

process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService",
Expand All @@ -33,7 +34,7 @@
engineName = cms.untracked.string('TRandom3'),
),
)
process.nanoPath = cms.Path(process.nanoSequenceMC)
process.nanoPath = cms.Path(process.adapt_nano + process.nanoSequenceMC)
process.calibratedPatElectrons.isMC = cms.bool(True)
process.calibratedPatPhotons.isMC = cms.bool(True)
#for data:
Expand Down

0 comments on commit ef63009

Please sign in to comment.