CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
PFProducer Class Reference

Producer for particle flow reconstructed particles (PFCandidates) More...

Inheritance diagram for PFProducer:
edm::stream::EDProducer<>

Public Member Functions

void beginRun (const edm::Run &, const edm::EventSetup &) override
 
 PFProducer (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Attributes

std::string calibrationsLabel_
 
std::string electronExtraOutputCol_
 
const edm::EDGetTokenT
< reco::PFBlockCollection
inputTagBlocks_
 
std::vector< edm::EDGetTokenT
< reco::PFRecHitCollection > > 
inputTagCleanedHF_
 
edm::EDGetTokenT
< reco::GsfElectronCollection
inputTagEgammaElectrons_
 
edm::EDGetTokenT
< reco::MuonCollection
inputTagMuons_
 
edm::EDGetTokenT< edm::View
< reco::PFCandidate > > 
inputTagPFEGammaCandidates_
 
edm::EDGetTokenT
< edm::ValueMap
< reco::GsfElectronRef > > 
inputTagValueMapGedElectrons_
 
edm::EDGetTokenT
< edm::ValueMap
< reco::PhotonRef > > 
inputTagValueMapGedPhotons_
 
edm::EDGetTokenT
< reco::PFCandidateCollection
inputTagVetoes_
 
edm::ESGetToken
< PerformancePayload,
PFCalibrationRcd
perfToken_
 
PFAlgo pfAlgo_
 particle flow algorithm More...
 
const edm::EDPutTokenT
< reco::PFCandidateCollection
pfCandidatesToken_
 
const edm::EDPutTokenT
< reco::PFCandidateCollection
pfCleanedCandidatesToken_
 
std::unique_ptr< PFEGammaFilterspfegamma_ = nullptr
 
PFEnergyCalibration pfEnergyCalibration_
 
PFEnergyCalibrationHF pfEnergyCalibrationHF_
 
std::string photonExtraOutputCol_
 
bool postHFCleaning_
 
bool postMuonCleaning_
 
bool use_EGammaFilters_
 
bool useCalibrationsFromDB_
 
bool useEGammaElectrons_
 
bool useHO_
 
bool useVerticesForNeutral_
 
bool verbose_
 verbose ? More...
 
edm::EDGetTokenT
< reco::VertexCollection
vertices_
 
bool vetoEndcap_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Producer for particle flow reconstructed particles (PFCandidates)

This producer makes use of PFAlgo, the particle flow algorithm.

Author
Colin Bernet
Date
July 2006

Definition at line 37 of file PFProducer.cc.

Constructor & Destructor Documentation

PFProducer::PFProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 107 of file PFProducer.cc.

References calibrationsLabel_, HLT_FULL_cff::dptRel_DispVtx, edm::ParameterSet::existsAs(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), mps_fire::i, inputTagBlocks_, inputTagCleanedHF_, inputTagEgammaElectrons_, inputTagMuons_, inputTagPFEGammaCandidates_, inputTagValueMapGedElectrons_, inputTagValueMapGedPhotons_, inputTagVetoes_, perfToken_, pfAlgo_, pfCleanedCandidatesToken_, pfegamma_, pfEnergyCalibration_, pfEnergyCalibrationHF_, postHFCleaning_, postMuonCleaning_, HLT_FULL_cff::rejectTracks_Bad, HLT_FULL_cff::rejectTracks_Step45, PFAlgo::setCandConnectorParameters(), PFAlgo::setDisplacedVerticesParameters(), PFAlgo::setEGammaParameters(), PFAlgo::setHOTag(), PFAlgo::setPostHFCleaningParameters(), AlCaHLTBitMon_QueryRunRegistry::string, getPayloadData::tags, use_EGammaFilters_, useCalibrationsFromDB_, useEGammaElectrons_, useHO_, HLT_FULL_cff::usePFConversions, HLT_FULL_cff::usePFDecays, HLT_FULL_cff::usePFNuclearInteractions, HLT_FULL_cff::useProtectionsForJetMET, useVerticesForNeutral_, verbose_, vertices_, and vetoEndcap_.

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"),
124  iConfig) {
125  //Post cleaning of the muons
126  inputTagMuons_ = consumes<reco::MuonCollection>(iConfig.getParameter<InputTag>("muons"));
127  postMuonCleaning_ = iConfig.getParameter<bool>("postMuonCleaning");
128  vetoEndcap_ = iConfig.getParameter<bool>("vetoEndcap");
129  if (vetoEndcap_)
130  inputTagVetoes_ = consumes<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag>("vetoes"));
131 
132  if (iConfig.existsAs<bool>("useEGammaFilters")) {
133  use_EGammaFilters_ = iConfig.getParameter<bool>("useEGammaFilters");
134  } else {
135  use_EGammaFilters_ = false;
136  }
137 
138  useEGammaElectrons_ = iConfig.getParameter<bool>("useEGammaElectrons");
139 
140  if (useEGammaElectrons_) {
142  consumes<reco::GsfElectronCollection>(iConfig.getParameter<edm::InputTag>("egammaElectrons"));
143  }
144 
145  // register products
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");
152 
153  // Reading new EGamma selection cuts
154  bool useProtectionsForJetMET(false);
155 
156  // Reading new EGamma ubiased collections and value maps
157  if (use_EGammaFilters_) {
159  consumes<edm::View<reco::PFCandidate>>((iConfig.getParameter<edm::InputTag>("PFEGammaCandidates")));
161  consumes<edm::ValueMap<reco::GsfElectronRef>>(iConfig.getParameter<edm::InputTag>("GedElectronValueMap"));
163  consumes<edm::ValueMap<reco::PhotonRef>>(iConfig.getParameter<edm::InputTag>("GedPhotonValueMap"));
164  useProtectionsForJetMET = iConfig.getParameter<bool>("useProtectionsForJetMET");
165 
166  const edm::ParameterSet pfEGammaFiltersParams =
167  iConfig.getParameter<edm::ParameterSet>("PFEGammaFiltersParameters");
168  pfegamma_ = std::make_unique<PFEGammaFilters>(pfEGammaFiltersParams);
169  }
170 
171  // EGamma filters
173 
174  //Secondary tracks and displaced vertices parameters
175 
176  bool rejectTracks_Bad = iConfig.getParameter<bool>("rejectTracks_Bad");
177 
178  bool rejectTracks_Step45 = iConfig.getParameter<bool>("rejectTracks_Step45");
179 
180  bool usePFNuclearInteractions = iConfig.getParameter<bool>("usePFNuclearInteractions");
181 
182  bool usePFConversions = iConfig.getParameter<bool>("usePFConversions");
183 
184  bool usePFDecays = iConfig.getParameter<bool>("usePFDecays");
185 
186  double dptRel_DispVtx = iConfig.getParameter<double>("dptRel_DispVtx");
187 
188  useCalibrationsFromDB_ = iConfig.getParameter<bool>("useCalibrationsFromDB");
189 
190  if (useCalibrationsFromDB_) {
191  calibrationsLabel_ = iConfig.getParameter<std::string>("calibrationsLabel");
192  perfToken_ = esConsumes<edm::Transition::BeginRun>(edm::ESInputTag("", calibrationsLabel_));
193  }
194  // Secondary tracks and displaced vertices parameters
196  rejectTracks_Bad, rejectTracks_Step45, usePFNuclearInteractions, usePFConversions, usePFDecays, dptRel_DispVtx);
197 
198  if (usePFNuclearInteractions)
199  pfAlgo_.setCandConnectorParameters(iConfig.getParameter<edm::ParameterSet>("iCfgCandConnector"));
200 
201  // Post cleaning of the HF
202  postHFCleaning_ = iConfig.getParameter<bool>("postHFCleaning");
203  const edm::ParameterSet pfHFCleaningParams = iConfig.getParameter<edm::ParameterSet>("PFHFCleaningParameters");
204 
205  // Set post HF cleaning muon parameters
207 
208  // Input tags for HF cleaned rechits
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]));
212  //MIKE: Vertex Parameters
213  vertices_ = consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("vertexCollection"));
214  useVerticesForNeutral_ = iConfig.getParameter<bool>("useVerticesForNeutral");
215 
216  // Use HO clusters and links in the PF reconstruction
217  useHO_ = iConfig.getParameter<bool>("useHO");
218  pfAlgo_.setHOTag(useHO_);
219 
220  verbose_ = iConfig.getUntrackedParameter<bool>("verbose", false);
221 }
std::vector< edm::EDGetTokenT< reco::PFRecHitCollection > > inputTagCleanedHF_
Definition: PFProducer.cc:56
T getUntrackedParameter(std::string const &, T const &) const
tuple usePFConversions
edm::EDGetTokenT< reco::MuonCollection > inputTagMuons_
Definition: PFProducer.cc:52
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:171
PFEnergyCalibrationHF pfEnergyCalibrationHF_
Definition: PFProducer.cc:96
void setCandConnectorParameters(const edm::ParameterSet &iCfgCandConnector)
Definition: PFAlgo.h:68
edm::EDGetTokenT< reco::PFCandidateCollection > inputTagVetoes_
Definition: PFProducer.cc:61
tuple useProtectionsForJetMET
std::string calibrationsLabel_
Definition: PFProducer.cc:88
void setDisplacedVerticesParameters(bool rejectTracks_Bad, bool rejectTracks_Step45, bool usePFNuclearInteractions, bool usePFConversions, bool usePFDecays, double dptRel_DispVtx)
Definition: PFAlgo.cc:96
bool useCalibrationsFromDB_
Definition: PFProducer.cc:87
bool use_EGammaFilters_
Definition: PFProducer.cc:68
edm::EDGetTokenT< reco::VertexCollection > vertices_
Definition: PFProducer.cc:53
std::unique_ptr< PFEGammaFilters > pfegamma_
Definition: PFProducer.cc:69
edm::ESGetToken< PerformancePayload, PFCalibrationRcd > perfToken_
Definition: PFProducer.cc:49
void setPostHFCleaningParameters(bool postHFCleaning, const edm::ParameterSet &pfHFCleaningParams)
Definition: PFAlgo.cc:86
bool useVerticesForNeutral_
Definition: PFProducer.cc:84
const edm::EDGetTokenT< reco::PFBlockCollection > inputTagBlocks_
Definition: PFProducer.cc:51
bool postHFCleaning_
Definition: PFProducer.cc:90
bool vetoEndcap_
Definition: PFProducer.cc:60
bool postMuonCleaning_
Definition: PFProducer.cc:78
const edm::EDPutTokenT< reco::PFCandidateCollection > pfCandidatesToken_
Definition: PFProducer.cc:47
tuple rejectTracks_Bad
edm::EDGetTokenT< edm::View< reco::PFCandidate > > inputTagPFEGammaCandidates_
Definition: PFProducer.cc:66
void setHOTag(bool ho)
Definition: PFAlgo.h:65
tuple rejectTracks_Step45
bool useHO_
Definition: PFProducer.cc:72
PFAlgo pfAlgo_
particle flow algorithm
Definition: PFProducer.cc:99
bool verbose_
verbose ?
Definition: PFProducer.cc:75
tuple dptRel_DispVtx
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
bool useEGammaElectrons_
Definition: PFProducer.cc:81
tuple usePFNuclearInteractions
edm::EDGetTokenT< edm::ValueMap< reco::PhotonRef > > inputTagValueMapGedPhotons_
Definition: PFProducer.cc:65
const edm::EDPutTokenT< reco::PFCandidateCollection > pfCleanedCandidatesToken_
Definition: PFProducer.cc:48
edm::EDGetTokenT< reco::GsfElectronCollection > inputTagEgammaElectrons_
Definition: PFProducer.cc:54
PFEnergyCalibration pfEnergyCalibration_
Definition: PFProducer.cc:95
void setEGammaParameters(bool use_EGammaFilters, bool useProtectionsForJetMET)
Definition: PFAlgo.cc:68
edm::EDGetTokenT< edm::ValueMap< reco::GsfElectronRef > > inputTagValueMapGedElectrons_
Definition: PFProducer.cc:64

