8 #include "AthLinks/ElementLink.h"
24 DiTauIDVarCalculator::DiTauIDVarCalculator(
const std::string&
name )
30 DiTauIDVarCalculator::~DiTauIDVarCalculator( )
38 return StatusCode::SUCCESS;
95 ditau_ptDec(xDiTau) =
ditau_pt(xDiTau);
96 f_core_leadDec(xDiTau) =
f_core(xDiTau, 0);
97 f_core_sublDec(xDiTau) =
f_core(xDiTau, 1);
98 f_subjet_leadDec(xDiTau) =
f_subjet(xDiTau, 0);
99 f_subjet_sublDec(xDiTau) =
f_subjet(xDiTau, 1);
100 f_subjetsDec(xDiTau) =
f_subjets(xDiTau);
101 f_track_leadDec(xDiTau) =
f_track(xDiTau, 0);
102 f_track_sublDec(xDiTau) =
f_track(xDiTau, 1);
103 R_max_leadDec(xDiTau) =
R_max(xDiTau, 0);
104 R_max_sublDec(xDiTau) =
R_max(xDiTau, 1);
105 n_trackDec(xDiTau) =
n_track(xDiTau);
106 n_tracks_leadDec(xDiTau) =
n_tracks(xDiTau, 0);
107 n_tracks_sublDec(xDiTau) =
n_tracks(xDiTau, 1);
109 R_trackDec(xDiTau) =
R_track(xDiTau);
113 R_core_leadDec(xDiTau) =
R_core(xDiTau, 0);
114 R_core_sublDec(xDiTau) =
R_core(xDiTau, 1);
115 R_tracks_leadDec(xDiTau) =
R_tracks(xDiTau, 0);
116 R_tracks_sublDec(xDiTau) =
R_tracks(xDiTau, 1);
119 M_core_leadDec(xDiTau) =
mass_core(xDiTau, 0);
120 M_core_sublDec(xDiTau) =
mass_core(xDiTau, 1);
124 E_frac_sublDec(xDiTau) =
E_frac(xDiTau,1);
125 E_frac_subsublDec(xDiTau) =
E_frac(xDiTau, 2);
126 R_subjets_sublDec(xDiTau) =
R_subjets(xDiTau, 1);
127 R_subjets_subsublDec(xDiTau) =
R_subjets(xDiTau, 2);
132 return StatusCode::SUCCESS;
141 while (xDiTau.
subjetPt(nSubjet) > 0. )
153 if (n_subjetsAcc(xDiTau) < 2 ) {
165 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
169 return xDiTau.
fCore(iSubjet);
177 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
181 return xDiTau.
subjetPt(iSubjet) / xDiTau.
pt();
189 if (n_subjetsAcc(xDiTau) < 2 ) {
201 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
213 TLorentzVector tlvSubjet;
214 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
219 TLorentzVector tlvTrack;
220 TLorentzVector tlvLeadTrack;
221 tlvLeadTrack.SetPtEtaPhiE( 0,0,0, 0);
223 for (
const auto &xTrack: xTracks)
230 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
235 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
237 if (tlvLeadTrack.Pt() < tlvTrack.Pt())
239 tlvLeadTrack = tlvTrack;
244 return tlvLeadTrack.Pt() / tlvSubjet.Pt();
252 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
258 TLorentzVector tlvSubjet;
259 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
264 TLorentzVector tlvTrack;
265 TLorentzVector tlvRmaxTrack;
268 for (
const auto &xTrack: xTracks)
270 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
275 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rsubjet )
277 if (tlvTrack.DeltaR(tlvSubjet) > Rmax)
279 Rmax = tlvTrack.DeltaR(tlvSubjet);
298 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
305 ATH_MSG_DEBUG(
"n_tracks decoration not available. Try with track links.");
316 TLorentzVector tlvSubjet;
317 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
322 TLorentzVector tlvTrack;
324 for (
const auto &xTrack: xTracks)
326 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
330 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 ) nTracks++;
336 return n_tracksAcc(xDiTau).at(iSubjet);
359 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
365 TLorentzVector tlvSubjet;
366 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
371 TLorentzVector tlvTrack;
373 for (
const auto& xTrack: xTracks)
375 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
380 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
383 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
408 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
414 TLorentzVector tlvSubjet;
415 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
420 TLorentzVector tlvTrack;
422 for (
const auto& xTrack: xTracks)
424 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
429 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
431 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
456 if (n_subjetsAcc(xDiTau) < 2) {
461 for (
int i = 0;
i<=1;
i++)
466 TLorentzVector tlvSubjet;
467 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
472 TLorentzVector tlvTrack;
474 for (
const auto& xTrack: xTracks)
476 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
480 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
483 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
508 if (n_subjetsAcc(xDiTau) < 2) {
512 for (
int i = 0;
i<=1;
i++)
517 TLorentzVector tlvSubjet;
518 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
523 TLorentzVector tlvTrack;
525 for (
const auto& xTrack: xTracks)
527 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
532 if (tlvSubjet.DeltaR(tlvTrack) < 0.2)
534 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
559 for (
int i = 0;
i<n_subjetsAcc(xDiTau);
i++)
564 TLorentzVector tlvSubjet;
565 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
570 TLorentzVector tlvTrack;
572 for (
const auto& xTrack: xTracks)
574 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
579 if (tlvSubjet.DeltaR(tlvTrack) <= 0.2)
581 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
608 if (n_subjetsAcc(xDiTau) < 2) {
612 for (
int i = 0;
i<=1;
i++)
617 TLorentzVector tlvSubjet;
618 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
623 TLorentzVector tlvIsoTrack;
625 for (
const auto& xIsoTrack: xIsoTracks)
627 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
632 if (tlvSubjet.DeltaR(tlvIsoTrack) < 0.4)
634 R_sum += tlvSubjet.DeltaR(tlvIsoTrack)*tlvIsoTrack.Pt();
635 pt += tlvIsoTrack.Pt();
659 if (n_subjetsAcc(xDiTau) < 2) {
663 TLorentzVector tlvallTracks;
665 for (
int i = 0;
i<=1;
i++)
670 TLorentzVector tlvSubjet;
671 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
676 TLorentzVector tlvTrack;
678 for (
const auto& xTrack: xTracks)
680 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
684 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
687 tlvallTracks += tlvTrack;
691 if (tlvallTracks.M() < 0)
696 return tlvallTracks.M();
710 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
714 TLorentzVector tlvallTracks;
719 TLorentzVector tlvSubjet;
720 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
725 TLorentzVector tlvTrack;
727 for (
const auto& xTrack: xTracks)
729 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
733 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
736 tlvallTracks += tlvTrack;
740 if (tlvallTracks.M() < 0)
745 return tlvallTracks.M();
759 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
763 TLorentzVector tlvallTracks;
767 TLorentzVector tlvSubjet;
768 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
773 TLorentzVector tlvTrack;
775 for (
const auto& xTrack: xTracks)
777 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
781 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
783 tlvallTracks += tlvTrack;
787 if (tlvallTracks.M() < 0)
792 return tlvallTracks.M();
804 TLorentzVector tlvallTracks;
808 TLorentzVector tlvTrack;
810 for (
const auto& xTrack: xTracks)
812 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
817 tlvallTracks += tlvTrack;
820 if (tlvallTracks.M() < 0)
824 return tlvallTracks.M();
836 TLorentzVector tlvallTracks;
840 TLorentzVector tlvTrack;
842 for (
const auto& xTrack: xTracks)
844 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
849 tlvallTracks += tlvTrack;
855 TLorentzVector tlvIsoTrack;
857 for (
const auto& xIsoTrack: xIsoTracks)
859 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
864 tlvallTracks += tlvIsoTrack;
867 if (tlvallTracks.M() < 0)
872 return tlvallTracks.M();
879 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
891 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
901 TLorentzVector tlvLeadSubjet;
902 tlvLeadSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(0),
907 TLorentzVector tlvSubjet;
908 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
912 return tlvLeadSubjet.DeltaR(tlvSubjet);
918 double pt_leadtrk = 0;
927 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
931 TLorentzVector tlvSubjet;
932 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
939 TLorentzVector tlvTrack;
941 for (
auto &xTrack: xTracks)
943 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
948 if (tlvTrack.DeltaR(tlvSubjet) <
m_Rcore)
950 if (tlvTrack.Pt() > pt_leadtrk)
952 pt_leadtrk = tlvTrack.Pt();
953 d0 = (*xTrack)->d0();
972 TLorentzVector tlvIsoTrack;
974 for (
const auto& xIsoTrack: xIsoTracks)
976 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
981 iso_pt += tlvIsoTrack.Pt();
984 return iso_pt / xDiTau.
pt();
993 Warning(
"decorNtracks()",
"Track links not available.");
994 return StatusCode::FAILURE;
998 int nSubjets = n_subjetsAcc(xDiTau);
1000 std::vector<int> nTracks(nSubjets, 0);
1003 for (
const auto &xTrack: xTracks)
1005 double dRmin = 1111;
1008 for (
int i=0;
i<nSubjets; ++
i)
1010 TLorentzVector tlvSubjet = TLorentzVector();
1011 tlvSubjet.SetPtEtaPhiE(xDiTau.
subjetPt(
i),
1015 double dR = tlvSubjet.DeltaR((*xTrack)->p4());
1024 if (itrmin > -1) nTracks[itrmin]++;
1028 n_tracksDec(xDiTau) = nTracks;
1030 return StatusCode::SUCCESS;