Skip to content

Commit

Permalink
Merge pull request #37262 from ttrk/run2_mAOD_AA_fix_egamma_assoPF
Browse files Browse the repository at this point in the history
Associated PF for Egamma in 2018 PbPb miniAOD
  • Loading branch information
cmsbuild authored Apr 25, 2022
2 parents 863035b + a9fc49b commit 186a756
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@
photon2pf = cms.InputTag("particleBasedIsolation","gedPhotons"),
pf2pf = cms.InputTag("FILLME")
)

pfEGammaToCandidateRemapperCleaned = pfEGammaToCandidateRemapper.clone(pf2pf = "cleanedParticleFlow")
2 changes: 2 additions & 0 deletions PhysicsTools/PatAlgos/python/slimming/slimming_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from PhysicsTools.PatAlgos.slimming.offlineSlimmedPrimaryVertices4D_cfi import *
from PhysicsTools.PatAlgos.slimming.offlineSlimmedPrimaryVerticesWithBS_cfi import *
from CommonTools.RecoAlgos.primaryVertexAssociation_cfi import *
from CommonTools.ParticleFlow.pfEGammaToCandidateRemapper_cfi import *
from PhysicsTools.PatAlgos.slimming.genParticles_cff import *
from PhysicsTools.PatAlgos.slimming.genParticleAssociation_cff import *
from PhysicsTools.PatAlgos.slimming.selectedPatTrigger_cfi import *
Expand Down Expand Up @@ -92,6 +93,7 @@
from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X
run2_miniAOD_pp_on_AA_103X.toReplaceWith(slimmingTask,cms.Task(primaryVertexAssociationCleaned,slimmingTask.copy()))
run2_miniAOD_pp_on_AA_103X.toReplaceWith(slimmingTask,cms.Task(primaryVertexWithBSAssociationCleaned,slimmingTask.copy()))
run2_miniAOD_pp_on_AA_103X.toReplaceWith(slimmingTask,cms.Task(pfEGammaToCandidateRemapperCleaned,slimmingTask.copy()))

from RecoHI.HiTracking.miniAODVertexRecovery_cff import offlinePrimaryVerticesRecovery, offlineSlimmedPrimaryVerticesRecovery
pp_on_AA.toReplaceWith(
Expand Down
7 changes: 7 additions & 0 deletions RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,10 @@
hiPhotonIsolationMapInput = "photonIsolationHIProducerppGED",
hiPhotonIsolationMapOutput = "photonIsolationHIProducerppGED"
)

from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X
run2_miniAOD_pp_on_AA_103X.toModify(
reducedEgamma,
photonsPFValMap = "pfEGammaToCandidateRemapperCleaned:photons",
gsfElectronsPFValMap = "pfEGammaToCandidateRemapperCleaned:electrons"
)
46 changes: 40 additions & 6 deletions RecoHI/HiJetAlgos/plugins/HiBadParticleCleaner.cc
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class HiBadParticleCleaner : public edm::global::EDProducer<> {
void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
// ----------member data ---------------------------

edm::EDGetTokenT<edm::View<reco::PFCandidate> > tokenPFCandidates_;
edm::EDGetTokenT<edm::View<reco::PFCandidate>> tokenPFCandidates_;
edm::EDGetTokenT<reco::VertexCollection> tokenPV_;

const double minMuonPt_;
Expand All @@ -51,7 +51,7 @@ class HiBadParticleCleaner : public edm::global::EDProducer<> {
// constructors and destructor
//
HiBadParticleCleaner::HiBadParticleCleaner(const edm::ParameterSet& iConfig)
: tokenPFCandidates_(consumes<edm::View<reco::PFCandidate> >(iConfig.getParameter<edm::InputTag>("PFCandidates"))),
: tokenPFCandidates_(consumes<edm::View<reco::PFCandidate>>(iConfig.getParameter<edm::InputTag>("PFCandidates"))),
tokenPV_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("offlinePV"))),
minMuonPt_(iConfig.getParameter<double>("minMuonPt")),
minChargedHadronPt_(iConfig.getParameter<double>("minChargedHadronPt")),
Expand All @@ -66,6 +66,7 @@ HiBadParticleCleaner::HiBadParticleCleaner(const edm::ParameterSet& iConfig)
produces<bool>();
produces<reco::PFCandidateCollection>();
produces<reco::PFCandidateCollection>("removed");
produces<edm::ValueMap<reco::PFCandidateRef>>();
}

