69 std::unique_ptr<PFEGammaFilters>
pfegamma_ =
nullptr;
108 : pfCandidatesToken_{produces<reco::PFCandidateCollection>()},
109 pfCleanedCandidatesToken_{produces<reco::PFCandidateCollection>(
"CleanedHF")},
110 inputTagBlocks_(consumes<reco::PFBlockCollection>(iConfig.getParameter<
InputTag>(
"blocks"))),
111 pfEnergyCalibrationHF_(iConfig.getParameter<
bool>(
"calibHF_use"),
112 iConfig.getParameter<std::vector<double>>(
"calibHF_eta_step"),
113 iConfig.getParameter<std::vector<double>>(
"calibHF_a_EMonly"),
114 iConfig.getParameter<std::vector<double>>(
"calibHF_b_HADonly"),
115 iConfig.getParameter<std::vector<double>>(
"calibHF_a_EMHAD"),
116 iConfig.getParameter<std::vector<double>>(
"calibHF_b_EMHAD")),
117 pfAlgo_(iConfig.getParameter<
double>(
"pf_nsigma_ECAL"),
118 iConfig.getParameter<
double>(
"pf_nsigma_HCAL"),
119 iConfig.getParameter<
double>(
"pf_nsigma_HFEM"),
120 iConfig.getParameter<
double>(
"pf_nsigma_HFHAD"),
121 iConfig.getParameter<std::vector<double>>(
"resolHF_square"),
122 pfEnergyCalibration_,
123 pfEnergyCalibrationHF_,
126 inputTagMuons_ = consumes<reco::MuonCollection>(iConfig.getParameter<
InputTag>(
"muons"));
127 postMuonCleaning_ = iConfig.getParameter<
bool>(
"postMuonCleaning");
128 vetoEndcap_ = iConfig.getParameter<
bool>(
"vetoEndcap");
130 inputTagVetoes_ = consumes<reco::PFCandidateCollection>(iConfig.getParameter<
edm::InputTag>(
"vetoes"));
132 if (iConfig.existsAs<
bool>(
"useEGammaFilters")) {
133 use_EGammaFilters_ = iConfig.getParameter<
bool>(
"useEGammaFilters");
135 use_EGammaFilters_ =
false;
138 useEGammaElectrons_ = iConfig.getParameter<
bool>(
"useEGammaElectrons");
140 if (useEGammaElectrons_) {
141 inputTagEgammaElectrons_ =
142 consumes<reco::GsfElectronCollection>(iConfig.getParameter<
edm::InputTag>(
"egammaElectrons"));
146 produces<reco::PFCandidateCollection>(
"CleanedCosmicsMuons");
147 produces<reco::PFCandidateCollection>(
"CleanedTrackerAndGlobalMuons");
148 produces<reco::PFCandidateCollection>(
"CleanedFakeMuons");
149 produces<reco::PFCandidateCollection>(
"CleanedPunchThroughMuons");
150 produces<reco::PFCandidateCollection>(
"CleanedPunchThroughNeutralHadrons");
151 produces<reco::PFCandidateCollection>(
"AddedMuonsAndHadrons");
157 if (use_EGammaFilters_) {
158 inputTagPFEGammaCandidates_ =
159 consumes<edm::View<reco::PFCandidate>>((iConfig.getParameter<
edm::InputTag>(
"PFEGammaCandidates")));
160 inputTagValueMapGedElectrons_ =
161 consumes<edm::ValueMap<reco::GsfElectronRef>>(iConfig.getParameter<
edm::InputTag>(
"GedElectronValueMap"));
162 inputTagValueMapGedPhotons_ =
163 consumes<edm::ValueMap<reco::PhotonRef>>(iConfig.getParameter<
edm::InputTag>(
"GedPhotonValueMap"));
168 pfegamma_ = std::make_unique<PFEGammaFilters>(pfEGammaFiltersParams);
184 bool usePFDecays = iConfig.getParameter<
bool>(
"usePFDecays");
186 double dptRel_DispVtx = iConfig.getParameter<
double>(
"dptRel_DispVtx");
188 useCalibrationsFromDB_ = iConfig.getParameter<
bool>(
"useCalibrationsFromDB");
190 if (useCalibrationsFromDB_) {
191 calibrationsLabel_ = iConfig.getParameter<
std::string>(
"calibrationsLabel");
192 perfToken_ = esConsumes<edm::Transition::BeginRun>(
edm::ESInputTag(
"", calibrationsLabel_));
195 pfAlgo_.setDisplacedVerticesParameters(
199 pfAlgo_.setCandConnectorParameters(iConfig.getParameter<
edm::ParameterSet>(
"iCfgCandConnector"));
202 postHFCleaning_ = iConfig.getParameter<
bool>(
"postHFCleaning");
206 pfAlgo_.setPostHFCleaningParameters(postHFCleaning_, pfHFCleaningParams);
209 std::vector<edm::InputTag>
tags = iConfig.getParameter<std::vector<edm::InputTag>>(
"cleanedHF");
210 for (
unsigned int i = 0;
i <
tags.size(); ++
i)
211 inputTagCleanedHF_.push_back(consumes<reco::PFRecHitCollection>(
tags[
i]));
213 vertices_ = consumes<reco::VertexCollection>(iConfig.getParameter<
edm::InputTag>(
"vertexCollection"));
214 useVerticesForNeutral_ = iConfig.getParameter<
bool>(
"useVerticesForNeutral");
217 useHO_ = iConfig.getParameter<
bool>(
"useHO");
218 pfAlgo_.setHOTag(useHO_);
220 verbose_ = iConfig.getUntrackedParameter<
bool>(
"verbose",
false);
229 static_cast<const PerformancePayloadFromTFormula*>(perfH.product());
236 LogDebug(
"PFProducer") <<
"START event: " <<
iEvent.id().event() <<
" in run " <<
iEvent.id().run() << endl;
259 LogDebug(
"PFProducer") <<
"particle flow is starting" << endl;
277 for (
unsigned jhf = 0; jhf < (*hfCleaned).size(); ++jhf) {
278 hfCopy.push_back((*hfCleaned)[jhf]);
287 LogDebug(
"PFProducer") <<
"particle flow: putting products in the event";
291 for (
auto const&
cand : pOutputCandidateCollection) {
293 ss <<
" " << nC <<
") pid=" <<
cand.particleId() <<
" pt=" <<
cand.pt() << endl;
295 LogDebug(
"PFProducer") <<
"Here the full list:" << endl <<
ss.str();
305 iEvent.put(muAlgo.transferCleanedCosmicCandidates(),
"CleanedCosmicsMuons");
307 iEvent.put(muAlgo.transferCleanedTrackerAndGlobalCandidates(),
"CleanedTrackerAndGlobalMuons");
309 iEvent.put(muAlgo.transferCleanedFakeCandidates(),
"CleanedFakeMuons");
311 iEvent.put(muAlgo.transferPunchThroughCleanedMuonCandidates(),
"CleanedPunchThroughMuons");
313 iEvent.put(muAlgo.transferPunchThroughCleanedHadronCandidates(),
"CleanedPunchThroughNeutralHadrons");
315 iEvent.put(muAlgo.transferAddedMuonCandidates(),
"AddedMuonsAndHadrons");
323 desc.addUntracked<
bool>(
"verbose",
false);
324 desc.addUntracked<
bool>(
"debug",
false);
331 desc.add<
bool>(
"postMuonCleaning",
true);
341 desc.add<
bool>(
"useVerticesForNeutral",
true);
344 desc.add<
bool>(
"useHO",
true);
351 desc.add<
bool>(
"useEGammaElectrons",
true);
354 desc.add<
bool>(
"useEGammaFilters",
true);
355 desc.add<
bool>(
"useProtectionsForJetMET",
true);
364 desc.add<std::vector<double>>(
"muon_HCAL", {3.0, 3.0});
365 desc.add<std::vector<double>>(
"muon_ECAL", {0.5, 0.5});
366 desc.add<std::vector<double>>(
"muon_HO", {0.9, 0.9});
375 desc.add<
bool>(
"rejectTracks_Bad",
true);
376 desc.add<
bool>(
"rejectTracks_Step45",
true);
378 desc.add<
bool>(
"usePFNuclearInteractions",
true);
379 desc.add<
bool>(
"usePFConversions",
true);
380 desc.add<
bool>(
"usePFDecays",
false);
382 desc.add<
double>(
"dptRel_DispVtx", 10.0);
390 desc.add<
double>(
"nsigma_TRACK", 1.0)->setComment(
"Number of sigmas for fake track detection");
392 desc.add<
double>(
"pt_Error", 1.0)
393 ->setComment(
"Absolute pt error to detect fake tracks in the first three iterations");
394 desc.add<std::vector<double>>(
"factors_45", {10.0, 100.0})
395 ->setComment(
"Factors to be applied in the four and fifth steps to the pt error");
398 desc.add<
double>(
"goodTrackDeadHcal_ptErrRel", 0.2)->setComment(
"trackRef->ptError()/trackRef->pt() < X");
399 desc.add<
double>(
"goodTrackDeadHcal_chi2n", 5)->setComment(
"trackRef->normalizedChi2() < X");
400 desc.add<
unsigned int>(
"goodTrackDeadHcal_layers", 4)
401 ->setComment(
"trackRef->hitPattern().trackerLayersWithMeasurement() >= X");
402 desc.add<
double>(
"goodTrackDeadHcal_validFr", 0.5)->setComment(
"trackRef->validFraction() > X");
403 desc.add<
double>(
"goodTrackDeadHcal_dxy", 0.5)->setComment(
"abs(trackRef->dxy(primaryVertex_.position())) < X [cm]");
405 desc.add<
double>(
"goodPixelTrackDeadHcal_minEta", 2.3)->setComment(
"abs(trackRef->eta()) > X");
406 desc.add<
double>(
"goodPixelTrackDeadHcal_maxPt", 50.0)->setComment(
"trackRef->ptError()/trackRef->pt() < X");
407 desc.add<
double>(
"goodPixelTrackDeadHcal_ptErrRel", 1.0)->setComment(
"trackRef->ptError()/trackRef->pt() < X");
408 desc.add<
double>(
"goodPixelTrackDeadHcal_chi2n", 2)->setComment(
"trackRef->normalizedChi2() < X");
409 desc.add<
int>(
"goodPixelTrackDeadHcal_maxLost3Hit", 0)
411 "max missing outer hits for a track with 3 valid pixel layers (can set to -1 to reject all these tracks)");
412 desc.add<
int>(
"goodPixelTrackDeadHcal_maxLost4Hit", 1)
413 ->setComment(
"max missing outer hits for a track with >= 4 valid pixel layers");
414 desc.add<
double>(
"goodPixelTrackDeadHcal_dxy", 0.02)
415 ->setComment(
"abs(trackRef->dxy(primaryVertex_.position())) < X [cm] ");
416 desc.add<
double>(
"goodPixelTrackDeadHcal_dz", 0.05)
417 ->setComment(
"abs(trackRef->dz(primaryVertex_.position())) < X [cm]");
420 desc.add<
double>(
"pf_nsigma_ECAL", 0.0);
421 desc.add<
double>(
"pf_nsigma_HCAL", 1.0);
422 desc.add<
double>(
"pf_nsigma_HFEM", 1.0);
423 desc.add<
double>(
"pf_nsigma_HFHAD", 1.0);
426 desc.add<
bool>(
"useCalibrationsFromDB",
true);
430 desc.add<
bool>(
"postHFCleaning",
false);
433 psd_PFHFCleaning.
add<
double>(
"minHFCleaningPt", 5.0)
434 ->
setComment(
"Clean only objects with pt larger than this value");
435 psd_PFHFCleaning.
add<
double>(
"maxSignificance", 2.5)
436 ->
setComment(
"Clean only if the initial MET/sqrt(sumet) is larger than this value");
437 psd_PFHFCleaning.
add<
double>(
"minSignificance", 2.5)
438 ->
setComment(
"Clean only if the final MET/sqrt(sumet) is smaller than this value");
439 psd_PFHFCleaning.
add<
double>(
"minSignificanceReduction", 1.4)
440 ->
setComment(
"Clean only if the significance reduction is larger than this value");
441 psd_PFHFCleaning.
add<
double>(
"maxDeltaPhiPt", 7.0)
442 ->
setComment(
"Clean only if the MET and the to-be-cleaned object satisfy this DeltaPhi * Pt cut");
444 psd_PFHFCleaning.
add<
double>(
"minDeltaMet", 0.4)
446 "Clean only if the MET relative reduction from the to-be-cleaned object is larger than this value");
451 desc.add<std::vector<edm::InputTag>>(
"cleanedHF",
458 desc.add<
bool>(
"calibHF_use",
false);
459 desc.add<std::vector<double>>(
"calibHF_eta_step", {0.0, 2.9, 3.0, 3.2, 4.2, 4.4, 4.6, 4.8, 5.2, 5.4});
460 desc.add<std::vector<double>>(
"calibHF_a_EMonly", {1., 1., 1., 1., 1., 1., 1., 1., 1., 1.});
461 desc.add<std::vector<double>>(
"calibHF_a_EMHAD", {1., 1., 1., 1., 1., 1., 1., 1., 1., 1.});
462 desc.add<std::vector<double>>(
"calibHF_b_HADonly", {1., 1., 1., 1., 1., 1., 1., 1., 1., 1.});
463 desc.add<std::vector<double>>(
"calibHF_b_EMHAD", {1., 1., 1., 1., 1., 1., 1., 1., 1., 1.});
466 desc.add<std::vector<double>>(
"resolHF_square", {2.799 * 2.799, 0.114 * 0.114, 0.0 * 0.0})
467 ->setComment(
"HF resolution - stochastic, constant, noise term squares");
469 descriptions.
add(
"particleFlow",
desc);