CMS 3D CMS Logo

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

#include <PTDRElectronID.h>

Inheritance diagram for PTDRElectronID:
ElectronIDAlgo

Public Member Functions

 PTDRElectronID ()
 
double result (const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &) override
 
void setup (const edm::ParameterSet &conf) override
 
 ~PTDRElectronID () override
 
- Public Member Functions inherited from ElectronIDAlgo
 ElectronIDAlgo ()
 
virtual ~ElectronIDAlgo ()
 

Private Attributes

std::vector< int > acceptCracks_
 
edm::ParameterSet cuts_
 
std::string quality_
 
std::vector< int > useBremFraction_
 
std::vector< int > useDeltaEtaIn_
 
std::vector< int > useDeltaPhiIn_
 
std::vector< int > useDeltaPhiOut_
 
std::vector< int > useE9overE25_
 
std::vector< int > useEoverPIn_
 
std::vector< int > useEoverPOut_
 
std::vector< int > useHoverE_
 
std::vector< int > useInvEMinusInvP_
 
std::vector< int > useSigmaEtaEta_
 
std::vector< int > useSigmaPhiPhi_
 
int variables_
 

Additional Inherited Members

- Protected Attributes inherited from ElectronIDAlgo
edm::InputTag reducedBarrelRecHitCollection_
 
edm::InputTag reducedEndcapRecHitCollection_
 

Detailed Description

Definition at line 6 of file PTDRElectronID.h.

Constructor & Destructor Documentation

PTDRElectronID::PTDRElectronID ( )
inline

Definition at line 8 of file PTDRElectronID.h.

8 {};
PTDRElectronID::~PTDRElectronID ( )
inlineoverride

Definition at line 10 of file PTDRElectronID.h.

10 {};

Member Function Documentation

double PTDRElectronID::result ( const reco::GsfElectron electron,
const edm::Event e,
const edm::EventSetup es 
)
overridevirtual

Reimplemented from ElectronIDAlgo.

Definition at line 37 of file PTDRElectronID.cc.

References acceptCracks_, reco::GsfElectron::BIGBREM, reco::GsfElectron::caloEnergy(), reco::GsfElectron::classification(), cuts_, reco::GsfElectron::deltaEtaSuperClusterTrackAtVtx(), reco::GsfElectron::deltaPhiSeedClusterTrackAtCalo(), reco::GsfElectron::deltaPhiSuperClusterTrackAtVtx(), reco::GsfElectron::e5x5(), reco::GsfElectron::eSeedClusterOverPout(), reco::GsfElectron::eSuperClusterOverP(), reco::GsfElectron::GAP, edm::ParameterSet::getParameter(), reco::GsfElectron::GOLDEN, reco::GsfElectron::hadronicOverEm(), reco::GsfElectron::isEB(), reco::GsfElectron::isEE(), reco::GsfElectron::r9(), reco::GsfElectron::SHOWERING, reco::GsfElectron::sigmaIetaIeta(), reco::GsfElectron::sigmaIphiIphi(), reco::GsfElectron::superCluster(), reco::GsfElectron::trackMomentumAtVtx(), reco::GsfElectron::trackMomentumOut(), reco::GsfElectron::UNKNOWN, useBremFraction_, useDeltaEtaIn_, useDeltaPhiIn_, useDeltaPhiOut_, useE9overE25_, useEoverPIn_, useEoverPOut_, useHoverE_, useInvEMinusInvP_, useSigmaEtaEta_, useSigmaPhiPhi_, relativeConstraints::value, and variables_.