//
Expand All @@ -91,7 +92,11 @@ void HiBadParticleCleaner::produce(edm::StreamID, edm::Event& iEvent, const edm:

bool foundBadCandidate = false;

for (const reco::PFCandidate& pfCandidate : *pfCandidates) {
size_t n = pfCandidates->size();
std::vector<int> candidateIndexMapper(n, 0); // mapping between the original PF and post-cleaning PF
size_t iPF;
for (iPF = 0; iPF < n; iPF++) {
const reco::PFCandidate& pfCandidate = pfCandidates->at(iPF);
if (pfCandidate.particleId() == reco::PFCandidate::ParticleType::mu) // muon cleaning
{
if (pfCandidate.pt() > minMuonPt_) {
Expand Down Expand Up @@ -128,19 +133,22 @@ void HiBadParticleCleaner::produce(edm::StreamID, edm::Event& iEvent, const edm:

if (sig3d > maxSigLoose_) {
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
foundBadCandidate = true;
continue;
}

if (track->pt() < pfCandidate.pt() / 1.5 || track->pt() > pfCandidate.pt() * 1.5) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}
if (track->originalAlgo() == reco::TrackBase::muonSeededStepOutIn &&
track->hitPattern().trackerLayersWithMeasurement() < minTrackerLayersForMuonTight_) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}
}
Expand All @@ -156,6 +164,7 @@ void HiBadParticleCleaner::produce(edm::StreamID, edm::Event& iEvent, const edm:
if ((nHits < minTrackNHits_ && nPixelHits < minPixelNHits_) || nHits == 3) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}

Expand All @@ -176,12 +185,14 @@ void HiBadParticleCleaner::produce(edm::StreamID, edm::Event& iEvent, const edm:
if (sig3d > maxSigLoose_) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}

if (sig3d > maxSigTight_ && nHits < minTrackNHits_) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}

Expand All @@ -192,12 +203,14 @@ void HiBadParticleCleaner::produce(edm::StreamID, edm::Event& iEvent, const edm:
if (sig3d > maxSigLoose_) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}

if (nHits < minTrackNHits_) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}
}
Expand All @@ -208,34 +221,55 @@ void HiBadParticleCleaner::produce(edm::StreamID, edm::Event& iEvent, const edm:
if (sig3d > maxSigTight_) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}

if (nHits < minTrackNHits_) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}

if (nPixelHits < minPixelNHits_) {
foundBadCandidate = true;
pBadCandidateCollection->push_back(pfCandidate);
candidateIndexMapper[iPF] = -1 * (pBadCandidateCollection->size());
continue;
}
}
}
}

pOutputCandidateCollection->push_back(pfCandidate);

candidateIndexMapper[iPF] = (pOutputCandidateCollection->size());
} // end loop over pf candidates

bool pass = !foundBadCandidate;

iEvent.put(std::move(pOutputCandidateCollection));
iEvent.put(std::move(pBadCandidateCollection), "removed");
edm::OrphanHandle<std::vector<reco::PFCandidate>> newpf = iEvent.put(std::move(pOutputCandidateCollection));
edm::OrphanHandle<std::vector<reco::PFCandidate>> badpf = iEvent.put(std::move(pBadCandidateCollection), "removed");

iEvent.put(std::make_unique<bool>(pass));

std::unique_ptr<edm::ValueMap<reco::PFCandidateRef>> pf2pf(new edm::ValueMap<reco::PFCandidateRef>());
edm::ValueMap<reco::PFCandidateRef>::Filler filler(*pf2pf);

std::vector<reco::PFCandidateRef> refs;
refs.reserve(n);

for (iPF = 0; iPF < n; ++iPF) {
if (candidateIndexMapper[iPF] > 0) {
refs.push_back(reco::PFCandidateRef(newpf, candidateIndexMapper[iPF] - 1));
} else if (candidateIndexMapper[iPF] < 0) {
refs.push_back(reco::PFCandidateRef(badpf, -candidateIndexMapper[iPF] - 1));
}
}
filler.insert(pfCandidates, refs.begin(), refs.end());

filler.fill();
iEvent.put(std::move(pf2pf));
}

//define this as a plug-in
Expand Down

0 comments on commit 186a756

Please sign in to comment.