21 if (
type_ ==
"classbased" and (version_ ==
"V06")) {
25 if (
type_ ==
"classbased" and (version_ ==
"V03" or version_ ==
"V04" or version_ ==
"V05" or version_.empty())) {
30 if (
type_ ==
"robust" ||
type_ ==
"classbased") {
35 <<
"Invalid electronType parameter in CutBasedElectronID: must be robust or classbased\n";
40 if (
type_ ==
"classbased")
42 else if (
type_ ==
"robust")
51 double fBrem = electron->
fbrem();
55 if ((electron->
isEB() && fBrem < 0.06) || (electron->
isEE() && fBrem < 0.1))
57 else if (eOverP < 1.2 && eOverP > 0.8)
65 if (electron->
isEB()) {
68 else if (eOverP < 1.2 && eOverP > 0.9)
75 else if (eOverP < 1.22 && eOverP > 0.82)
84 if (electron->
isEB()) {
85 if ((fBrem >= 0.12) and (eOverP > 0.9) and (eOverP < 1.2))
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
93 else if (fBrem < 0.12)
98 if ((fBrem >= 0.2) and (eOverP > 0.82) and (eOverP < 1.22))
104 else if (fBrem < 0.2)
126 double fBrem = electron->
fbrem();
140 if (electron->
isEE())
141 sigmaee = sigmaee - 0.02 * (fabs(eta) - 2.3);
147 if (!vtxH->empty()) {
151 ip = fabs(electron->
gsfTrack()->dxy());
153 if (electron->
isEB()) {
158 std::vector<double>
cut;
163 if (electron->
isEB())
170 if ((eOverP < 0.8) && (fBrem < 0.2))
174 if (hOverE > cut[cat + 4 * eb])
178 if (sigmaee > cut[cat + 4 * eb])
183 if (fabs(deltaPhiIn) > cut[cat + 4 * eb])
186 if (fabs(deltaPhiIn) > cut[3 + 4 * eb])
191 if (fabs(deltaEtaIn) > cut[cat + 4 * eb])
195 if (eSeedOverPin < cut[cat + 4 * eb])
199 if (eOverP < 0.9 * (1 - fBrem))
218 eSeedOverPin = eSeedOverPin + fBrem;
221 tkIso = tkIso *
pow(40. / scEt, 2);
222 ecalIso = ecalIso *
pow(40. / scEt, 2);
223 hcalIso = hcalIso *
pow(40. / scEt, 2);
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]))
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.;
268 eSeedOverPin = eSeedOverPin + fBrem;
270 float iso_sum = tkIso + ecalIso + hcalIso;
271 float iso_sum_corrected = iso_sum *
pow(40. / scEt, 2);
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]))
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]))
293 if (ip < cutip[cat + bin * 9])
299 float dist = (electron->
convDist() == -9999. ? 9999 : electron->
convDist());
300 float dcot = (electron->
convDcot() == -9999. ? 9999 : electron->
convDcot());
303 ((0.04 -
std::max(fabs(dist), fabs(dcot))) > 0 ? (0.04 -
std::max(fabs(dist), fabs(dcot))) : 0);
305 if ((mishits < cutmishits[cat + bin * 9]) and (dcotdistcomb < cutdcotdist[cat + bin * 9]))
312 std::vector<double> cutIsoSum =
cuts_.
getParameter<std::vector<double> >(
"cutiso_sum");
313 std::vector<double> cutIsoSumCorr =
cuts_.
getParameter<std::vector<double> >(
"cutiso_sumoet");
322 std::vector<double> cutIsoSumCorrl =
cuts_.
getParameter<std::vector<double> >(
"cutiso_sumoetl");
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");
331 const int ncuts = 10;
332 std::vector<bool> cut_results(ncuts,
false);
334 float iso_sum = tkIso + ecalIso + hcalIso;
336 if (fabs(scEta) > 1.5)
337 iso_sum += (fabs(scEta) - 1.5) * 1.09;
339 float iso_sumoet = iso_sum * (40. / scEt);
341 float eseedopincor = eSeedOverPin + fBrem;
345 float dist = (electron->
convDist() == -9999. ? 9999 : electron->
convDist());
346 float dcot = (electron->
convDcot() == -9999. ? 9999 : electron->
convDcot());
349 ((0.04 -
std::max(fabs(dist), fabs(dcot))) > 0 ? (0.04 -
std::max(fabs(dist), fabs(dcot))) : 0);
351 for (
int cut = 0; cut < ncuts; cut++) {
354 cut_results[
cut] =
compute_cut(fabs(deltaEtaIn), scEt, cutdetal[cat], cutdeta[cat]);
357 cut_results[
cut] =
compute_cut(fabs(deltaPhiIn), scEt, cutdphil[cat], cutdphi[cat]);
360 cut_results[
cut] = (eseedopincor > cuteopin[
cat]);
363 cut_results[
cut] =
compute_cut(hOverE, scEt, cuthoel[cat], cuthoe[cat]);
366 cut_results[
cut] =
compute_cut(sigmaee, scEt, cutseel[cat], cutsee[cat]);
369 cut_results[
cut] =
compute_cut(iso_sumoet, scEt, cutIsoSumCorrl[cat], cutIsoSumCorr[cat]);
372 cut_results[
cut] = (iso_sum < cutIsoSum[
cat]);
375 cut_results[
cut] =
compute_cut(fabs(ip), scEt, cutipl[cat], cutip[cat]);
378 cut_results[
cut] = (mishits < cutmishits[
cat]);
381 cut_results[
cut] = (dcotdistcomb < cutdcotdist[
cat]);
387 if (cut_results[0] & cut_results[1] & cut_results[2] & cut_results[3] & cut_results[4])
391 if (cut_results[5] & cut_results[6])
399 if (cut_results[8] & cut_results[9])
416 cut = cut_min + (1 / et_min - 1 /
et) * (cut_max - cut_min) / (1 / et_min - 1 / et_max);
438 double eta = electron->
p4().Eta();
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;
454 double ecalIsoPed = (electron->
isEB()) ?
std::max(0., ecalIso - 1.) : ecalIso;
461 if (electron->
isEE())
462 sigmaee = sigmaee - 0.02 * (fabs(eta) - 2.3);
472 ip = fabs(electron->
gsfTrack()->dxy(bspotPosition));
474 ip = fabs(electron->
gsfTrack()->dxy());
479 ecalIsoPed = (electron->
isEB()) ?
std::max(0., ecalIso - 1.) : ecalIso;
488 if (!vtxH->empty()) {
492 ip = fabs(electron->
gsfTrack()->dxy());
496 std::vector<double>
cut;
498 if (
type_ ==
"robust") {
502 if (electron->
isEB())
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))))
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]))
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])) {
534 if (mishits > cut[22])
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]);
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
float dr04HcalTowerSumEt() const
const LorentzVector & p4(P4Kind kind) const
float eSuperClusterOverP() const
float dr04HcalDepth1TowerSumEt() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
double result(const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &) override
Sin< T >::type sin(const T &t)
CutBasedElectronID(const edm::ParameterSet &conf, edm::ConsumesCollector &iC)
float dr03HcalDepth2TowerSumEt() const
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
edm::EDGetTokenT< std::vector< reco::Vertex > > verticesCollection_
int classify(const reco::GsfElectron *)
float dr04HcalDepth2TowerSumEt() const
float deltaEtaSuperClusterTrackAtVtx() const
float sigmaIetaIeta() const
float hadronicOverEm() const
float eSeedClusterOverP() const
float dr04EcalRecHitSumEt() const
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
float deltaPhiSuperClusterTrackAtVtx() const
double cicSelection(const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &)
float dr03TkSumPt() const
float dr03HcalDepth1TowerSumEt() const
T const * product() const
XYZPointD XYZPoint
point in space with cartesian internal representation
void setup(const edm::ParameterSet &conf) override
float dr03EcalRecHitSumEt() const
bool compute_cut(double x, double et, double cut_min, double cut_max, bool gtn=false)
SuperClusterRef superCluster() const override
reference to a SuperCluster
bool trackerDrivenSeed() const
float dr03HcalTowerSumEt() const
const Point & position() const
position
Power< A, B >::type pow(const A &a, const B &b)
float sigmaEtaEta() const
bool ecalDrivenSeed() const