21 if (
type_ ==
"classbased" and (version_ ==
"V03" or version_ ==
"V04" or version_ ==
"V05" or version_ ==
"")) {
26 if (
type_ ==
"robust" ||
type_ ==
"classbased") {
32 <<
"Invalid electronType parameter in CutBasedElectronID: must be robust or classbased\n";
40 if (
type_ ==
"classbased")
42 else if (
type_ ==
"robust")
53 double fBrem = electron->
fbrem();
57 if((electron->
isEB() && fBrem<0.06) || (electron->
isEE() && fBrem<0.1))
59 else if (eOverP < 1.2 && eOverP > 0.8)
67 if (electron->
isEB()) {
70 else if (eOverP < 1.2 && eOverP > 0.9)
77 else if (eOverP < 1.22 && eOverP > 0.82)
86 if (electron->
isEB()) {
87 if ((fBrem >= 0.12) and (eOverP > 0.9) and (eOverP < 1.2))
89 else if (((eta > .445 and eta < .45 )
or
90 (eta > .79 and eta < .81 )
or
91 (eta > 1.137 and eta < 1.157 )
or
96 else if (fBrem < 0.12)
101 if ((fBrem >= 0.2) and (eOverP > 0.82) and (eOverP < 1.22))
107 else if (fBrem < 0.2)
126 double eta = electron->
p4().Eta();
129 double fBrem = electron->
fbrem();
136 int mishits = electron->
gsfTrack()->trackerExpectedHitsInner().numberOfHits();
143 if (electron->
isEE())
144 sigmaee = sigmaee - 0.02*(fabs(eta) - 2.3);
150 if (vtxH->size() != 0) {
154 ip = fabs(electron->
gsfTrack()->dxy());
156 if (electron->
isEB()) {
161 std::vector<double>
cut;
166 if (electron->
isEB())
174 if ((eOverP < 0.8) && (fBrem < 0.2))
178 if (hOverE > cut[cat+4*eb])
182 if (sigmaee > cut[cat+4*eb])
187 if (fabs(deltaPhiIn) > cut[cat+4*eb])
190 if (fabs(deltaPhiIn) > cut[3+4*eb])
195 if (fabs(deltaEtaIn) > cut[cat+4*eb])
199 if (eSeedOverPin < cut[cat+4*eb])
203 if (eOverP < 0.9*(1-fBrem))
222 eSeedOverPin = eSeedOverPin + fBrem;
225 tkIso = tkIso*
pow(40./scEt, 2);
226 ecalIso = ecalIso*
pow(40./scEt, 2);
227 hcalIso = hcalIso*
pow(40./scEt, 2);
230 std::vector<double> cutTk =
cuts_.
getParameter<std::vector<double> >(
"cutisotk");
231 std::vector<double> cutEcal =
cuts_.
getParameter<std::vector<double> >(
"cutisoecal");
232 std::vector<double> cutHcal =
cuts_.
getParameter<std::vector<double> >(
"cutisohcal");
233 if ((tkIso > cutTk[cat+3*eb+bin*6]) ||
234 (ecalIso > cutEcal[cat+3*eb+bin*6]) ||
235 (hcalIso > cutHcal[cat+3*eb+bin*6]))
243 std::vector<double> cutdphi =
cuts_.
getParameter<std::vector<double> >(
"cutdphiin");
244 std::vector<double> cutdeta =
cuts_.
getParameter<std::vector<double> >(
"cutdetain");
245 std::vector<double> cuteopin =
cuts_.
getParameter<std::vector<double> >(
"cuteseedopcor");
248 std::vector<double> cutmishits =
cuts_.
getParameter<std::vector<double> >(
"cutmishits");
249 if ((hOverE < cuthoe[cat+3*eb+bin*6]) and
250 (sigmaee < cutsee[cat+3*eb+bin*6]) and
251 (fabs(deltaPhiIn) < cutdphi[cat+3*eb+bin*6]) and
252 (fabs(deltaEtaIn) < cutdeta[cat+3*eb+bin*6]) and
253 (eSeedOverPin > cuteopin[cat+3*eb+bin*6]) and
254 (ip < cutip[cat+3*eb+bin*6]) and
255 (mishits < cutmishits[cat+3*eb+bin*6]))
256 result = result + 1.;
276 eSeedOverPin = eSeedOverPin + fBrem;
278 float iso_sum = tkIso + ecalIso + hcalIso;
279 float iso_sum_corrected = iso_sum*
pow(40./scEt, 2);
281 std::vector<double> cutIsoSum =
cuts_.
getParameter<std::vector<double> >(
"cutiso_sum");
282 std::vector<double> cutIsoSumCorr =
cuts_.
getParameter<std::vector<double> >(
"cutiso_sumoet");
283 if ((iso_sum < cutIsoSum[cat+bin*9]) and
284 (iso_sum_corrected < cutIsoSumCorr[cat+bin*9]))
290 std::vector<double> cutdphi =
cuts_.
getParameter<std::vector<double> >(
"cutdphiin");
291 std::vector<double> cutdeta =
cuts_.
getParameter<std::vector<double> >(
"cutdetain");
292 std::vector<double> cuteopin =
cuts_.
getParameter<std::vector<double> >(
"cuteseedopcor");
295 if ((hOverE < cuthoe[cat+bin*9]) and
296 (sigmaee < cutsee[cat+bin*9]) and
297 (fabs(deltaPhiIn) < cutdphi[cat+bin*9]) and
298 (fabs(deltaEtaIn) < cutdeta[cat+bin*9]) and
299 (eSeedOverPin > cuteopin[cat+bin*9]) and
300 (scEt > cutet[cat+bin*9]))
304 std::vector<double> cutip =
cuts_.
getParameter<std::vector<double> >(
"cutip_gsf");
305 if (ip < cutip[cat+bin*9])
308 std::vector<double> cutmishits =
cuts_.
getParameter<std::vector<double> >(
"cutfmishits");
314 float dcotdistcomb = ((0.04 -
std::max(dist, dcot)) > 0?(0.04 -
std::max(dist, dcot)):0);
316 if ((mishits < cutmishits[cat+bin*9]) and
317 (dcotdistcomb < cutdcotdist[cat+bin*9]))
324 std::vector<double> cutIsoSum =
cuts_.
getParameter<std::vector<double> >(
"cutiso_sum");
325 std::vector<double> cutIsoSumCorr =
cuts_.
getParameter<std::vector<double> >(
"cutiso_sumoet");
328 std::vector<double> cutdphi =
cuts_.
getParameter<std::vector<double> >(
"cutdphiin");
329 std::vector<double> cutdeta =
cuts_.
getParameter<std::vector<double> >(
"cutdetain");
330 std::vector<double> cuteopin =
cuts_.
getParameter<std::vector<double> >(
"cuteseedopcor");
331 std::vector<double> cutmishits =
cuts_.
getParameter<std::vector<double> >(
"cutfmishits");
333 std::vector<double> cutip =
cuts_.
getParameter<std::vector<double> >(
"cutip_gsf");
334 std::vector<double> cutIsoSumCorrl =
cuts_.
getParameter<std::vector<double> >(
"cutiso_sumoetl");
337 std::vector<double> cutdphil =
cuts_.
getParameter<std::vector<double> >(
"cutdphiinl");
338 std::vector<double> cutdetal =
cuts_.
getParameter<std::vector<double> >(
"cutdetainl");
339 std::vector<double> cutipl =
cuts_.
getParameter<std::vector<double> >(
"cutip_gsfl");
343 const int ncuts = 10;
344 std::vector<bool> cut_results(ncuts,
false);
346 float iso_sum = tkIso + ecalIso + hcalIso;
349 iso_sum += (fabs(scEta)-1.5)*1.09;
351 float iso_sumoet = iso_sum*(40./scEt);
353 float eseedopincor = eSeedOverPin + fBrem;
355 eseedopincor = eSeedOverPin;
360 float dcotdistcomb = ((0.04 -
std::max(dist, dcot)) > 0?(0.04 -
std::max(dist, dcot)):0);
362 for (
int cut=0; cut<ncuts; cut++) {
365 cut_results[
cut] =
compute_cut(fabs(deltaEtaIn), scEt, cutdetal[cat], cutdeta[cat]);
368 cut_results[
cut] =
compute_cut(fabs(deltaPhiIn), scEt, cutdphil[cat], cutdphi[cat]);
371 cut_results[
cut] = (eseedopincor > cuteopin[cat]);
374 cut_results[
cut] =
compute_cut(hOverE, scEt, cuthoel[cat], cuthoe[cat]);
377 cut_results[
cut] =
compute_cut(sigmaee, scEt, cutseel[cat], cutsee[cat]);
380 cut_results[
cut] =
compute_cut(iso_sumoet, scEt, cutIsoSumCorrl[cat], cutIsoSumCorr[cat]);
383 cut_results[
cut] = (iso_sum < cutIsoSum[cat]);
386 cut_results[
cut] =
compute_cut(fabs(ip), scEt, cutipl[cat], cutip[cat]);
389 cut_results[
cut] = (mishits < cutmishits[cat]);
392 cut_results[
cut] = (dcotdistcomb < cutdcotdist[cat]);
398 if (cut_results[0] & cut_results[1] & cut_results[2] & cut_results[3] & cut_results[4])
402 if (cut_results[5] & cut_results[6])
410 if (cut_results[8] and cut_results[9])
429 cut = cut_min + (1/et_min - 1/
et)*(cut_max - cut_min)/(1/et_min - 1/et_max);
453 double eta = electron->
p4().Eta();
457 double e25Max = electron->
e2x5Max();
458 double e15 = electron->
e1x5();
459 double e55 = electron->
e5x5();
460 double e25Maxoe55 = e25Max/e55;
461 double e15oe55 = e15/e55 ;
466 int mishits = electron->
gsfTrack()->trackerExpectedHitsInner().numberOfHits();
469 double ecalIsoPed = (electron->
isEB())?
std::max(0.,ecalIso-1.):ecalIso;
476 if (electron->
isEE())
477 sigmaee = sigmaee - 0.02*(fabs(eta) - 2.3);
487 ip = fabs(electron->
gsfTrack()->dxy(bspotPosition));
489 ip = fabs(electron->
gsfTrack()->dxy());
494 ecalIsoPed = (electron->
isEB())?
std::max(0.,ecalIso-1.):ecalIso;
503 if (vtxH->size() != 0) {
507 ip = fabs(electron->
gsfTrack()->dxy());
511 std::vector<double>
cut;
513 if (
type_ ==
"robust") {
518 if (electron->
isEB())
524 if ((tkIso > cut[6] || hcalIso2 > cut[11]) ||
525 (electron->
isEB() && ((ecalIso + hcalIso1) > cut[7]+cut[8]*scEt)) ||
526 (electron->
isEE() && (scEt >= 50.) && ((ecalIso + hcalIso1) > cut[7]+cut[8]*(scEt-50))) ||
527 (electron->
isEE() && (scEt < 50.) && ((ecalIso + hcalIso1) > cut[9]+cut[10]*(scEt-50))))
532 if ((tkIso > cut[6]) || (ecalIso > cut[7]) || (hcalIso > cut[8]) || (hcalIso1 > cut[9]) || (hcalIso2 > cut[10]) ||
533 (tkIso/electron->
p4().Pt() > cut[11]) || (ecalIso/electron->
p4().Pt() > cut[12]) || (hcalIso/electron->
p4().Pt() > cut[13]) ||
534 ((tkIso+ecalIso+hcalIso)>cut[14]) || (((tkIso+ecalIso+hcalIso)/ electron->
p4().Pt()) > cut[15]) ||
535 ((tkIso+ecalIsoPed+hcalIso)>cut[16]) || (((tkIso+ecalIsoPed+hcalIso)/ electron->
p4().Pt()) > cut[17]) )
541 if ((hOverE < cut[0]) && (sigmaee < cut[1]) && (fabs(deltaPhiIn) < cut[2]) &&
542 (fabs(deltaEtaIn) < cut[3]) && (e25Maxoe55 > cut[4] && e15oe55 > cut[5]) &&
543 (sigmaee >= cut[18]) && (eOverP > cut[19] && eOverP < cut[20]) )
544 { result = result + 1 ; }
548 if (mishits > cut[22])
551 if (cut[23] >0 && not (electron->
gsfTrack()->hitPattern().hasValidHitInFirstPixelBarrel()))
555 float dist = fabs(electron->
convDist());
556 float dcot = fabs(electron->
convDcot());
557 bool isConversion = (cut[24]>99. || cut[25]>99.)?
false:(dist < cut[24] && dcot < cut[25]);
T getParameter(std::string const &) const
float dr04HcalTowerSumEt() const
float eSuperClusterOverP() const
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
float dr04HcalDepth1TowerSumEt() const
Sin< T >::type sin(const T &t)
void baseSetup(const edm::ParameterSet &conf)
Exp< T >::type exp(const T &t)
float dr03HcalDepth2TowerSumEt() const
SuperClusterRef superCluster() const
reference to a SuperCluster
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
double result(const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &)
int classify(const reco::GsfElectron *)
float dr04HcalDepth2TowerSumEt() const
float deltaEtaSuperClusterTrackAtVtx() const
float sigmaIetaIeta() const
float hadronicOverEm() const
float eSeedClusterOverP() const
float dr04EcalRecHitSumEt() const
const T & max(const T &a, const T &b)
double robustSelection(const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &)
edm::InputTag verticesCollection_
float deltaPhiSuperClusterTrackAtVtx() const
double cicSelection(const reco::GsfElectron *, const edm::Event &, const edm::EventSetup &)
float dr03TkSumPt() const
float dr03HcalDepth1TowerSumEt() const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
GsfTrackRef gsfTrack() const
reference to a GsfTrack
XYZPointD XYZPoint
point in space with cartesian internal representation
T const * product() const
float dr03EcalRecHitSumEt() const
bool compute_cut(double x, double et, double cut_min, double cut_max, bool gtn=false)
bool trackerDrivenSeed() const
float dr03HcalTowerSumEt() const
const Point & position() const
position
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
void setup(const edm::ParameterSet &conf)
Power< A, B >::type pow(const A &a, const B &b)
float sigmaEtaEta() const
bool ecalDrivenSeed() const