diff --git a/Configuration/Eras/python/Era_Run3_pp_on_PbPb_cff.py b/Configuration/Eras/python/Era_Run3_pp_on_PbPb_cff.py index a68c0f754dbb3..a035a85542f08 100644 --- a/Configuration/Eras/python/Era_Run3_pp_on_PbPb_cff.py +++ b/Configuration/Eras/python/Era_Run3_pp_on_PbPb_cff.py @@ -1,7 +1,6 @@ import FWCore.ParameterSet.Config as cms from Configuration.Eras.Era_Run3_cff import Run3 -from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 -Run3_pp_on_PbPb = cms.ModifierChain(Run3, pp_on_AA_2018, pp_on_PbPb_run3) +Run3_pp_on_PbPb = cms.ModifierChain(Run3, pp_on_PbPb_run3) diff --git a/Configuration/ProcessModifiers/python/run2_miniAOD_pp_on_AA_103X_cff.py b/Configuration/ProcessModifiers/python/run2_miniAOD_pp_on_AA_103X_cff.py new file mode 100644 index 0000000000000..3dd0bca22445f --- /dev/null +++ b/Configuration/ProcessModifiers/python/run2_miniAOD_pp_on_AA_103X_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +run2_miniAOD_pp_on_AA_103X = cms.Modifier() + diff --git a/Configuration/PyReleaseValidation/python/relval_steps.py b/Configuration/PyReleaseValidation/python/relval_steps.py index 43e9d6ad47741..956d6d59adc69 100644 --- a/Configuration/PyReleaseValidation/python/relval_steps.py +++ b/Configuration/PyReleaseValidation/python/relval_steps.py @@ -1954,6 +1954,7 @@ def lhegensim2018ml(fragment,howMuch): '--datatier':'MINIAOD,DQMIO', '--eventcontent':'MINIAOD,DQM', '--era':'Run2_2018_pp_on_AA', + '--procModifiers':'run2_miniAOD_pp_on_AA_103X', '--data':'', '--processName':'PAT', '-n':'100' @@ -2501,15 +2502,16 @@ def gen2021HiMix(fragment,howMuch): '--datatier':'MINIAODSIM,DQMIO', '--eventcontent':'MINIAODSIM,DQM', '-n':100, + '--era':'Run2_2018_pp_on_AA', + '--procModifiers':'run2_miniAOD_pp_on_AA_103X', },hiDefaults2018_ppReco,step3Up2015Defaults]) steps['REMINIAODHI2018PPRECOMB']=merge([{'-s':'PAT,VALIDATION:@miniAODValidation,DQM:@miniAODDQM', '--datatier':'MINIAODSIM,DQMIO', '--eventcontent':'MINIAODSIM,DQM', '-n':100, '--era':'Run2_2018_pp_on_AA', - '--procModifiers':'genJetSubEvent', + '--procModifiers':'genJetSubEvent,run2_miniAOD_pp_on_AA_103X', },hiDefaults2018_ppReco,step3Up2015Defaults]) - steps['ALCARECOHI2018PPRECO']=merge([hiDefaults2018_ppReco,{'-s':'ALCA:TkAlMinBias+SiStripCalMinBias', '--datatier':'ALCARECO', '--eventcontent':'ALCARECO' diff --git a/Configuration/StandardSequences/python/Reconstruction_cff.py b/Configuration/StandardSequences/python/Reconstruction_cff.py index 24776960bc877..ba05064f488f9 100644 --- a/Configuration/StandardSequences/python/Reconstruction_cff.py +++ b/Configuration/StandardSequences/python/Reconstruction_cff.py @@ -182,6 +182,7 @@ # AA data with pp reco from Configuration.Eras.Modifier_pp_on_XeXe_2017_cff import pp_on_XeXe_2017 from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 +from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 from RecoHI.HiTracking.HILowPtConformalPixelTracks_cfi import * from RecoHI.HiCentralityAlgos.HiCentrality_cfi import hiCentrality from RecoHI.HiCentralityAlgos.HiClusterCompatibility_cfi import hiClusterCompatibility @@ -189,7 +190,7 @@ _highlevelreco_HITask.add(hiConformalPixelTracksTaskPhase1) _highlevelreco_HITask.add(hiCentrality) _highlevelreco_HITask.add(hiClusterCompatibility) -(pp_on_XeXe_2017 | pp_on_AA_2018).toReplaceWith(highlevelrecoTask, _highlevelreco_HITask) +(pp_on_XeXe_2017 | pp_on_AA_2018 | pp_on_PbPb_run3).toReplaceWith(highlevelrecoTask, _highlevelreco_HITask) pp_on_AA_2018.toReplaceWith(highlevelrecoTask,highlevelrecoTask.copyAndExclude([PFTauTask])) # not commisoned and not relevant in FastSim (?): diff --git a/PhysicsTools/PatAlgos/python/selectionLayer1/selectedPatCandidates_cff.py b/PhysicsTools/PatAlgos/python/selectionLayer1/selectedPatCandidates_cff.py index 8521d05a34ada..add5c311028ac 100644 --- a/PhysicsTools/PatAlgos/python/selectionLayer1/selectedPatCandidates_cff.py +++ b/PhysicsTools/PatAlgos/python/selectionLayer1/selectedPatCandidates_cff.py @@ -36,5 +36,6 @@ selectedPatCandidates = cms.Sequence(selectedPatCandidateSummary, selectedPatCandidatesTask) from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 -pp_on_AA_2018.toReplaceWith(selectedPatCandidatesTask, selectedPatCandidatesTask.copyAndExclude([selectedPatOOTPhotons])) -pp_on_AA_2018.toModify(selectedPatCandidateSummary.candidates, func = lambda list: list.remove(cms.InputTag("selectedPatOOTPhotons")) ) +from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 +(pp_on_AA_2018 | pp_on_PbPb_run3).toReplaceWith(selectedPatCandidatesTask, selectedPatCandidatesTask.copyAndExclude([selectedPatOOTPhotons])) +(pp_on_AA_2018 | pp_on_PbPb_run3).toModify(selectedPatCandidateSummary.candidates, func = lambda list: list.remove(cms.InputTag("selectedPatOOTPhotons")) ) diff --git a/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py b/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py index db6e283aa8a3f..eb38853fecbd2 100644 --- a/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py @@ -140,6 +140,7 @@ _pp_on_AA_extraCommands = [ 'keep patPackedCandidates_hiPixelTracks_*_*', + 'keep patPackedCandidates_packedPFCandidatesRemoved_*_*', 'keep *_packedCandidateMuonID_*_*', 'keep *_slimmedJets_pfCandidates_*', 'keep floatedmValueMap_packedPFCandidateTrackChi2_*_*', diff --git a/PhysicsTools/PatAlgos/python/slimming/lostTracks_cfi.py b/PhysicsTools/PatAlgos/python/slimming/lostTracks_cfi.py index 0dc0b9e65f9f1..1b6a851d8ea22 100644 --- a/PhysicsTools/PatAlgos/python/slimming/lostTracks_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/lostTracks_cfi.py @@ -22,3 +22,5 @@ from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel phase1Pixel.toModify(lostTracks, covarianceVersion =1 ) +from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X +run2_miniAOD_pp_on_AA_103X.toModify(lostTracks,inputCandidates = 'cleanedParticleFlow') diff --git a/PhysicsTools/PatAlgos/python/slimming/packedPFCandidates_cff.py b/PhysicsTools/PatAlgos/python/slimming/packedPFCandidates_cff.py index 262f53ef96925..be7ddadbbe071 100644 --- a/PhysicsTools/PatAlgos/python/slimming/packedPFCandidates_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/packedPFCandidates_cff.py @@ -10,3 +10,14 @@ pfPileUpPFBRECO, pfNoPileUpPFBRECO ) + +from RecoHI.HiJetAlgos.HiBadParticleCleaner_cfi import cleanedParticleFlow + +packedPFCandidatesRemoved = packedPFCandidates.clone( + inputCollection = "cleanedParticleFlow:removed", + vertexAssociator = "primaryVertexAssociationCleaned:original" +) + +_pp_on_AA_2018_packedPFCandidatesTask = cms.Task(cleanedParticleFlow,packedPFCandidatesRemoved,packedPFCandidatesTask.copy()) +from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X +run2_miniAOD_pp_on_AA_103X.toReplaceWith(packedPFCandidatesTask,_pp_on_AA_2018_packedPFCandidatesTask) diff --git a/PhysicsTools/PatAlgos/python/slimming/packedPFCandidates_cfi.py b/PhysicsTools/PatAlgos/python/slimming/packedPFCandidates_cfi.py index 933250f78239c..d951ea4ad7d92 100644 --- a/PhysicsTools/PatAlgos/python/slimming/packedPFCandidates_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/packedPFCandidates_cfi.py @@ -52,3 +52,8 @@ from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 (pp_on_AA_2018 | pp_on_PbPb_run3).toModify(packedPFCandidates, PuppiSrc = "", PuppiNoLepSrc = "") +from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X +run2_miniAOD_pp_on_AA_103X.toModify(packedPFCandidates, + inputCollection = "cleanedParticleFlow", + chargedHadronIsolation = "" + ) diff --git a/PhysicsTools/PatAlgos/python/slimming/primaryVertexAssociation_cfi.py b/PhysicsTools/PatAlgos/python/slimming/primaryVertexAssociation_cfi.py index 929e40f7dafed..a18ebc3feb4c5 100644 --- a/PhysicsTools/PatAlgos/python/slimming/primaryVertexAssociation_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/primaryVertexAssociation_cfi.py @@ -8,3 +8,6 @@ produceNoPileUpCollection = cms.bool(False) ) +from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X +run2_miniAOD_pp_on_AA_103X.toModify(primaryVertexAssociation,particles = "cleanedParticleFlow") +primaryVertexAssociationCleaned = primaryVertexAssociation.clone(particles = "cleanedParticleFlow:removed") diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedMuons_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedMuons_cfi.py index 4ed9b93c71059..49e4a415e5387 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedMuons_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedMuons_cfi.py @@ -26,3 +26,8 @@ from Configuration.ProcessModifiers.miniAOD_skip_trackExtras_cff import miniAOD_skip_trackExtras (run2_miniAOD_80XLegacy | run2_miniAOD_94XFall17 | pp_on_AA_2018 | miniAOD_skip_trackExtras).toModify(slimmedMuons, trackExtraAssocs = ["slimmedMuonTrackExtras"]) +from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X +run2_miniAOD_pp_on_AA_103X.toModify(slimmedMuons, + packedPFCandidates = ["packedPFCandidates","packedPFCandidatesRemoved"], + pfCandidates = ["cleanedParticleFlow","cleanedParticleFlow:removed"] +) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index ca2b48f515bf1..5ccb185f99eda 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -64,8 +64,8 @@ ) from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 -pp_on_AA_2018.toReplaceWith(slimmingTask, slimmingTask.copyAndExclude([slimmedOOTPhotons])) from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 +(pp_on_AA_2018 | pp_on_PbPb_run3).toReplaceWith(slimmingTask, slimmingTask.copyAndExclude([slimmedOOTPhotons])) from PhysicsTools.PatAlgos.slimming.hiPixelTracks_cfi import hiPixelTracks (pp_on_AA_2018 | pp_on_PbPb_run3).toReplaceWith(slimmingTask, cms.Task(slimmingTask.copy(), hiPixelTracks)) @@ -78,6 +78,8 @@ (pp_on_AA_2018 | pp_on_PbPb_run3).toReplaceWith( slimmingTask, cms.Task(slimmingTask.copy(), packedCandidateMuonID, packedPFCandidateTrackChi2, lostTrackChi2, centralityBin, hiHFfilters)) +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())) from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing _phase2_timing_slimmingTask = cms.Task(slimmingTask.copy(), diff --git a/RecoHI/HiCentralityAlgos/python/HiCentrality_cfi.py b/RecoHI/HiCentralityAlgos/python/HiCentrality_cfi.py index 2eed47176fc51..684e615269e61 100644 --- a/RecoHI/HiCentralityAlgos/python/HiCentrality_cfi.py +++ b/RecoHI/HiCentralityAlgos/python/HiCentrality_cfi.py @@ -36,11 +36,11 @@ from Configuration.Eras.Modifier_pp_on_XeXe_2017_cff import pp_on_XeXe_2017 from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 -for e in [pp_on_XeXe_2017, pp_on_AA_2018]: - e.toModify(hiCentrality, - producePixelTracks = True, - srcPixelTracks = "hiConformalPixelTracks", - srcTracks = cms.InputTag("generalTracks"), - srcVertex = cms.InputTag("offlinePrimaryVertices") - ) +from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 +(pp_on_XeXe_2017 | pp_on_AA_2018 | pp_on_PbPb_run3).toModify(hiCentrality, + producePixelTracks = True, + srcPixelTracks = "hiConformalPixelTracks", + srcTracks = "generalTracks", + srcVertex = "offlinePrimaryVertices" + ) diff --git a/RecoHI/HiJetAlgos/plugins/HiBadParticleCleaner.cc b/RecoHI/HiJetAlgos/plugins/HiBadParticleCleaner.cc new file mode 100644 index 0000000000000..7b8cce25d0795 --- /dev/null +++ b/RecoHI/HiJetAlgos/plugins/HiBadParticleCleaner.cc @@ -0,0 +1,242 @@ +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/MuonReco/interface/Muon.h" +#include "DataFormats/MuonReco/interface/MuonFwd.h" +#include "DataFormats/MuonReco/interface/MuonSelectors.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +// +// class declaration +// + +class HiBadParticleCleaner : public edm::global::EDProducer<> { +public: + explicit HiBadParticleCleaner(const edm::ParameterSet&); + ~HiBadParticleCleaner() override = default; + +private: + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + // ----------member data --------------------------- + + edm::EDGetTokenT > tokenPFCandidates_; + edm::EDGetTokenT tokenPV_; + + const double minMuonPt_; + const double minChargedHadronPt_; + const double minMuonTrackRelPtErr_; + const double maxSigLoose_; + const double maxSigTight_; + const double minCaloCompatibility_; + const unsigned minTrackNHits_; + const unsigned minPixelNHits_; + const int minTrackerLayersForMuonLoose_; + const int minTrackerLayersForMuonTight_; +}; + +// +// constructors and destructor +// +HiBadParticleCleaner::HiBadParticleCleaner(const edm::ParameterSet& iConfig) + : tokenPFCandidates_(consumes >(iConfig.getParameter("PFCandidates"))), + tokenPV_(consumes(iConfig.getParameter("offlinePV"))), + minMuonPt_(iConfig.getParameter("minMuonPt")), + minChargedHadronPt_(iConfig.getParameter("minChargedHadronPt")), + minMuonTrackRelPtErr_(iConfig.getParameter("minMuonTrackRelPtErr")), + maxSigLoose_(iConfig.getParameter("maxSigLoose")), + maxSigTight_(iConfig.getParameter("maxSigTight")), + minCaloCompatibility_(iConfig.getParameter("minCaloCompatibility")), + minTrackNHits_(iConfig.getParameter("minTrackNHits")), + minPixelNHits_(iConfig.getParameter("minPixelNHits")), + minTrackerLayersForMuonLoose_(iConfig.getParameter("minTrackerLayersForMuonLoose")), + minTrackerLayersForMuonTight_(iConfig.getParameter("minTrackerLayersForMuonTight")) { + produces(); + produces(); + produces("removed"); +} + +// +// member functions +// + +// ------------ method called on each new Event ------------ +void HiBadParticleCleaner::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const { + using namespace std; + using namespace edm; + + typedef View CandidateView; + Handle pfCandidates; + iEvent.getByToken(tokenPFCandidates_, pfCandidates); + + const reco::VertexCollection* recoVertices; + edm::Handle vertexCollection; + iEvent.getByToken(tokenPV_, vertexCollection); + recoVertices = vertexCollection.product(); + + auto pOutputCandidateCollection = std::make_unique(); + auto pBadCandidateCollection = std::make_unique(); + + bool foundBadCandidate = false; + + for (const reco::PFCandidate& pfCandidate : *pfCandidates) { + if (pfCandidate.particleId() == reco::PFCandidate::ParticleType::mu) // muon cleaning + { + if (pfCandidate.pt() > minMuonPt_) { + if (!pfCandidate.muonRef()->isGlobalMuon() || !pfCandidate.muonRef()->isTrackerMuon() || + !pfCandidate.trackRef().isNonnull()) { + foundBadCandidate = true; + continue; + } + reco::TrackRef track = pfCandidate.trackRef(); + + if (track->ptError() / track->pt() > minMuonTrackRelPtErr_ || track->pt() < pfCandidate.pt() / 2.) { + foundBadCandidate = true; + continue; + } + + if (track->algo() == reco::TrackBase::muonSeededStepInOut || + track->algo() == reco::TrackBase::muonSeededStepOutIn || + track->originalAlgo() == reco::TrackBase::muonSeededStepInOut || + track->originalAlgo() == reco::TrackBase::muonSeededStepOutIn || + track->hitPattern().trackerLayersWithMeasurement() < minTrackerLayersForMuonLoose_) { + const reco::Vertex& vtx = (*recoVertices)[0]; + float bestVzError = vtx.zError(); + const math::XYZPoint& bestVtx(vtx.position()); + math::Error<3>::type vtx_cov = vtx.covariance(); + float dz = std::abs(track->dz(bestVtx)); + float dxy = std::abs(track->dxy(bestVtx)); + float dzError2 = track->dzError() * track->dzError() + bestVzError * bestVzError; + float dxyError = track->dxyError(bestVtx, vtx_cov); + + float dzSig2 = dz * dz / dzError2; + float dxySig2 = dxy * dxy / dxyError / dxyError; + + float sig3d = sqrt(dzSig2 + dxySig2); + + if (sig3d > maxSigLoose_) { + pBadCandidateCollection->push_back(pfCandidate); + foundBadCandidate = true; + continue; + } + + if (track->pt() < pfCandidate.pt() / 1.5 || track->pt() > pfCandidate.pt() * 1.5) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + if (track->originalAlgo() == reco::TrackBase::muonSeededStepOutIn && + track->hitPattern().trackerLayersWithMeasurement() < minTrackerLayersForMuonTight_) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + } + } + } else if (pfCandidate.particleId() == reco::PFCandidate::ParticleType::h) //charged hadron cleaning + { + if (pfCandidate.pt() > minChargedHadronPt_) { + reco::TrackRef track = pfCandidate.trackRef(); + + unsigned nHits = track->numberOfValidHits(); + unsigned nPixelHits = track->hitPattern().numberOfValidPixelHits(); + + if ((nHits < minTrackNHits_ && nPixelHits < minPixelNHits_) || nHits == 3) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + + const reco::Vertex& vtx = (*recoVertices)[0]; + float bestVzError = vtx.zError(); + const math::XYZPoint& bestVtx(vtx.position()); + math::Error<3>::type vtx_cov = vtx.covariance(); + float dz = std::abs(track->dz(bestVtx)); + float dxy = std::abs(track->dxy(bestVtx)); + float dzError2 = track->dzError() * track->dzError() + bestVzError * bestVzError; + float dxyError = track->dxyError(bestVtx, vtx_cov); + + float dzSig2 = dz * dz / dzError2; + float dxySig2 = dxy * dxy / dxyError / dxyError; + + float sig3d = sqrt(dzSig2 + dxySig2); + + if (sig3d > maxSigLoose_) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + + if (sig3d > maxSigTight_ && nHits < minTrackNHits_) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + + if (track->algo() == reco::TrackBase::muonSeededStepInOut || + track->algo() == reco::TrackBase::muonSeededStepOutIn || + track->originalAlgo() == reco::TrackBase::muonSeededStepInOut || + track->originalAlgo() == reco::TrackBase::muonSeededStepOutIn) { + if (sig3d > maxSigLoose_) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + + if (nHits < minTrackNHits_) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + } + + double caloEnergy = pfCandidate.ecalEnergy() + pfCandidate.hcalEnergy(); + + if (caloEnergy < track->p() * minCaloCompatibility_) { + if (sig3d > maxSigTight_) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + + if (nHits < minTrackNHits_) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + + if (nPixelHits < minPixelNHits_) { + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + } + } + } + + pOutputCandidateCollection->push_back(pfCandidate); + + } // end loop over pf candidates + + bool pass = !foundBadCandidate; + + iEvent.put(std::move(pOutputCandidateCollection)); + iEvent.put(std::move(pBadCandidateCollection), "removed"); + + iEvent.put(std::make_unique(pass)); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(HiBadParticleCleaner); diff --git a/RecoHI/HiJetAlgos/python/HiBadParticleCleaner_cfi.py b/RecoHI/HiJetAlgos/python/HiBadParticleCleaner_cfi.py new file mode 100644 index 0000000000000..2908fb5db78f9 --- /dev/null +++ b/RecoHI/HiJetAlgos/python/HiBadParticleCleaner_cfi.py @@ -0,0 +1,18 @@ +import FWCore.ParameterSet.Config as cms + +cleanedParticleFlow = cms.EDProducer( + "HiBadParticleCleaner", + PFCandidates = cms.InputTag("particleFlow"), + offlinePV = cms.InputTag("offlinePrimaryVertices"), + minMuonTrackRelErr = cms.double(2.0), # minimum ptError/pt on muon best track + minMuonPt = cms.double(20.0), # minimum muon pt + minChargedHadronPt = cms.double(20.0), + minMuonTrackRelPtErr = cms.double(2.), + maxSigLoose = cms.double(100.), + maxSigTight = cms.double(10.), + minCaloCompatibility = cms.double(0.35), + minTrackNHits = cms.uint32(10), + minPixelNHits = cms.uint32(3), + minTrackerLayersForMuonLoose = cms.int32(7), + minTrackerLayersForMuonTight = cms.int32(10) +) diff --git a/RecoHI/HiJetAlgos/python/HiRecoPFJets_cff.py b/RecoHI/HiJetAlgos/python/HiRecoPFJets_cff.py index 1bc7d1c680ba4..3823feae8ee19 100644 --- a/RecoHI/HiJetAlgos/python/HiRecoPFJets_cff.py +++ b/RecoHI/HiJetAlgos/python/HiRecoPFJets_cff.py @@ -120,5 +120,5 @@ ) hiRecoPFJets = cms.Sequence(hiRecoPFJetsTask) - - +from Configuration.ProcessModifiers.run2_miniAOD_pp_on_AA_103X_cff import run2_miniAOD_pp_on_AA_103X +run2_miniAOD_pp_on_AA_103X.toModify(akCs4PFJets,src = 'cleanedParticleFlow') diff --git a/RecoJets/Configuration/python/RecoJetsGlobal_cff.py b/RecoJets/Configuration/python/RecoJetsGlobal_cff.py index cb899a0cd8a89..b487eec236168 100644 --- a/RecoJets/Configuration/python/RecoJetsGlobal_cff.py +++ b/RecoJets/Configuration/python/RecoJetsGlobal_cff.py @@ -24,6 +24,7 @@ from RecoHI.HiJetAlgos.HiRecoPFJets_cff import kt4PFJetsForRho from Configuration.Eras.Modifier_pA_2016_cff import pA_2016 from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 +from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 from RecoHI.HiCentralityAlgos.pACentrality_cfi import pACentrality pA_2016.toModify(pACentrality, producePixelTracks = False) @@ -39,5 +40,5 @@ _jetHighLevelReco_HITask = cms.Task(recoPFJetsHITask,jetCorrectorsForRecoTask,recoJetAssociationsTask) _jetHighLevelReco_HI = cms.Sequence(_jetHighLevelReco_HITask) -pp_on_AA_2018.toReplaceWith(jetGlobalRecoTask,_jetGlobalReco_HITask) -pp_on_AA_2018.toReplaceWith(jetHighLevelRecoTask,_jetHighLevelReco_HITask) +(pp_on_AA_2018 | pp_on_PbPb_run3).toReplaceWith(jetGlobalRecoTask,_jetGlobalReco_HITask) +(pp_on_AA_2018 | pp_on_PbPb_run3).toReplaceWith(jetHighLevelRecoTask,_jetHighLevelReco_HITask)