15 DiTauIDVarCalculator::DiTauIDVarCalculator(
const std::string&
name )
21 DiTauIDVarCalculator::~DiTauIDVarCalculator( )
29 return StatusCode::SUCCESS;
86 ditau_ptDec(xDiTau) =
ditau_pt(xDiTau);
87 f_core_leadDec(xDiTau) =
f_core(xDiTau, 0);
88 f_core_sublDec(xDiTau) =
f_core(xDiTau, 1);
89 f_subjet_leadDec(xDiTau) =
f_subjet(xDiTau, 0);
90 f_subjet_sublDec(xDiTau) =
f_subjet(xDiTau, 1);
92 f_track_leadDec(xDiTau) =
f_track(xDiTau, 0);
93 f_track_sublDec(xDiTau) =
f_track(xDiTau, 1);
94 R_max_leadDec(xDiTau) =
R_max(xDiTau, 0);
95 R_max_sublDec(xDiTau) =
R_max(xDiTau, 1);
96 n_trackDec(xDiTau) =
n_track(xDiTau);
97 n_tracks_leadDec(xDiTau) =
n_tracks(xDiTau, 0);
98 n_tracks_sublDec(xDiTau) =
n_tracks(xDiTau, 1);
100 R_trackDec(xDiTau) =
R_track(xDiTau);
104 R_core_leadDec(xDiTau) =
R_core(xDiTau, 0);
105 R_core_sublDec(xDiTau) =
R_core(xDiTau, 1);
106 R_tracks_leadDec(xDiTau) =
R_tracks(xDiTau, 0);
107 R_tracks_sublDec(xDiTau) =
R_tracks(xDiTau, 1);
110 M_core_leadDec(xDiTau) =
mass_core(xDiTau, 0);
111 M_core_sublDec(xDiTau) =
mass_core(xDiTau, 1);
115 E_frac_sublDec(xDiTau) =
E_frac(xDiTau,1);
116 E_frac_subsublDec(xDiTau) =
E_frac(xDiTau, 2);
117 R_subjets_sublDec(xDiTau) =
R_subjets(xDiTau, 1);
118 R_subjets_subsublDec(xDiTau) =
R_subjets(xDiTau, 2);
123 return StatusCode::SUCCESS;
132 while (xDiTau.
subjetPt(nSubjet) > 0. )
144 if (n_subjetsAcc(xDiTau) < 2 ) {
156 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
160 return xDiTau.
fCore(iSubjet);
168 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
172 return xDiTau.
subjetPt(iSubjet) / xDiTau.
pt();
180 if (n_subjetsAcc(xDiTau) < 2 ) {
192 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
204 TLorentzVector tlvSubjet;
205 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
210 TLorentzVector tlvTrack;
211 TLorentzVector tlvLeadTrack;
212 tlvLeadTrack.SetPtEtaPhiE( 0,0,0, 0);
214 for (
const auto &xTrack: xTracks)
221 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
226 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
228 if (tlvLeadTrack.Pt() < tlvTrack.Pt())
230 tlvLeadTrack = tlvTrack;
235 return tlvLeadTrack.Pt() / tlvSubjet.Pt();
243 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
249 TLorentzVector tlvSubjet;
250 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
255 TLorentzVector tlvTrack;
256 TLorentzVector tlvRmaxTrack;
259 for (
const auto &xTrack: xTracks)
261 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
266 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rsubjet )
268 if (tlvTrack.DeltaR(tlvSubjet) > Rmax)
270 Rmax = tlvTrack.DeltaR(tlvSubjet);
289 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
296 ATH_MSG_DEBUG(
"n_tracks decoration not available. Try with track links.");
307 TLorentzVector tlvSubjet;
308 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
313 TLorentzVector tlvTrack;
315 for (
const auto &xTrack: xTracks)
317 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
321 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 ) nTracks++;
327 return n_tracksAcc(xDiTau).at(iSubjet);
350 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
356 TLorentzVector tlvSubjet;
357 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
362 TLorentzVector tlvTrack;
364 for (
const auto& xTrack: xTracks)
366 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
371 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
374 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
399 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
405 TLorentzVector tlvSubjet;
406 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
411 TLorentzVector tlvTrack;
413 for (
const auto& xTrack: xTracks)
415 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
420 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
422 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
447 if (n_subjetsAcc(xDiTau) < 2) {
452 for (
int i = 0;
i<=1;
i++)
457 TLorentzVector tlvSubjet;
458 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
463 TLorentzVector tlvTrack;
465 for (
const auto& xTrack: xTracks)
467 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
471 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
474 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
499 if (n_subjetsAcc(xDiTau) < 2) {
503 for (
int i = 0;
i<=1;
i++)
508 TLorentzVector tlvSubjet;
509 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
514 TLorentzVector tlvTrack;
516 for (
const auto& xTrack: xTracks)
518 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
523 if (tlvSubjet.DeltaR(tlvTrack) < 0.2)
525 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
550 for (
int i = 0;
i<n_subjetsAcc(xDiTau);
i++)
555 TLorentzVector tlvSubjet;
556 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
561 TLorentzVector tlvTrack;
563 for (
const auto& xTrack: xTracks)
565 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
570 if (tlvSubjet.DeltaR(tlvTrack) <= 0.2)
572 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
599 if (n_subjetsAcc(xDiTau) < 2) {
603 for (
int i = 0;
i<=1;
i++)
608 TLorentzVector tlvSubjet;
609 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
614 TLorentzVector tlvIsoTrack;
616 for (
const auto& xIsoTrack: xIsoTracks)
618 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
623 if (tlvSubjet.DeltaR(tlvIsoTrack) < 0.4)
625 R_sum += tlvSubjet.DeltaR(tlvIsoTrack)*tlvIsoTrack.Pt();
626 pt += tlvIsoTrack.Pt();
650 if (n_subjetsAcc(xDiTau) < 2) {
654 TLorentzVector tlvallTracks;
656 for (
int i = 0;
i<=1;
i++)
661 TLorentzVector tlvSubjet;
662 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
667 TLorentzVector tlvTrack;
669 for (
const auto& xTrack: xTracks)
671 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
675 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
678 tlvallTracks += tlvTrack;
682 if (tlvallTracks.M() < 0)
687 return tlvallTracks.M();
701 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
705 TLorentzVector tlvallTracks;
710 TLorentzVector tlvSubjet;
711 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
716 TLorentzVector tlvTrack;
718 for (
const auto& xTrack: xTracks)
720 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
724 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
727 tlvallTracks += tlvTrack;
731 if (tlvallTracks.M() < 0)
736 return tlvallTracks.M();
750 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
754 TLorentzVector tlvallTracks;
758 TLorentzVector tlvSubjet;
759 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
764 TLorentzVector tlvTrack;
766 for (
const auto& xTrack: xTracks)
768 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
772 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
774 tlvallTracks += tlvTrack;
778 if (tlvallTracks.M() < 0)
783 return tlvallTracks.M();
795 TLorentzVector tlvallTracks;
799 TLorentzVector tlvTrack;
801 for (
const auto& xTrack: xTracks)
803 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
808 tlvallTracks += tlvTrack;
811 if (tlvallTracks.M() < 0)
815 return tlvallTracks.M();
827 TLorentzVector tlvallTracks;
831 TLorentzVector tlvTrack;
833 for (
const auto& xTrack: xTracks)
835 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
840 tlvallTracks += tlvTrack;
846 TLorentzVector tlvIsoTrack;
848 for (
const auto& xIsoTrack: xIsoTracks)
850 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
855 tlvallTracks += tlvIsoTrack;
858 if (tlvallTracks.M() < 0)
863 return tlvallTracks.M();
870 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
882 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
892 TLorentzVector tlvLeadSubjet;
893 tlvLeadSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(0),
898 TLorentzVector tlvSubjet;
899 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
903 return tlvLeadSubjet.DeltaR(tlvSubjet);
909 double pt_leadtrk = 0;
918 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
922 TLorentzVector tlvSubjet;
923 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
930 TLorentzVector tlvTrack;
932 for (
auto &xTrack: xTracks)
934 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
939 if (tlvTrack.DeltaR(tlvSubjet) <
m_Rcore)
941 if (tlvTrack.Pt() > pt_leadtrk)
943 pt_leadtrk = tlvTrack.Pt();
944 d0 = (*xTrack)->d0();
963 TLorentzVector tlvIsoTrack;
965 for (
const auto& xIsoTrack: xIsoTracks)
967 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
972 iso_pt += tlvIsoTrack.Pt();
975 return iso_pt / xDiTau.
pt();
984 Warning(
"decorNtracks()",
"Track links not available.");
985 return StatusCode::FAILURE;
989 int nSubjets = n_subjetsAcc(xDiTau);
991 std::vector<int> nTracks(nSubjets, 0);
994 for (
const auto &xTrack: xTracks)
999 for (
int i=0;
i<nSubjets; ++
i)
1001 TLorentzVector tlvSubjet = TLorentzVector();
1002 tlvSubjet.SetPtEtaPhiE(xDiTau.
subjetPt(
i),
1006 double dR = tlvSubjet.DeltaR((*xTrack)->p4());
1015 if (itrmin > -1) nTracks[itrmin]++;
1019 n_tracksDec(xDiTau) = nTracks;
1021 return StatusCode::SUCCESS;