Member Function Documentation

void PFProducer::beginRun ( const edm::Run run,
const edm::EventSetup es 
)
override

Definition at line 223 of file PFProducer.cc.

References edm::EventSetup::getHandle(), perfToken_, pfEnergyCalibration_, PFEnergyCalibration::setCalibrationFunctions(), and useCalibrationsFromDB_.

223  {
225  // read the PFCalibration functions from the global tags
226  auto perfH = es.getHandle(perfToken_);
227 
228  PerformancePayloadFromTFormula const* pfCalibrations =
229  static_cast<const PerformancePayloadFromTFormula*>(perfH.product());
230 
232  }
233 }
bool useCalibrationsFromDB_
Definition: PFProducer.cc:87
edm::ESGetToken< PerformancePayload, PFCalibrationRcd > perfToken_
Definition: PFProducer.cc:49
void setCalibrationFunctions(const PerformancePayloadFromTFormula *thePFCal)
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:157
PFEnergyCalibration pfEnergyCalibration_
Definition: PFProducer.cc:95
void PFProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 319 of file PFProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addUntracked(), submitPVResolutionJobs::desc, PFMuonAlgo::fillPSetDescription(), PFEGammaFilters::fillPSetDescription(), PFCandConnector::fillPSetDescription(), edm::ParameterSetDescription::ifValue(), HLT_FULL_cff::InputTag, or, edm::ParameterDescriptionNode::setComment(), and AlCaHLTBitMon_QueryRunRegistry::string.

