25 float trk_nhits_ = -1.;
26 float trk_high_quality_ = -1.;
27 float trk_chi2red_ = -1.;
29 float ktf_ecal_cluster_e_ = -1.;
30 float ktf_ecal_cluster_deta_ = -42.;
31 float ktf_ecal_cluster_dphi_ = -42.;
32 float ktf_ecal_cluster_e3x3_ = -1.;
33 float ktf_ecal_cluster_e5x5_ = -1.;
34 float ktf_ecal_cluster_covEtaEta_ = -42.;
35 float ktf_ecal_cluster_covEtaPhi_ = -42.;
36 float ktf_ecal_cluster_covPhiPhi_ = -42.;
37 float ktf_ecal_cluster_r9_ = -0.1;
38 float ktf_ecal_cluster_circularity_ = -0.1;
39 float ktf_hcal_cluster_e_ = -1.;
40 float ktf_hcal_cluster_deta_ = -42.;
41 float ktf_hcal_cluster_dphi_ = -42.;
42 float preid_gsf_dpt_ = -1.;
43 float preid_trk_gsf_chiratio_ = -1.;
44 float preid_gsf_chi2red_ = -1.;
45 float trk_dxy_sig_ = -1.;
48 const auto& trk =
ecal.trackRef();
49 if (trk.isNonnull()) {
51 trk_eta_ = trk->eta();
52 trk_phi_ = trk->phi();
54 trk_nhits_ = static_cast<float>(trk->found());
56 trk_chi2red_ = trk->normalizedChi2();
57 if (trk->dxy(spot) > 0.) {
58 trk_dxy_sig_ = trk->dxyError() / trk->dxy(spot);
60 ktf_ecal_cluster_dphi_ *= trk->charge();
64 rho_ = static_cast<float>(rho);
67 const auto& ecal_clu =
ecal.clusterRef();
68 if (ecal_clu.isNonnull()) {
69 ktf_ecal_cluster_e_ = ecal_clu->energy();
70 ktf_ecal_cluster_deta_ =
ecal.geomMatching()[0];
71 ktf_ecal_cluster_dphi_ =
ecal.geomMatching()[1];
72 ktf_ecal_cluster_e3x3_ =
tools.e3x3(*ecal_clu);
73 ktf_ecal_cluster_e5x5_ =
tools.e5x5(*ecal_clu);
74 const auto& covs =
tools.localCovariances(*ecal_clu);
75 ktf_ecal_cluster_covEtaEta_ = covs[0];
76 ktf_ecal_cluster_covEtaPhi_ = covs[1];
77 ktf_ecal_cluster_covPhiPhi_ = covs[2];
78 if (ktf_ecal_cluster_e_ > 0.) {
79 ktf_ecal_cluster_r9_ = ktf_ecal_cluster_e3x3_ / ktf_ecal_cluster_e_;
81 if (ktf_ecal_cluster_e5x5_ > 0.) {
82 ktf_ecal_cluster_circularity_ = 1. -
tools.e1x5(*ecal_clu) / ktf_ecal_cluster_e5x5_;
84 ktf_ecal_cluster_circularity_ = -0.1;
89 const auto& hcal_clu =
hcal.clusterRef();
90 if (hcal_clu.isNonnull()) {
91 ktf_hcal_cluster_e_ = hcal_clu->energy();
92 ktf_hcal_cluster_deta_ =
hcal.geomMatching()[0];
93 ktf_hcal_cluster_dphi_ =
hcal.geomMatching()[1];
97 preid_gsf_dpt_ =
ecal.dpt();
98 preid_trk_gsf_chiratio_ =
ecal.chi2Ratio();
99 preid_gsf_chi2red_ =
ecal.gsfChi2();
102 std::vector<float>
output = {trk_pt_,
111 ktf_ecal_cluster_deta_,
112 ktf_ecal_cluster_dphi_,
113 ktf_ecal_cluster_e3x3_,
114 ktf_ecal_cluster_e5x5_,
115 ktf_ecal_cluster_covEtaEta_,
116 ktf_ecal_cluster_covEtaPhi_,
117 ktf_ecal_cluster_covPhiPhi_,
118 ktf_ecal_cluster_r9_,
119 ktf_ecal_cluster_circularity_,
121 ktf_hcal_cluster_deta_,
122 ktf_hcal_cluster_dphi_,
124 preid_trk_gsf_chiratio_,
135 float eid_rho = -999.;
136 float eid_sc_eta = -999.;
137 float eid_shape_full5x5_r9 = -999.;
138 float eid_sc_etaWidth = -999.;
139 float eid_sc_phiWidth = -999.;
140 float eid_shape_full5x5_HoverE = -999.;
141 float eid_trk_nhits = -999.;
142 float eid_trk_chi2red = -999.;
143 float eid_gsf_chi2red = -999.;
144 float eid_brem_frac = -999.;
145 float eid_gsf_nhits = -999.;
146 float eid_match_SC_EoverP = -999.;
147 float eid_match_eclu_EoverP = -999.;
148 float eid_match_SC_dEta = -999.;
149 float eid_match_SC_dPhi = -999.;
150 float eid_match_seed_dEta = -999.;
151 float eid_sc_E = -999.;
152 float eid_trk_p = -999.;
153 float gsf_mode_p = -999.;
154 float core_shFracHits = -999.;
155 float gsf_bdtout1 = -999.;
156 float gsf_dr = -999.;
157 float trk_dr = -999.;
158 float sc_Nclus = -999.;
159 float sc_clus1_nxtal = -999.;
160 float sc_clus1_dphi = -999.;
161 float sc_clus2_dphi = -999.;
162 float sc_clus1_deta = -999.;
163 float sc_clus2_deta = -999.;
164 float sc_clus1_E = -999.;
165 float sc_clus2_E = -999.;
166 float sc_clus1_E_ov_p = -999.;
167 float sc_clus2_E_ov_p = -999.;
173 eid_trk_p = (
float)trk->p();
174 eid_trk_nhits = (
float)trk->found();
175 eid_trk_chi2red = (
float)trk->normalizedChi2();
176 TVector3 trkTV3(0, 0, 0);
177 trkTV3.SetPtEtaPhi(trk->pt(), trk->eta(), trk->phi());
178 TVector3 eleTV3(0, 0, 0);
179 eleTV3.SetPtEtaPhi(ele.
pt(), ele.
eta(), ele.
phi());
180 trk_dr = eleTV3.DeltaR(trkTV3);
187 if (
gsf.isNonnull()) {
188 gsf_mode_p =
gsf->pMode();
189 eid_gsf_nhits = (
float)
gsf->found();
190 eid_gsf_chi2red =
gsf->normalizedChi2();
191 TVector3 gsfTV3(0, 0, 0);
192 gsfTV3.SetPtEtaPhi(
gsf->ptMode(),
gsf->etaMode(),
gsf->phiMode());
193 TVector3 eleTV3(0, 0, 0);
194 eleTV3.SetPtEtaPhi(ele.
pt(), ele.
eta(), ele.
phi());
195 gsf_dr = eleTV3.DeltaR(gsfTV3);
203 eid_sc_E = sc->energy();
204 eid_sc_eta = sc->eta();
205 eid_sc_etaWidth = sc->etaWidth();
206 eid_sc_phiWidth = sc->phiWidth();
207 sc_Nclus = sc->clustersSize();
213 eid_match_eclu_EoverP = (1. / ele.
ecalEnergy()) - (1. / ele.
p());
225 eid_brem_frac = ele.
fbrem();
234 if (
gsf.isNonnull()) {
238 double mass2 = 0.000511 * 0.000511;
250 sc_clus1_nxtal = -999;
251 sc_clus1_dphi = -999.;
252 sc_clus2_dphi = -999.;
253 sc_clus1_deta = -999.;
254 sc_clus2_deta = -999.;
257 sc_clus1_E_ov_p = -999.;
258 sc_clus2_E_ov_p = -999.;
272 sc_clus1_nxtal = (
int)sc_clus1_nxtal;
279 eid_rho = std::clamp(eid_rho, 0.
f, 100.
f);
280 eid_sc_eta = std::clamp(eid_sc_eta, -5.
f, 5.
f);
281 eid_shape_full5x5_r9 = std::clamp(eid_shape_full5x5_r9, 0.
f, 2.
f);
282 eid_sc_etaWidth = std::clamp(eid_sc_etaWidth, 0.
f, 3.14
f);
283 eid_sc_phiWidth = std::clamp(eid_sc_phiWidth, 0.
f, 3.14
f);
284 eid_shape_full5x5_HoverE = std::clamp(eid_shape_full5x5_HoverE, 0.
f, 50.
f);
285 eid_trk_nhits = std::clamp(eid_trk_nhits, -1.
f, 50.
f);
286 eid_trk_chi2red = std::clamp(eid_trk_chi2red, -1.
f, 50.
f);
287 eid_gsf_chi2red = std::clamp(eid_gsf_chi2red, -1.
f, 100.
f);
288 if (eid_brem_frac < 0.)
290 if (eid_brem_frac > 1.)
292 eid_gsf_nhits = std::clamp(eid_gsf_nhits, -1.
f, 50.
f);
293 eid_match_SC_EoverP = std::clamp(eid_match_SC_EoverP, 0.
f, 100.
f);
294 eid_match_eclu_EoverP = std::clamp(eid_match_eclu_EoverP, -1.
f, 1.
f);
295 eid_match_SC_dEta = std::clamp(eid_match_SC_dEta, -10.
f, 10.
f);
296 eid_match_SC_dPhi = std::clamp(eid_match_SC_dPhi, -3.14
f, 3.14
f);
297 eid_match_seed_dEta = std::clamp(eid_match_seed_dEta, -10.
f, 10.
f);
298 eid_sc_E = std::clamp(eid_sc_E, 0.
f, 1000.
f);
299 eid_trk_p = std::clamp(eid_trk_p, -1.
f, 1000.
f);
300 gsf_mode_p = std::clamp(gsf_mode_p, 0.
f, 1000.
f);
301 core_shFracHits = std::clamp(core_shFracHits, 0.
f, 1.
f);
302 gsf_bdtout1 = std::clamp(gsf_bdtout1, -20.
f, 20.
f);
311 sc_Nclus = std::clamp(sc_Nclus, 0.
f, 20.
f);
312 sc_clus1_nxtal = std::clamp(sc_clus1_nxtal, 0.
f, 100.
f);
313 sc_clus1_dphi = std::clamp(sc_clus1_dphi, -3.14
f, 3.14
f);
314 sc_clus2_dphi = std::clamp(sc_clus2_dphi, -3.14
f, 3.14
f);
315 sc_clus1_deta = std::clamp(sc_clus1_deta, -5.
f, 5.
f);
316 sc_clus2_deta = std::clamp(sc_clus2_deta, -5.
f, 5.
f);
317 sc_clus1_E = std::clamp(sc_clus1_E, 0.
f, 1000.
f);
318 sc_clus2_E = std::clamp(sc_clus2_E, 0.
f, 1000.
f);
319 if (sc_clus1_E_ov_p < 0.)
320 sc_clus1_E_ov_p = -1.;
321 if (sc_clus2_E_ov_p < 0.)
322 sc_clus2_E_ov_p = -1.;
325 std::vector<float>
output = {eid_rho,
327 eid_shape_full5x5_r9,
330 eid_shape_full5x5_HoverE,
337 eid_match_eclu_EoverP,
364 float eid_rho = -999.;
365 float eid_sc_eta = -999.;
366 float eid_shape_full5x5_r9 = -999.;
367 float eid_sc_etaWidth = -999.;
368 float eid_sc_phiWidth = -999.;
369 float eid_shape_full5x5_HoverE = -999.;
370 float eid_trk_nhits = -999.;
371 float eid_trk_chi2red = -999.;
372 float eid_gsf_chi2red = -999.;
373 float eid_brem_frac = -999.;
374 float eid_gsf_nhits = -999.;
375 float eid_match_SC_EoverP = -999.;
376 float eid_match_eclu_EoverP = -999.;
377 float eid_match_SC_dEta = -999.;
378 float eid_match_SC_dPhi = -999.;
379 float eid_match_seed_dEta = -999.;
380 float eid_sc_E = -999.;
381 float eid_trk_p = -999.;
382 float gsf_mode_p = -999.;
383 float core_shFracHits = -999.;
384 float gsf_bdtout1 = -999.;
385 float gsf_dr = -999.;
386 float trk_dr = -999.;
387 float sc_Nclus = -999.;
388 float sc_clus1_nxtal = -999.;
389 float sc_clus1_dphi = -999.;
390 float sc_clus2_dphi = -999.;
391 float sc_clus1_deta = -999.;
392 float sc_clus2_deta = -999.;
393 float sc_clus1_E = -999.;
394 float sc_clus2_E = -999.;
395 float sc_clus1_E_ov_p = -999.;
396 float sc_clus2_E_ov_p = -999.;
401 if (trk.isNonnull()) {
402 eid_trk_p = (
float)trk->p();
403 eid_trk_nhits = (
float)trk->found();
404 eid_trk_chi2red = (
float)trk->normalizedChi2();
405 TVector3 trkTV3(0, 0, 0);
406 trkTV3.SetPtEtaPhi(trk->pt(), trk->eta(), trk->phi());
407 TVector3 eleTV3(0, 0, 0);
408 eleTV3.SetPtEtaPhi(ele.
pt(), ele.
eta(), ele.
phi());
409 trk_dr = eleTV3.DeltaR(trkTV3);
415 const auto&
gsf = ele.
core()->gsfTrack();
416 if (
gsf.isNonnull()) {
417 gsf_mode_p =
gsf->pMode();
418 eid_gsf_nhits = (
float)
gsf->found();
419 eid_gsf_chi2red =
gsf->normalizedChi2();
420 TVector3 gsfTV3(0, 0, 0);
421 gsfTV3.SetPtEtaPhi(
gsf->ptMode(),
gsf->etaMode(),
gsf->phiMode());
422 TVector3 eleTV3(0, 0, 0);
423 eleTV3.SetPtEtaPhi(ele.
pt(), ele.
eta(), ele.
phi());
424 gsf_dr = eleTV3.DeltaR(gsfTV3);
430 const auto& sc = ele.
core()->superCluster();
431 if (sc.isNonnull()) {
432 eid_sc_E = sc->energy();
433 eid_sc_eta = sc->eta();
434 eid_sc_etaWidth = sc->etaWidth();
435 eid_sc_phiWidth = sc->phiWidth();
436 sc_Nclus = (
float)sc->clustersSize();
442 eid_match_eclu_EoverP = (1. / ele.
ecalEnergy()) - (1. / ele.
p());
454 eid_brem_frac = ele.
fbrem();
462 const auto&
gsf = ele.
core()->gsfTrack();
463 if (
gsf.isNonnull()) {
464 const auto& sc = ele.
core()->superCluster();
465 if (sc.isNonnull()) {
467 double mass2 = 0.000511 * 0.000511;
482 sc_clus1_nxtal = -999.;
483 sc_clus1_dphi = -999.;
484 sc_clus2_dphi = -999.;
485 sc_clus1_deta = -999.;
486 sc_clus2_deta = -999.;
489 sc_clus1_E_ov_p = -999.;
490 sc_clus2_E_ov_p = -999.;
510 eid_sc_eta = std::clamp(eid_sc_eta, -5.
f, 5.
f);
511 eid_shape_full5x5_r9 = std::clamp(eid_shape_full5x5_r9, 0.
f, 2.
f);
512 eid_sc_etaWidth = std::clamp(eid_sc_etaWidth, 0.
f, 3.14
f);
513 eid_sc_phiWidth = std::clamp(eid_sc_phiWidth, 0.
f, 3.14
f);
514 eid_shape_full5x5_HoverE = std::clamp(eid_shape_full5x5_HoverE, 0.
f, 50.
f);
515 eid_trk_nhits = std::clamp(eid_trk_nhits, -1.
f, 50.
f);
516 eid_trk_chi2red = std::clamp(eid_trk_chi2red, -1.
f, 50.
f);
517 eid_gsf_chi2red = std::clamp(eid_gsf_chi2red, -1.
f, 100.
f);
518 if (eid_brem_frac < 0.)
520 if (eid_brem_frac > 1.)
522 eid_gsf_nhits = std::clamp(eid_gsf_nhits, -1.
f, 50.
f);
523 eid_match_SC_EoverP = std::clamp(eid_match_SC_EoverP, 0.
f, 100.
f);
524 eid_match_eclu_EoverP = std::clamp(eid_match_eclu_EoverP, -1.
f, 1.
f);
525 eid_match_SC_dEta = std::clamp(eid_match_SC_dEta, -10.
f, 10.
f);
526 eid_match_SC_dPhi = std::clamp(eid_match_SC_dPhi, -3.14
f, 3.14
f);
527 eid_match_seed_dEta = std::clamp(eid_match_seed_dEta, -10.
f, 10.
f);
528 eid_sc_E = std::clamp(eid_sc_E, 0.
f, 1000.
f);
529 eid_trk_p = std::clamp(eid_trk_p, -1.
f, 1000.
f);
530 gsf_mode_p = std::clamp(gsf_mode_p, 0.
f, 1000.
f);
531 core_shFracHits = std::clamp(core_shFracHits, 0.
f, 1.
f);
532 gsf_bdtout1 = std::clamp(gsf_bdtout1, -20.
f, 20.
f);
541 sc_Nclus = std::clamp(sc_Nclus, 0.
f, 20.
f);
542 sc_clus1_nxtal = std::clamp(sc_clus1_nxtal, 0.
f, 100.
f);
543 if (sc_clus1_dphi < -3.14)
545 if (sc_clus1_dphi > 3.14)
547 if (sc_clus2_dphi < -3.14)
549 if (sc_clus2_dphi > 3.14)
551 sc_clus1_deta = std::clamp(sc_clus1_deta, -5.
f, 5.
f);
552 sc_clus2_deta = std::clamp(sc_clus2_deta, -5.
f, 5.
f);
553 sc_clus1_E = std::clamp(sc_clus1_E, 0.
f, 1000.
f);
554 sc_clus2_E = std::clamp(sc_clus2_E, 0.
f, 1000.
f);
555 if (sc_clus1_E_ov_p < 0.)
556 sc_clus1_E_ov_p = -1.;
557 if (sc_clus2_E_ov_p < 0.)
558 sc_clus2_E_ov_p = -1.;
561 std::vector<float>
output = {eid_rho,
563 eid_shape_full5x5_r9,
566 eid_shape_full5x5_HoverE,
573 eid_match_eclu_EoverP,
602 for (
auto const& cluster : sc.
clusters()) {
603 if (cluster->energy() > maxEne1) {
604 maxEne1 = cluster->energy();
611 for (
auto const& cluster : sc.
clusters()) {
613 if (cluster->energy() > maxEne2) {
614 maxEne2 = cluster->energy();
628 bool const& reach_ECAL,
630 float& sc_clus1_nxtal,
631 float& sc_clus1_dphi,
632 float& sc_clus2_dphi,
633 float& sc_clus1_deta,
634 float& sc_clus2_deta,
637 float& sc_clus1_E_ov_p,
638 float& sc_clus2_E_ov_p) {
650 for (
auto const& cluster : sc.
clusters()) {
651 float deta = ecal_pos.
eta() - cluster->eta();
654 sc_clus1_E = cluster->energy();
656 sc_clus1_E_ov_p = cluster->energy() /
gsf.pMode();
657 sc_clus1_nxtal = (
float)cluster->size();
658 if (reach_ECAL > 0) {
659 sc_clus1_deta = deta;
660 sc_clus1_dphi = dphi;
662 }
else if (clusNum ==
i2) {
663 sc_clus2_E = cluster->energy();
665 sc_clus2_E_ov_p = cluster->energy() /
gsf.pMode();
666 if (reach_ECAL > 0) {
667 sc_clus2_deta = deta;
668 sc_clus2_dphi = dphi;