CMS 3D CMS Logo

GsfElectron.h
Go to the documentation of this file.
1 #ifndef GsfElectron_h
2 #define GsfElectron_h
3 
8 //#include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
15 //#include "DataFormats/Math/interface/LorentzVector.h"
18 #include <vector>
19 #include <limits>
20 #include <numeric>
21 
22 namespace reco {
23 
24  /****************************************************************************
25  * \class reco::GsfElectron
26  *
27  * An Electron with a GsfTrack seeded from an ElectronSeed.
28  * Renamed from PixelMatchGsfElectron.
29  * Originally adapted from the TRecElectron class in ORCA.
30  *
31  * \author Claude Charlot - Laboratoire Leprince-Ringuet - École polytechnique, CNRS/IN2P3
32  * \author David Chamont - Laboratoire Leprince-Ringuet - École polytechnique, CNRS/IN2P3
33  *
34  ****************************************************************************/
35 
36  class GsfElectron : public RecoCandidate {
37  //=======================================================
38  // Constructors
39  //
40  // The clone() method with arguments, and the copy
41  // constructor with edm references is designed for
42  // someone which want to duplicates all
43  // collections.
44  //=======================================================
45 
46  public:
47  // some nested structures defined later on
48  struct ChargeInfo;
49  struct TrackClusterMatching;
50  struct TrackExtrapolations;
51  struct ClosestCtfTrack;
52  struct FiducialFlags;
53  struct ShowerShape;
54  struct IsolationVariables;
55  struct ConversionRejection;
57  struct SaturationInfo;
58 
59  GsfElectron();
61  GsfElectron(const GsfElectron &, const GsfElectronCoreRef &);
63  const GsfElectronCoreRef &core,
66  const TrackBaseRef &conversionPartner,
67  const GsfTrackRefVector &ambiguousTracks);
68  GsfElectron(int charge,
69  const ChargeInfo &,
70  const GsfElectronCoreRef &,
71  const TrackClusterMatching &,
72  const TrackExtrapolations &,
73  const ClosestCtfTrack &,
74  const FiducialFlags &,
75  const ShowerShape &,
76  const ConversionRejection &);
77  GsfElectron(int charge,
78  const ChargeInfo &,
79  const GsfElectronCoreRef &,
80  const TrackClusterMatching &,
81  const TrackExtrapolations &,
82  const ClosestCtfTrack &,
83  const FiducialFlags &,
84  const ShowerShape &,
85  const ShowerShape &,
86  const ConversionRejection &,
87  const SaturationInfo &);
88  GsfElectron *clone() const override;
92  const TrackBaseRef &conversionPartner,
93  const GsfTrackRefVector &ambiguousTracks) const;
94  ~GsfElectron() override{};
95 
96  private:
97  void init();
98 
99  //=======================================================
100  // Candidate methods and complementary information
101  //
102  // The gsf electron producer has tried to best evaluate
103  // the four momentum and charge and given those values to
104  // the GsfElectron constructor, which forwarded them to
105  // the Candidate constructor. Those values can be retreived
106  // with getters inherited from Candidate : p4() and charge().
107  //=======================================================
108 
109  public:
110  // Inherited from Candidate
111  // const LorentzVector & charge() const ;
112  // const LorentzVector & p4() const ;
113 
114  // Complementary struct
115  struct ChargeInfo {
122  };
123 
124  // Charge info accessors
125  // to get gsf track charge: gsfTrack()->charge()
126  // to get ctf track charge, if closestCtfTrackRef().isNonnull(): closestCtfTrackRef()->charge()
127  int scPixCharge() const { return chargeInfo_.scPixCharge; }
131  const ChargeInfo &chargeInfo() const { return chargeInfo_; }
132 
133  // Candidate redefined methods
134  bool isElectron() const override { return true; }
135  bool overlap(const Candidate &) const override;
136 
137  private:
138  // Complementary attributes
140 
141  //=======================================================
142  // Core Attributes
143  //
144  // They all have been computed before, when building the
145  // collection of GsfElectronCore instances. Each GsfElectron
146  // has a reference toward a GsfElectronCore.
147  //=======================================================
148 
149  public:
150  // accessors
151  virtual GsfElectronCoreRef core() const;
153 
154  // forward core methods
155  SuperClusterRef superCluster() const override { return core()->superCluster(); }
156  GsfTrackRef gsfTrack() const override { return core()->gsfTrack(); }
157  float ctfGsfOverlap() const { return core()->ctfGsfOverlap(); }
158  bool ecalDrivenSeed() const { return core()->ecalDrivenSeed(); }
159  bool trackerDrivenSeed() const { return core()->trackerDrivenSeed(); }
160  virtual SuperClusterRef parentSuperCluster() const { return core()->parentSuperCluster(); }
161  bool closestCtfTrackRefValid() const {
163  }
164  //methods used for MVA variables
165  float closestCtfTrackNormChi2() const {
166  return closestCtfTrackRefValid() ? closestCtfTrackRef()->normalizedChi2() : 0;
167  }
169  return closestCtfTrackRefValid() ? closestCtfTrackRef()->hitPattern().trackerLayersWithMeasurement() : -1;
170  }
171 
172  // backward compatibility
174  TrackRef ctfTrack; // best matching ctf track
175  float shFracInnerHits; // fraction of common hits between the ctf and gsf tracks
178  };
179  float shFracInnerHits() const { return core()->ctfGsfOverlap(); }
180  virtual TrackRef closestCtfTrackRef() const { return core()->ctfTrack(); }
182  return ClosestCtfTrack(core()->ctfTrack(), core()->ctfGsfOverlap());
183  }
184 
185  private:
186  // attributes
188 
189  //=======================================================
190  // Track-Cluster Matching Attributes
191  //=======================================================
192 
193  public:
195  CaloClusterPtr electronCluster; // basic cluster best matching gsf track
196  float eSuperClusterOverP; // the supercluster energy / track momentum at the PCA to the beam spot
197  float eSeedClusterOverP; // the seed cluster energy / track momentum at the PCA to the beam spot
198  float eSeedClusterOverPout; // the seed cluster energy / track momentum at calo extrapolated from the outermost track state
199  float eEleClusterOverPout; // the electron cluster energy / track momentum at calo extrapolated from the outermost track state
200  float deltaEtaSuperClusterAtVtx; // the supercluster eta - track eta position at calo extrapolated from innermost track state
201  float deltaEtaSeedClusterAtCalo; // the seed cluster eta - track eta position at calo extrapolated from the outermost track state
202  float deltaEtaEleClusterAtCalo; // the electron cluster eta - track eta position at calo extrapolated from the outermost state
203  float deltaPhiEleClusterAtCalo; // the electron cluster phi - track phi position at calo extrapolated from the outermost track state
204  float deltaPhiSuperClusterAtVtx; // the supercluster phi - track phi position at calo extrapolated from the innermost track state
205  float deltaPhiSeedClusterAtCalo; // the seed cluster phi - track phi position at calo extrapolated from the outermost track state
207  : eSuperClusterOverP(0.),
208  eSeedClusterOverP(0.),
211  deltaEtaSuperClusterAtVtx(std::numeric_limits<float>::max()),
212  deltaEtaSeedClusterAtCalo(std::numeric_limits<float>::max()),
213  deltaEtaEleClusterAtCalo(std::numeric_limits<float>::max()),
214  deltaPhiEleClusterAtCalo(std::numeric_limits<float>::max()),
215  deltaPhiSuperClusterAtVtx(std::numeric_limits<float>::max()),
216  deltaPhiSeedClusterAtCalo(std::numeric_limits<float>::max()) {}
217  };
218 
219  // accessors
232  return superCluster().isNonnull() && superCluster()->seed().isNonnull()
234  superCluster()->seed()->eta()
236  }
238 
239  // for backward compatibility, usefull ?
242 
243  private:
244  // attributes
246 
247  //=======================================================
248  // Track extrapolations
249  //=======================================================
250 
251  public:
253  math::XYZPointF positionAtVtx; // the track PCA to the beam spot
254  math::XYZPointF positionAtCalo; // the track PCA to the supercluster position
255  math::XYZVectorF momentumAtVtx; // the track momentum at the PCA to the beam spot
256  // the track momentum extrapolated at the supercluster position from the innermost track state
258  // the track momentum extrapolated at the seed cluster position from the outermost track state
260  // the track momentum extrapolated at the ele cluster position from the outermost track state
262  math::XYZVectorF momentumAtVtxWithConstraint; // the track momentum at the PCA to the beam spot using bs constraint
263  };
264 
265  // accessors
274  }
276 
277  // setter (if you know what you're doing)
279 
280  // for backward compatibility
283 
284  private:
285  // attributes
287 
288  //=======================================================
289  // SuperCluster direct access
290  //=======================================================
291 
292  public:
293  // direct accessors
294  math::XYZPoint superClusterPosition() const { return superCluster()->position(); } // the super cluster position
295  int basicClustersSize() const {
296  return superCluster()->clustersSize();
297  } // number of basic clusters inside the supercluster
298  CaloCluster_iterator basicClustersBegin() const { return superCluster()->clustersBegin(); }
299  CaloCluster_iterator basicClustersEnd() const { return superCluster()->clustersEnd(); }
300 
301  // for backward compatibility
302  math::XYZPoint caloPosition() const { return superCluster()->position(); }
303 
304  //=======================================================
305  // Fiducial Flags
306  //=======================================================
307 
308  public:
309  struct FiducialFlags {
310  bool isEB; // true if particle is in ECAL Barrel
311  bool isEE; // true if particle is in ECAL Endcaps
312  bool isEBEEGap; // true if particle is in the crack between EB and EE
313  bool isEBEtaGap; // true if particle is in EB, and inside the eta gaps between modules
314  bool isEBPhiGap; // true if particle is in EB, and inside the phi gaps between modules
315  bool isEEDeeGap; // true if particle is in EE, and inside the gaps between dees
316  bool isEERingGap; // true if particle is in EE, and inside the gaps between rings
318  : isEB(false),
319  isEE(false),
320  isEBEEGap(false),
321  isEBEtaGap(false),
322  isEBPhiGap(false),
323  isEEDeeGap(false),
324  isEERingGap(false) {}
325  };
326 
327  // accessors
328  bool isEB() const { return fiducialFlags_.isEB; }
329  bool isEE() const { return fiducialFlags_.isEE; }
330  bool isGap() const { return ((isEBEEGap()) || (isEBGap()) || (isEEGap())); }
331  bool isEBEEGap() const { return fiducialFlags_.isEBEEGap; }
332  bool isEBGap() const { return (isEBEtaGap() || isEBPhiGap()); }
333  bool isEBEtaGap() const { return fiducialFlags_.isEBEtaGap; }
334  bool isEBPhiGap() const { return fiducialFlags_.isEBPhiGap; }
335  bool isEEGap() const { return (isEEDeeGap() || isEERingGap()); }
336  bool isEEDeeGap() const { return fiducialFlags_.isEEDeeGap; }
337  bool isEERingGap() const { return fiducialFlags_.isEERingGap; }
338  const FiducialFlags &fiducialFlags() const { return fiducialFlags_; }
339  // setters... not necessary in regular situations
340  // but handy for late stage modifications of electron objects
341  void setFFlagIsEB(const bool b) { fiducialFlags_.isEB = b; }
342  void setFFlagIsEE(const bool b) { fiducialFlags_.isEE = b; }
343  void setFFlagIsEBEEGap(const bool b) { fiducialFlags_.isEBEEGap = b; }
348 
349  private:
350  // attributes
352 
353  //=======================================================
354  // Shower Shape Variables
355  //=======================================================
356 
357  public:
358  struct ShowerShape {
359  float sigmaEtaEta; // weighted cluster rms along eta and inside 5x5 (absolute eta)
360  float sigmaIetaIeta; // weighted cluster rms along eta and inside 5x5 (Xtal eta)
361  float sigmaIphiIphi; // weighted cluster rms along phi and inside 5x5 (Xtal phi)
362  float e1x5; // energy inside 1x5 in etaxphi around the seed Xtal
363  float e2x5Max; // energy inside 2x5 in etaxphi around the seed Xtal (max bwt the 2 possible sums)
364  float e5x5; // energy inside 5x5 in etaxphi around the seed Xtal
365  float r9; // ratio of the 3x3 energy and supercluster energy
366  float hcalDepth1OverEcal; // run2 hcal over ecal seed cluster energy using 1st hcal depth (using hcal towers within a cone)
367  float hcalDepth2OverEcal; // run2 hcal over ecal seed cluster energy using 2nd hcal depth (using hcal towers within a cone)
368  float hcalDepth1OverEcalBc; // run2 hcal over ecal seed cluster energy using 1st hcal depth (using hcal towers behind clusters)
369  float hcalDepth2OverEcalBc; // run2 hcal over ecal seed cluster energy using 2nd hcal depth (using hcal towers behind clusters)
370  std::array<float, 7>
371  hcalOverEcal; // run3 hcal over ecal seed cluster energy per depth (using rechits within a cone)
372  std::array<float, 7>
373  hcalOverEcalBc; // run3 hcal over ecal seed cluster energy per depth (using rechits behind clusters)
374  std::vector<CaloTowerDetId> hcalTowersBehindClusters;
375  bool invalidHcal; // set to true if the hcal energy estimate is not valid (e.g. the corresponding tower was off or masked)
376  bool pre7DepthHcal; // to work around an ioread rule issue on legacy RECO files
378  float eMax;
379  float e2nd;
380  float eTop;
381  float eLeft;
382  float eRight;
383  float eBottom;
384  float e2x5Top;
385  float e2x5Left;
386  float e2x5Right;
387  float e2x5Bottom;
389  : sigmaEtaEta(std::numeric_limits<float>::max()),
390  sigmaIetaIeta(std::numeric_limits<float>::max()),
391  sigmaIphiIphi(std::numeric_limits<float>::max()),
392  e1x5(0.f),
393  e2x5Max(0.f),
394  e5x5(0.f),
395  r9(-std::numeric_limits<float>::max()),
400  hcalOverEcal{{0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f}},
401  hcalOverEcalBc{{0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f}},
402  invalidHcal(false),
403  pre7DepthHcal(true),
404  sigmaIetaIphi(0.f),
405  eMax(0.f),
406  e2nd(0.f),
407  eTop(0.f),
408  eLeft(0.f),
409  eRight(0.f),
410  eBottom(0.f),
411  e2x5Top(0.f),
412  e2x5Left(0.f),
413  e2x5Right(0.f),
414  e2x5Bottom(0.f) {}
415  };
416 
417  // accessors
418  float sigmaEtaEta() const { return showerShape_.sigmaEtaEta; }
419  float sigmaIetaIeta() const { return showerShape_.sigmaIetaIeta; }
420  float sigmaIphiIphi() const { return showerShape_.sigmaIphiIphi; }
421  float e1x5() const { return showerShape_.e1x5; }
422  float e2x5Max() const { return showerShape_.e2x5Max; }
423  float e5x5() const { return showerShape_.e5x5; }
424  float r9() const { return showerShape_.r9; }
425  float hcalOverEcal(const ShowerShape &ss, int depth) const {
426  if (ss.pre7DepthHcal) {
427  if (depth == 0)
428  return ss.hcalDepth1OverEcal + ss.hcalDepth2OverEcal;
429  else if (depth == 1)
430  return ss.hcalDepth1OverEcal;
431  else if (depth == 2)
432  return ss.hcalDepth2OverEcal;
433 
434  return 0.f;
435  } else {
436  const auto &hovere = ss.hcalOverEcal;
437  return (!(depth > 0 and depth < 8)) ? std::accumulate(std::begin(hovere), std::end(hovere), 0.f)
438  : hovere[depth - 1];
439  }
440  }
441  float hcalOverEcal(int depth = 0) const { return hcalOverEcal(showerShape_, depth); }
442  float hcalOverEcalBc(const ShowerShape &ss, int depth) const {
443  if (ss.pre7DepthHcal) {
444  if (depth == 0)
445  return ss.hcalDepth1OverEcalBc + ss.hcalDepth2OverEcalBc;
446  else if (depth == 1)
447  return ss.hcalDepth1OverEcalBc;
448  else if (depth == 2)
449  return ss.hcalDepth2OverEcalBc;
450 
451  return 0.f;
452  } else {
453  const auto &hovere = ss.hcalOverEcalBc;
454  return (!(depth > 0 and depth < 8)) ? std::accumulate(std::begin(hovere), std::end(hovere), 0.f)
455  : hovere[depth - 1];
456  }
457  }
458  float hcalOverEcalBc(int depth = 0) const { return hcalOverEcalBc(showerShape_, depth); }
459  const std::vector<CaloTowerDetId> &hcalTowersBehindClusters() const {
461  }
462  bool hcalOverEcalValid() const { return !showerShape_.invalidHcal; }
463  float eLeft() const { return showerShape_.eLeft; }
464  float eRight() const { return showerShape_.eRight; }
465  float eTop() const { return showerShape_.eTop; }
466  float eBottom() const { return showerShape_.eBottom; }
467  const ShowerShape &showerShape() const { return showerShape_; }
468  // non-zero-suppressed and no-fractions shower shapes
469  // ecal energy is always that from the full 5x5
473  float full5x5_e1x5() const { return full5x5_showerShape_.e1x5; }
474  float full5x5_e2x5Max() const { return full5x5_showerShape_.e2x5Max; }
475  float full5x5_e5x5() const { return full5x5_showerShape_.e5x5; }
476  float full5x5_r9() const { return full5x5_showerShape_.r9; }
482  float full5x5_e2x5Top() const { return full5x5_showerShape_.e2x5Top; }
484  float full5x5_eLeft() const { return full5x5_showerShape_.eLeft; }
485  float full5x5_eRight() const { return full5x5_showerShape_.eRight; }
486  float full5x5_eTop() const { return full5x5_showerShape_.eTop; }
487  float full5x5_eBottom() const { return full5x5_showerShape_.eBottom; }
489 
490  // setters (if you know what you're doing)
493 
494  // for backward compatibility (this will only ever be the ZS shapes!)
495  float scSigmaEtaEta() const { return sigmaEtaEta(); }
496  float scSigmaIEtaIEta() const { return sigmaIetaIeta(); }
497  float scE1x5() const { return e1x5(); }
498  float scE2x5Max() const { return e2x5Max(); }
499  float scE5x5() const { return e5x5(); }
500  float hadronicOverEm() const { return hcalOverEcal(); }
501 
502  private:
503  // attributes
506 
507  //=======================================================
508  // SaturationInfo
509  //=======================================================
510 
511  public:
512  struct SaturationInfo {
516  };
517 
518  // accessors
521  const SaturationInfo &saturationInfo() const { return saturationInfo_; }
523 
524  private:
526 
527  //=======================================================
528  // Isolation Variables
529  //=======================================================
530 
531  public:
533  float tkSumPt; // track iso with electron footprint removed
534  float tkSumPtHEEP; // track iso used for the HEEP ID
535  float ecalRecHitSumEt; // ecal iso deposit with electron footprint removed
536  float hcalDepth1TowerSumEt; // hcal depth 1 iso deposit with electron footprint removed
537  float hcalDepth2TowerSumEt; // hcal depth 2 iso deposit with electron footprint removed
538  float hcalDepth1TowerSumEtBc; // hcal depth 1 iso deposit without towers behind clusters
539  float hcalDepth2TowerSumEtBc; // hcal depth 2 iso deposit without towers behind clusters
540  std::array<float, 7> hcalRecHitSumEt; // ...per depth, with electron footprint removed
541  std::array<float, 7> hcalRecHitSumEtBc; // ...per depth, with hcal rechit behind cluster removed
542  bool pre7DepthHcal; // to work around an ioread rule issue on legacy RECO files
544  : tkSumPt(0.),
545  tkSumPtHEEP(0.),
546  ecalRecHitSumEt(0.),
551  hcalRecHitSumEt{{0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f}},
552  hcalRecHitSumEtBc{{0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f}},
553  pre7DepthHcal(true) {}
554  };
555 
556  // 03 accessors
557  float dr03TkSumPt() const { return dr03_.tkSumPt; }
558  float dr03TkSumPtHEEP() const { return dr03_.tkSumPtHEEP; }
559  float dr03EcalRecHitSumEt() const { return dr03_.ecalRecHitSumEt; }
560  float hcalTowerSumEt(const IsolationVariables &iv, int depth) const {
561  if (iv.pre7DepthHcal) {
562  if (depth == 0)
563  return iv.hcalDepth1TowerSumEt + iv.hcalDepth2TowerSumEt;
564  else if (depth == 1)
565  return iv.hcalDepth1TowerSumEt;
566  else if (depth == 2)
567  return iv.hcalDepth2TowerSumEt;
568 
569  return 0.f;
570  } else {
571  const auto &hcaliso = iv.hcalRecHitSumEt;
572  return (!(depth > 0 and depth < 8)) ? std::accumulate(std::begin(hcaliso), std::end(hcaliso), 0.f)
573  : hcaliso[depth - 1];
574  }
575  }
576  float dr03HcalTowerSumEt(int depth = 0) const { return hcalTowerSumEt(dr03_, depth); }
577  float hcalTowerSumEtBc(const IsolationVariables &iv, int depth) const {
578  if (iv.pre7DepthHcal) {
579  if (depth == 0)
580  return iv.hcalDepth1TowerSumEtBc + iv.hcalDepth2TowerSumEtBc;
581  else if (depth == 1)
582  return iv.hcalDepth1TowerSumEtBc;
583  else if (depth == 2)
584  return iv.hcalDepth2TowerSumEtBc;
585 
586  return 0.f;
587  } else {
588  const auto &hcaliso = iv.hcalRecHitSumEtBc;
589  return (!(depth > 0 and depth < 8)) ? std::accumulate(std::begin(hcaliso), std::end(hcaliso), 0.f)
590  : hcaliso[depth - 1];
591  }
592  }
593  float dr03HcalTowerSumEtBc(int depth = 0) const { return hcalTowerSumEtBc(dr03_, depth); }
595 
596  // 04 accessors
597  float dr04TkSumPt() const { return dr04_.tkSumPt; }
598  float dr04TkSumPtHEEP() const { return dr04_.tkSumPtHEEP; }
599  float dr04EcalRecHitSumEt() const { return dr04_.ecalRecHitSumEt; }
600  float dr04HcalTowerSumEt(int depth = 0) const { return hcalTowerSumEt(dr04_, depth); }
601  float dr04HcalTowerSumEtBc(int depth = 0) const { return hcalTowerSumEtBc(dr04_, depth); }
603 
604  // setters ?!?
605  void setDr03Isolation(const IsolationVariables &dr03) { dr03_ = dr03; }
606  void setDr04Isolation(const IsolationVariables &dr04) { dr04_ = dr04; }
607 
608  // for backward compatibility
609  void setIsolation03(const IsolationVariables &dr03) { dr03_ = dr03; }
610  void setIsolation04(const IsolationVariables &dr04) { dr04_ = dr04; }
611  const IsolationVariables &isolationVariables03() const { return dr03_; }
612  const IsolationVariables &isolationVariables04() const { return dr04_; }
613 
614  // go back to run2-like 2 effective depths if desired - depth 1 is the normal depth 1, depth 2 is the sum over the rest
615  void hcalToRun2EffDepth();
616 
617  private:
618  // attributes
621 
622  //=======================================================
623  // Conversion Rejection Information
624  //=======================================================
625 
626  public:
628  int flags; // -max:not-computed, other: as computed by Puneeth conversion code
629  TrackBaseRef partner; // conversion partner
630  float dist; // distance to the conversion partner
631  float dcot; // difference of cot(angle) with the conversion partner track
632  float radius; // signed conversion radius
633  float vtxFitProb; //fit probablity (chi2/ndof) of the matched conversion vtx
635  : flags(-1),
636  dist(std::numeric_limits<float>::max()),
637  dcot(std::numeric_limits<float>::max()),
638  radius(std::numeric_limits<float>::max()),
639  vtxFitProb(std::numeric_limits<float>::max()) {}
640  };
641 
642  // accessors
643  int convFlags() const { return conversionRejection_.flags; }
645  float convDist() const { return conversionRejection_.dist; }
646  float convDcot() const { return conversionRejection_.dcot; }
647  float convRadius() const { return conversionRejection_.radius; }
651 
652  private:
653  // attributes
655 
656  //=======================================================
657  // Pflow Information
658  //=======================================================
659 
660  public:
662  //first three data members that changed names, according to DataFormats/MuonReco/interface/MuonPFIsolation.h
665  float sumPhotonEt;
666  //then four new data members, corresponding to DataFormats/MuonReco/interface/MuonPFIsolation.h
670  float sumPUPt;
671  //new pf cluster based isolation values
672  float sumEcalClusterEt; //sum pt of ecal clusters, vetoing clusters part of electron
673  float sumHcalClusterEt; //sum pt of hcal clusters, vetoing clusters part of electron
675  : sumChargedHadronPt(0),
677  sumPhotonEt(0),
681  sumPUPt(0),
682  sumEcalClusterEt(0),
683  sumHcalClusterEt(0){};
684  };
685 
686  struct MvaInput {
687  int earlyBrem; // Early Brem detected (-2=>unknown,-1=>could not be evaluated,0=>wrong,1=>true)
688  int lateBrem; // Late Brem detected (-2=>unknown,-1=>could not be evaluated,0=>wrong,1=>true)
689  float sigmaEtaEta; // Sigma-eta-eta with the PF cluster
690  float hadEnergy; // Associated PF Had Cluster energy
691  float deltaEta; // PF-cluster GSF track delta-eta
692  int nClusterOutsideMustache; // -2 => unknown, -1 =>could not be evaluated, 0 and more => number of clusters
695  : earlyBrem(-2),
696  lateBrem(-2),
697  sigmaEtaEta(std::numeric_limits<float>::max()),
698  hadEnergy(0.),
699  deltaEta(std::numeric_limits<float>::max()),
701  etOutsideMustache(-std::numeric_limits<float>::max()) {}
702  };
703 
704  static constexpr float mvaPlaceholder = -999999999.;
705 
706  struct MvaOutput {
707  int status; // see PFCandidateElectronExtra::StatusFlag
709  float mva_e_pi;
710  float mvaByPassForIsolated; // complementary MVA used in preselection
717  : status(-1),
726  };
727 
728  // accessors
730  //backwards compat functions for pat::Electron
731  float ecalPFClusterIso() const { return pfIso_.sumEcalClusterEt; };
732  float hcalPFClusterIso() const { return pfIso_.sumHcalClusterEt; };
733 
734  const MvaInput &mvaInput() const { return mvaInput_; }
735  const MvaOutput &mvaOutput() const { return mvaOutput_; }
736 
737  // setters
739  void setMvaInput(const MvaInput &mi) { mvaInput_ = mi; }
740  void setMvaOutput(const MvaOutput &mo) { mvaOutput_ = mo; }
741 
742  // for backward compatibility
743  float mva_Isolated() const { return mvaOutput_.mva_Isolated; }
744  float mva_e_pi() const { return mvaOutput_.mva_e_pi; }
748  float dnn_bkg_Tau() const { return mvaOutput_.dnn_e_bkgTau; }
749  float dnn_bkg_Photon() const { return mvaOutput_.dnn_e_bkgPhoton; }
750 
751  private:
755 
756  //=======================================================
757  // Preselection and Ambiguity
758  //=======================================================
759 
760  public:
761  // accessors
762  bool ecalDriven() const; // return true if ecalDrivenSeed() and passingCutBasedPreselection()
765  bool ambiguous() const { return ambiguous_; }
767  auto const &ambiguousGsfTracks() const { return ambiguousGsfTracks_; }
768 
769  // setters
772  void setAmbiguous(bool flag) { ambiguous_ = flag; }
775 
776  // backward compatibility
779 
780  private:
781  // attributes
784  bool passMvaPreslection_; // to be removed : passPflowPreslection_
786  GsfTrackRefVector ambiguousGsfTracks_; // ambiguous gsf tracks
787 
788  //=======================================================
789  // Brem Fractions and Classification
790  //=======================================================
791 
792  public:
794  float trackFbrem; // the brem fraction from gsf fit: (track momentum in - track momentum out) / track momentum in
795  float superClusterFbrem; // the brem fraction from supercluster: (supercluster energy - electron cluster energy) / supercluster energy
796  constexpr static float kDefaultValue = -1.e30;
798  };
799  enum Classification { UNKNOWN = -1, GOLDEN = 0, BIGBREM = 1, BADTRACK = 2, SHOWERING = 3, GAP = 4 };
800 
801  // accessors
802  float trackFbrem() const { return classVariables_.trackFbrem; }
806 
807  // utilities
808  int numberOfBrems() const { return basicClustersSize() - 1; }
809  float fbrem() const { return trackFbrem(); }
810 
811  // setters
815  void setClassification(Classification myclass) { class_ = myclass; }
816 
817  private:
818  // attributes
820  Classification class_; // fbrem and number of clusters based electron classification
821 
822  //=======================================================
823  // Corrections
824  //
825  // The only methods, with classification, which modify
826  // the electrons after they have been constructed.
827  // They change a given characteristic, such as the super-cluster
828  // energy, and propagate the change consistently
829  // to all the depending attributes.
830  // We expect the methods to be called in a given order
831  // and so to store specific kind of corrections
832  // 1) classify()
833  // 2) correctEcalEnergy() : depending on classification and eta
834  // 3) correctMomemtum() : depending on classification and ecal energy and tracker momentum errors
835  //
836  // Beware that correctEcalEnergy() is modifying few attributes which
837  // were potentially used for preselection, whose value used in
838  // preselection will not be available any more :
839  // hcalOverEcal, eSuperClusterOverP,
840  // eSeedClusterOverP, eEleClusterOverPout.
841  //=======================================================
842 
843  public:
845 
846  struct Corrections {
847  bool isEcalEnergyCorrected; // true if ecal energy has been corrected
848  float correctedEcalEnergy; // corrected energy (if !isEcalEnergyCorrected this value is identical to the supercluster energy)
849  float correctedEcalEnergyError; // error on energy
850  //bool isMomentumCorrected ; // DEPRECATED
851  float trackMomentumError; // track momentum error from gsf fit
852  //
853  LorentzVector fromSuperClusterP4; // for P4_FROM_SUPER_CLUSTER
854  float fromSuperClusterP4Error; // for P4_FROM_SUPER_CLUSTER
855  LorentzVector combinedP4; // for P4_COMBINATION
856  float combinedP4Error; // for P4_COMBINATION
857  LorentzVector pflowP4; // for P4_PFLOW_COMBINATION
858  float pflowP4Error; // for P4_PFLOW_COMBINATION
859  P4Kind candidateP4Kind; // say which momentum has been stored in reco::Candidate
860  //
865  /*isMomentumCorrected(false),*/ trackMomentumError(999.),
867  combinedP4Error(999.),
868  pflowP4Error(999.),
870  };
871 
872  // setters
873  void setCorrectedEcalEnergyError(float newEnergyError);
874  void setCorrectedEcalEnergy(float newEnergy);
875  void setCorrectedEcalEnergy(float newEnergy, bool rescaleDependentValues);
877  void setP4(P4Kind kind, const LorentzVector &p4, float p4Error, bool setCandidate);
878  using RecoCandidate::setP4;
879 
880  // accessors
885  const LorentzVector &p4(P4Kind kind) const;
886  using RecoCandidate::p4;
887  float p4Error(P4Kind kind) const;
889  const Corrections &corrections() const { return corrections_; }
890 
891  // bare setter (if you know what you're doing)
893 
894  // for backward compatibility
895  void setEcalEnergyError(float energyError) { setCorrectedEcalEnergyError(energyError); }
896  float ecalEnergy() const { return correctedEcalEnergy(); }
897  float ecalEnergyError() const { return correctedEcalEnergyError(); }
898  //bool isMomentumCorrected() const { return corrections_.isMomentumCorrected ; }
899  float caloEnergy() const { return correctedEcalEnergy(); }
901  void correctEcalEnergy(float newEnergy, float newEnergyError, bool corrEovP = true) {
902  setCorrectedEcalEnergy(newEnergy, corrEovP);
903  setEcalEnergyError(newEnergyError);
904  }
907  setP4(P4_COMBINATION, p4, p4Error, true);
908  }
909 
910  private:
911  // attributes
913 
914  public:
917  float dPhi1;
919  float dPhi2;
921  float dRz1;
923  float dRz2;
925  unsigned char subdetectors;
926  PixelMatchVariables() : dPhi1(-999), dPhi2(-999), dRz1(-999), dRz2(-999), subdetectors(0) {}
928  };
929  void setPixelMatchSubdetectors(int sd1, int sd2) { pixelMatchVariables_.subdetectors = 10 * sd1 + sd2; }
930  void setPixelMatchDPhi1(float dPhi1) { pixelMatchVariables_.dPhi1 = dPhi1; }
931  void setPixelMatchDPhi2(float dPhi2) { pixelMatchVariables_.dPhi2 = dPhi2; }
932  void setPixelMatchDRz1(float dRz1) { pixelMatchVariables_.dRz1 = dRz1; }
933  void setPixelMatchDRz2(float dRz2) { pixelMatchVariables_.dRz2 = dRz2; }
934 
937  float pixelMatchDPhi1() const { return pixelMatchVariables_.dPhi1; }
938  float pixelMatchDPhi2() const { return pixelMatchVariables_.dPhi2; }
939  float pixelMatchDRz1() const { return pixelMatchVariables_.dRz1; }
940  float pixelMatchDRz2() const { return pixelMatchVariables_.dRz2; }
941 
942  private:
944  };
945 
946 } // namespace reco
947 
948 #endif
float deltaPhiEleClusterTrackAtCalo() const
Definition: GsfElectron.h:230
void setDr04Isolation(const IsolationVariables &dr04)
Definition: GsfElectron.h:606
float hcalTowerSumEt(const IsolationVariables &iv, int depth) const
Definition: GsfElectron.h:560
bool isEBGap() const
Definition: GsfElectron.h:332
float dPhi1
Pixel match variable: deltaPhi for innermost hit.
Definition: GsfElectron.h:917
bool full5x5_hcalOverEcalValid() const
Definition: GsfElectron.h:479
unsigned char subdetectors
Subdetectors for first and second pixel hit.
Definition: GsfElectron.h:925
void setTrackFbrem(float fbrem)
Definition: GsfElectron.h:812
std::array< float, 7 > hcalRecHitSumEt
Definition: GsfElectron.h:540
MvaInput mvaInput_
Definition: GsfElectron.h:753
PixelMatchVariables pixelMatchVariables_
Definition: GsfElectron.h:943
void setP4(P4Kind kind, const LorentzVector &p4, float p4Error, bool setCandidate)
Definition: GsfElectron.cc:194
math::XYZPoint caloPosition() const
Definition: GsfElectron.h:302
CaloCluster_iterator basicClustersBegin() const
Definition: GsfElectron.h:298
float scSigmaIEtaIEta() const
Definition: GsfElectron.h:496
bool isGsfScPixChargeConsistent() const
Definition: GsfElectron.h:129
float dnn_bkg_nonIsolated() const
Definition: GsfElectron.h:747
void setPassCutBasedPreselection(bool flag)
Definition: GsfElectron.h:770
float full5x5_e2x5Max() const
Definition: GsfElectron.h:474
void setFFlagIsEE(const bool b)
Definition: GsfElectron.h:342
float eTop() const
Definition: GsfElectron.h:465
void setPixelMatchDRz2(float dRz2)
Definition: GsfElectron.h:933
void setCore(const reco::GsfElectronCoreRef &core)
Definition: GsfElectron.h:152
int32_t *__restrict__ iv
bool ecalDrivenSeed() const
Definition: GsfElectron.h:158
float deltaPhiSeedClusterTrackAtCalo() const
Definition: GsfElectron.h:229
float dnn_signal_nonIsolated() const
Definition: GsfElectron.h:746
float dRz2
Pixel match variable: deltaRz for second hit.
Definition: GsfElectron.h:923
float e2x5Max() const
Definition: GsfElectron.h:422
float eSeedClusterOverP() const
Definition: GsfElectron.h:222
float scE1x5() const
Definition: GsfElectron.h:497
void setPixelMatchDPhi1(float dPhi1)
Definition: GsfElectron.h:930
bool trackerDrivenSeed() const
Definition: GsfElectron.h:159
int pixelMatchSubdetector1() const
Definition: GsfElectron.h:935
float full5x5_hcalOverEcalBc(int depth=0) const
Definition: GsfElectron.h:478
bool isEBPhiGap() const
Definition: GsfElectron.h:334
float full5x5_e1x5() const
Definition: GsfElectron.h:473
math::XYZVectorF trackMomentumAtEleClus() const
Definition: GsfElectron.h:271
float full5x5_sigmaEtaEta() const
Definition: GsfElectron.h:470
float eRight() const
Definition: GsfElectron.h:464
float trackMomentumError() const
Definition: GsfElectron.h:884
Classification class_
Definition: GsfElectron.h:820
void correctMomentum(const LorentzVector &p4, float trackMomentumError, float p4Error)
Definition: GsfElectron.h:905
std::array< float, 7 > hcalRecHitSumEtBc
Definition: GsfElectron.h:541
float sigmaIetaIeta() const
Definition: GsfElectron.h:419
float pixelMatchDPhi1() const
Definition: GsfElectron.h:937
bool isEERingGap() const
Definition: GsfElectron.h:337
ConversionRejection conversionRejection_
Definition: GsfElectron.h:654
Definition: __init__.py:1
float dr04TkSumPtHEEP() const
Definition: GsfElectron.h:598
math::XYZPointF trackPositionAtCalo() const
Definition: GsfElectron.h:267
void setMvaInput(const MvaInput &mi)
Definition: GsfElectron.h:739
static constexpr float mvaPlaceholder
Definition: GsfElectron.h:704
float eBottom() const
Definition: GsfElectron.h:466
void setSaturationInfo(const SaturationInfo &s)
Definition: GsfElectron.h:522
float sumPUPt
sum pt of charged Particles not from PV (for Pu corrections)
Definition: GsfElectron.h:670
float pixelMatchDPhi2() const
Definition: GsfElectron.h:938
void setShowerShape(const ShowerShape &s)
Definition: GsfElectron.h:491
bool passingPflowPreselection() const
Definition: GsfElectron.h:764
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
Corrections corrections_
Definition: GsfElectron.h:912
bool ambiguous() const
Definition: GsfElectron.h:765
math::XYZPoint superClusterPosition() const
Definition: GsfElectron.h:294
SaturationInfo saturationInfo_
Definition: GsfElectron.h:525
bool overlap(const Candidate &) const override
check overlap with another candidate
Definition: GsfElectron.cc:152
const MvaOutput & mvaOutput() const
Definition: GsfElectron.h:735
const ConversionRejection & conversionRejectionVariables() const
Definition: GsfElectron.h:649
float sumNeutralHadronEtHighThreshold
sum pt of neutral hadrons with a higher threshold
Definition: GsfElectron.h:668
GsfElectron * clone() const override
returns a clone of the Candidate object
Definition: GsfElectron.cc:158
float hcalOverEcalBc(const ShowerShape &ss, int depth) const
Definition: GsfElectron.h:442
cv
Definition: cuy.py:363
float full5x5_eBottom() const
Definition: GsfElectron.h:487
float sumChargedParticlePt
sum-pt of charged Particles(inludes e/mu)
Definition: GsfElectron.h:667
void setAmbiguous(bool flag)
Definition: GsfElectron.h:772
GsfTrackRefVector ambiguousGsfTracks_
Definition: GsfElectron.h:786
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float > > XYZPointF
point in space with cartesian internal representation
Definition: Point3D.h:10
const ClassificationVariables & classificationVariables() const
Definition: GsfElectron.h:804
void setConversionRejectionVariables(const ConversionRejection &convRej)
Definition: GsfElectron.h:650
float full5x5_sigmaIphiIphi() const
Definition: GsfElectron.h:472
float deltaEtaEleClusterTrackAtCalo() const
Definition: GsfElectron.h:227
ChargeInfo chargeInfo_
Definition: GsfElectron.h:139
void setPfIsolationVariables(const PflowIsolationVariables &iso)
Definition: GsfElectron.h:738
void setDr03Isolation(const IsolationVariables &dr03)
Definition: GsfElectron.h:605
void setMvaOutput(const MvaOutput &mo)
Definition: GsfElectron.h:740
const LorentzVector & p4() const final
four-momentum Lorentz vector
float convDcot() const
Definition: GsfElectron.h:646
float dr04TkSumPt() const
Definition: GsfElectron.h:597
const std::vector< CaloTowerDetId > & hcalTowersBehindClusters() const
Definition: GsfElectron.h:459
float trackFbrem() const
Definition: GsfElectron.h:802
bool isEBEtaGap() const
Definition: GsfElectron.h:333
TrackBaseRef convPartner() const
Definition: GsfElectron.h:644
bool ecalDriven() const
Definition: GsfElectron.cc:168
float e1x5() const
Definition: GsfElectron.h:421
void setPixelMatchSubdetectors(int sd1, int sd2)
Definition: GsfElectron.h:929
float eSuperClusterOverP() const
Definition: GsfElectron.h:221
Classification classification() const
Definition: GsfElectron.h:805
float full5x5_e5x5() const
Definition: GsfElectron.h:475
float eEleClusterOverPout() const
Definition: GsfElectron.h:224
void setSuperClusterFbrem(float fbrem)
Definition: GsfElectron.h:813
bool isEB() const
Definition: GsfElectron.h:328
void clearAmbiguousGsfTracks()
Definition: GsfElectron.h:773
~GsfElectron() override
Definition: GsfElectron.h:94
math::XYZVectorF trackMomentumAtCalo() const
Definition: GsfElectron.h:269
float dr03TkSumPt() const
Definition: GsfElectron.h:557
float eSeedClusterOverPout() const
Definition: GsfElectron.h:223
void setFFlagIsEBEEGap(const bool b)
Definition: GsfElectron.h:343
void setFFlagIsEBEtaGap(const bool b)
Definition: GsfElectron.h:344
PflowIsolationVariables pfIso_
Definition: GsfElectron.h:752
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Definition: GsfElectron.h:156
const PflowIsolationVariables & pfIsolationVariables() const
Definition: GsfElectron.h:729
float ecalPFClusterIso() const
Definition: GsfElectron.h:731
math::XYZVectorF trackMomentumOut() const
Definition: GsfElectron.h:270
std::array< float, 7 > hcalOverEcal
Definition: GsfElectron.h:371
float closestCtfTrackNormChi2() const
Definition: GsfElectron.h:165
void setFFlagIsEERingGap(const bool b)
Definition: GsfElectron.h:347
float dPhi2
Pixel match variable: deltaPhi for second hit.
Definition: GsfElectron.h:919
void setCorrectedEcalEnergyError(float newEnergyError)
Definition: GsfElectron.cc:170
float dr03HcalTowerSumEtBc(int depth=0) const
Definition: GsfElectron.h:593
const ShowerShape & full5x5_showerShape() const
Definition: GsfElectron.h:488
float ctfGsfOverlap() const
Definition: GsfElectron.h:157
float caloEnergy() const
Definition: GsfElectron.h:899
float full5x5_eTop() const
Definition: GsfElectron.h:486
CaloCluster_iterator basicClustersEnd() const
Definition: GsfElectron.h:299
bool isElectron() const override
Definition: GsfElectron.h:134
float correctedEcalEnergy() const
Definition: GsfElectron.h:882
MvaOutput mvaOutput_
Definition: GsfElectron.h:754
float mva_e_pi() const
Definition: GsfElectron.h:744
const FiducialFlags & fiducialFlags() const
Definition: GsfElectron.h:338
float eLeft() const
Definition: GsfElectron.h:463
float shFracInnerHits() const
Definition: GsfElectron.h:179
FiducialFlags fiducialFlags_
Definition: GsfElectron.h:351
float e5x5() const
Definition: GsfElectron.h:423
bool isEnergyScaleCorrected() const
Definition: GsfElectron.h:900
float sumPhotonEtHighThreshold
sum pt of PF photons with a higher threshold
Definition: GsfElectron.h:669
ShowerShape showerShape_
Definition: GsfElectron.h:504
float scSigmaEtaEta() const
Definition: GsfElectron.h:495
const TrackClusterMatching & trackClusterMatching() const
Definition: GsfElectron.h:237
auto const & ambiguousGsfTracks() const
Definition: GsfElectron.h:767
bool isAvailable() const
Definition: Ref.h:541
float sumPhotonEt
sum pt of PF photons // old float photonIso ;
Definition: GsfElectron.h:665
GsfTrackRefVector::size_type ambiguousGsfTracksSize() const
Definition: GsfElectron.h:766
int convFlags() const
Definition: GsfElectron.h:643
float full5x5_e2x5Bottom() const
Definition: GsfElectron.h:483
bool isEBEEGap() const
Definition: GsfElectron.h:331
float full5x5_eLeft() const
Definition: GsfElectron.h:484
bool isGap() const
Definition: GsfElectron.h:330
void setPassMvaPreselection(bool flag)
Definition: GsfElectron.h:777
float full5x5_e2x5Left() const
Definition: GsfElectron.h:480
float convDist() const
Definition: GsfElectron.h:645
int numberOfBrems() const
Definition: GsfElectron.h:808
void setFFlagIsEBPhiGap(const bool b)
Definition: GsfElectron.h:345
std::vector< CaloTowerDetId > hcalTowersBehindClusters
Definition: GsfElectron.h:374
P4Kind candidateP4Kind() const
Definition: GsfElectron.h:888
float hcalOverEcalBc(int depth=0) const
Definition: GsfElectron.h:458
math::XYZVectorF trackMomentumAtVtx() const
Definition: GsfElectron.h:268
math::XYZTLorentzVector LorentzVector
double f[11][100]
float sumNeutralHadronEt
sum pt of neutral hadrons // old float neutralHadronIso ;
Definition: GsfElectron.h:664
bool isEEDeeGap() const
Definition: GsfElectron.h:336
void setFFlagIsEB(const bool b)
Definition: GsfElectron.h:341
float pixelMatchDRz2() const
Definition: GsfElectron.h:940
const IsolationVariables & isolationVariables03() const
Definition: GsfElectron.h:611
float convVtxFitProb() const
Definition: GsfElectron.h:648
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float > > XYZVectorF
spatial vector with cartesian internal representation
Definition: Vector3D.h:16
float hcalOverEcal(const ShowerShape &ss, int depth) const
Definition: GsfElectron.h:425
void setIsolation04(const IsolationVariables &dr04)
Definition: GsfElectron.h:610
IsolationVariables dr04_
Definition: GsfElectron.h:620
math::XYZPointF TrackPositionAtVtx() const
Definition: GsfElectron.h:281
void setDeltaPhiSuperClusterAtVtx(float dphi)
Definition: GsfElectron.h:241
int pixelMatchSubdetector2() const
Definition: GsfElectron.h:936
void setEcalEnergyError(float energyError)
Definition: GsfElectron.h:895
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
void setTrackMomentumError(float trackMomentumError)
Definition: GsfElectron.cc:192
int scPixCharge() const
Definition: GsfElectron.h:127
void correctEcalEnergy(float newEnergy, float newEnergyError, bool corrEovP=true)
Definition: GsfElectron.h:901
float deltaPhiSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:228
float superClusterFbrem() const
Definition: GsfElectron.h:803
float sigmaEtaEta() const
Definition: GsfElectron.h:418
bool isGsfCtfScPixChargeConsistent() const
Definition: GsfElectron.h:128
void setPixelMatchDPhi2(float dPhi2)
Definition: GsfElectron.h:931
ClassificationVariables classVariables_
Definition: GsfElectron.h:819
GsfElectronCoreRef core_
Definition: GsfElectron.h:187
ShowerShape full5x5_showerShape_
Definition: GsfElectron.h:505
const SaturationInfo & saturationInfo() const
Definition: GsfElectron.h:521
float hcalTowerSumEtBc(const IsolationVariables &iv, int depth) const
Definition: GsfElectron.h:577
float dnn_bkg_Photon() const
Definition: GsfElectron.h:749
int closestCtfTrackNLayers() const
Definition: GsfElectron.h:168
float deltaEtaSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:225
size_type size() const
Size of the RefVector.
Definition: RefVector.h:102
const TrackExtrapolations & trackExtrapolations() const
Definition: GsfElectron.h:275
float scE2x5Max() const
Definition: GsfElectron.h:498
void clear()
Clear the vector.
Definition: RefVector.h:142
float p4Error(P4Kind kind) const
Definition: GsfElectron.cc:230
void setClassification(Classification myclass)
Definition: GsfElectron.h:815
float ecalEnergy() const
Definition: GsfElectron.h:896
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
bool isEE() const
Definition: GsfElectron.h:329
math::XYZPointF TrackPositionAtCalo() const
Definition: GsfElectron.h:282
const IsolationVariables & dr03IsolationVariables() const
Definition: GsfElectron.h:594
double b
Definition: hdecay.h:120
float ecalEnergyError() const
Definition: GsfElectron.h:897
bool isEcalEnergyCorrected() const
Definition: GsfElectron.h:881
float isSeedSaturated() const
Definition: GsfElectron.h:520
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:36
float dnn_bkg_Tau() const
Definition: GsfElectron.h:748
std::array< float, 7 > hcalOverEcalBc
Definition: GsfElectron.h:373
const ShowerShape & showerShape() const
Definition: GsfElectron.h:467
math::XYZVectorF momentumAtVtxWithConstraint
Definition: GsfElectron.h:262
virtual TrackRef closestCtfTrackRef() const
Definition: GsfElectron.h:180
virtual SuperClusterRef parentSuperCluster() const
Definition: GsfElectron.h:160
void setCorrectedEcalEnergy(float newEnergy)
Definition: GsfElectron.cc:174
void setIsolation03(const IsolationVariables &dr03)
Definition: GsfElectron.h:609
float fbrem() const
Definition: GsfElectron.h:809
float hcalPFClusterIso() const
Definition: GsfElectron.h:732
bool passingMvaPreselection() const
Definition: GsfElectron.h:778
float correctedEcalEnergyError() const
Definition: GsfElectron.h:883
fixed size matrix
void setTrackExtrapolations(const TrackExtrapolations &te)
Definition: GsfElectron.h:278
math::XYZVectorF trackMomentumAtVtxWithConstraint() const
Definition: GsfElectron.h:272
CaloClusterPtr electronCluster() const
Definition: GsfElectron.h:220
float mva_Isolated() const
Definition: GsfElectron.h:743
float r9() const
Definition: GsfElectron.h:424
const IsolationVariables & dr04IsolationVariables() const
Definition: GsfElectron.h:602
float sigmaIphiIphi() const
Definition: GsfElectron.h:420
float hcalOverEcal(int depth=0) const
Definition: GsfElectron.h:441
float full5x5_hcalOverEcal(int depth=0) const
Definition: GsfElectron.h:477
virtual reco::TrackRef track() const
reference to a Track
float dr04HcalTowerSumEtBc(int depth=0) const
Definition: GsfElectron.h:601
const Corrections & corrections() const
Definition: GsfElectron.h:889
float convRadius() const
Definition: GsfElectron.h:647
ClosestCtfTrack(TrackRef track, float sh)
Definition: GsfElectron.h:177
bool closestCtfTrackRefValid() const
Definition: GsfElectron.h:161
void setPassPflowPreselection(bool flag)
Definition: GsfElectron.h:771
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
Definition: RefVector.h:67
float dr03EcalRecHitSumEt() const
Definition: GsfElectron.h:559
bool isGsfCtfChargeConsistent() const
Definition: GsfElectron.h:130
float dr04HcalTowerSumEt(int depth=0) const
Definition: GsfElectron.h:600
float full5x5_r9() const
Definition: GsfElectron.h:476
void setDeltaEtaSuperClusterAtVtx(float de)
Definition: GsfElectron.h:240
float dRz1
Pixel match variable: deltaRz for innermost hit.
Definition: GsfElectron.h:921
void setCorrections(const Corrections &c)
Definition: GsfElectron.h:892
void setClassificationVariables(const ClassificationVariables &cv)
Definition: GsfElectron.h:814
float dr03TkSumPtHEEP() const
Definition: GsfElectron.h:558
float deltaEtaSeedClusterTrackAtCalo() const
Definition: GsfElectron.h:226
const MvaInput & mvaInput() const
Definition: GsfElectron.h:734
TrackClusterMatching trackClusterMatching_
Definition: GsfElectron.h:245
bool passCutBasedPreselection_
Definition: GsfElectron.h:782
float scE5x5() const
Definition: GsfElectron.h:499
float full5x5_eRight() const
Definition: GsfElectron.h:485
float full5x5_sigmaIetaIeta() const
Definition: GsfElectron.h:471
const IsolationVariables & isolationVariables04() const
Definition: GsfElectron.h:612
float dr03HcalTowerSumEt(int depth=0) const
Definition: GsfElectron.h:576
IsolationVariables dr03_
Definition: GsfElectron.h:619
void addAmbiguousGsfTrack(const reco::GsfTrackRef &t)
Definition: GsfElectron.h:774
float sumChargedHadronPt
sum-pt of charged Hadron // old float chargedHadronIso ;
Definition: GsfElectron.h:663
int basicClustersSize() const
Definition: GsfElectron.h:295
void full5x5_setShowerShape(const ShowerShape &s)
Definition: GsfElectron.h:492
bool isEEGap() const
Definition: GsfElectron.h:335
TrackExtrapolations trackExtrapolations_
Definition: GsfElectron.h:286
float full5x5_e2x5Top() const
Definition: GsfElectron.h:482
void setFFlagIsEEDeeGap(const bool b)
Definition: GsfElectron.h:346
bool passPflowPreselection_
Definition: GsfElectron.h:783
const ChargeInfo & chargeInfo() const
Definition: GsfElectron.h:131
float full5x5_e2x5Right() const
Definition: GsfElectron.h:481
void setP4(const LorentzVector &p4) final
set 4-momentum
void setPixelMatchDRz1(float dRz1)
Definition: GsfElectron.h:932
float hadronicOverEm() const
Definition: GsfElectron.h:500
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:155
float dr04EcalRecHitSumEt() const
Definition: GsfElectron.h:599
bool passingCutBasedPreselection() const
Definition: GsfElectron.h:763
bool hcalOverEcalValid() const
Definition: GsfElectron.h:462
float pixelMatchDRz1() const
Definition: GsfElectron.h:939
math::XYZPointF trackPositionAtVtx() const
Definition: GsfElectron.h:266
int charge() const final
electric charge
float dnn_signal_Isolated() const
Definition: GsfElectron.h:745
float deltaEtaSeedClusterTrackAtVtx() const
Definition: GsfElectron.h:231
float nSaturatedXtals() const
Definition: GsfElectron.h:519
void hcalToRun2EffDepth()
Definition: GsfElectron.cc:243
virtual ClosestCtfTrack closestCtfTrack() const
Definition: GsfElectron.h:181