CMS 3D CMS Logo

PFProducer.cc
Go to the documentation of this file.
3 
13 
14 #include <sstream>
15 
16 #include "TFile.h"
17 
18 using namespace std;
19 using namespace edm;
20 
21 
23 
24  //--ab: get calibration factors for HF:
25  bool calibHF_use;
26  std::vector<double> calibHF_eta_step;
27  std::vector<double> calibHF_a_EMonly;
28  std::vector<double> calibHF_b_HADonly;
29  std::vector<double> calibHF_a_EMHAD;
30  std::vector<double> calibHF_b_EMHAD;
31  calibHF_use = iConfig.getParameter<bool>("calibHF_use");
32  calibHF_eta_step = iConfig.getParameter<std::vector<double> >("calibHF_eta_step");
33  calibHF_a_EMonly = iConfig.getParameter<std::vector<double> >("calibHF_a_EMonly");
34  calibHF_b_HADonly = iConfig.getParameter<std::vector<double> >("calibHF_b_HADonly");
35  calibHF_a_EMHAD = iConfig.getParameter<std::vector<double> >("calibHF_a_EMHAD");
36  calibHF_b_EMHAD = iConfig.getParameter<std::vector<double> >("calibHF_b_EMHAD");
37  std::shared_ptr<PFEnergyCalibrationHF>
38  thepfEnergyCalibrationHF ( new PFEnergyCalibrationHF(calibHF_use,calibHF_eta_step,calibHF_a_EMonly,calibHF_b_HADonly,calibHF_a_EMHAD,calibHF_b_EMHAD) ) ;
39  //-----------------
40 
41  inputTagBlocks_ = consumes<reco::PFBlockCollection>(iConfig.getParameter<InputTag>("blocks"));
42 
43  //Post cleaning of the muons
44  inputTagMuons_ = consumes<reco::MuonCollection>(iConfig.getParameter<InputTag>("muons"));
45  postMuonCleaning_
46  = iConfig.getParameter<bool>("postMuonCleaning");
47 
48  if( iConfig.existsAs<bool>("useEGammaFilters") ) {
49  use_EGammaFilters_ = iConfig.getParameter<bool>("useEGammaFilters");
50  } else {
51  use_EGammaFilters_ = false;
52  }
53 
54  usePFElectrons_
55  = iConfig.getParameter<bool>("usePFElectrons");
56 
57  usePFPhotons_
58  = iConfig.getParameter<bool>("usePFPhotons");
59 
60  // **************************** !! IMPORTANT !! ************************************
61  // When you code is swithed on, automatically turn off the old PFElectrons/PFPhotons.
62  // The two algorithms can not run at the same time
63  // *********************************************************************************
64 
65  if(use_EGammaFilters_) {
66  usePFElectrons_ = false;
67  usePFPhotons_ = false;
68  }
69 
70 
71  usePhotonReg_
72  = (usePFPhotons_) ? iConfig.getParameter<bool>("usePhotonReg") : false ;
73 
74  useRegressionFromDB_
75  = (usePFPhotons_) ? iConfig.getParameter<bool>("useRegressionFromDB") : false;
76 
77  useEGammaElectrons_
78  = iConfig.getParameter<bool>("useEGammaElectrons");
79 
80  if( useEGammaElectrons_) {
81  inputTagEgammaElectrons_ = consumes<reco::GsfElectronCollection>(iConfig.getParameter<edm::InputTag>("egammaElectrons"));
82  }
83 
84  electronOutputCol_
85  = iConfig.getParameter<std::string>("pf_electron_output_col");
86 
87  bool usePFSCEleCalib;
88  std::vector<double> calibPFSCEle_Fbrem_barrel;
89  std::vector<double> calibPFSCEle_Fbrem_endcap;
90  std::vector<double> calibPFSCEle_barrel;
91  std::vector<double> calibPFSCEle_endcap;
92  usePFSCEleCalib = iConfig.getParameter<bool>("usePFSCEleCalib");
93  calibPFSCEle_Fbrem_barrel = iConfig.getParameter<std::vector<double> >("calibPFSCEle_Fbrem_barrel");
94  calibPFSCEle_Fbrem_endcap = iConfig.getParameter<std::vector<double> >("calibPFSCEle_Fbrem_endcap");
95  calibPFSCEle_barrel = iConfig.getParameter<std::vector<double> >("calibPFSCEle_barrel");
96  calibPFSCEle_endcap = iConfig.getParameter<std::vector<double> >("calibPFSCEle_endcap");
97  std::shared_ptr<PFSCEnergyCalibration>
98  thePFSCEnergyCalibration ( new PFSCEnergyCalibration(calibPFSCEle_Fbrem_barrel,calibPFSCEle_Fbrem_endcap,
99  calibPFSCEle_barrel,calibPFSCEle_endcap ));
100 
101  bool useEGammaSupercluster = iConfig.getParameter<bool>("useEGammaSupercluster");
102  double sumEtEcalIsoForEgammaSC_barrel = iConfig.getParameter<double>("sumEtEcalIsoForEgammaSC_barrel");
103  double sumEtEcalIsoForEgammaSC_endcap = iConfig.getParameter<double>("sumEtEcalIsoForEgammaSC_endcap");
104  double coneEcalIsoForEgammaSC = iConfig.getParameter<double>("coneEcalIsoForEgammaSC");
105  double sumPtTrackIsoForEgammaSC_barrel = iConfig.getParameter<double>("sumPtTrackIsoForEgammaSC_barrel");
106  double sumPtTrackIsoForEgammaSC_endcap = iConfig.getParameter<double>("sumPtTrackIsoForEgammaSC_endcap");
107  double coneTrackIsoForEgammaSC = iConfig.getParameter<double>("coneTrackIsoForEgammaSC");
108  unsigned int nTrackIsoForEgammaSC = iConfig.getParameter<unsigned int>("nTrackIsoForEgammaSC");
109 
110 
111  // register products
112  produces<reco::PFCandidateCollection>();
113  produces<reco::PFCandidateCollection>("CleanedHF");
114  produces<reco::PFCandidateCollection>("CleanedCosmicsMuons");
115  produces<reco::PFCandidateCollection>("CleanedTrackerAndGlobalMuons");
116  produces<reco::PFCandidateCollection>("CleanedFakeMuons");
117  produces<reco::PFCandidateCollection>("CleanedPunchThroughMuons");
118  produces<reco::PFCandidateCollection>("CleanedPunchThroughNeutralHadrons");
119  produces<reco::PFCandidateCollection>("AddedMuonsAndHadrons");
120 
121 
122  if (usePFElectrons_) {
123  produces<reco::PFCandidateCollection>(electronOutputCol_);
124  produces<reco::PFCandidateElectronExtraCollection>(electronExtraOutputCol_);
125  }
126 
127  if (usePFPhotons_) {
128  produces<reco::PFCandidatePhotonExtraCollection>(photonExtraOutputCol_);
129  }
130 
131 
132  double nSigmaECAL
133  = iConfig.getParameter<double>("pf_nsigma_ECAL");
134  double nSigmaHCAL
135  = iConfig.getParameter<double>("pf_nsigma_HCAL");
136 
137  //PFElectrons Configuration
138  double mvaEleCut
139  = iConfig.getParameter<double>("pf_electron_mvaCut");
140 
141 
142  string mvaWeightFileEleID
143  = iConfig.getParameter<string>("pf_electronID_mvaWeightFile");
144 
145  bool applyCrackCorrectionsForElectrons
146  = iConfig.getParameter<bool>("pf_electronID_crackCorrection");
147 
148  string path_mvaWeightFileEleID;
149  if(usePFElectrons_)
150  {
151  path_mvaWeightFileEleID = edm::FileInPath ( mvaWeightFileEleID.c_str() ).fullPath();
152  }
153 
154  //PFPhoton Configuration
155 
156  string path_mvaWeightFileConvID;
157  string mvaWeightFileConvID;
158  string path_mvaWeightFileGCorr;
159  string path_mvaWeightFileLCorr;
160  string path_X0_Map;
161  string path_mvaWeightFileRes;
162  double mvaConvCut=-99.;
163  double sumPtTrackIsoForPhoton = 99.;
164  double sumPtTrackIsoSlopeForPhoton = 99.;
165 
166  if(usePFPhotons_ )
167  {
168  mvaWeightFileConvID =iConfig.getParameter<string>("pf_convID_mvaWeightFile");
169  mvaConvCut = iConfig.getParameter<double>("pf_conv_mvaCut");
170  path_mvaWeightFileConvID = edm::FileInPath ( mvaWeightFileConvID.c_str() ).fullPath();
171  sumPtTrackIsoForPhoton = iConfig.getParameter<double>("sumPtTrackIsoForPhoton");
172  sumPtTrackIsoSlopeForPhoton = iConfig.getParameter<double>("sumPtTrackIsoSlopeForPhoton");
173 
174  string X0_Map=iConfig.getParameter<string>("X0_Map");
175  path_X0_Map = edm::FileInPath( X0_Map.c_str() ).fullPath();
176 
177  if(!useRegressionFromDB_) {
178  string mvaWeightFileLCorr=iConfig.getParameter<string>("pf_locC_mvaWeightFile");
179  path_mvaWeightFileLCorr = edm::FileInPath( mvaWeightFileLCorr.c_str() ).fullPath();
180  string mvaWeightFileGCorr=iConfig.getParameter<string>("pf_GlobC_mvaWeightFile");
181  path_mvaWeightFileGCorr = edm::FileInPath( mvaWeightFileGCorr.c_str() ).fullPath();
182  string mvaWeightFileRes=iConfig.getParameter<string>("pf_Res_mvaWeightFile");
183  path_mvaWeightFileRes=edm::FileInPath(mvaWeightFileRes.c_str()).fullPath();
184 
185  TFile *fgbr = new TFile(path_mvaWeightFileGCorr.c_str(),"READ");
186  ReaderGC_ =(const GBRForest*)fgbr->Get("GBRForest");
187  TFile *fgbr2 = new TFile(path_mvaWeightFileLCorr.c_str(),"READ");
188  ReaderLC_ = (const GBRForest*)fgbr2->Get("GBRForest");
189  TFile *fgbr3 = new TFile(path_mvaWeightFileRes.c_str(),"READ");
190  ReaderRes_ = (const GBRForest*)fgbr3->Get("GBRForest");
191  LogDebug("PFProducer")<<"Will set regressions from binary files " <<endl;
192  }
193 
194  }
195 
196 
197  // Reading new EGamma selection cuts
198  bool useProtectionsForJetMET(false);
199  double ele_iso_pt(0.0), ele_iso_mva_barrel(0.0), ele_iso_mva_endcap(0.0),
200  ele_iso_combIso_barrel(0.0), ele_iso_combIso_endcap(0.0),
201  ele_noniso_mva(0.0);
202  unsigned int ele_missinghits(0);
203  double ph_MinEt(0.0), ph_combIso(0.0), ph_HoE(0.0),
204  ph_sietaieta_eb(0.0),ph_sietaieta_ee(0.0);
205  string ele_iso_mvaWeightFile(""), ele_iso_path_mvaWeightFile("");
206  edm::ParameterSet ele_protectionsForJetMET,ele_protectionsForBadHcal,ph_protectionsForJetMET,ph_protectionsForBadHcal;
207  // Reading new EGamma ubiased collections and value maps
208  if(use_EGammaFilters_) {
209  ele_iso_mvaWeightFile = iConfig.getParameter<string>("isolatedElectronID_mvaWeightFile");
210  ele_iso_path_mvaWeightFile = edm::FileInPath ( ele_iso_mvaWeightFile.c_str() ).fullPath();
211  inputTagPFEGammaCandidates_ = consumes<edm::View<reco::PFCandidate> >((iConfig.getParameter<edm::InputTag>("PFEGammaCandidates")));
212  inputTagValueMapGedElectrons_ = consumes<edm::ValueMap<reco::GsfElectronRef>>(iConfig.getParameter<edm::InputTag>("GedElectronValueMap"));
213  inputTagValueMapGedPhotons_ = consumes<edm::ValueMap<reco::PhotonRef> >(iConfig.getParameter<edm::InputTag>("GedPhotonValueMap"));
214  ele_iso_pt = iConfig.getParameter<double>("electron_iso_pt");
215  ele_iso_mva_barrel = iConfig.getParameter<double>("electron_iso_mva_barrel");
216  ele_iso_mva_endcap = iConfig.getParameter<double>("electron_iso_mva_endcap");
217  ele_iso_combIso_barrel = iConfig.getParameter<double>("electron_iso_combIso_barrel");
218  ele_iso_combIso_endcap = iConfig.getParameter<double>("electron_iso_combIso_endcap");
219  ele_noniso_mva = iConfig.getParameter<double>("electron_noniso_mvaCut");
220  ele_missinghits = iConfig.getParameter<unsigned int>("electron_missinghits");
221  ph_MinEt = iConfig.getParameter<double>("photon_MinEt");
222  ph_combIso = iConfig.getParameter<double>("photon_combIso");
223  ph_HoE = iConfig.getParameter<double>("photon_HoE");
224  ph_sietaieta_eb = iConfig.getParameter<double>("photon_SigmaiEtaiEta_barrel");
225  ph_sietaieta_ee = iConfig.getParameter<double>("photon_SigmaiEtaiEta_endcap");
226  useProtectionsForJetMET =
227  iConfig.getParameter<bool>("useProtectionsForJetMET");
228  ele_protectionsForJetMET =
229  iConfig.getParameter<edm::ParameterSet>("electron_protectionsForJetMET");
230  ele_protectionsForBadHcal =
231  iConfig.getParameter<edm::ParameterSet>("electron_protectionsForBadHcal");
232  ph_protectionsForJetMET =
233  iConfig.getParameter<edm::ParameterSet>("photon_protectionsForJetMET");
234  ph_protectionsForBadHcal =
235  iConfig.getParameter<edm::ParameterSet>("photon_protectionsForBadHcal");
236  }
237 
238  //Secondary tracks and displaced vertices parameters
239 
240  bool rejectTracks_Bad
241  = iConfig.getParameter<bool>("rejectTracks_Bad");
242 
244  = iConfig.getParameter<bool>("rejectTracks_Step45");
245 
247  = iConfig.getParameter<bool>("usePFNuclearInteractions");
248 
249  bool usePFConversions
250  = iConfig.getParameter<bool>("usePFConversions");
251 
252  bool usePFDecays
253  = iConfig.getParameter<bool>("usePFDecays");
254 
255  double dptRel_DispVtx
256  = iConfig.getParameter<double>("dptRel_DispVtx");
257 
259  = iConfig.getParameter<edm::ParameterSet>("iCfgCandConnector");
260 
261 
262  // fToRead = iConfig.getUntrackedParameter<vector<string> >("toRead");
263 
264  useCalibrationsFromDB_
265  = iConfig.getParameter<bool>("useCalibrationsFromDB");
266 
267  if (useCalibrationsFromDB_)
268  calibrationsLabel_ = iConfig.getParameter<std::string>("calibrationsLabel");
269 
270  auto calibration = std::make_shared<PFEnergyCalibration>();
271 
272  int algoType
273  = iConfig.getParameter<unsigned>("algoType");
274 
275  switch(algoType) {
276  case 0:
277  pfAlgo_.reset( new PFAlgo);
278  break;
279  default:
280  assert(0);
281  }
282 
283  pfAlgo_->setParameters( nSigmaECAL,
284  nSigmaHCAL,
285  calibration,
286  thepfEnergyCalibrationHF);
287 
288  //PFElectrons: call the method setpfeleparameters
289  pfAlgo_->setPFEleParameters(mvaEleCut,
290  path_mvaWeightFileEleID,
291  usePFElectrons_,
292  thePFSCEnergyCalibration,
293  calibration,
294  sumEtEcalIsoForEgammaSC_barrel,
295  sumEtEcalIsoForEgammaSC_endcap,
296  coneEcalIsoForEgammaSC,
297  sumPtTrackIsoForEgammaSC_barrel,
298  sumPtTrackIsoForEgammaSC_endcap,
299  nTrackIsoForEgammaSC,
300  coneTrackIsoForEgammaSC,
301  applyCrackCorrectionsForElectrons,
302  usePFSCEleCalib,
303  useEGammaElectrons_,
304  useEGammaSupercluster);
305 
306  // pfAlgo_->setPFConversionParameters(usePFConversions);
307 
308  // PFPhotons:
309  pfAlgo_->setPFPhotonParameters(usePFPhotons_,
310  path_mvaWeightFileConvID,
311  mvaConvCut,
312  usePhotonReg_,
313  path_X0_Map,
314  calibration,
315  sumPtTrackIsoForPhoton,
316  sumPtTrackIsoSlopeForPhoton);
317 
318 
319  // NEW EGamma Filters
320  pfAlgo_->setEGammaParameters(use_EGammaFilters_,
321  ele_iso_path_mvaWeightFile,
322  ele_iso_pt,
323  ele_iso_mva_barrel,
324  ele_iso_mva_endcap,
325  ele_iso_combIso_barrel,
326  ele_iso_combIso_endcap,
327  ele_noniso_mva,
328  ele_missinghits,
329  useProtectionsForJetMET,
330  ele_protectionsForJetMET,
331  ele_protectionsForBadHcal,
332  ph_MinEt,
333  ph_combIso,
334  ph_HoE,
335  ph_sietaieta_eb,
336  ph_sietaieta_ee,
337  ph_protectionsForJetMET,
338  ph_protectionsForBadHcal);
339 
340  //Secondary tracks and displaced vertices parameters
341 
342  pfAlgo_->setDisplacedVerticesParameters(rejectTracks_Bad,
343  rejectTracks_Step45,
344  usePFNuclearInteractions,
345  usePFConversions,
346  usePFDecays,
347  dptRel_DispVtx);
348 
349  if (usePFNuclearInteractions)
350  pfAlgo_->setCandConnectorParameters( iCfgCandConnector );
351 
352 
353 
354  // Set muon and fake track parameters
355  pfAlgo_->setPFMuonAndFakeParameters(iConfig);
356  pfAlgo_->setBadHcalTrackParams(iConfig);
357 
358  //Post cleaning of the HF
359  postHFCleaning_
360  = iConfig.getParameter<bool>("postHFCleaning");
361  double minHFCleaningPt
362  = iConfig.getParameter<double>("minHFCleaningPt");
363  double minSignificance
364  = iConfig.getParameter<double>("minSignificance");
365  double maxSignificance
366  = iConfig.getParameter<double>("maxSignificance");
368  = iConfig.getParameter<double>("minSignificanceReduction");
369  double maxDeltaPhiPt
370  = iConfig.getParameter<double>("maxDeltaPhiPt");
371  double minDeltaMet
372  = iConfig.getParameter<double>("minDeltaMet");
373 
374  // Set post HF cleaning muon parameters
375  pfAlgo_->setPostHFCleaningParameters(postHFCleaning_,
376  minHFCleaningPt,
377  minSignificance,
378  maxSignificance,
379  minSignificanceReduction,
380  maxDeltaPhiPt,
381  minDeltaMet);
382 
383  // Input tags for HF cleaned rechits
384  std::vector<edm::InputTag> tags =iConfig.getParameter< std::vector<edm::InputTag> >("cleanedHF");
385  for (unsigned int i=0;i<tags.size();++i)
386  inputTagCleanedHF_.push_back(consumes<reco::PFRecHitCollection>(tags[i]));
387  //MIKE: Vertex Parameters
388  vertices_ = consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("vertexCollection"));
389  useVerticesForNeutral_ = iConfig.getParameter<bool>("useVerticesForNeutral");
390 
391  // Use HO clusters and links in the PF reconstruction
392  useHO_= iConfig.getParameter<bool>("useHO");
393  pfAlgo_->setHOTag(useHO_);
394 
395  verbose_ =
396  iConfig.getUntrackedParameter<bool>("verbose",false);
397 
398  bool debug_ =
399  iConfig.getUntrackedParameter<bool>("debug",false);
400 
401  pfAlgo_->setDebug( debug_ );
402 
403 }
404 
405 
406 
408 
409 void
411  const edm::EventSetup & es)
412 {
413 
414 
415  /*
416  static map<string, PerformanceResult::ResultType> functType;
417 
418  functType["PFfa_BARREL"] = PerformanceResult::PFfa_BARREL;
419  functType["PFfa_ENDCAP"] = PerformanceResult::PFfa_ENDCAP;
420  functType["PFfb_BARREL"] = PerformanceResult::PFfb_BARREL;
421  functType["PFfb_ENDCAP"] = PerformanceResult::PFfb_ENDCAP;
422  functType["PFfc_BARREL"] = PerformanceResult::PFfc_BARREL;
423  functType["PFfc_ENDCAP"] = PerformanceResult::PFfc_ENDCAP;
424  functType["PFfaEta_BARREL"] = PerformanceResult::PFfaEta_BARREL;
425  functType["PFfaEta_ENDCAP"] = PerformanceResult::PFfaEta_ENDCAP;
426  functType["PFfbEta_BARREL"] = PerformanceResult::PFfbEta_BARREL;
427  functType["PFfbEta_ENDCAP"] = PerformanceResult::PFfbEta_ENDCAP;
428  */
429 
430  if ( useCalibrationsFromDB_ ) {
431  // read the PFCalibration functions from the global tags
433  es.get<PFCalibrationRcd>().get(calibrationsLabel_, perfH);
434 
435  PerformancePayloadFromTFormula const * pfCalibrations = static_cast< const PerformancePayloadFromTFormula *>(perfH.product());
436 
437  pfAlgo_->thePFEnergyCalibration()->setCalibrationFunctions(pfCalibrations);
438  }
439 
440  /*
441  for(vector<string>::const_iterator name = fToRead.begin(); name != fToRead.end(); ++name) {
442 
443  cout << "Function: " << *name << endl;
444  PerformanceResult::ResultType fType = functType[*name];
445  pfCalibrations->printFormula(fType);
446 
447  // evaluate it @ 10 GeV
448  float energy = 10.;
449 
450  BinningPointByMap point;
451  point.insert(BinningVariables::JetEt, energy);
452 
453  if(pfCalibrations->isInPayload(fType, point)) {
454  float value = pfCalibrations->getResult(fType, point);
455  cout << " Energy before:: " << energy << " after: " << value << endl;
456  } else cout << "outside limits!" << endl;
457 
458  }
459  */
460 
461  if(usePFPhotons_ && useRegressionFromDB_) {
462  edm::ESHandle<GBRForest> readerPFLCEB;
463  edm::ESHandle<GBRForest> readerPFLCEE;
464  edm::ESHandle<GBRForest> readerPFGCEB;
465  edm::ESHandle<GBRForest> readerPFGCEEHR9;
466  edm::ESHandle<GBRForest> readerPFGCEELR9;
467  edm::ESHandle<GBRForest> readerPFRes;
468  es.get<GBRWrapperRcd>().get("PFLCorrectionBar",readerPFLCEB);
469  ReaderLCEB_=readerPFLCEB.product();
470  es.get<GBRWrapperRcd>().get("PFLCorrectionEnd",readerPFLCEE);
471  ReaderLCEE_=readerPFLCEE.product();
472  es.get<GBRWrapperRcd>().get("PFGCorrectionBar",readerPFGCEB);
473  ReaderGCBarrel_=readerPFGCEB.product();
474  es.get<GBRWrapperRcd>().get("PFGCorrectionEndHighR9",readerPFGCEEHR9);
475  ReaderGCEndCapHighr9_=readerPFGCEEHR9.product();
476  es.get<GBRWrapperRcd>().get("PFGCorrectionEndLowR9",readerPFGCEELR9);
477  ReaderGCEndCapLowr9_=readerPFGCEELR9.product();
478  es.get<GBRWrapperRcd>().get("PFEcalResolution",readerPFRes);
479  ReaderEcalRes_=readerPFRes.product();
480 
481  /*
482  LogDebug("PFProducer")<<"setting regressions from DB "<<endl;
483  */
484  }
485 
486  if(usePFPhotons_){
487  //pfAlgo_->setPFPhotonRegWeights(ReaderLC_, ReaderGC_, ReaderRes_);
488  pfAlgo_->setPFPhotonRegWeights(ReaderLCEB_,ReaderLCEE_,ReaderGCBarrel_,ReaderGCEndCapHighr9_, ReaderGCEndCapLowr9_, ReaderEcalRes_ );
489  }
490 }
491 
492 
493 void
495  const EventSetup& iSetup) {
496 
497  LogDebug("PFProducer")<<"START event: "
498  <<iEvent.id().event()
499  <<" in run "<<iEvent.id().run()<<endl;
500 
501 
502  // Get The vertices from the event
503  // and assign dynamic vertex parameters
505  bool gotVertices = iEvent.getByToken(vertices_,vertices);
506  if(!gotVertices) {
507  ostringstream err;
508  err<<"Cannot find vertices for this event.Continuing Without them ";
509  LogError("PFProducer")<<err.str()<<endl;
510  }
511 
512  //Assign the PFAlgo Parameters
513  pfAlgo_->setPFVertexParameters(useVerticesForNeutral_,vertices.product());
514 
515  // get the collection of blocks
516 
518 
519  iEvent.getByToken( inputTagBlocks_, blocks );
520 
521  // get the collection of muons
522 
524 
525  if ( postMuonCleaning_ ) {
526 
527  iEvent.getByToken( inputTagMuons_, muons );
528  pfAlgo_->setMuonHandle(muons);
529  }
530 
531  if (useEGammaElectrons_) {
533  iEvent.getByToken( inputTagEgammaElectrons_, egelectrons );
534  pfAlgo_->setEGElectronCollection(*egelectrons);
535  }
536 
537  if(use_EGammaFilters_) {
538 
539  // Read PFEGammaCandidates
540 
542  iEvent.getByToken(inputTagPFEGammaCandidates_,pfEgammaCandidates);
543 
544  // Get the value maps
545 
547  iEvent.getByToken(inputTagValueMapGedElectrons_,valueMapGedElectrons);
548 
549  edm::Handle<edm::ValueMap<reco::PhotonRef> > valueMapGedPhotons;
550  iEvent.getByToken(inputTagValueMapGedPhotons_,valueMapGedPhotons);
551 
552  pfAlgo_->setEGammaCollections(*pfEgammaCandidates,
553  *valueMapGedElectrons,
554  *valueMapGedPhotons);
555 
556  }
557 
558 
559  LogDebug("PFProducer")<<"particle flow is starting"<<endl;
560 
561  assert( blocks.isValid() );
562 
563  pfAlgo_->reconstructParticles( blocks );
564 
565  if(verbose_) {
566  ostringstream str;
567  str<<(*pfAlgo_)<<endl;
568  // cout << (*pfAlgo_) << endl;
569  LogInfo("PFProducer") <<str.str()<<endl;
570  }
571 
572 
573  // Florian 5/01/2011
574  // Save the PFElectron Extra Collection First as to be able to create valid References
575  if(usePFElectrons_) {
576  std::unique_ptr<reco::PFCandidateElectronExtraCollection> pOutputElectronCandidateExtraCollection( pfAlgo_->transferElectronExtra() );
577 
579  iEvent.put(std::move(pOutputElectronCandidateExtraCollection),electronExtraOutputCol_);
580  pfAlgo_->setElectronExtraRef(electronExtraProd);
581  }
582 
583  // Daniele 18/05/2011
584  // Save the PFPhoton Extra Collection First as to be able to create valid References
585  if(usePFPhotons_) {
586  std::unique_ptr<reco::PFCandidatePhotonExtraCollection> pOutputPhotonCandidateExtraCollection( pfAlgo_->transferPhotonExtra() );
587 
589  iEvent.put(std::move(pOutputPhotonCandidateExtraCollection),photonExtraOutputCol_);
590  pfAlgo_->setPhotonExtraRef(photonExtraProd);
591  }
592 
593  // Save cosmic cleaned muon candidates
594  std::unique_ptr<reco::PFCandidateCollection>
595  pCosmicsMuonCleanedCandidateCollection( pfAlgo_->getPFMuonAlgo()->transferCleanedCosmicCandidates() );
596  // Save tracker/global cleaned muon candidates
597  std::unique_ptr<reco::PFCandidateCollection>
598  pTrackerAndGlobalCleanedMuonCandidateCollection( pfAlgo_->getPFMuonAlgo()->transferCleanedTrackerAndGlobalCandidates() );
599  // Save fake cleaned muon candidates
600  std::unique_ptr<reco::PFCandidateCollection>
601  pFakeCleanedMuonCandidateCollection( pfAlgo_->getPFMuonAlgo()->transferCleanedFakeCandidates() );
602  // Save punch-through cleaned muon candidates
603  std::unique_ptr<reco::PFCandidateCollection>
604  pPunchThroughMuonCleanedCandidateCollection( pfAlgo_->getPFMuonAlgo()->transferPunchThroughCleanedMuonCandidates() );
605  // Save punch-through cleaned neutral hadron candidates
606  std::unique_ptr<reco::PFCandidateCollection>
607  pPunchThroughHadronCleanedCandidateCollection( pfAlgo_->getPFMuonAlgo()->transferPunchThroughCleanedHadronCandidates() );
608  // Save added muon candidates
609  std::unique_ptr<reco::PFCandidateCollection>
610  pAddedMuonCandidateCollection( pfAlgo_->getPFMuonAlgo()->transferAddedMuonCandidates() );
611 
612  // Check HF overcleaning
614  for ( unsigned ihf=0; ihf<inputTagCleanedHF_.size(); ++ihf ) {
616  bool foundHF = iEvent.getByToken( inputTagCleanedHF_[ihf], hfCleaned );
617  if (!foundHF) continue;
618  for ( unsigned jhf=0; jhf<(*hfCleaned).size(); ++jhf ) {
619  hfCopy.push_back( (*hfCleaned)[jhf] );
620  }
621  }
622 
623  if (postHFCleaning_)
624  pfAlgo_->checkCleaning( hfCopy );
625 
626  // Save recovered HF candidates
627  std::unique_ptr<reco::PFCandidateCollection> pCleanedCandidateCollection( pfAlgo_->transferCleanedCandidates() );
628 
629 
630  // Save the final PFCandidate collection
631  std::unique_ptr<reco::PFCandidateCollection> pOutputCandidateCollection( pfAlgo_->transferCandidates() );
632 
633 
634 
635  LogDebug("PFProducer")<<"particle flow: putting products in the event"<<endl;
636  if ( verbose_ ) std::cout <<"particle flow: putting products in the event. Here the full list"<<endl;
637  int nC=0;
638  for( reco::PFCandidateCollection::const_iterator itCand = (*pOutputCandidateCollection).begin(); itCand != (*pOutputCandidateCollection).end(); itCand++) {
639  nC++;
640  if (verbose_ ) std::cout << nC << ")" << (*itCand).particleId() << std::endl;
641 
642  }
643 
644 
645 
646  // Write in the event
647  iEvent.put(std::move(pOutputCandidateCollection));
648  iEvent.put(std::move(pCleanedCandidateCollection),"CleanedHF");
649 
650  if ( postMuonCleaning_ ) {
651  iEvent.put(std::move(pCosmicsMuonCleanedCandidateCollection),"CleanedCosmicsMuons");
652  iEvent.put(std::move(pTrackerAndGlobalCleanedMuonCandidateCollection),"CleanedTrackerAndGlobalMuons");
653  iEvent.put(std::move(pFakeCleanedMuonCandidateCollection),"CleanedFakeMuons");
654  iEvent.put(std::move(pPunchThroughMuonCleanedCandidateCollection),"CleanedPunchThroughMuons");
655  iEvent.put(std::move(pPunchThroughHadronCleanedCandidateCollection),"CleanedPunchThroughNeutralHadrons");
656  iEvent.put(std::move(pAddedMuonCandidateCollection),"AddedMuonsAndHadrons");
657  }
658 
659  if(usePFElectrons_)
660  {
661  std::unique_ptr<reco::PFCandidateCollection>
662  pOutputElectronCandidateCollection( pfAlgo_->transferElectronCandidates() );
663  iEvent.put(std::move(pOutputElectronCandidateCollection),electronOutputCol_);
664 
665  }
666 }
667 
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:39
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
T getUntrackedParameter(std::string const &, T const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:137
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:185
int ihf
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
~PFProducer() override
Definition: PFProducer.cc:407
std::vector< PFRecHit > PFRecHitCollection
collection of PFRecHit objects
Definition: PFRecHitFwd.h:9
void produce(edm::Event &, const edm::EventSetup &) override
Definition: PFProducer.cc:494
PFProducer(const edm::ParameterSet &)
Definition: PFProducer.cc:22
int iEvent
Definition: GenABIO.cc:230
void beginRun(const edm::Run &, const edm::EventSetup &) override
Definition: PFProducer.cc:410
bool isValid() const
Definition: HandleBase.h:74
T const * product() const
Definition: Handle.h:81
edm::EventID id() const
Definition: EventBase.h:60
HLT enums.
T get() const
Definition: EventSetup.h:68
#define str(s)
Definition: PFAlgo.h:49
T const * product() const
Definition: ESHandle.h:84
def move(src, dest)
Definition: eostools.py:511
Definition: Run.h:44