26 float trk_nhits_ = -1.;
27 float trk_high_quality_ = -1.;
28 float trk_chi2red_ = -1.;
30 float ktf_ecal_cluster_e_ = -1.;
31 float ktf_ecal_cluster_deta_ = -42.;
32 float ktf_ecal_cluster_dphi_ = -42.;
33 float ktf_ecal_cluster_e3x3_ = -1.;
34 float ktf_ecal_cluster_e5x5_ = -1.;
35 float ktf_ecal_cluster_covEtaEta_ = -42.;
36 float ktf_ecal_cluster_covEtaPhi_ = -42.;
37 float ktf_ecal_cluster_covPhiPhi_ = -42.;
38 float ktf_ecal_cluster_r9_ = -0.1;
39 float ktf_ecal_cluster_circularity_ = -0.1;
40 float ktf_hcal_cluster_e_ = -1.;
41 float ktf_hcal_cluster_deta_ = -42.;
42 float ktf_hcal_cluster_dphi_ = -42.;
43 float preid_gsf_dpt_ = -1.;
44 float preid_trk_gsf_chiratio_ = -1.;
45 float preid_gsf_chi2red_ = -1.;
46 float trk_dxy_sig_ = -1.;
49 const auto& trk =
ecal.trackRef();
50 if (trk.isNonnull()) {
52 trk_eta_ = trk->eta();
53 trk_phi_ = trk->phi();
55 trk_nhits_ = static_cast<float>(trk->found());
57 trk_chi2red_ = trk->normalizedChi2();
58 if (trk->dxy(spot) > 0.) {
59 trk_dxy_sig_ = trk->dxyError() / trk->dxy(spot);
61 ktf_ecal_cluster_dphi_ *= trk->charge();
65 rho_ = static_cast<float>(rho);
68 const auto& ecal_clu =
ecal.clusterRef();
69 if (ecal_clu.isNonnull()) {
70 ktf_ecal_cluster_e_ = ecal_clu->energy();
71 ktf_ecal_cluster_deta_ =
ecal.geomMatching()[0];
72 ktf_ecal_cluster_dphi_ =
ecal.geomMatching()[1];
73 ktf_ecal_cluster_e3x3_ =
tools.e3x3(*ecal_clu);
74 ktf_ecal_cluster_e5x5_ =
tools.e5x5(*ecal_clu);
75 const auto& covs =
tools.localCovariances(*ecal_clu);
76 ktf_ecal_cluster_covEtaEta_ = covs[0];
77 ktf_ecal_cluster_covEtaPhi_ = covs[1];
78 ktf_ecal_cluster_covPhiPhi_ = covs[2];
79 if (ktf_ecal_cluster_e_ > 0.) {
80 ktf_ecal_cluster_r9_ = ktf_ecal_cluster_e3x3_ / ktf_ecal_cluster_e_;
82 if (ktf_ecal_cluster_e5x5_ > 0.) {
83 ktf_ecal_cluster_circularity_ = 1. -
tools.e1x5(*ecal_clu) / ktf_ecal_cluster_e5x5_;
85 ktf_ecal_cluster_circularity_ = -0.1;
90 const auto& hcal_clu =
hcal.clusterRef();
91 if (hcal_clu.isNonnull()) {
92 ktf_hcal_cluster_e_ = hcal_clu->energy();
93 ktf_hcal_cluster_deta_ =
hcal.geomMatching()[0];
94 ktf_hcal_cluster_dphi_ =
hcal.geomMatching()[1];
98 preid_gsf_dpt_ =
ecal.dpt();
99 preid_trk_gsf_chiratio_ =
ecal.chi2Ratio();
100 preid_gsf_chi2red_ =
ecal.gsfChi2();
103 std::vector<float>
output = {trk_pt_,
112 ktf_ecal_cluster_deta_,
113 ktf_ecal_cluster_dphi_,
114 ktf_ecal_cluster_e3x3_,
115 ktf_ecal_cluster_e5x5_,
116 ktf_ecal_cluster_covEtaEta_,
117 ktf_ecal_cluster_covEtaPhi_,
118 ktf_ecal_cluster_covPhiPhi_,
119 ktf_ecal_cluster_r9_,
120 ktf_ecal_cluster_circularity_,
122 ktf_hcal_cluster_deta_,
123 ktf_hcal_cluster_dphi_,
125 preid_trk_gsf_chiratio_,
136 float eid_rho = -999.;
137 float eid_sc_eta = -999.;
138 float eid_shape_full5x5_r9 = -999.;
139 float eid_sc_etaWidth = -999.;
140 float eid_sc_phiWidth = -999.;
141 float eid_shape_full5x5_HoverE = -999.;
142 float eid_trk_nhits = -999.;
143 float eid_trk_chi2red = -999.;
144 float eid_gsf_chi2red = -999.;
145 float eid_brem_frac = -999.;
146 float eid_gsf_nhits = -999.;
147 float eid_match_SC_EoverP = -999.;
148 float eid_match_eclu_EoverP = -999.;
149 float eid_match_SC_dEta = -999.;
150 float eid_match_SC_dPhi = -999.;
151 float eid_match_seed_dEta = -999.;
152 float eid_sc_E = -999.;
153 float eid_trk_p = -999.;
154 float gsf_mode_p = -999.;
155 float core_shFracHits = -999.;
156 float gsf_bdtout1 = -999.;
157 float gsf_dr = -999.;
158 float trk_dr = -999.;
159 float sc_Nclus = -999.;
160 float sc_clus1_nxtal = -999.;
161 float sc_clus1_dphi = -999.;
162 float sc_clus2_dphi = -999.;
163 float sc_clus1_deta = -999.;
164 float sc_clus2_deta = -999.;
165 float sc_clus1_E = -999.;
166 float sc_clus2_E = -999.;
167 float sc_clus1_E_ov_p = -999.;
168 float sc_clus2_E_ov_p = -999.;
174 eid_trk_p = (
float)trk->p();
175 eid_trk_nhits = (
float)trk->found();
176 eid_trk_chi2red = (
float)trk->normalizedChi2();
177 TVector3 trkTV3(0, 0, 0);
178 trkTV3.SetPtEtaPhi(trk->pt(), trk->eta(), trk->phi());
179 TVector3 eleTV3(0, 0, 0);
180 eleTV3.SetPtEtaPhi(ele.
pt(), ele.
eta(), ele.
phi());
181 trk_dr = eleTV3.DeltaR(trkTV3);
188 if (
gsf.isNonnull()) {
189 gsf_mode_p =
gsf->pMode();
190 eid_gsf_nhits = (
float)
gsf->found();
191 eid_gsf_chi2red =
gsf->normalizedChi2();
192 TVector3 gsfTV3(0, 0, 0);
193 gsfTV3.SetPtEtaPhi(
gsf->ptMode(),
gsf->etaMode(),
gsf->phiMode());
194 TVector3 eleTV3(0, 0, 0);
195 eleTV3.SetPtEtaPhi(ele.
pt(), ele.
eta(), ele.
phi());
196 gsf_dr = eleTV3.DeltaR(gsfTV3);
204 eid_sc_E = sc->energy();
205 eid_sc_eta = sc->eta();
206 eid_sc_etaWidth = sc->etaWidth();
207 eid_sc_phiWidth = sc->phiWidth();
208 sc_Nclus = sc->clustersSize();
214 eid_match_eclu_EoverP = (1. / ele.
ecalEnergy()) - (1. / ele.
p());
226 eid_brem_frac = ele.
fbrem();
235 if (
gsf.isNonnull()) {
239 double mass2 = 0.000511 * 0.000511;
251 sc_clus1_nxtal = -999;
252 sc_clus1_dphi = -999.;
253 sc_clus2_dphi = -999.;
254 sc_clus1_deta = -999.;
255 sc_clus2_deta = -999.;
258 sc_clus1_E_ov_p = -999.;
259 sc_clus2_E_ov_p = -999.;
273 sc_clus1_nxtal = (
int)sc_clus1_nxtal;
280 eid_rho = std::clamp(eid_rho, 0.
f, 100.
f);
281 eid_sc_eta = std::clamp(eid_sc_eta, -5.
f, 5.
f);
282 eid_shape_full5x5_r9 = std::clamp(eid_shape_full5x5_r9, 0.
f, 2.
f);
283 eid_sc_etaWidth = std::clamp(eid_sc_etaWidth, 0.
f, 3.14
f);
284 eid_sc_phiWidth = std::clamp(eid_sc_phiWidth, 0.
f, 3.14
f);
285 eid_shape_full5x5_HoverE = std::clamp(eid_shape_full5x5_HoverE, 0.
f, 50.
f);
286 eid_trk_nhits = std::clamp(eid_trk_nhits, -1.
f, 50.
f);
287 eid_trk_chi2red = std::clamp(eid_trk_chi2red, -1.
f, 50.
f);
288 eid_gsf_chi2red = std::clamp(eid_gsf_chi2red, -1.
f, 100.
f);
289 if (eid_brem_frac < 0.)
291 if (eid_brem_frac > 1.)
293 eid_gsf_nhits = std::clamp(eid_gsf_nhits, -1.
f, 50.
f);
294 eid_match_SC_EoverP = std::clamp(eid_match_SC_EoverP, 0.
f, 100.
f);
295 eid_match_eclu_EoverP = std::clamp(eid_match_eclu_EoverP, -1.
f, 1.
f);
296 eid_match_SC_dEta = std::clamp(eid_match_SC_dEta, -10.
f, 10.
f);
297 eid_match_SC_dPhi = std::clamp(eid_match_SC_dPhi, -3.14
f, 3.14
f);
298 eid_match_seed_dEta = std::clamp(eid_match_seed_dEta, -10.
f, 10.
f);
299 eid_sc_E = std::clamp(eid_sc_E, 0.
f, 1000.
f);
300 eid_trk_p = std::clamp(eid_trk_p, -1.
f, 1000.
f);
301 gsf_mode_p = std::clamp(gsf_mode_p, 0.
f, 1000.
f);
302 core_shFracHits = std::clamp(core_shFracHits, 0.
f, 1.
f);
303 gsf_bdtout1 = std::clamp(gsf_bdtout1, -20.
f, 20.
f);
312 sc_Nclus = std::clamp(sc_Nclus, 0.
f, 20.
f);
313 sc_clus1_nxtal = std::clamp(sc_clus1_nxtal, 0.
f, 100.
f);
314 sc_clus1_dphi = std::clamp(sc_clus1_dphi, -3.14
f, 3.14
f);
315 sc_clus2_dphi = std::clamp(sc_clus2_dphi, -3.14
f, 3.14
f);
316 sc_clus1_deta = std::clamp(sc_clus1_deta, -5.
f, 5.
f);
317 sc_clus2_deta = std::clamp(sc_clus2_deta, -5.
f, 5.
f);
318 sc_clus1_E = std::clamp(sc_clus1_E, 0.
f, 1000.
f);
319 sc_clus2_E = std::clamp(sc_clus2_E, 0.
f, 1000.
f);
320 if (sc_clus1_E_ov_p < 0.)
321 sc_clus1_E_ov_p = -1.;
322 if (sc_clus2_E_ov_p < 0.)
323 sc_clus2_E_ov_p = -1.;
326 std::vector<float>
output = {eid_rho,
328 eid_shape_full5x5_r9,
331 eid_shape_full5x5_HoverE,
338 eid_match_eclu_EoverP,
365 float eid_rho = -999.;
366 float eid_sc_eta = -999.;
367 float eid_shape_full5x5_r9 = -999.;
368 float eid_sc_etaWidth = -999.;
369 float eid_sc_phiWidth = -999.;
370 float eid_shape_full5x5_HoverE = -999.;
371 float eid_trk_nhits = -999.;
372 float eid_trk_chi2red = -999.;
373 float eid_gsf_chi2red = -999.;
374 float eid_brem_frac = -999.;
375 float eid_gsf_nhits = -999.;
376 float eid_match_SC_EoverP = -999.;
377 float eid_match_eclu_EoverP = -999.;
378 float eid_match_SC_dEta = -999.;
379 float eid_match_SC_dPhi = -999.;
380 float eid_match_seed_dEta = -999.;
381 float eid_sc_E = -999.;
382 float eid_trk_p = -999.;
383 float gsf_mode_p = -999.;
384 float core_shFracHits = -999.;
385 float gsf_bdtout1 = -999.;
386 float gsf_dr = -999.;
387 float trk_dr = -999.;
388 float sc_Nclus = -999.;
389 float sc_clus1_nxtal = -999.;
390 float sc_clus1_dphi = -999.;
391 float sc_clus2_dphi = -999.;
392 float sc_clus1_deta = -999.;
393 float sc_clus2_deta = -999.;
394 float sc_clus1_E = -999.;
395 float sc_clus2_E = -999.;
396 float sc_clus1_E_ov_p = -999.;
397 float sc_clus2_E_ov_p = -999.;
402 if (trk.isNonnull()) {
403 eid_trk_p = (
float)trk->p();
404 eid_trk_nhits = (
float)trk->found();
405 eid_trk_chi2red = (
float)trk->normalizedChi2();
406 TVector3 trkTV3(0, 0, 0);
407 trkTV3.SetPtEtaPhi(trk->pt(), trk->eta(), trk->phi());
408 TVector3 eleTV3(0, 0, 0);
409 eleTV3.SetPtEtaPhi(ele.
pt(), ele.
eta(), ele.
phi());
410 trk_dr = eleTV3.DeltaR(trkTV3);
416 const auto&
gsf = ele.
core()->gsfTrack();
417 if (
gsf.isNonnull()) {
418 gsf_mode_p =
gsf->pMode();
419 eid_gsf_nhits = (
float)
gsf->found();
420 eid_gsf_chi2red =
gsf->normalizedChi2();
421 TVector3 gsfTV3(0, 0, 0);
422 gsfTV3.SetPtEtaPhi(
gsf->ptMode(),
gsf->etaMode(),
gsf->phiMode());
423 TVector3 eleTV3(0, 0, 0);
424 eleTV3.SetPtEtaPhi(ele.
pt(), ele.
eta(), ele.
phi());
425 gsf_dr = eleTV3.DeltaR(gsfTV3);
431 const auto& sc = ele.
core()->superCluster();
432 if (sc.isNonnull()) {
433 eid_sc_E = sc->energy();
434 eid_sc_eta = sc->eta();
435 eid_sc_etaWidth = sc->etaWidth();
436 eid_sc_phiWidth = sc->phiWidth();
437 sc_Nclus = (
float)sc->clustersSize();
443 eid_match_eclu_EoverP = (1. / ele.
ecalEnergy()) - (1. / ele.
p());
455 eid_brem_frac = ele.
fbrem();
463 const auto&
gsf = ele.
core()->gsfTrack();
464 if (
gsf.isNonnull()) {
465 const auto& sc = ele.
core()->superCluster();
466 if (sc.isNonnull()) {
468 double mass2 = 0.000511 * 0.000511;
483 sc_clus1_nxtal = -999.;
484 sc_clus1_dphi = -999.;
485 sc_clus2_dphi = -999.;
486 sc_clus1_deta = -999.;
487 sc_clus2_deta = -999.;
490 sc_clus1_E_ov_p = -999.;
491 sc_clus2_E_ov_p = -999.;
511 eid_sc_eta = std::clamp(eid_sc_eta, -5.
f, 5.
f);
512 eid_shape_full5x5_r9 = std::clamp(eid_shape_full5x5_r9, 0.
f, 2.
f);
513 eid_sc_etaWidth = std::clamp(eid_sc_etaWidth, 0.
f, 3.14
f);
514 eid_sc_phiWidth = std::clamp(eid_sc_phiWidth, 0.
f, 3.14
f);
515 eid_shape_full5x5_HoverE = std::clamp(eid_shape_full5x5_HoverE, 0.
f, 50.
f);
516 eid_trk_nhits = std::clamp(eid_trk_nhits, -1.
f, 50.
f);
517 eid_trk_chi2red = std::clamp(eid_trk_chi2red, -1.
f, 50.
f);
518 eid_gsf_chi2red = std::clamp(eid_gsf_chi2red, -1.
f, 100.
f);
519 if (eid_brem_frac < 0.)
521 if (eid_brem_frac > 1.)
523 eid_gsf_nhits = std::clamp(eid_gsf_nhits, -1.
f, 50.
f);
524 eid_match_SC_EoverP = std::clamp(eid_match_SC_EoverP, 0.
f, 100.
f);
525 eid_match_eclu_EoverP = std::clamp(eid_match_eclu_EoverP, -1.
f, 1.
f);
526 eid_match_SC_dEta = std::clamp(eid_match_SC_dEta, -10.
f, 10.
f);
527 eid_match_SC_dPhi = std::clamp(eid_match_SC_dPhi, -3.14
f, 3.14
f);
528 eid_match_seed_dEta = std::clamp(eid_match_seed_dEta, -10.
f, 10.
f);
529 eid_sc_E = std::clamp(eid_sc_E, 0.
f, 1000.
f);
530 eid_trk_p = std::clamp(eid_trk_p, -1.
f, 1000.
f);
531 gsf_mode_p = std::clamp(gsf_mode_p, 0.
f, 1000.
f);
532 core_shFracHits = std::clamp(core_shFracHits, 0.
f, 1.
f);
533 gsf_bdtout1 = std::clamp(gsf_bdtout1, -20.
f, 20.
f);
542 sc_Nclus = std::clamp(sc_Nclus, 0.
f, 20.
f);
543 sc_clus1_nxtal = std::clamp(sc_clus1_nxtal, 0.
f, 100.
f);
544 if (sc_clus1_dphi < -3.14)
546 if (sc_clus1_dphi > 3.14)
548 if (sc_clus2_dphi < -3.14)
550 if (sc_clus2_dphi > 3.14)
552 sc_clus1_deta = std::clamp(sc_clus1_deta, -5.
f, 5.
f);
553 sc_clus2_deta = std::clamp(sc_clus2_deta, -5.
f, 5.
f);
554 sc_clus1_E = std::clamp(sc_clus1_E, 0.
f, 1000.
f);
555 sc_clus2_E = std::clamp(sc_clus2_E, 0.
f, 1000.
f);
556 if (sc_clus1_E_ov_p < 0.)
557 sc_clus1_E_ov_p = -1.;
558 if (sc_clus2_E_ov_p < 0.)
559 sc_clus2_E_ov_p = -1.;
562 std::vector<float>
output = {eid_rho,
564 eid_shape_full5x5_r9,
567 eid_shape_full5x5_HoverE,
574 eid_match_eclu_EoverP,
603 for (
auto const& cluster : sc.
clusters()) {
604 if (cluster->energy() > maxEne1) {
605 maxEne1 = cluster->energy();
612 for (
auto const& cluster : sc.
clusters()) {
614 if (cluster->energy() > maxEne2) {
615 maxEne2 = cluster->energy();
629 bool const& reach_ECAL,
631 float& sc_clus1_nxtal,
632 float& sc_clus1_dphi,
633 float& sc_clus2_dphi,
634 float& sc_clus1_deta,
635 float& sc_clus2_deta,
638 float& sc_clus1_E_ov_p,
639 float& sc_clus2_E_ov_p) {
651 for (
auto const& cluster : sc.
clusters()) {
652 float deta = ecal_pos.
eta() - cluster->eta();
655 sc_clus1_E = cluster->energy();
657 sc_clus1_E_ov_p = cluster->energy() /
gsf.pMode();
658 sc_clus1_nxtal = (
float)cluster->size();
659 if (reach_ECAL > 0) {
660 sc_clus1_deta = deta;
661 sc_clus1_dphi = dphi;
663 }
else if (clusNum ==
i2) {
664 sc_clus2_E = cluster->energy();
666 sc_clus2_E_ov_p = cluster->energy() /
gsf.pMode();
667 if (reach_ECAL > 0) {
668 sc_clus2_deta = deta;
669 sc_clus2_dphi = dphi;