319  {
321 
322  // Verbosity and debug flags
323  desc.addUntracked<bool>("verbose", false);
324  desc.addUntracked<bool>("debug", false);
325 
326  // PF Blocks label
327  desc.add<edm::InputTag>("blocks", edm::InputTag("particleFlowBlock"));
328 
329  // reco::muons label and Post Muon cleaning
330  desc.add<edm::InputTag>("muons", edm::InputTag("muons1stStep"));
331  desc.add<bool>("postMuonCleaning", true);
332 
333  // vetoEndcap flag and pf candidates for vetoes
334  edm::ParameterSetDescription emptyDescription;
335  desc.ifValue(edm::ParameterDescription<bool>("vetoEndcap", false, true),
336  true >> edm::ParameterDescription<edm::InputTag>("vetoes", {"pfTICL"}, true) or
337  false >> edm::EmptyGroupDescription());
338 
339  // Vertices label
340  desc.add<edm::InputTag>("vertexCollection", edm::InputTag("offlinePrimaryVertices"));
341  desc.add<bool>("useVerticesForNeutral", true);
342 
343  // Use HO clusters in PF hadron reconstruction
344  desc.add<bool>("useHO", true);
345 
346  // EGamma-related
347  desc.add<edm::InputTag>("PFEGammaCandidates", edm::InputTag("particleFlowEGamma"));
348  desc.add<edm::InputTag>("GedElectronValueMap", {"gedGsfElectronValueMapsTmp"});
349  desc.add<edm::InputTag>("GedPhotonValueMap", edm::InputTag("gedPhotonsTmp", "valMapPFEgammaCandToPhoton"));
350 
351  desc.add<bool>("useEGammaElectrons", true);
352  desc.add<edm::InputTag>("egammaElectrons", edm::InputTag("mvaElectrons"));
353 
354  desc.add<bool>("useEGammaFilters", true);
355  desc.add<bool>("useProtectionsForJetMET", true); // Propagated to PFEGammaFilters
356 
357  // For PFEGammaFilters
358  edm::ParameterSetDescription psd_PFEGammaFilters;
359  PFEGammaFilters::fillPSetDescription(psd_PFEGammaFilters);
360  desc.add<edm::ParameterSetDescription>("PFEGammaFiltersParameters", psd_PFEGammaFilters);
361 
362  // Treatment of muons :
363  // Expected energy in ECAL and HCAL, and RMS
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});
367 
368  // For PFMuonAlgo
369  edm::ParameterSetDescription psd_PFMuonAlgo;
370  PFMuonAlgo::fillPSetDescription(psd_PFMuonAlgo);
371  desc.add<edm::ParameterSetDescription>("PFMuonAlgoParameters", psd_PFMuonAlgo);
372 
373  // Input displaced vertices
374  // It is strongly adviced to keep usePFNuclearInteractions = bCorrect
375  desc.add<bool>("rejectTracks_Bad", true);
376  desc.add<bool>("rejectTracks_Step45", true);
377 
378  desc.add<bool>("usePFNuclearInteractions", true);
379  desc.add<bool>("usePFConversions", true);
380  desc.add<bool>("usePFDecays", false);
381 
382  desc.add<double>("dptRel_DispVtx", 10.0);
383 
384  // PFCandConnector
385  edm::ParameterSetDescription psd_CandConnector;
386  PFCandConnector::fillPSetDescription(psd_CandConnector);
387  desc.add<edm::ParameterSetDescription>("iCfgCandConnector", psd_CandConnector);
388 
389  // Treatment of potential fake tracks
390  desc.add<double>("nsigma_TRACK", 1.0)->setComment("Number of sigmas for fake track detection");
391  // pt_Error: dont forget to modify also ptErrorSecondary if you modify this parameter
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");
396 
397  // Treatment of tracks in region of bad HCal
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]");
404 
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)
410  ->setComment(
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]");
418 
419  // number of sigmas for neutral energy detection
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);
424 
425  // ECAL/HCAL PF cluster calibration : take it from global tag ?
426  desc.add<bool>("useCalibrationsFromDB", true);
427  desc.add<std::string>("calibrationsLabel", "");
428 
429  // Post HF cleaning
430  desc.add<bool>("postHFCleaning", false);
431  {
432  edm::ParameterSetDescription psd_PFHFCleaning;
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");
443  // (the MET angular resoution is in 1/MET)
444  psd_PFHFCleaning.add<double>("minDeltaMet", 0.4)
445  ->setComment(
446  "Clean only if the MET relative reduction from the to-be-cleaned object is larger than this value");
447  desc.add<edm::ParameterSetDescription>("PFHFCleaningParameters", psd_PFHFCleaning);
448  }
449 
450  // Check HF cleaning
451  desc.add<std::vector<edm::InputTag>>("cleanedHF",
452  {
453  edm::InputTag("particleFlowRecHitHF", "Cleaned"),
454  edm::InputTag("particleFlowClusterHF", "Cleaned"),
455  });
456 
457  // calibration parameters for HF:
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.});
464 
465  // resolution parameters for HF: EPJC 53(2008)139, doi:10.1140/epjc/s10052-007-0459-4
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");
468 
469  descriptions.add("particleFlow", desc);
470 }
void setComment(std::string const &value)
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T >> cases)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
static void fillPSetDescription(edm::ParameterSetDescription &iDesc)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillPSetDescription(edm::ParameterSetDescription &iDesc)
static void fillPSetDescription(edm::ParameterSetDescription &iDesc)
Definition: PFMuonAlgo.cc:1043
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void PFProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 235 of file PFProducer.cc.

