CMS 3D CMS Logo

CutBasedElectronID.cc
Go to the documentation of this file.
5 
6 #include <algorithm>
7 
9  verticesCollection_ = iC.consumes<std::vector<reco::Vertex> >(conf.getParameter<edm::InputTag>("verticesCollection"));
10 }
11 
13  // Get all the parameters
14  //baseSetup(conf);
15 
16  type_ = conf.getParameter<std::string>("electronIDType");
17  quality_ = conf.getParameter<std::string>("electronQuality");
18  version_ = conf.getParameter<std::string>("electronVersion");
19  //verticesCollection_ = conf.getParameter<edm::InputTag>("verticesCollection");
20 
21  if (type_ == "classbased" and (version_ == "V06")) {
22  newCategories_ = conf.getParameter<bool>("additionalCategories");
23  }
24 
25  if (type_ == "classbased" and (version_ == "V03" or version_ == "V04" or version_ == "V05" or version_.empty())) {
26  wantBinning_ = conf.getParameter<bool>("etBinning");
27  newCategories_ = conf.getParameter<bool>("additionalCategories");
28  }
29 
30  if (type_ == "robust" || type_ == "classbased") {
31  std::string stringCut = type_ + quality_ + "EleIDCuts" + version_;
32  cuts_ = conf.getParameter<edm::ParameterSet>(stringCut);
33  } else {
34  throw cms::Exception("Configuration")
35  << "Invalid electronType parameter in CutBasedElectronID: must be robust or classbased\n";
36  }
37 }
38 
40  if (type_ == "classbased")
41  return cicSelection(electron, e, es);
42  else if (type_ == "robust")
43  return robustSelection(electron, e, es);
44 
45  return 0;
46 }
47 
49  double eta = fabs(electron->superCluster()->eta());
50  double eOverP = electron->eSuperClusterOverP();
51  double fBrem = electron->fbrem();
52 
53  int cat = -1;
54  if (version_ == "V00" || version_ == "V01") {
55  if ((electron->isEB() && fBrem < 0.06) || (electron->isEE() && fBrem < 0.1))
56  cat = 1;
57  else if (eOverP < 1.2 && eOverP > 0.8)
58  cat = 0;
59  else
60  cat = 2;
61 
62  return cat;
63 
64  } else if (version_ == "V02") {
65  if (electron->isEB()) { // BARREL
66  if (fBrem < 0.12)
67  cat = 1;
68  else if (eOverP < 1.2 && eOverP > 0.9)
69  cat = 0;
70  else
71  cat = 2;
72  } else { // ENDCAP
73  if (fBrem < 0.2)
74  cat = 1;
75  else if (eOverP < 1.22 && eOverP > 0.82)
76  cat = 0;
77  else
78  cat = 2;
79  }
80 
81  return cat;
82 
83  } else {
84  if (electron->isEB()) {
85  if ((fBrem >= 0.12) and (eOverP > 0.9) and (eOverP < 1.2))
86  cat = 0;
87  else if (((eta > .445 and eta < .45) or (eta > .79 and eta < .81) or (eta > 1.137 and eta < 1.157) or
88  (eta > 1.47285 and eta < 1.4744)) and
90  cat = 6;
91  else if (electron->trackerDrivenSeed() and !electron->ecalDrivenSeed() and newCategories_)
92  cat = 8;
93  else if (fBrem < 0.12)
94  cat = 1;
95  else
96  cat = 2;
97  } else {
98  if ((fBrem >= 0.2) and (eOverP > 0.82) and (eOverP < 1.22))
99  cat = 3;
100  else if (eta > 1.5 and eta < 1.58 and newCategories_)
101  cat = 7;
102  else if (electron->trackerDrivenSeed() and !electron->ecalDrivenSeed() and newCategories_)
103  cat = 8;
104  else if (fBrem < 0.2)
105  cat = 4;
106  else
107  cat = 5;
108  }
109 
110  return cat;
111  }
112 
113  return -1;
114 }
115 
117  const edm::Event& e,
118  const edm::EventSetup& es) {
119  double scTheta = (2 * atan(exp(-electron->superCluster()->eta())));
120  double scEt = electron->superCluster()->energy() * sin(scTheta);
121 
122  double eta = fabs(electron->superCluster()->eta());
123 
124  double eOverP = electron->eSuperClusterOverP();
125  double eSeedOverPin = electron->eSeedClusterOverP();
126  double fBrem = electron->fbrem();
127  double hOverE = electron->hadronicOverEm();
128  double sigmaee = electron->sigmaIetaIeta(); //sqrt(vLocCov[0]);
129  double deltaPhiIn = electron->deltaPhiSuperClusterTrackAtVtx();
130  double deltaEtaIn = electron->deltaEtaSuperClusterTrackAtVtx();
131 
132  double ip = 0;
133  int mishits = electron->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
134  double tkIso = electron->dr03TkSumPt();
135  double ecalIso = electron->dr04EcalRecHitSumEt();
136  double hcalIso = electron->dr04HcalTowerSumEt();
137 
138  if (version_ == "V00") {
139  sigmaee = electron->sigmaEtaEta(); //sqrt(vCov[0]);
140  if (electron->isEE())
141  sigmaee = sigmaee - 0.02 * (fabs(eta) - 2.3); //correct sigmaetaeta dependence on eta in endcap
142  }
143 
144  if (version_ != "V01" or version_ != "V00") {
147  if (!vtxH->empty()) {
148  reco::VertexRef vtx(vtxH, 0);
149  ip = fabs(electron->gsfTrack()->dxy(math::XYZPoint(vtx->x(), vtx->y(), vtx->z())));
150  } else
151  ip = fabs(electron->gsfTrack()->dxy());
152 
153  if (electron->isEB()) {
154  sigmaee = electron->sigmaIetaIeta(); //sqrt(vCov[0]);
155  }
156  }
157 
158  std::vector<double> cut;
159 
160  int cat = classify(electron);
161  int eb;
162 
163  if (electron->isEB())
164  eb = 0;
165  else
166  eb = 1;
167 
168  // LOOSE and TIGHT Selections
169  if (type_ == "classbased" && (version_ == "V01" || version_ == "V00")) {
170  if ((eOverP < 0.8) && (fBrem < 0.2))
171  return 0.;
172 
173  cut = cuts_.getParameter<std::vector<double> >("hOverE");
174  if (hOverE > cut[cat + 4 * eb])
175  return 0.;
176 
177  cut = cuts_.getParameter<std::vector<double> >("sigmaEtaEta");
178  if (sigmaee > cut[cat + 4 * eb])
179  return 0.;
180 
181  cut = cuts_.getParameter<std::vector<double> >("deltaPhiIn");
182  if (eOverP < 1.5) {
183  if (fabs(deltaPhiIn) > cut[cat + 4 * eb])
184  return 0.;
185  } else {
186  if (fabs(deltaPhiIn) > cut[3 + 4 * eb])
187  return 0.;
188  }
189 
190  cut = cuts_.getParameter<std::vector<double> >("deltaEtaIn");
191  if (fabs(deltaEtaIn) > cut[cat + 4 * eb])
192  return 0.;
193 
194  cut = cuts_.getParameter<std::vector<double> >("eSeedOverPin");
195  if (eSeedOverPin < cut[cat + 4 * eb])
196  return 0.;
197 
198  if (quality_ == "tight")
199  if (eOverP < 0.9 * (1 - fBrem))
200  return 0.;
201 
202  return 1.;
203  }
204 
205  if (type_ == "classbased" and version_ == "V02") {
206  double result = 0.;
207 
208  int bin = 0;
209 
210  if (scEt < 20.)
211  bin = 2;
212  else if (scEt > 30.)
213  bin = 0;
214  else
215  bin = 1;
216 
217  if (fBrem > 0)
218  eSeedOverPin = eSeedOverPin + fBrem;
219 
220  if (bin != 2) {
221  tkIso = tkIso * pow(40. / scEt, 2);
222  ecalIso = ecalIso * pow(40. / scEt, 2);
223  hcalIso = hcalIso * pow(40. / scEt, 2);
224  }
225 
226  std::vector<double> cutTk = cuts_.getParameter<std::vector<double> >("cutisotk");
227  std::vector<double> cutEcal = cuts_.getParameter<std::vector<double> >("cutisoecal");
228  std::vector<double> cutHcal = cuts_.getParameter<std::vector<double> >("cutisohcal");
229  if ((tkIso > cutTk[cat + 3 * eb + bin * 6]) || (ecalIso > cutEcal[cat + 3 * eb + bin * 6]) ||
230  (hcalIso > cutHcal[cat + 3 * eb + bin * 6]))
231  result = 0.;
232  else
233  result = 2.;
234 
235  if (fBrem > -2) {
236  std::vector<double> cuthoe = cuts_.getParameter<std::vector<double> >("cuthoe");
237  std::vector<double> cutsee = cuts_.getParameter<std::vector<double> >("cutsee");
238  std::vector<double> cutdphi = cuts_.getParameter<std::vector<double> >("cutdphiin");
239  std::vector<double> cutdeta = cuts_.getParameter<std::vector<double> >("cutdetain");
240  std::vector<double> cuteopin = cuts_.getParameter<std::vector<double> >("cuteseedopcor");
241  std::vector<double> cutet = cuts_.getParameter<std::vector<double> >("cutet");
242  std::vector<double> cutip = cuts_.getParameter<std::vector<double> >("cutip");
243  std::vector<double> cutmishits = cuts_.getParameter<std::vector<double> >("cutmishits");
244  if ((hOverE < cuthoe[cat + 3 * eb + bin * 6]) and (sigmaee < cutsee[cat + 3 * eb + bin * 6]) and
245  (fabs(deltaPhiIn) < cutdphi[cat + 3 * eb + bin * 6]) and
246  (fabs(deltaEtaIn) < cutdeta[cat + 3 * eb + bin * 6]) and (eSeedOverPin > cuteopin[cat + 3 * eb + bin * 6]) and
247  (ip < cutip[cat + 3 * eb + bin * 6]) and (mishits < cutmishits[cat + 3 * eb + bin * 6]))
248  result = result + 1.;
249  }
250  return result;
251  }
252 
253  if (version_ == "V03" or version_ == "V04" or version_ == "V05") {
254  double result = 0.;
255 
256  int bin = 0;
257 
258  if (wantBinning_) {
259  if (scEt < 20.)
260  bin = 2;
261  else if (scEt > 30.)
262  bin = 0;
263  else
264  bin = 1;
265  }
266 
267  if (fBrem > 0)
268  eSeedOverPin = eSeedOverPin + fBrem;
269 
270  float iso_sum = tkIso + ecalIso + hcalIso;
271  float iso_sum_corrected = iso_sum * pow(40. / scEt, 2);
272 
273  std::vector<double> cutIsoSum = cuts_.getParameter<std::vector<double> >("cutiso_sum");
274  std::vector<double> cutIsoSumCorr = cuts_.getParameter<std::vector<double> >("cutiso_sumoet");
275  if ((iso_sum < cutIsoSum[cat + bin * 9]) and (iso_sum_corrected < cutIsoSumCorr[cat + bin * 9]))
276  result += 2.;
277 
278  if (fBrem > -2) {
279  std::vector<double> cuthoe = cuts_.getParameter<std::vector<double> >("cuthoe");
280  std::vector<double> cutsee = cuts_.getParameter<std::vector<double> >("cutsee");
281  std::vector<double> cutdphi = cuts_.getParameter<std::vector<double> >("cutdphiin");
282  std::vector<double> cutdeta = cuts_.getParameter<std::vector<double> >("cutdetain");
283  std::vector<double> cuteopin = cuts_.getParameter<std::vector<double> >("cuteseedopcor");
284  std::vector<double> cutet = cuts_.getParameter<std::vector<double> >("cutet");
285 
286  if ((hOverE < cuthoe[cat + bin * 9]) and (sigmaee < cutsee[cat + bin * 9]) and
287  (fabs(deltaPhiIn) < cutdphi[cat + bin * 9]) and (fabs(deltaEtaIn) < cutdeta[cat + bin * 9]) and
288  (eSeedOverPin > cuteopin[cat + bin * 9]) and (scEt > cutet[cat + bin * 9]))
289  result += 1.;
290  }
291 
292  std::vector<double> cutip = cuts_.getParameter<std::vector<double> >("cutip_gsf");
293  if (ip < cutip[cat + bin * 9])
294  result += 8;
295 
296  std::vector<double> cutmishits = cuts_.getParameter<std::vector<double> >("cutfmishits");
297  std::vector<double> cutdcotdist = cuts_.getParameter<std::vector<double> >("cutdcotdist");
298 
299  float dist = (electron->convDist() == -9999. ? 9999 : electron->convDist());
300  float dcot = (electron->convDcot() == -9999. ? 9999 : electron->convDcot());
301 
302  float dcotdistcomb =
303  ((0.04 - std::max(fabs(dist), fabs(dcot))) > 0 ? (0.04 - std::max(fabs(dist), fabs(dcot))) : 0);
304 
305  if ((mishits < cutmishits[cat + bin * 9]) and (dcotdistcomb < cutdcotdist[cat + bin * 9]))
306  result += 4;
307 
308  return result;
309  }
310 
311  if (type_ == "classbased" && (version_ == "V06" || version_.empty())) {
312  std::vector<double> cutIsoSum = cuts_.getParameter<std::vector<double> >("cutiso_sum");
313  std::vector<double> cutIsoSumCorr = cuts_.getParameter<std::vector<double> >("cutiso_sumoet");
314  std::vector<double> cuthoe = cuts_.getParameter<std::vector<double> >("cuthoe");
315  std::vector<double> cutsee = cuts_.getParameter<std::vector<double> >("cutsee");
316  std::vector<double> cutdphi = cuts_.getParameter<std::vector<double> >("cutdphiin");
317  std::vector<double> cutdeta = cuts_.getParameter<std::vector<double> >("cutdetain");
318  std::vector<double> cuteopin = cuts_.getParameter<std::vector<double> >("cuteseedopcor");
319  std::vector<double> cutmishits = cuts_.getParameter<std::vector<double> >("cutfmishits");
320  std::vector<double> cutdcotdist = cuts_.getParameter<std::vector<double> >("cutdcotdist");
321  std::vector<double> cutip = cuts_.getParameter<std::vector<double> >("cutip_gsf");
322  std::vector<double> cutIsoSumCorrl = cuts_.getParameter<std::vector<double> >("cutiso_sumoetl");
323  std::vector<double> cuthoel = cuts_.getParameter<std::vector<double> >("cuthoel");
324  std::vector<double> cutseel = cuts_.getParameter<std::vector<double> >("cutseel");
325  std::vector<double> cutdphil = cuts_.getParameter<std::vector<double> >("cutdphiinl");
326  std::vector<double> cutdetal = cuts_.getParameter<std::vector<double> >("cutdetainl");
327  std::vector<double> cutipl = cuts_.getParameter<std::vector<double> >("cutip_gsfl");
328 
329  int result = 0;
330 
331  const int ncuts = 10;
332  std::vector<bool> cut_results(ncuts, false);
333 
334  float iso_sum = tkIso + ecalIso + hcalIso;
335  float scEta = electron->superCluster()->eta();
336  if (fabs(scEta) > 1.5)
337  iso_sum += (fabs(scEta) - 1.5) * 1.09;
338 
339  float iso_sumoet = iso_sum * (40. / scEt);
340 
341  float eseedopincor = eSeedOverPin + fBrem;
342  if (fBrem < 0)
343  eseedopincor = eSeedOverPin;
344 
345  float dist = (electron->convDist() == -9999. ? 9999 : electron->convDist());
346  float dcot = (electron->convDcot() == -9999. ? 9999 : electron->convDcot());
347 
348  float dcotdistcomb =
349  ((0.04 - std::max(fabs(dist), fabs(dcot))) > 0 ? (0.04 - std::max(fabs(dist), fabs(dcot))) : 0);
350 
351  for (int cut = 0; cut < ncuts; cut++) {
352  switch (cut) {
353  case 0:
354  cut_results[cut] = compute_cut(fabs(deltaEtaIn), scEt, cutdetal[cat], cutdeta[cat]);
355  break;
356  case 1:
357  cut_results[cut] = compute_cut(fabs(deltaPhiIn), scEt, cutdphil[cat], cutdphi[cat]);
358  break;
359  case 2:
360  cut_results[cut] = (eseedopincor > cuteopin[cat]);
361  break;
362  case 3:
363  cut_results[cut] = compute_cut(hOverE, scEt, cuthoel[cat], cuthoe[cat]);
364  break;
365  case 4:
366  cut_results[cut] = compute_cut(sigmaee, scEt, cutseel[cat], cutsee[cat]);
367  break;
368  case 5:
369  cut_results[cut] = compute_cut(iso_sumoet, scEt, cutIsoSumCorrl[cat], cutIsoSumCorr[cat]);
370  break;
371  case 6:
372  cut_results[cut] = (iso_sum < cutIsoSum[cat]);
373  break;
374  case 7:
375  cut_results[cut] = compute_cut(fabs(ip), scEt, cutipl[cat], cutip[cat]);
376  break;
377  case 8:
378  cut_results[cut] = (mishits < cutmishits[cat]);
379  break;
380  case 9:
381  cut_results[cut] = (dcotdistcomb < cutdcotdist[cat]);
382  break;
383  }
384  }
385 
386  // ID part
387  if (cut_results[0] & cut_results[1] & cut_results[2] & cut_results[3] & cut_results[4])
388  result = result + 1;
389 
390  // ISO part
391  if (cut_results[5] & cut_results[6])
392  result = result + 2;
393 
394  // IP part
395  if (cut_results[7])
396  result = result + 8;
397 
398  // Conversion part
399  if (cut_results[8] & cut_results[9])
400  result = result + 4;
401 
402  return result;
403  }
404 
405  return -1.;
406 }
407 
408 bool CutBasedElectronID::compute_cut(double x, double et, double cut_min, double cut_max, bool gtn) {
409  float et_min = 10;
410  float et_max = 40;
411 
412  bool accept = false;
413  float cut = cut_max; // the cut at et=40 GeV
414 
415  if (et < et_max) {
416  cut = cut_min + (1 / et_min - 1 / et) * (cut_max - cut_min) / (1 / et_min - 1 / et_max);
417  }
418 
419  if (et < et_min) {
420  cut = cut_min;
421  }
422 
423  if (gtn) { // useful for e/p cut which is gt
424  accept = (x >= cut);
425  } else {
426  accept = (x <= cut);
427  }
428 
429  //std::cout << x << " " << cut_min << " " << cut << " " << cut_max << " " << et << " " << accept << std::endl;
430  return accept;
431 }
432 
434  const edm::Event& e,
435  const edm::EventSetup& es) {
436  double scTheta = (2 * atan(exp(-electron->superCluster()->eta())));
437  double scEt = electron->superCluster()->energy() * sin(scTheta);
438  double eta = electron->p4().Eta();
439  double eOverP = electron->eSuperClusterOverP();
440  double hOverE = electron->hadronicOverEm();
441  double sigmaee = electron->sigmaIetaIeta();
442  double e25Max = electron->e2x5Max();
443  double e15 = electron->e1x5();
444  double e55 = electron->e5x5();
445  double e25Maxoe55 = e25Max / e55;
446  double e15oe55 = e15 / e55;
447  double deltaPhiIn = electron->deltaPhiSuperClusterTrackAtVtx();
448  double deltaEtaIn = electron->deltaEtaSuperClusterTrackAtVtx();
449 
450  double ip = 0;
451  int mishits = electron->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
452  double tkIso = electron->dr03TkSumPt();
453  double ecalIso = electron->dr04EcalRecHitSumEt();
454  double ecalIsoPed = (electron->isEB()) ? std::max(0., ecalIso - 1.) : ecalIso;
455  double hcalIso = electron->dr04HcalTowerSumEt();
456  double hcalIso1 = electron->dr04HcalDepth1TowerSumEt();
457  double hcalIso2 = electron->dr04HcalDepth2TowerSumEt();
458 
459  if (version_ == "V00") {
460  sigmaee = electron->sigmaEtaEta();
461  if (electron->isEE())
462  sigmaee = sigmaee - 0.02 * (fabs(eta) - 2.3); //correct sigmaetaeta dependence on eta in endcap
463  }
464 
465  if (version_ == "V03" or version_ == "V04") {
466  edm::Handle<reco::BeamSpot> pBeamSpot;
467  // uses the same name for the vertex collection to avoid adding more new names
468  e.getByToken(verticesCollection_, pBeamSpot);
469  if (pBeamSpot.isValid()) {
470  const reco::BeamSpot* bspot = pBeamSpot.product();
471  const math::XYZPoint& bspotPosition = bspot->position();
472  ip = fabs(electron->gsfTrack()->dxy(bspotPosition));
473  } else
474  ip = fabs(electron->gsfTrack()->dxy());
475  }
476 
477  if (version_ == "V04" or version_ == "V05") {
478  ecalIso = electron->dr03EcalRecHitSumEt();
479  ecalIsoPed = (electron->isEB()) ? std::max(0., ecalIso - 1.) : ecalIso;
480  hcalIso = electron->dr03HcalTowerSumEt();
481  hcalIso1 = electron->dr03HcalDepth1TowerSumEt();
482  hcalIso2 = electron->dr03HcalDepth2TowerSumEt();
483  }
484 
485  if (version_ == "V05") {
488  if (!vtxH->empty()) {
489  reco::VertexRef vtx(vtxH, 0);
490  ip = fabs(electron->gsfTrack()->dxy(math::XYZPoint(vtx->x(), vtx->y(), vtx->z())));
491  } else
492  ip = fabs(electron->gsfTrack()->dxy());
493  }
494 
495  // .....................................................................................
496  std::vector<double> cut;
497  // ROBUST Selection
498  if (type_ == "robust") {
499  double result = 0;
500 
501  // hoe, sigmaEtaEta, dPhiIn, dEtaIn
502  if (electron->isEB())
503  cut = cuts_.getParameter<std::vector<double> >("barrel");
504  else
505  cut = cuts_.getParameter<std::vector<double> >("endcap");
506  // check isolations: if only isolation passes result = 2
507  if (quality_ == "highenergy") {
508  if ((tkIso > cut[6] || hcalIso2 > cut[11]) ||
509  (electron->isEB() && ((ecalIso + hcalIso1) > cut[7] + cut[8] * scEt)) ||
510  (electron->isEE() && (scEt >= 50.) && ((ecalIso + hcalIso1) > cut[7] + cut[8] * (scEt - 50))) ||
511  (electron->isEE() && (scEt < 50.) && ((ecalIso + hcalIso1) > cut[9] + cut[10] * (scEt - 50))))
512  result = 0;
513  else
514  result = 2;
515  } else {
516  if ((tkIso > cut[6]) || (ecalIso > cut[7]) || (hcalIso > cut[8]) || (hcalIso1 > cut[9]) || (hcalIso2 > cut[10]) ||
517  (tkIso / electron->p4().Pt() > cut[11]) || (ecalIso / electron->p4().Pt() > cut[12]) ||
518  (hcalIso / electron->p4().Pt() > cut[13]) || ((tkIso + ecalIso + hcalIso) > cut[14]) ||
519  (((tkIso + ecalIso + hcalIso) / electron->p4().Pt()) > cut[15]) ||
520  ((tkIso + ecalIsoPed + hcalIso) > cut[16]) ||
521  (((tkIso + ecalIsoPed + hcalIso) / electron->p4().Pt()) > cut[17]))
522  result = 0.;
523  else
524  result = 2.;
525  }
526 
527  if ((hOverE < cut[0]) && (sigmaee < cut[1]) && (fabs(deltaPhiIn) < cut[2]) && (fabs(deltaEtaIn) < cut[3]) &&
528  (e25Maxoe55 > cut[4] && e15oe55 > cut[5]) && (sigmaee >= cut[18]) && (eOverP > cut[19] && eOverP < cut[20])) {
529  result = result + 1;
530  }
531 
532  if (ip > cut[21])
533  return result;
534  if (mishits > cut[22]) // expected missing hits
535  return result;
536  // positive cut[23] means to demand a valid hit in 1st layer PXB
537  if (cut[23] > 0 &&
538  !electron->gsfTrack()->hitPattern().hasValidHitInPixelLayer(PixelSubdetector::SubDetector::PixelBarrel, 1))
539  return result;
540 
541  // cut[24]: Dist cut[25]: dcot
542  float dist = fabs(electron->convDist());
543  float dcot = fabs(electron->convDcot());
544  bool isConversion = (cut[24] > 99. || cut[25] > 99.) ? false : (dist < cut[24] && dcot < cut[25]);
545  if (isConversion)
546  return result;
547 
548  result += 4;
549 
550  return result;
551  }
552 
553  return -1.;
554 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Definition: GsfElectron.h:156
float dr04HcalTowerSumEt() const
Definition: GsfElectron.h:538
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:211
float eSuperClusterOverP() const
Definition: GsfElectron.h:221
float dr04HcalDepth1TowerSumEt() const
Definition: GsfElectron.h:536
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
double result(const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &) override
edm::ParameterSet cuts_
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
CutBasedElectronID(const edm::ParameterSet &conf, edm::ConsumesCollector &iC)
float dr03HcalDepth2TowerSumEt() const
Definition: GsfElectron.h:525
float fbrem() const
Definition: GsfElectron.h:726
float e2x5Max() const
Definition: GsfElectron.h:414
float convDist() const
Definition: GsfElectron.h:582
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
bool isEE() const
Definition: GsfElectron.h:329
bool isEB() const
Definition: GsfElectron.h:328
float convDcot() const
Definition: GsfElectron.h:583
edm::EDGetTokenT< std::vector< reco::Vertex > > verticesCollection_
int classify(const reco::GsfElectron *)
float dr04HcalDepth2TowerSumEt() const
Definition: GsfElectron.h:537
float deltaEtaSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:225
def cat(path)
Definition: eostools.py:401
float sigmaIetaIeta() const
Definition: GsfElectron.h:411
float hadronicOverEm() const
Definition: GsfElectron.h:468
float eSeedClusterOverP() const
Definition: GsfElectron.h:222
float dr04EcalRecHitSumEt() const
Definition: GsfElectron.h:535
double robustSelection(const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
float deltaPhiSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:228
double cicSelection(const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &)
float dr03TkSumPt() const
Definition: GsfElectron.h:521
float dr03HcalDepth1TowerSumEt() const
Definition: GsfElectron.h:524
bool isValid() const
Definition: HandleBase.h:70
T const * product() const
Definition: Handle.h:69
float e1x5() const
Definition: GsfElectron.h:413
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
void setup(const edm::ParameterSet &conf) override
float dr03EcalRecHitSumEt() const
Definition: GsfElectron.h:523
float e5x5() const
Definition: GsfElectron.h:415
bool compute_cut(double x, double et, double cut_min, double cut_max, bool gtn=false)
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:155
bool trackerDrivenSeed() const
Definition: GsfElectron.h:159
float dr03HcalTowerSumEt() const
Definition: GsfElectron.h:526
const Point & position() const
position
Definition: BeamSpot.h:59
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
float sigmaEtaEta() const
Definition: GsfElectron.h:410
bool ecalDrivenSeed() const
Definition: GsfElectron.h:158