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);
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);
std::vector< edm::EDGetTokenT< reco::PFRecHitCollection > > inputTagCleanedHF_
void setComment(std::string const &value)
std::string photonExtraOutputCol_
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::MuonCollection > inputTagMuons_
reco::PFCandidateCollection & getCleanedCandidates()
PFEnergyCalibrationHF pfEnergyCalibrationHF_
edm::EDGetTokenT< reco::PFCandidateCollection > inputTagVetoes_
std::string calibrationsLabel_
std::vector< PFRecHit > PFRecHitCollection
collection of PFRecHit objects
void checkCleaning(const reco::PFRecHitCollection &cleanedHF)
Check HF Cleaning.
void setVetoes(const reco::PFCandidateCollection &vetoes)
bool useCalibrationsFromDB_
edm::EDGetTokenT< reco::VertexCollection > vertices_
void produce(edm::Event &, const edm::EventSetup &) override
void setPFVertexParameters(bool useVertex, reco::VertexCollection const &primaryVertices)
std::unique_ptr< PFEGammaFilters > pfegamma_
edm::ESGetToken< PerformancePayload, PFCalibrationRcd > perfToken_
bool useVerticesForNeutral_
PFProducer(const edm::ParameterSet &)
void setEGammaCollections(const edm::View< reco::PFCandidate > &pfEgammaCandidates, const edm::ValueMap< reco::GsfElectronRef > &valueMapGedElectrons, const edm::ValueMap< reco::PhotonRef > &valueMapGedPhotons)
const edm::EDGetTokenT< reco::PFBlockCollection > inputTagBlocks_
const edm::EDPutTokenT< reco::PFCandidateCollection > pfCandidatesToken_
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
#define DEFINE_FWK_MODULE(type)
static void fillPSetDescription(edm::ParameterSetDescription &iDesc)
void beginRun(const edm::Run &, const edm::EventSetup &) override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::EDGetTokenT< edm::View< reco::PFCandidate > > inputTagPFEGammaCandidates_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
void setMuonHandle(const edm::Handle< reco::MuonCollection > &muons)
static void fillPSetDescription(edm::ParameterSetDescription &iDesc)
void reconstructParticles(const reco::PFBlockHandle &blockHandle, PFEGammaFilters const *pfegamma)
reconstruct particles
Log< level::Info, false > LogInfo
PFAlgo pfAlgo_
particle flow algorithm
static void fillPSetDescription(edm::ParameterSetDescription &iDesc)
std::string electronExtraOutputCol_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
edm::EDGetTokenT< edm::ValueMap< reco::PhotonRef > > inputTagValueMapGedPhotons_
reco::PFCandidateCollection makeConnectedCandidates()
PFMuonAlgo * getPFMuonAlgo()
void setCalibrationFunctions(const PerformancePayloadFromTFormula *thePFCal)
const edm::EDPutTokenT< reco::PFCandidateCollection > pfCleanedCandidatesToken_
Producer for particle flow reconstructed particles (PFCandidates)
edm::EDGetTokenT< reco::GsfElectronCollection > inputTagEgammaElectrons_
PFEnergyCalibration pfEnergyCalibration_
edm::EDGetTokenT< edm::ValueMap< reco::GsfElectronRef > > inputTagValueMapGedElectrons_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)