References cms::cuda::assert(), gather_cfg::blocks, PFAlgo::checkCleaning(), edm::Event::emplace(), edm::EventID::event(), edm::Event::get(), edm::Event::getByToken(), PFAlgo::getCleanedCandidates(), edm::Event::getHandle(), PFAlgo::getPFMuonAlgo(), edm::EventBase::id(), ihf, inputTagBlocks_, inputTagCleanedHF_, inputTagMuons_, inputTagPFEGammaCandidates_, inputTagValueMapGedElectrons_, inputTagValueMapGedPhotons_, inputTagVetoes_, LogDebug, PFAlgo::makeConnectedCandidates(), pfAlgo_, pfCandidatesToken_, pfCleanedCandidatesToken_, pfegamma_, postHFCleaning_, postMuonCleaning_, edm::Event::put(), PFAlgo::reconstructParticles(), edm::EventID::run(), PFAlgo::setEGammaCollections(), PFAlgo::setMuonHandle(), PFAlgo::setPFVertexParameters(), PFMuonAlgo::setVetoes(), contentValuesCheck::ss, str, use_EGammaFilters_, useVerticesForNeutral_, verbose_, vertices_, and vetoEndcap_.

235  {
236  LogDebug("PFProducer") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run() << endl;
237 
238  //Assign the PFAlgo Parameters
240 
241  // get the collection of blocks
242  auto blocks = iEvent.getHandle(inputTagBlocks_);
243  assert(blocks.isValid());
244 
245  // get and set the collection of muons (and collection of vetoes if specified)
246  if (postMuonCleaning_) {
248  if (vetoEndcap_) {
249  auto& muAlgo = *pfAlgo_.getPFMuonAlgo();
250  muAlgo.setVetoes(iEvent.get(inputTagVetoes_));
251  }
252  }
253 
254  if (use_EGammaFilters_)
258 
259  LogDebug("PFProducer") << "particle flow is starting" << endl;
260 
262 
263  if (verbose_) {
264  ostringstream str;
265  str << pfAlgo_ << endl;
266  LogInfo("PFProducer") << str.str() << endl;
267  }
268 
269  // Check HF overcleaning
270  if (postHFCleaning_) {
272  for (unsigned ihf = 0; ihf < inputTagCleanedHF_.size(); ++ihf) {
274  bool foundHF = iEvent.getByToken(inputTagCleanedHF_[ihf], hfCleaned);
275  if (!foundHF)
276  continue;
277  for (unsigned jhf = 0; jhf < (*hfCleaned).size(); ++jhf) {
278  hfCopy.push_back((*hfCleaned)[jhf]);
279  }
280  }
281  pfAlgo_.checkCleaning(hfCopy);
282  }
283 
284  // Save the final PFCandidate collection
285  auto pOutputCandidateCollection = pfAlgo_.makeConnectedCandidates();
286 
287  LogDebug("PFProducer") << "particle flow: putting products in the event";
288  if (verbose_) {
289  int nC = 0;
290  ostringstream ss;
291  for (auto const& cand : pOutputCandidateCollection) {
292  nC++;
293  ss << " " << nC << ") pid=" << cand.particleId() << " pt=" << cand.pt() << endl;
294  }
295  LogDebug("PFProducer") << "Here the full list:" << endl << ss.str();
296  }
297 
298  // Write in the event
299  iEvent.emplace(pfCandidatesToken_, pOutputCandidateCollection);
301 
302  if (postMuonCleaning_) {
303  auto& muAlgo = *pfAlgo_.getPFMuonAlgo();
304  // Save cosmic cleaned muon candidates
305  iEvent.put(muAlgo.transferCleanedCosmicCandidates(), "CleanedCosmicsMuons");
306  // Save tracker/global cleaned muon candidates
307  iEvent.put(muAlgo.transferCleanedTrackerAndGlobalCandidates(), "CleanedTrackerAndGlobalMuons");
308  // Save fake cleaned muon candidates
309  iEvent.put(muAlgo.transferCleanedFakeCandidates(), "CleanedFakeMuons");
310  // Save punch-through cleaned muon candidates
311  iEvent.put(muAlgo.transferPunchThroughCleanedMuonCandidates(), "CleanedPunchThroughMuons");
312  // Save punch-through cleaned neutral hadron candidates
313  iEvent.put(muAlgo.transferPunchThroughCleanedHadronCandidates(), "CleanedPunchThroughNeutralHadrons");
314  // Save added muon candidates
315  iEvent.put(muAlgo.transferAddedMuonCandidates(), "AddedMuonsAndHadrons");
316  }
317 }
std::vector< edm::EDGetTokenT< reco::PFRecHitCollection > > inputTagCleanedHF_
Definition: PFProducer.cc:56
RunNumber_t run() const
Definition: EventID.h:38
EventNumber_t event() const
Definition: EventID.h:40
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
edm::EDGetTokenT< reco::MuonCollection > inputTagMuons_
Definition: PFProducer.cc:52
reco::PFCandidateCollection & getCleanedCandidates()
Definition: PFAlgo.h:112
int ihf
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
edm::EDGetTokenT< reco::PFCandidateCollection > inputTagVetoes_
Definition: PFProducer.cc:61
tuple blocks
Definition: gather_cfg.py:90
std::vector< PFRecHit > PFRecHitCollection
collection of PFRecHit objects
Definition: PFRecHitFwd.h:9
void checkCleaning(const reco::PFRecHitCollection &cleanedHF)
Check HF Cleaning.
Definition: PFAlgo.cc:3595
void setVetoes(const reco::PFCandidateCollection &vetoes)
Definition: PFMuonAlgo.h:54
assert(be >=bs)
bool use_EGammaFilters_
Definition: PFProducer.cc:68
edm::EDGetTokenT< reco::VertexCollection > vertices_
Definition: PFProducer.cc:53
void setPFVertexParameters(bool useVertex, reco::VertexCollection const &primaryVertices)
Definition: PFAlgo.cc:110
std::unique_ptr< PFEGammaFilters > pfegamma_
Definition: PFProducer.cc:69
bool useVerticesForNeutral_
Definition: PFProducer.cc:84
Handle< PROD > getHandle(EDGetTokenT< PROD > token) const
Definition: Event.h:563
void setEGammaCollections(const edm::View< reco::PFCandidate > &pfEgammaCandidates, const edm::ValueMap< reco::GsfElectronRef > &valueMapGedElectrons, const edm::ValueMap< reco::PhotonRef > &valueMapGedPhotons)
Definition: PFAlgo.cc:76
const edm::EDGetTokenT< reco::PFBlockCollection > inputTagBlocks_
Definition: PFProducer.cc:51
bool postHFCleaning_
Definition: PFProducer.cc:90
bool vetoEndcap_
Definition: PFProducer.cc:60
bool postMuonCleaning_
Definition: PFProducer.cc:78
const edm::EDPutTokenT< reco::PFCandidateCollection > pfCandidatesToken_
Definition: PFProducer.cc:47
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:346
edm::EDGetTokenT< edm::View< reco::PFCandidate > > inputTagPFEGammaCandidates_
Definition: PFProducer.cc:66
void setMuonHandle(const edm::Handle< reco::MuonCollection > &muons)
Definition: PFAlgo.h:66
void reconstructParticles(const reco::PFBlockHandle &blockHandle, PFEGammaFilters const *pfegamma)
reconstruct particles
Definition: PFAlgo.cc:130
Log< level::Info, false > LogInfo
PFAlgo pfAlgo_
particle flow algorithm
Definition: PFProducer.cc:99
OrphanHandle< PROD > emplace(EDPutTokenT< PROD > token, Args &&...args)
puts a new product
Definition: Event.h:433
bool verbose_
verbose ?
Definition: PFProducer.cc:75
edm::EventID id() const
Definition: EventBase.h:59
edm::EDGetTokenT< edm::ValueMap< reco::PhotonRef > > inputTagValueMapGedPhotons_
Definition: PFProducer.cc:65
reco::PFCandidateCollection makeConnectedCandidates()
Definition: PFAlgo.h:115
PFMuonAlgo * getPFMuonAlgo()
Definition: PFAlgo.cc:66
const edm::EDPutTokenT< reco::PFCandidateCollection > pfCleanedCandidatesToken_
Definition: PFProducer.cc:48
#define str(s)
edm::EDGetTokenT< edm::ValueMap< reco::GsfElectronRef > > inputTagValueMapGedElectrons_
Definition: PFProducer.cc:64
#define LogDebug(id)

