CMS 3D CMS Logo

ElectronAnalyzer.cc
Go to the documentation of this file.
2 
4 
11 
18 
19 #include "CLHEP/Units/GlobalPhysicalConstants.h"
20 #include "TMath.h"
21 
22 #include <iostream>
23 
24 using namespace reco;
25 
27  // general, collections
28  Selection_ = conf.getParameter<int>("Selection");
29  electronCollection_ = consumes<GsfElectronCollection>(conf.getParameter<edm::InputTag>("ElectronCollection"));
31  consumes<SuperClusterCollection>(conf.getParameter<edm::InputTag>("MatchingObjectCollection"));
32  trackCollection_ = consumes<TrackCollection>(conf.getParameter<edm::InputTag>("TrackCollection"));
33  vertexCollection_ = consumes<VertexCollection>(conf.getParameter<edm::InputTag>("VertexCollection"));
34  gsftrackCollection_ = consumes<GsfTrackCollection>(conf.getParameter<edm::InputTag>("GsfTrackCollection"));
35  beamSpotTag_ = consumes<BeamSpot>(conf.getParameter<edm::InputTag>("BeamSpot"));
36  readAOD_ = conf.getParameter<bool>("ReadAOD");
37 
38  // matching
39  matchingCondition_ = conf.getParameter<std::string>("MatchingCondition");
40  assert(matchingCondition_ == "Cone");
41  maxPtMatchingObject_ = conf.getParameter<double>("MaxPtMatchingObject");
42  maxAbsEtaMatchingObject_ = conf.getParameter<double>("MaxAbsEtaMatchingObject");
43  deltaR_ = conf.getParameter<double>("DeltaR");
44 
45  // electron selection
46  minEt_ = conf.getParameter<double>("MinEt");
47  minPt_ = conf.getParameter<double>("MinPt");
48  maxAbsEta_ = conf.getParameter<double>("MaxAbsEta");
49  isEB_ = conf.getParameter<bool>("SelectEb");
50  isEE_ = conf.getParameter<bool>("SelectEe");
51  isNotEBEEGap_ = conf.getParameter<bool>("SelectNotEbEeGap");
52  isEcalDriven_ = conf.getParameter<bool>("SelectEcalDriven");
53  isTrackerDriven_ = conf.getParameter<bool>("SelectTrackerDriven");
54  eOverPMinBarrel_ = conf.getParameter<double>("MinEopBarrel");
55  eOverPMaxBarrel_ = conf.getParameter<double>("MaxEopBarrel");
56  eOverPMinEndcaps_ = conf.getParameter<double>("MinEopEndcaps");
57  eOverPMaxEndcaps_ = conf.getParameter<double>("MaxEopEndcaps");
58  dEtaMinBarrel_ = conf.getParameter<double>("MinDetaBarrel");
59  dEtaMaxBarrel_ = conf.getParameter<double>("MaxDetaBarrel");
60  dEtaMinEndcaps_ = conf.getParameter<double>("MinDetaEndcaps");
61  dEtaMaxEndcaps_ = conf.getParameter<double>("MaxDetaEndcaps");
62  dPhiMinBarrel_ = conf.getParameter<double>("MinDphiBarrel");
63  dPhiMaxBarrel_ = conf.getParameter<double>("MaxDphiBarrel");
64  dPhiMinEndcaps_ = conf.getParameter<double>("MinDphiEndcaps");
65  dPhiMaxEndcaps_ = conf.getParameter<double>("MaxDphiEndcaps");
66  sigIetaIetaMinBarrel_ = conf.getParameter<double>("MinSigIetaIetaBarrel");
67  sigIetaIetaMaxBarrel_ = conf.getParameter<double>("MaxSigIetaIetaBarrel");
68  sigIetaIetaMinEndcaps_ = conf.getParameter<double>("MinSigIetaIetaEndcaps");
69  sigIetaIetaMaxEndcaps_ = conf.getParameter<double>("MaxSigIetaIetaEndcaps");
70  hadronicOverEmMaxBarrel_ = conf.getParameter<double>("MaxHoeBarrel");
71  hadronicOverEmMaxEndcaps_ = conf.getParameter<double>("MaxHoeEndcaps");
72  mvaMin_ = conf.getParameter<double>("MinMva");
73  tipMaxBarrel_ = conf.getParameter<double>("MaxTipBarrel");
74  tipMaxEndcaps_ = conf.getParameter<double>("MaxTipEndcaps");
75  tkIso03Max_ = conf.getParameter<double>("MaxTkIso03");
76  hcalIso03Depth1MaxBarrel_ = conf.getParameter<double>("MaxHcalIso03Depth1Barrel");
77  hcalIso03Depth1MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth1Endcaps");
78  hcalIso03Depth2MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth2Endcaps");
79  ecalIso03MaxBarrel_ = conf.getParameter<double>("MaxEcalIso03Barrel");
80  ecalIso03MaxEndcaps_ = conf.getParameter<double>("MaxEcalIso03Endcaps");
81 
82  // for trigger
83  triggerResults_ = conf.getParameter<edm::InputTag>("TriggerResults");
84 
85  // histos limits and binning
86  // edm::ParameterSet histosSet = conf.getParameter<edm::ParameterSet>("histosCfg") ;
87 
88  nbineta = conf.getParameter<int>("NbinEta");
89  nbineta2D = conf.getParameter<int>("NbinEta2D");
90  etamin = conf.getParameter<double>("EtaMin");
91  etamax = conf.getParameter<double>("EtaMax");
92  //
93  nbinphi = conf.getParameter<int>("NbinPhi");
94  nbinphi2D = conf.getParameter<int>("NbinPhi2D");
95  phimin = conf.getParameter<double>("PhiMin");
96  phimax = conf.getParameter<double>("PhiMax");
97  //
98  nbinpt = conf.getParameter<int>("NbinPt");
99  nbinpteff = conf.getParameter<int>("NbinPtEff");
100  nbinpt2D = conf.getParameter<int>("NbinPt2D");
101  ptmax = conf.getParameter<double>("PtMax");
102  //
103  nbinp = conf.getParameter<int>("NbinP");
104  nbinp2D = conf.getParameter<int>("NbinP2D");
105  pmax = conf.getParameter<double>("PMax");
106  //
107  nbineop = conf.getParameter<int>("NbinEop");
108  nbineop2D = conf.getParameter<int>("NbinEop2D");
109  eopmax = conf.getParameter<double>("EopMax");
110  eopmaxsht = conf.getParameter<double>("EopMaxSht");
111  //
112  nbindeta = conf.getParameter<int>("NbinDeta");
113  detamin = conf.getParameter<double>("DetaMin");
114  detamax = conf.getParameter<double>("DetaMax");
115  //
116  nbindphi = conf.getParameter<int>("NbinDphi");
117  dphimin = conf.getParameter<double>("DphiMin");
118  dphimax = conf.getParameter<double>("DphiMax");
119  //
120  nbindetamatch = conf.getParameter<int>("NbinDetaMatch");
121  nbindetamatch2D = conf.getParameter<int>("NbinDetaMatch2D");
122  detamatchmin = conf.getParameter<double>("DetaMatchMin");
123  detamatchmax = conf.getParameter<double>("DetaMatchMax");
124  //
125  nbindphimatch = conf.getParameter<int>("NbinDphiMatch");
126  nbindphimatch2D = conf.getParameter<int>("NbinDphiMatch2D");
127  dphimatchmin = conf.getParameter<double>("DphiMatchMin");
128  dphimatchmax = conf.getParameter<double>("DphiMatchMax");
129  //
130  nbinfhits = conf.getParameter<int>("NbinFhits");
131  fhitsmax = conf.getParameter<double>("FhitsMax");
132  //
133  nbinlhits = conf.getParameter<int>("NbinLhits");
134  lhitsmax = conf.getParameter<double>("LhitsMax");
135  //
136  nbinxyz = conf.getParameter<int>("NbinXyz");
137  nbinxyz2D = conf.getParameter<int>("NbinXyz2D");
138  //
139  nbinpoptrue = conf.getParameter<int>("NbinPopTrue");
140  poptruemin = conf.getParameter<double>("PopTrueMin");
141  poptruemax = conf.getParameter<double>("PopTrueMax");
142  //
143  nbinmee = conf.getParameter<int>("NbinMee");
144  meemin = conf.getParameter<double>("MeeMin");
145  meemax = conf.getParameter<double>("MeeMax");
146  //
147  nbinhoe = conf.getParameter<int>("NbinHoe");
148  hoemin = conf.getParameter<double>("HoeMin");
149  hoemax = conf.getParameter<double>("HoeMax");
150 
151  // set_EfficiencyFlag=histosSet.getParameter<bool>("EfficiencyFlag");
152  // set_StatOverflowFlag=histosSet.getParameter<bool>("StatOverflowFlag");
153 }
154 
156 
159 
160  nEvents_ = 0;
161 
162  // basic quantities
164  iBooker, "vertexPt_barrel", "ele transverse momentum in barrel", nbinpt, 0., ptmax, "p_{T vertex} (GeV/c)");
166  iBooker, "vertexPt_endcaps", "ele transverse momentum in endcaps", nbinpt, 0., ptmax, "p_{T vertex} (GeV/c)");
167  h1_vertexEta = bookH1(iBooker, "vertexEta", "ele momentum #eta", nbineta, etamin, etamax, "#eta");
168  h2_vertexEtaVsPhi = bookH2(iBooker,
169  "vertexEtaVsPhi",
170  "ele momentum #eta vs #phi",
171  nbineta2D,
172  etamin,
173  etamax,
174  nbinphi2D,
175  phimin,
176  phimax,
177  "#eta",
178  "#phi (rad)");
180  iBooker, "vertexXvsY", "ele vertex x vs y", nbinxyz2D, -0.1, 0.1, nbinxyz2D, -0.1, 0.1, "x (cm)", "y (cm)");
181  h1_vertexZ = bookH1(iBooker, "vertexZ", "ele vertex z", nbinxyz, -25, 25, "z (cm)");
182 
183  // super-clusters
184  h1_sclEt = bookH1(iBooker, "sclEt", "ele supercluster transverse energy", nbinpt, 0., ptmax, "E_{T} (GeV)");
185 
186  // electron track
187  h1_chi2 = bookH1(iBooker, "chi2", "ele track #chi^{2}", 100, 0., 15., "#Chi^{2}");
189  iBooker, "chi2VsEta", "ele track #chi^{2} vs #eta", nbineta2D, etamin, etamax, 0., 15., "#eta", "<#chi^{2}>");
190  py_chi2VsPhi = bookP1(iBooker,
191  "chi2VsPhi",
192  "ele track #chi^{2} vs #phi",
193  nbinphi2D,
194  phimin,
195  phimax,
196  0.,
197  15.,
198  "#phi (rad)",
199  "<#chi^{2}>");
200  h1_foundHits = bookH1(iBooker, "foundHits", "ele track # found hits", nbinfhits, 0., fhitsmax, "N_{hits}");
201  py_foundHitsVsEta = bookP1(iBooker,
202  "foundHitsVsEta",
203  "ele track # found hits vs #eta",
204  nbineta2D,
205  etamin,
206  etamax,
207  0.,
208  fhitsmax,
209  "#eta",
210  "<# hits>");
211  py_foundHitsVsPhi = bookP1(iBooker,
212  "foundHitsVsPhi",
213  "ele track # found hits vs #phi",
214  nbinphi2D,
215  phimin,
216  phimax,
217  0.,
218  fhitsmax,
219  "#phi (rad)",
220  "<# hits>");
221  h1_lostHits = bookH1(iBooker, "lostHits", "ele track # lost hits", 5, 0., 5., "N_{lost hits}");
222  py_lostHitsVsEta = bookP1(iBooker,
223  "lostHitsVsEta",
224  "ele track # lost hits vs #eta",
225  nbineta2D,
226  etamin,
227  etamax,
228  0.,
229  lhitsmax,
230  "#eta",
231  "<# hits>");
232  py_lostHitsVsPhi = bookP1(iBooker,
233  "lostHitsVsPhi",
234  "ele track # lost hits vs #eta",
235  nbinphi2D,
236  phimin,
237  phimax,
238  0.,
239  lhitsmax,
240  "#phi (rad)",
241  "<# hits>");
242 
243  // electron matching and ID
244  h1_Eop_barrel = bookH1(iBooker, "Eop_barrel", "ele E/P_{vertex} in barrel", nbineop, 0., eopmax, "E/P_{vertex}");
245  h1_Eop_endcaps = bookH1(iBooker, "Eop_endcaps", "ele E/P_{vertex} in endcaps", nbineop, 0., eopmax, "E/P_{vertex}");
246  py_EopVsPhi = bookP1(iBooker,
247  "EopVsPhi",
248  "ele E/P_{vertex} vs #phi",
249  nbinphi2D,
250  phimin,
251  phimax,
252  0.,
253  eopmax,
254  "#phi (rad)",
255  "<E/P_{vertex}>");
257  bookH1(iBooker, "EeleOPout_barrel", "ele E_{ele}/P_{out} in barrel", nbineop, 0., eopmax, "E_{ele}/P_{out}");
259  bookH1(iBooker, "EeleOPout_endcaps", "ele E_{ele}/P_{out} in endcaps", nbineop, 0., eopmax, "E_{ele}/P_{out}");
261  "dEtaSc_propVtx_barrel",
262  "ele #eta_{sc} - #eta_{tr}, prop from vertex, in barrel",
264  detamatchmin,
265  detamatchmax,
266  "#eta_{sc} - #eta_{tr}");
268  "dEtaSc_propVtx_endcapsPos",
269  "ele #eta_{sc} - #eta_{tr}, prop from vertex, in positive endcap",
271  detamatchmin,
272  detamatchmax,
273  "#eta_{sc} - #eta_{tr}");
275  "dEtaSc_propVtx_endcapsNeg",
276  "ele #eta_{sc} - #eta_{tr}, prop from vertex, in negative endcap",
278  detamatchmin,
279  detamatchmax,
280  "#eta_{sc} - #eta_{tr}");
281  py_dEtaSc_propVtxVsPhi = bookP1(iBooker,
282  "dEtaSc_propVtxVsPhi",
283  "ele #eta_{sc} - #eta_{tr}, prop from vertex vs #phi",
284  nbinphi2D,
285  phimin,
286  phimax,
287  detamatchmin,
288  detamatchmax,
289  "#phi (rad)",
290  "<#eta_{sc} - #eta_{tr}>");
292  "dEtaEleCl_propOut_barrel",
293  "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in barrel",
295  detamatchmin,
296  detamatchmax,
297  "#eta_{elecl} - #eta_{tr}");
299  "dEtaEleCl_propOut_endcapsPos",
300  "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in positive endcap",
302  detamatchmin,
303  detamatchmax,
304  "#eta_{elecl} - #eta_{tr}");
306  "dEtaEleCl_propOut_endcapsNeg",
307  "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in negative endcap",
309  detamatchmin,
310  detamatchmax,
311  "#eta_{elecl} - #eta_{tr}");
313  "dPhiSc_propVtx_barrel",
314  "ele #phi_{sc} - #phi_{tr}, prop from vertex, in barrel",
316  dphimatchmin,
317  dphimatchmax,
318  "#phi_{sc} - #phi_{tr} (rad)");
320  "dPhiSc_propVtx_endcapsPos",
321  "ele #phi_{sc} - #phi_{tr}, prop from vertex, in positive endcap",
323  dphimatchmin,
324  dphimatchmax,
325  "#phi_{sc} - #phi_{tr} (rad)");
327  "dPhiSc_propVtx_endcapsNeg",
328  "ele #phi_{sc} - #phi_{tr}, prop from vertex, in negative endcap",
330  dphimatchmin,
331  dphimatchmax,
332  "#phi_{sc} - #phi_{tr} (rad)");
333  py_dPhiSc_propVtxVsPhi = bookP1(iBooker,
334  "dPhiSc_propVtxVsPhi",
335  "ele #phi_{sc} - #phi_{tr}, prop from vertex vs #phi",
336  nbinphi2D,
337  phimin,
338  phimax,
339  dphimatchmin,
340  dphimatchmax,
341  "#phi (rad)",
342  "<#phi_{sc} - #phi_{tr}> (rad)");
344  "dPhiEleCl_propOut_barrel",
345  "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in barrel",
347  dphimatchmin,
348  dphimatchmax,
349  "#phi_{elecl} - #phi_{tr} (rad)");
351  "dPhiEleCl_propOut_endcapsPos",
352  "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in positive endcap",
354  dphimatchmin,
355  dphimatchmax,
356  "#phi_{elecl} - #phi_{tr} (rad)");
358  "dPhiEleCl_propOut_endcapsNeg",
359  "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in negative endcap",
361  dphimatchmin,
362  dphimatchmax,
363  "#phi_{elecl} - #phi_{tr} (rad)");
364  h1_Hoe_barrel = bookH1(iBooker,
365  "Hoe_barrel",
366  "ele hadronic energy / em energy, in barrel",
367  nbinhoe,
368  hoemin,
369  hoemax,
370  "H/E",
371  "Events",
372  "ELE_LOGY E1 P");
373  h1_Hoe_endcaps = bookH1(iBooker,
374  "Hoe_endcaps",
375  "ele hadronic energy / em energy, in endcaps",
376  nbinhoe,
377  hoemin,
378  hoemax,
379  "H/E",
380  "Events",
381  "ELE_LOGY E1 P");
382  py_HoeVsPhi = bookP1(iBooker,
383  "HoeVsPhi",
384  "ele hadronic energy / em energy vs #phi",
385  nbinphi2D,
386  phimin,
387  phimax,
388  hoemin,
389  hoemax,
390  "#phi (rad)",
391  "<H/E>",
392  "E1 P");
394  bookH1(iBooker, "sclSigEtaEta_barrel", "ele sigma eta eta in barrel", 100, 0., 0.05, "sietaieta");
396  bookH1(iBooker, "sclSigEtaEta_endcaps", "ele sigma eta eta in endcaps", 100, 0., 0.05, "sietaieta");
398  bookH1(iBooker, "sigIEtaIEta5x5_barrel", "ele sigma ieta ieta 5x5 in barrel", 100, 0., 0.05, "sietaieta5x5");
400  bookH1(iBooker, "sigIEtaIEta5x5_endcaps", "ele sigma ieta ieta 5x5 in endcaps", 100, 0., 0.05, "sietaieta5x5");
401 
402  // fbrem
403  h1_fbrem = bookH1(iBooker, "fbrem", "ele brem fraction", 100, 0., 1., "P_{in} - P_{out} / P_{in}");
404  py_fbremVsEta = bookP1(iBooker,
405  "fbremVsEta",
406  "ele brem fraction vs #eta",
407  nbineta2D,
408  etamin,
409  etamax,
410  0.,
411  1.,
412  "#eta",
413  "<P_{in} - P_{out} / P_{in}>");
414  py_fbremVsPhi = bookP1(iBooker,
415  "fbremVsPhi",
416  "ele brem fraction vs #phi",
417  nbinphi2D,
418  phimin,
419  phimax,
420  0.,
421  1.,
422  "#phi (rad)",
423  "<P_{in} - P_{out} / P_{in}>");
424  h1_classes = bookH1(iBooker, "classes", "ele electron classes", 10, 0.0, 10.);
425 
426  // pflow
427  h1_mva = bookH1(iBooker, "mva", "ele identification mva", 100, -1., 1., "mva");
428  h1_provenance = bookH1(iBooker, "provenance", "ele provenance", 5, -2., 3., "provenance");
429 
430  // isolation
432  iBooker, "tkSumPt_dr03", "tk isolation sum, dR=0.3", 100, 0.0, 20., "TkIsoSum (GeV/c)", "Events", "ELE_LOGY E1 P");
434  "ecalRecHitSumEt_dr03",
435  "ecal isolation sum, dR=0.3",
436  100,
437  0.0,
438  20.,
439  "EcalIsoSum (GeV)",
440  "Events",
441  "ELE_LOGY E1 P");
442  h1_hcalTowerSumEt_dr03 = bookH1(iBooker,
443  "hcalTowerSumEt_dr03",
444  "hcal isolation sum, dR=0.3",
445  100,
446  0.0,
447  20.,
448  "HcalIsoSum (GeV)",
449  "Events",
450  "ELE_LOGY E1 P");
451 
452  // pf isolation
453  h1_PFch_dr03 = bookH1(iBooker,
454  "PFch_dr03",
455  "Charged PF candidate sum, dR=0.3",
456  100,
457  0.0,
458  20.,
459  "PF charged (GeV/c)",
460  "Events",
461  "ELE_LOGY E1 P");
462  h1_PFem_dr03 = bookH1(iBooker,
463  "PFem_dr03",
464  "Neutral EM PF candidate sum, dR=0.3",
465  100,
466  0.0,
467  20.,
468  "PF neutral EM (GeV)",
469  "Events",
470  "ELE_LOGY E1 P");
471  h1_PFnh_dr03 = bookH1(iBooker,
472  "PFnh_dr03",
473  "Neutral Had PF candidate sum, dR=0.3",
474  100,
475  0.0,
476  20.,
477  "PF neutral Had (GeV)",
478  "Events",
479  "ELE_LOGY E1 P");
480 
481  // di-electron mass
482  setBookIndex(200);
483  h1_mee = bookH1(iBooker, "mee", "ele pairs invariant mass", nbinmee, meemin, meemax, "m_{ee} (GeV/c^{2})");
484  h1_mee_os = bookH1(iBooker,
485  "mee_os",
486  "ele pairs invariant mass, opposite sign",
487  nbinmee,
488  meemin,
489  meemax,
490  "m_{e^{+}e^{-}} (GeV/c^{2})");
491  h1_mee_os_bb = bookH1(iBooker,
492  "mee_os_bb",
493  "ele pairs invariant mass, opposite sign, barrel-barrel",
494  nbinmee,
495  meemin,
496  meemax,
497  "m_{e^{+}e^{-}} (GeV/c^{2})");
498  h1_mee_os_ee = bookH1(iBooker,
499  "mee_os_ee",
500  "ele pairs invariant mass, opposite sign, endcap-endcap",
501  nbinmee,
502  meemin,
503  meemax,
504  "m_{e^{+}e^{-}} (GeV/c^{2})");
505  h1_mee_os_eb = bookH1(iBooker,
506  "mee_os_eb",
507  "ele pairs invariant mass, opposite sign, barrel-endcap",
508  nbinmee,
509  meemin,
510  meemax,
511  "m_{e^{+}e^{-}} (GeV/c^{2})");
512 
513  //===========================
514  // histos for matching and matched matched objects
515  //===========================
516 
517  // matching object
518  std::string matchingObjectType;
519  Labels l;
520  labelsForToken(matchingObjectCollection_, l);
521  if (std::string::npos != std::string(l.module).find("SuperCluster", 0)) {
522  matchingObjectType = "SC";
523  }
524  if (matchingObjectType.empty()) {
525  edm::LogError("ElectronMcFakeValidator::beginJob") << "Unknown matching object type !";
526  } else {
527  edm::LogInfo("ElectronMcFakeValidator::beginJob") << "Matching object type: " << matchingObjectType;
528  }
529 
530  // matching object distributions
532  iBooker, "matchingObject_Eta", matchingObjectType + " #eta", nbineta, etamin, etamax, "#eta_{SC}");
533 
535  iBooker, "matchingObject_Pt", matchingObjectType + " pt", nbinpteff, 5., ptmax, "pt_{SC} (GeV/c)");
537  iBooker, "matchingObject_Phi", matchingObjectType + " #phi", nbinphi, phimin, phimax, "#phi (rad)");
538 
540  iBooker, "matchedObject_Eta", "Efficiency vs matching SC #eta", nbineta, etamin, etamax, "#eta_{SC}");
542  iBooker, "matchedObject_Pt", "Efficiency vs matching SC E_{T}", nbinpteff, 5., ptmax, "pt_{SC} (GeV/c)");
544  iBooker, "matchedObject_Phi", "Efficiency vs matching SC #phi", nbinphi, phimin, phimax, "#phi (rad)");
545 
546 }
547 
549  nEvents_++;
550 
554  iEvent.getByToken(matchingObjectCollection_, recoClusters);
556  iEvent.getByToken(trackCollection_, tracks);
558  iEvent.getByToken(gsftrackCollection_, gsfTracks);
560  iEvent.getByToken(vertexCollection_, vertices);
561  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
562  iEvent.getByToken(beamSpotTag_, recoBeamSpotHandle);
563  const BeamSpot bs = *recoBeamSpotHandle;
564 
565  edm::EventNumber_t ievt = iEvent.id().event();
566  edm::RunNumber_t irun = iEvent.id().run();
567  edm::LuminosityBlockNumber_t ils = iEvent.luminosityBlock();
568 
569  edm::LogInfo("ElectronAnalyzer::analyze") << "Treating " << gsfElectrons.product()->size() << " electrons"
570  << " from event " << ievt << " in run " << irun << " and lumiblock " << ils;
571  //h1_num_->Fill((*gsfElectrons).size()) ;
572 
573  // selected rec electrons
574  reco::GsfElectronCollection::const_iterator gsfIter;
575  for (gsfIter = gsfElectrons->begin(); gsfIter != gsfElectrons->end(); gsfIter++) {
576  // vertex TIP
577  double vertexTIP = (gsfIter->vertex().x() - bs.position().x()) * (gsfIter->vertex().x() - bs.position().x()) +
578  (gsfIter->vertex().y() - bs.position().y()) * (gsfIter->vertex().y() - bs.position().y());
579  vertexTIP = sqrt(vertexTIP);
580 
581  // select electrons
582  if (!selected(gsfIter, vertexTIP))
583  continue;
584 
585  // invariant mass of 2 selected electrons
586  reco::GsfElectronCollection::const_iterator gsfIter2;
587  for (gsfIter2 = gsfIter + 1; gsfIter2 != gsfElectrons->end(); gsfIter2++) {
588  if (!selected(gsfIter2, vertexTIP))
589  continue;
590  float invMass = computeInvMass(*gsfIter, *gsfIter2);
591  h1_mee->Fill(invMass);
592  if (((gsfIter->charge()) * (gsfIter2->charge())) < 0.) {
593  h1_mee_os->Fill(invMass);
594  if (gsfIter->isEB() && gsfIter2->isEB())
595  h1_mee_os_bb->Fill(invMass);
596  else if (gsfIter->isEE() && gsfIter2->isEE())
597  h1_mee_os_ee->Fill(invMass);
598  else
599  h1_mee_os_eb->Fill(invMass);
600  }
601  }
602 
603  // basic quantities
604  if (gsfIter->isEB())
605  h1_vertexPt_barrel->Fill(gsfIter->pt());
606  if (gsfIter->isEE())
607  h1_vertexPt_endcaps->Fill(gsfIter->pt());
608  h1_vertexEta->Fill(gsfIter->eta());
609  h2_vertexEtaVsPhi->Fill(gsfIter->eta(), gsfIter->phi());
610  h2_vertexXvsY->Fill(gsfIter->vertex().x(), gsfIter->vertex().y());
611  h1_vertexZ->Fill(gsfIter->vertex().z());
612 
613  // supercluster related distributions
614  reco::SuperClusterRef sclRef = gsfIter->superCluster();
615  // ALREADY DONE IN GSF ELECTRON CORE
616  double R = TMath::Sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y() + sclRef->z() * sclRef->z());
617  double Rt = TMath::Sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y());
618  h1_sclEt->Fill(sclRef->energy() * (Rt / R));
619 
620  // track related distributions
621  if (!readAOD_) { // track extra does not exist in AOD
622  h1_foundHits->Fill(gsfIter->gsfTrack()->numberOfValidHits());
623  py_foundHitsVsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits());
624  py_foundHitsVsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits());
625  h1_lostHits->Fill(gsfIter->gsfTrack()->numberOfLostHits());
626  py_lostHitsVsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits());
627  py_lostHitsVsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits());
628  h1_chi2->Fill(gsfIter->gsfTrack()->normalizedChi2());
629  py_chi2VsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2());
630  py_chi2VsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2());
631  }
632 
633  // match distributions
634  if (gsfIter->isEB()) {
635  h1_Eop_barrel->Fill(gsfIter->eSuperClusterOverP());
636  h1_EeleOPout_barrel->Fill(gsfIter->eEleClusterOverPout());
637  h1_dEtaSc_propVtx_barrel->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
638  h1_dEtaEleCl_propOut_barrel->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
639  h1_dPhiSc_propVtx_barrel->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
640  h1_dPhiEleCl_propOut_barrel->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
641  h1_Hoe_barrel->Fill(gsfIter->hadronicOverEm());
642  h1_sclSigEtaEta_barrel->Fill(gsfIter->scSigmaEtaEta());
643  h1_sigIEtaIEta5x5_barrel->Fill(gsfIter->full5x5_sigmaIetaIeta());
644  }
645  if (gsfIter->isEE()) {
646  h1_Eop_endcaps->Fill(gsfIter->eSuperClusterOverP());
647  h1_EeleOPout_endcaps->Fill(gsfIter->eEleClusterOverPout());
648  if (gsfIter->eta() > 0) {
649  h1_dEtaSc_propVtx_endcapsPos->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
650  h1_dEtaEleCl_propOut_endcapsPos->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
651  h1_dPhiSc_propVtx_endcapsPos->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
652  h1_dPhiEleCl_propOut_endcapsPos->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
653  } else {
654  h1_dEtaSc_propVtx_endcapsNeg->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
655  h1_dEtaEleCl_propOut_endcapsNeg->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
656  h1_dPhiSc_propVtx_endcapsNeg->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
657  h1_dPhiEleCl_propOut_endcapsNeg->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
658  }
659  h1_Hoe_endcaps->Fill(gsfIter->hadronicOverEm());
660  h1_sclSigEtaEta_endcaps->Fill(gsfIter->scSigmaEtaEta());
661  h1_sigIEtaIEta5x5_endcaps->Fill(gsfIter->full5x5_sigmaIetaIeta());
662  }
663  py_EopVsPhi->Fill(gsfIter->phi(), gsfIter->eSuperClusterOverP());
664  py_dEtaSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaEtaSuperClusterTrackAtVtx());
665  py_dPhiSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaPhiSuperClusterTrackAtVtx());
666  py_HoeVsPhi->Fill(gsfIter->phi(), gsfIter->hadronicOverEm());
667 
668  // fbrem, classes
669  h1_fbrem->Fill(gsfIter->fbrem());
670  py_fbremVsEta->Fill(gsfIter->eta(), gsfIter->fbrem());
671  py_fbremVsPhi->Fill(gsfIter->phi(), gsfIter->fbrem());
672  int eleClass = gsfIter->classification();
673  if (gsfIter->isEE())
674  eleClass += 5;
675  h1_classes->Fill(eleClass);
676 
677  // pflow
678  h1_mva->Fill(gsfIter->mva_e_pi());
679  if (gsfIter->ecalDrivenSeed())
680  h1_provenance->Fill(1.);
681  if (gsfIter->trackerDrivenSeed())
682  h1_provenance->Fill(-1.);
683  if (gsfIter->trackerDrivenSeed() || gsfIter->ecalDrivenSeed())
684  h1_provenance->Fill(0.);
685  if (gsfIter->trackerDrivenSeed() && !gsfIter->ecalDrivenSeed())
686  h1_provenance->Fill(-2.);
687  if (!gsfIter->trackerDrivenSeed() && gsfIter->ecalDrivenSeed())
688  h1_provenance->Fill(2.);
689 
690  // isolation
691  h1_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
692  h1_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
693  h1_hcalTowerSumEt_dr03->Fill(gsfIter->dr03HcalTowerSumEt());
694 
695  // PF isolation
696  GsfElectron::PflowIsolationVariables pfIso = gsfIter->pfIsolationVariables();
698  h1_PFem_dr03->Fill(pfIso.sumPhotonEt);
700  }
701 
702  // association matching object-reco electrons
703  int matchingObjectNum = 0;
704  reco::SuperClusterCollection::const_iterator moIter;
705  for (moIter = recoClusters->begin(); moIter != recoClusters->end(); moIter++) {
706  // // number of matching objects
707  matchingObjectNum++;
708 
709  if (moIter->energy() / cosh(moIter->eta()) > maxPtMatchingObject_ ||
710  std::abs(moIter->eta()) > maxAbsEtaMatchingObject_) {
711  continue;
712  }
713 
714  // // suppress the endcaps
715  h1_matchingObject_Eta->Fill(moIter->eta());
716  h1_matchingObject_Pt->Fill(moIter->energy() / cosh(moIter->eta()));
717  h1_matchingObject_Phi->Fill(moIter->phi());
718 
719  bool okGsfFound = false;
720  double gsfOkRatio = 999999999.;
721  reco::GsfElectron bestGsfElectron;
722  reco::GsfElectronCollection::const_iterator gsfIter;
723  for (gsfIter = gsfElectrons->begin(); gsfIter != gsfElectrons->end(); gsfIter++) {
724  double vertexTIP = (gsfIter->vertex().x() - bs.position().x()) * (gsfIter->vertex().x() - bs.position().x()) +
725  (gsfIter->vertex().y() - bs.position().y()) * (gsfIter->vertex().y() - bs.position().y());
726  vertexTIP = sqrt(vertexTIP);
727 
728  // select electrons
729  if (!selected(gsfIter, vertexTIP))
730  continue;
731 
732  // matching with a cone in eta phi
733  if (matchingCondition_ == "Cone") {
734  double dphi = gsfIter->phi() - moIter->phi();
735  if (std::abs(dphi) > CLHEP::pi) {
736  dphi = dphi < 0 ? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi;
737  }
738  double deltaR = sqrt(pow((moIter->eta() - gsfIter->eta()), 2) + pow(dphi, 2));
739  if (deltaR < deltaR_) {
740  double tmpGsfRatio = gsfIter->p() / moIter->energy();
741  if (std::abs(tmpGsfRatio - 1) < std::abs(gsfOkRatio - 1)) {
742  gsfOkRatio = tmpGsfRatio;
743  bestGsfElectron = *gsfIter;
744  okGsfFound = true;
745  }
746  }
747  }
748  } // loop over rec ele to look for the best one
749  if (okGsfFound) {
750  // generated distributions for matched electrons
751  h1_matchedObject_Eta->Fill(moIter->eta());
752  h1_matchedObject_Pt->Fill(moIter->energy() / cosh(moIter->eta()));
753  h1_matchedObject_Phi->Fill(moIter->phi());
754 
755  //classes
756  }
757 
758  } // loop overmatching object
759 }
760 
762  math::XYZTLorentzVector p12 = e1.p4() + e2.p4();
763  float mee2 = p12.Dot(p12);
764  float invMass = mee2 > 0. ? sqrt(mee2) : 0;
765  return invMass;
766 }
767 
768 bool ElectronAnalyzer::selected(const reco::GsfElectronCollection::const_iterator& gsfIter, double vertexTIP) {
769  if ((Selection_ > 0) && generalCut(gsfIter))
770  return false;
771  if ((Selection_ >= 1) && etCut(gsfIter))
772  return false;
773  if ((Selection_ >= 2) && isolationCut(gsfIter, vertexTIP))
774  return false;
775  if ((Selection_ >= 3) && idCut(gsfIter))
776  return false;
777  return true;
778 }
779 
780 bool ElectronAnalyzer::generalCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
781  if (std::abs(gsfIter->eta()) > maxAbsEta_)
782  return true;
783  if (gsfIter->pt() < minPt_)
784  return true;
785 
786  if (gsfIter->isEB() && isEE_)
787  return true;
788  if (gsfIter->isEE() && isEB_)
789  return true;
790  if (gsfIter->isEBEEGap() && isNotEBEEGap_)
791  return true;
792 
793  if (gsfIter->ecalDrivenSeed() && isTrackerDriven_)
794  return true;
795  if (gsfIter->trackerDrivenSeed() && isEcalDriven_)
796  return true;
797 
798  return false;
799 }
800 
801 bool ElectronAnalyzer::etCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
802  if (gsfIter->superCluster()->energy() / cosh(gsfIter->superCluster()->eta()) < minEt_)
803  return true;
804 
805  return false;
806 }
807 
808 bool ElectronAnalyzer::isolationCut(const reco::GsfElectronCollection::const_iterator& gsfIter, double vertexTIP) {
809  if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_)
810  return true;
811  if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_)
812  return true;
813 
814  if (gsfIter->dr03TkSumPt() > tkIso03Max_)
815  return true;
816  if (gsfIter->isEB() && gsfIter->dr03HcalTowerSumEt(1) > hcalIso03Depth1MaxBarrel_)
817  return true;
818  if (gsfIter->isEE() && gsfIter->dr03HcalTowerSumEt(1) > hcalIso03Depth1MaxEndcaps_)
819  return true;
820  if (gsfIter->isEE() && gsfIter->dr03HcalTowerSumEt(2) > hcalIso03Depth2MaxEndcaps_)
821  return true;
822  if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_)
823  return true;
824  if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_)
825  return true;
826 
827  return false;
828 }
829 
830 bool ElectronAnalyzer::idCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
831  if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_)
832  return true;
833  if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_)
834  return true;
835  if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_)
836  return true;
837  if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_)
838  return true;
839  if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_)
840  return true;
841  if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_)
842  return true;
843  if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_)
844  return true;
845  if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_)
846  return true;
847  if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_)
848  return true;
849  if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_)
850  return true;
851  if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_)
852  return true;
853  if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_)
854  return true;
855  if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_)
856  return true;
857  if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_)
858  return true;
859  if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_)
860  return true;
861  if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_)
862  return true;
863  if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_)
864  return true;
865  if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_)
866  return true;
867 
868  return false;
869 }
MonitorElement * h1_foundHits
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
MonitorElement * h1_dEtaSc_propVtx_endcapsPos
double hadronicOverEmMaxEndcaps_
MonitorElement * h1_mee_os
bool selected(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)
MonitorElement * h1_dPhiSc_propVtx_barrel
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
unsigned int nEvents_
MonitorElement * h1_vertexPt_barrel
MonitorElement * h1_PFch_dr03
MonitorElement * py_lostHitsVsEta
MonitorElement * h1_mee_os_bb
MonitorElement * h1_sclSigEtaEta_barrel
MonitorElement * py_chi2VsEta
edm::EDGetTokenT< reco::SuperClusterCollection > matchingObjectCollection_
MonitorElement * h1_vertexEta
MonitorElement * py_chi2VsPhi
MonitorElement * h1_Eop_endcaps
unsigned long long EventNumber_t
MonitorElement * h1_ecalRecHitSumEt_dr03
MonitorElement * h1_hcalTowerSumEt_dr03
MonitorElement * h1_dPhiEleCl_propOut_endcapsNeg
MonitorElement * h1_matchingObject_Eta
MonitorElement * h1_Hoe_barrel
edm::InputTag triggerResults_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * py_HoeVsPhi
MonitorElement * h1_matchedObject_Pt
double sigIetaIetaMinBarrel_
Log< level::Error, false > LogError
assert(be >=bs)
unsigned int LuminosityBlockNumber_t
MonitorElement * h1_matchedObject_Phi
MonitorElement * h1_PFem_dr03
MonitorElement * h1_mee_os_ee
const Double_t pi
void Fill(long long x)
MonitorElement * h1_tkSumPt_dr03
MonitorElement * h1_dEtaEleCl_propOut_endcapsPos
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
MonitorElement * bookH1(DQMStore::IBooker &, const std::string &name, const std::string &title, int nchX, double lowX, double highX, const std::string &titleX="", const std::string &titleY="Events", Option_t *option="E1 P")
double sigIetaIetaMaxBarrel_
int iEvent
Definition: GenABIO.cc:224
MonitorElement * h2_vertexXvsY
MonitorElement * h1_dPhiSc_propVtx_endcapsPos
MonitorElement * py_fbremVsEta
MonitorElement * h1_provenance
MonitorElement * h1_dEtaEleCl_propOut_barrel
MonitorElement * py_EopVsPhi
MonitorElement * h1_PFnh_dr03
MonitorElement * h1_Eop_barrel
T sqrt(T t)
Definition: SSEVec.h:19
MonitorElement * bookP1(DQMStore::IBooker &, const std::string &name, const std::string &title, int nchX, double lowX, double highX, double lowY, double highY, const std::string &titleX="", const std::string &titleY="", Option_t *option="E1 P")
float sumPhotonEt
sum pt of PF photons // old float photonIso ;
Definition: GsfElectron.h:665
double sigIetaIetaMinEndcaps_
MonitorElement * py_dEtaSc_propVtxVsPhi
double sigIetaIetaMaxEndcaps_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::string matchingCondition_
float sumNeutralHadronEt
sum pt of neutral hadrons // old float neutralHadronIso ;
Definition: GsfElectron.h:664
MonitorElement * h1_dPhiEleCl_propOut_endcapsPos
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:217
double hcalIso03Depth1MaxBarrel_
MonitorElement * h1_Hoe_endcaps
MonitorElement * h1_dEtaEleCl_propOut_endcapsNeg
MonitorElement * h1_dPhiSc_propVtx_endcapsNeg
ElectronAnalyzer(const edm::ParameterSet &conf)
~ElectronAnalyzer() override
edm::EDGetTokenT< reco::GsfTrackCollection > gsftrackCollection_
MonitorElement * h1_vertexPt_endcaps
MonitorElement * py_lostHitsVsPhi
MonitorElement * h1_vertexZ
Log< level::Info, false > LogInfo
MonitorElement * py_dPhiSc_propVtxVsPhi
double hcalIso03Depth1MaxEndcaps_
auto const & tracks
cannot be loose
MonitorElement * py_fbremVsPhi
MonitorElement * h1_dEtaSc_propVtx_endcapsNeg
MonitorElement * py_foundHitsVsPhi
bool etCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
MonitorElement * h1_fbrem
edm::EDGetTokenT< reco::TrackCollection > trackCollection_
MonitorElement * h1_chi2
double maxAbsEtaMatchingObject_
MonitorElement * h1_lostHits
MonitorElement * h2_vertexEtaVsPhi
MonitorElement * h1_EeleOPout_endcaps
MonitorElement * h1_mee
edm::EDGetTokenT< reco::GsfElectronCollection > electronCollection_
MonitorElement * h1_classes
MonitorElement * h1_sclEt
MonitorElement * h1_sigIEtaIEta5x5_barrel
MonitorElement * h1_EeleOPout_barrel
std::string outputInternalPath_
bool generalCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
MonitorElement * h1_dEtaSc_propVtx_barrel
float computeInvMass(const reco::GsfElectron &e1, const reco::GsfElectron &e2)
fixed size matrix
MonitorElement * h1_matchingObject_Phi
MonitorElement * bookH2(DQMStore::IBooker &, const std::string &name, const std::string &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const std::string &titleX="", const std::string &titleY="", Option_t *option="COLZ")
MonitorElement * bookH1withSumw2(DQMStore::IBooker &, const std::string &name, const std::string &title, int nchX, double lowX, double highX, const std::string &titleX="", const std::string &titleY="Events", Option_t *option="E1 P")
MonitorElement * h1_mee_os_eb
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag_
MonitorElement * h1_sigIEtaIEta5x5_endcaps
MonitorElement * h1_sclSigEtaEta_endcaps
unsigned int RunNumber_t
MonitorElement * py_foundHitsVsEta
edm::EDGetTokenT< reco::VertexCollection > vertexCollection_
bool idCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
double hcalIso03Depth2MaxEndcaps_
float sumChargedHadronPt
sum-pt of charged Hadron // old float chargedHadronIso ;
Definition: GsfElectron.h:663
void analyze(const edm::Event &e, const edm::EventSetup &c) override
double hadronicOverEmMaxBarrel_
MonitorElement * h1_matchedObject_Eta
MonitorElement * h1_matchingObject_Pt
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
MonitorElement * h1_dPhiEleCl_propOut_barrel
MonitorElement * h1_mva
Definition: Run.h:45
bool isolationCut(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)