37  {
38  //determine which element of the cut arrays in cfi file to read
39  //depending on the electron classification
40  int icut = 0;
41  int elClass = electron->classification();
42  if (electron->isEB()) //barrel
43  {
44  if (elClass == reco::GsfElectron::GOLDEN)
45  icut = 0;
46  if (elClass == reco::GsfElectron::BIGBREM)
47  icut = 1;
48  //if (elClass == reco::GsfElectron::NARROW) icut=2;
49  if (elClass == reco::GsfElectron::SHOWERING)
50  icut = 3;
51  if (elClass == reco::GsfElectron::GAP)
52  icut = 8;
53  }
54  if (electron->isEE()) //endcap
55  {
56  if (elClass == reco::GsfElectron::GOLDEN)
57  icut = 4;
58  if (elClass == reco::GsfElectron::BIGBREM)
59  icut = 5;
60  //if (elClass == reco::GsfElectron::NARROW) icut=6;
61  if (elClass == reco::GsfElectron::SHOWERING)
62  icut = 7;
63  if (elClass == reco::GsfElectron::GAP)
64  icut = 8;
65  }
66  if (elClass == reco::GsfElectron::UNKNOWN) {
67  edm::LogError("PTDRElectronID") << "Error: unrecognized electron classification ";
68  return 1.;
69  }
70 
72  if (elClass == reco::GsfElectron::GAP)
73  return 1.;
74 
75  if (useEoverPIn_[variables_]) {
76  double value = electron->eSuperClusterOverP();
77  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("EoverPInMax");
78  std::vector<double> mincut = cuts_.getParameter<std::vector<double> >("EoverPInMin");
79  if (value < mincut[icut] || value > maxcut[icut])
80  return 0.;
81  }
82 
83  if (useDeltaEtaIn_[variables_]) {
84  double value = electron->deltaEtaSuperClusterTrackAtVtx();
85  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("deltaEtaIn");
86  if (fabs(value) > maxcut[icut])
87  return 0.;
88  }
89 
90  if (useDeltaPhiIn_[variables_]) {
91  double value = electron->deltaPhiSuperClusterTrackAtVtx();
92  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("deltaPhiIn");
93  if (fabs(value) > maxcut[icut])
94  return 0.;
95  }
96 
97  if (useHoverE_[variables_]) {
98  double value = electron->hadronicOverEm();
99  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("HoverE");
100  if (value > maxcut[icut])
101  return 0.;
102  }
103 
104  if (useEoverPOut_[variables_]) {
105  double value = electron->eSeedClusterOverPout();
106  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("EoverPOutMax");
107  std::vector<double> mincut = cuts_.getParameter<std::vector<double> >("EoverPOutMin");
108  if (value < mincut[icut] || value > maxcut[icut])
109  return 0.;
110  }
111 
112  if (useDeltaPhiOut_[variables_]) {
113  double value = electron->deltaPhiSeedClusterTrackAtCalo();
114  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("deltaPhiOut");
115  if (fabs(value) > maxcut[icut])
116  return 0.;
117  }
118 
119  if (useInvEMinusInvP_[variables_]) {
120  double value = (1. / electron->caloEnergy()) - (1. / electron->trackMomentumAtVtx().R());
121  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("invEMinusInvP");
122  if (value > maxcut[icut])
123  return 0.;
124  }
125 
126  if (useBremFraction_[variables_]) {
127  double value = electron->trackMomentumAtVtx().R() - electron->trackMomentumOut().R();
128  std::vector<double> mincut = cuts_.getParameter<std::vector<double> >("bremFraction");
129  if (value < mincut[icut])
130  return 0.;
131  }
132 
133  //EcalClusterLazyTools lazyTools = getClusterShape(e,es);
134  //std::vector<float> vCov = lazyTools.localCovariances(*(electron->superCluster()->seed())) ;
135  //std::vector<float> vCov = lazyTools.covariances(*(electron->superCluster()->seed())) ;
136 
137  if (useE9overE25_[variables_]) {
138  double value = electron->r9() * electron->superCluster()->energy() / electron->e5x5();
139  std::vector<double> mincut = cuts_.getParameter<std::vector<double> >("E9overE25");
140  if (fabs(value) < mincut[icut])
141  return 0.;
142  }
143 
144  if (useSigmaEtaEta_[variables_]) {
145  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("sigmaEtaEtaMax");
146  std::vector<double> mincut = cuts_.getParameter<std::vector<double> >("sigmaEtaEtaMin");
147  if (electron->sigmaIetaIeta() < mincut[icut] || electron->sigmaIetaIeta() > maxcut[icut])
148  return 0.;
149  }
150 
151  if (useSigmaPhiPhi_[variables_]) {
152  std::vector<double> mincut = cuts_.getParameter<std::vector<double> >("sigmaPhiPhiMin");
153  std::vector<double> maxcut = cuts_.getParameter<std::vector<double> >("sigmaPhiPhiMax");
154  if (electron->sigmaIphiIphi() < mincut[icut] || electron->sigmaIphiIphi() > maxcut[icut])
155  return 0.;
156  }
157 
158  return 1.;
159 }
float sigmaIphiIphi() const
Definition: GsfElectron.h:420
float eSuperClusterOverP() const
Definition: GsfElectron.h:221
edm::ParameterSet cuts_
std::vector< int > useHoverE_
math::XYZVectorF trackMomentumAtVtx() const
Definition: GsfElectron.h:268
std::vector< int > useInvEMinusInvP_
std::vector< int > useDeltaPhiOut_
Log< level::Error, false > LogError
bool isEE() const
Definition: GsfElectron.h:329
bool isEB() const
Definition: GsfElectron.h:328
std::vector< int > useSigmaPhiPhi_
float deltaEtaSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:225
float sigmaIetaIeta() const
Definition: GsfElectron.h:419
float hadronicOverEm() const
Definition: GsfElectron.h:500
std::vector< int > useEoverPIn_
float deltaPhiSeedClusterTrackAtCalo() const
Definition: GsfElectron.h:229
math::XYZVectorF trackMomentumOut() const
Definition: GsfElectron.h:270
float deltaPhiSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:228
float eSeedClusterOverPout() const
Definition: GsfElectron.h:223
std::vector< int > useDeltaEtaIn_
std::vector< int > useEoverPOut_
std::vector< int > useSigmaEtaEta_
Classification classification() const
Definition: GsfElectron.h:805
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
float e5x5() const
Definition: GsfElectron.h:423
float r9() const
Definition: GsfElectron.h:424
std::vector< int > useBremFraction_
std::vector< int > useDeltaPhiIn_
float caloEnergy() const
Definition: GsfElectron.h:899
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:155
std::vector< int > useE9overE25_
std::vector< int > acceptCracks_
void PTDRElectronID::setup ( const edm::ParameterSet conf)
overridevirtual