Member Data Documentation

std::string PFProducer::calibrationsLabel_
private

Definition at line 88 of file PFProducer.cc.

Referenced by PFProducer().

std::string PFProducer::electronExtraOutputCol_
private

Definition at line 57 of file PFProducer.cc.

const edm::EDGetTokenT<reco::PFBlockCollection> PFProducer::inputTagBlocks_
private

Definition at line 51 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

std::vector<edm::EDGetTokenT<reco::PFRecHitCollection> > PFProducer::inputTagCleanedHF_
private

Definition at line 56 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

edm::EDGetTokenT<reco::GsfElectronCollection> PFProducer::inputTagEgammaElectrons_
private

Definition at line 54 of file PFProducer.cc.

Referenced by PFProducer().

edm::EDGetTokenT<reco::MuonCollection> PFProducer::inputTagMuons_
private

Definition at line 52 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

edm::EDGetTokenT<edm::View<reco::PFCandidate> > PFProducer::inputTagPFEGammaCandidates_
private

Definition at line 66 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<reco::GsfElectronRef> > PFProducer::inputTagValueMapGedElectrons_
private

Definition at line 64 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<reco::PhotonRef> > PFProducer::inputTagValueMapGedPhotons_
private

Definition at line 65 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

edm::EDGetTokenT<reco::PFCandidateCollection> PFProducer::inputTagVetoes_
private

Definition at line 61 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

edm::ESGetToken<PerformancePayload, PFCalibrationRcd> PFProducer::perfToken_
private

Definition at line 49 of file PFProducer.cc.

Referenced by beginRun(), and PFProducer().

PFAlgo PFProducer::pfAlgo_
private

particle flow algorithm

Definition at line 99 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

const edm::EDPutTokenT<reco::PFCandidateCollection> PFProducer::pfCandidatesToken_
private

Definition at line 47 of file PFProducer.cc.

Referenced by produce().

const edm::EDPutTokenT<reco::PFCandidateCollection> PFProducer::pfCleanedCandidatesToken_
private

Definition at line 48 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

std::unique_ptr<PFEGammaFilters> PFProducer::pfegamma_ = nullptr
private

Definition at line 69 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

PFEnergyCalibration PFProducer::pfEnergyCalibration_
private

Definition at line 95 of file PFProducer.cc.

Referenced by beginRun(), and PFProducer().

PFEnergyCalibrationHF PFProducer::pfEnergyCalibrationHF_
private

Definition at line 96 of file PFProducer.cc.

Referenced by PFProducer().

std::string PFProducer::photonExtraOutputCol_
private

Definition at line 58 of file PFProducer.cc.

bool PFProducer::postHFCleaning_
private

Definition at line 90 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

bool PFProducer::postMuonCleaning_
private

Definition at line 78 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

bool PFProducer::use_EGammaFilters_
private

Definition at line 68 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

bool PFProducer::useCalibrationsFromDB_
private

Definition at line 87 of file PFProducer.cc.

Referenced by beginRun(), and PFProducer().

bool PFProducer::useEGammaElectrons_
private

Definition at line 81 of file PFProducer.cc.

Referenced by PFProducer().

bool PFProducer::useHO_
private

Definition at line 72 of file PFProducer.cc.

Referenced by PFProducer().

bool PFProducer::useVerticesForNeutral_
private

Definition at line 84 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

bool PFProducer::verbose_
private

verbose ?

Definition at line 75 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

edm::EDGetTokenT<reco::VertexCollection> PFProducer::vertices_
private

Definition at line 53 of file PFProducer.cc.

Referenced by PFProducer(), and produce().

bool PFProducer::vetoEndcap_
private

Definition at line 60 of file PFProducer.cc.

Referenced by PFProducer(), and produce().