Reimplemented from ElectronIDAlgo.

Definition at line 3 of file PTDRElectronID.cc.

References acceptCracks_, cuts_, Exception, edm::ParameterSet::getParameter(), quality_, AlCaHLTBitMon_QueryRunRegistry::string, useBremFraction_, useDeltaEtaIn_, useDeltaPhiIn_, useDeltaPhiOut_, useE9overE25_, useEoverPIn_, useEoverPOut_, useHoverE_, useInvEMinusInvP_, useSigmaEtaEta_, useSigmaPhiPhi_, and variables_.

3  {
4  // Get all the parameters
5  //baseSetup(conf);
6 
7  quality_ = conf.getParameter<std::string>("electronQuality");
8 
9  useEoverPIn_ = conf.getParameter<std::vector<int> >("useEoverPIn");
10  useDeltaEtaIn_ = conf.getParameter<std::vector<int> >("useDeltaEtaIn");
11  useDeltaPhiIn_ = conf.getParameter<std::vector<int> >("useDeltaPhiIn");
12  useHoverE_ = conf.getParameter<std::vector<int> >("useHoverE");
13  useE9overE25_ = conf.getParameter<std::vector<int> >("useE9overE25");
14  useEoverPOut_ = conf.getParameter<std::vector<int> >("useEoverPOut");
15  useDeltaPhiOut_ = conf.getParameter<std::vector<int> >("useDeltaPhiOut");
16  useInvEMinusInvP_ = conf.getParameter<std::vector<int> >("useInvEMinusInvP");
17  useBremFraction_ = conf.getParameter<std::vector<int> >("useBremFraction");
18  useSigmaEtaEta_ = conf.getParameter<std::vector<int> >("useSigmaEtaEta");
19  useSigmaPhiPhi_ = conf.getParameter<std::vector<int> >("useSigmaPhiPhi");
20  acceptCracks_ = conf.getParameter<std::vector<int> >("acceptCracks");
21 
22  if (quality_ == "tight") {
23  cuts_ = conf.getParameter<edm::ParameterSet>("tightEleIDCuts");
24  variables_ = 2;
25  } else if (quality_ == "medium") {
26  cuts_ = conf.getParameter<edm::ParameterSet>("mediumEleIDCuts");
27  variables_ = 1;
28  } else if (quality_ == "loose") {
29  cuts_ = conf.getParameter<edm::ParameterSet>("looseEleIDCuts");
30  variables_ = 0;
31  } else {
32  throw cms::Exception("Configuration")
33  << "Invalid electronQuality parameter in PTDElectronID: must be tight, medium or loose.";
34  }
35 }
edm::ParameterSet cuts_
std::vector< int > useHoverE_
std::vector< int > useInvEMinusInvP_
std::vector< int > useDeltaPhiOut_
std::vector< int > useSigmaPhiPhi_
std::vector< int > useEoverPIn_
std::vector< int > useDeltaEtaIn_
std::vector< int > useEoverPOut_
std::vector< int > useSigmaEtaEta_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::vector< int > useBremFraction_
std::vector< int > useDeltaPhiIn_
std::string quality_
std::vector< int > useE9overE25_
std::vector< int > acceptCracks_

Member Data Documentation

std::vector<int> PTDRElectronID::acceptCracks_
private

Definition at line 29 of file PTDRElectronID.h.

Referenced by result(), and setup().

edm::ParameterSet PTDRElectronID::cuts_
private

Definition at line 31 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::string PTDRElectronID::quality_
private

Definition at line 16 of file PTDRElectronID.h.

Referenced by setup().

std::vector<int> PTDRElectronID::useBremFraction_
private

Definition at line 26 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useDeltaEtaIn_
private

Definition at line 19 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useDeltaPhiIn_
private

Definition at line 20 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useDeltaPhiOut_
private

Definition at line 24 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useE9overE25_
private

Definition at line 22 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useEoverPIn_
private

Definition at line 18 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useEoverPOut_
private

Definition at line 23 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useHoverE_
private

Definition at line 21 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useInvEMinusInvP_
private

Definition at line 25 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useSigmaEtaEta_
private

Definition at line 27 of file PTDRElectronID.h.

Referenced by result(), and setup().

std::vector<int> PTDRElectronID::useSigmaPhiPhi_
private

Definition at line 28 of file PTDRElectronID.h.

Referenced by result(), and setup().

int PTDRElectronID::variables_
private

Definition at line 33 of file PTDRElectronID.h.

Referenced by result(), and setup().