8 #include "AthLinks/ElementLink.h"
24 DiTauIDVarCalculator::DiTauIDVarCalculator(
const std::string&
name )
27 declareProperty(
"DefaultValue", m_dDefault = -1234);
31 DiTauIDVarCalculator::~DiTauIDVarCalculator( )
39 return StatusCode::SUCCESS;
96 ditau_ptDec(xDiTau) =
ditau_pt(xDiTau);
97 f_core_leadDec(xDiTau) =
f_core(xDiTau, 0);
98 f_core_sublDec(xDiTau) =
f_core(xDiTau, 1);
99 f_subjet_leadDec(xDiTau) =
f_subjet(xDiTau, 0);
100 f_subjet_sublDec(xDiTau) =
f_subjet(xDiTau, 1);
101 f_subjetsDec(xDiTau) =
f_subjets(xDiTau);
102 f_track_leadDec(xDiTau) =
f_track(xDiTau, 0);
103 f_track_sublDec(xDiTau) =
f_track(xDiTau, 1);
104 R_max_leadDec(xDiTau) =
R_max(xDiTau, 0);
105 R_max_sublDec(xDiTau) =
R_max(xDiTau, 1);
106 n_trackDec(xDiTau) =
n_track(xDiTau);
107 n_tracks_leadDec(xDiTau) =
n_tracks(xDiTau, 0);
108 n_tracks_sublDec(xDiTau) =
n_tracks(xDiTau, 1);
110 R_trackDec(xDiTau) =
R_track(xDiTau);
114 R_core_leadDec(xDiTau) =
R_core(xDiTau, 0);
115 R_core_sublDec(xDiTau) =
R_core(xDiTau, 1);
116 R_tracks_leadDec(xDiTau) =
R_tracks(xDiTau, 0);
117 R_tracks_sublDec(xDiTau) =
R_tracks(xDiTau, 1);
120 M_core_leadDec(xDiTau) =
mass_core(xDiTau, 0);
121 M_core_sublDec(xDiTau) =
mass_core(xDiTau, 1);
125 E_frac_sublDec(xDiTau) =
E_frac(xDiTau,1);
126 E_frac_subsublDec(xDiTau) =
E_frac(xDiTau, 2);
127 R_subjets_sublDec(xDiTau) =
R_subjets(xDiTau, 1);
128 R_subjets_subsublDec(xDiTau) =
R_subjets(xDiTau, 2);
133 return StatusCode::SUCCESS;
142 while (xDiTau.
subjetPt(nSubjet) > 0. )
154 if (n_subjetsAcc(xDiTau) < 2 ) {
166 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
170 return xDiTau.
fCore(iSubjet);
178 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
182 return xDiTau.
subjetPt(iSubjet) / xDiTau.
pt();
190 if (n_subjetsAcc(xDiTau) < 2 ) {
202 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
214 TLorentzVector tlvSubjet;
215 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
220 TLorentzVector tlvTrack;
221 TLorentzVector tlvLeadTrack;
222 tlvLeadTrack.SetPtEtaPhiE( 0,0,0, 0);
224 for (
const auto &xTrack: xTracks)
231 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
236 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
238 if (tlvLeadTrack.Pt() < tlvTrack.Pt())
240 tlvLeadTrack = tlvTrack;
245 return tlvLeadTrack.Pt() / tlvSubjet.Pt();
253 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
259 TLorentzVector tlvSubjet;
260 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
265 TLorentzVector tlvTrack;
266 TLorentzVector tlvRmaxTrack;
269 for (
const auto &xTrack: xTracks)
271 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
276 if ( tlvSubjet.DeltaR(tlvTrack) < R_subjetAcc(xDiTau) )
278 if (tlvTrack.DeltaR(tlvSubjet) > Rmax)
280 Rmax = tlvTrack.DeltaR(tlvSubjet);
299 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
306 ATH_MSG_DEBUG(
"n_tracks decoration not available. Try with track links.");
317 TLorentzVector tlvSubjet;
318 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
323 TLorentzVector tlvTrack;
325 for (
const auto &xTrack: xTracks)
327 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
331 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 ) nTracks++;
337 return n_tracksAcc(xDiTau).at(iSubjet);
360 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
366 TLorentzVector tlvSubjet;
367 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
372 TLorentzVector tlvTrack;
374 for (
const auto& xTrack: xTracks)
376 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
381 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
384 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
409 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
415 TLorentzVector tlvSubjet;
416 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
421 TLorentzVector tlvTrack;
424 for (
const auto& xTrack: xTracks)
426 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
431 if ( tlvSubjet.DeltaR(tlvTrack) < R_coreAcc(xDiTau) )
433 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
458 if (n_subjetsAcc(xDiTau) < 2) {
463 for (
int i = 0;
i<=1;
i++)
468 TLorentzVector tlvSubjet;
469 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
474 TLorentzVector tlvTrack;
477 for (
const auto& xTrack: xTracks)
479 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
483 if ( tlvSubjet.DeltaR(tlvTrack) < R_coreAcc(xDiTau) )
486 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
511 if (n_subjetsAcc(xDiTau) < 2) {
515 for (
int i = 0;
i<=1;
i++)
520 TLorentzVector tlvSubjet;
521 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
526 TLorentzVector tlvTrack;
528 for (
const auto& xTrack: xTracks)
530 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
535 if (tlvSubjet.DeltaR(tlvTrack) < 0.2)
537 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
562 for (
int i = 0;
i<n_subjetsAcc(xDiTau);
i++)
567 TLorentzVector tlvSubjet;
568 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
573 TLorentzVector tlvTrack;
575 for (
const auto& xTrack: xTracks)
577 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
582 if (tlvSubjet.DeltaR(tlvTrack) <= 0.2)
584 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
611 if (n_subjetsAcc(xDiTau) < 2) {
615 for (
int i = 0;
i<=1;
i++)
620 TLorentzVector tlvSubjet;
621 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
626 TLorentzVector tlvIsoTrack;
628 for (
const auto& xIsoTrack: xIsoTracks)
630 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
635 if (tlvSubjet.DeltaR(tlvIsoTrack) < 0.4)
637 R_sum += tlvSubjet.DeltaR(tlvIsoTrack)*tlvIsoTrack.Pt();
638 pt += tlvIsoTrack.Pt();
662 if (n_subjetsAcc(xDiTau) < 2) {
666 TLorentzVector tlvallTracks;
669 for (
int i = 0;
i<=1;
i++)
674 TLorentzVector tlvSubjet;
675 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(
i),
680 TLorentzVector tlvTrack;
682 for (
const auto& xTrack: xTracks)
684 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
688 if ( tlvSubjet.DeltaR(tlvTrack) < R_coreAcc(xDiTau) )
691 tlvallTracks += tlvTrack;
695 if (tlvallTracks.M() < 0)
700 return tlvallTracks.M();
714 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
718 TLorentzVector tlvallTracks;
723 TLorentzVector tlvSubjet;
724 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
729 TLorentzVector tlvTrack;
732 for (
const auto& xTrack: xTracks)
734 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
738 if ( tlvSubjet.DeltaR(tlvTrack) < R_coreAcc(xDiTau) )
741 tlvallTracks += tlvTrack;
745 if (tlvallTracks.M() < 0)
750 return tlvallTracks.M();
764 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
768 TLorentzVector tlvallTracks;
772 TLorentzVector tlvSubjet;
773 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
778 TLorentzVector tlvTrack;
780 for (
const auto& xTrack: xTracks)
782 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
786 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
788 tlvallTracks += tlvTrack;
792 if (tlvallTracks.M() < 0)
797 return tlvallTracks.M();
809 TLorentzVector tlvallTracks;
813 TLorentzVector tlvTrack;
815 for (
const auto& xTrack: xTracks)
817 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
822 tlvallTracks += tlvTrack;
825 if (tlvallTracks.M() < 0)
829 return tlvallTracks.M();
841 TLorentzVector tlvallTracks;
845 TLorentzVector tlvTrack;
847 for (
const auto& xTrack: xTracks)
849 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
854 tlvallTracks += tlvTrack;
860 TLorentzVector tlvIsoTrack;
862 for (
const auto& xIsoTrack: xIsoTracks)
864 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
869 tlvallTracks += tlvIsoTrack;
872 if (tlvallTracks.M() < 0)
877 return tlvallTracks.M();
884 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
896 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
906 TLorentzVector tlvLeadSubjet;
907 tlvLeadSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(0),
912 TLorentzVector tlvSubjet;
913 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
917 return tlvLeadSubjet.DeltaR(tlvSubjet);
923 double pt_leadtrk = 0;
932 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
936 TLorentzVector tlvSubjet;
937 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
944 TLorentzVector tlvTrack;
947 for (
auto &xTrack: xTracks)
949 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
954 if (tlvTrack.DeltaR(tlvSubjet) < R_coreAcc(xDiTau))
956 if (tlvTrack.Pt() > pt_leadtrk)
958 pt_leadtrk = tlvTrack.Pt();
959 d0 = (*xTrack)->d0();
978 TLorentzVector tlvIsoTrack;
980 for (
const auto& xIsoTrack: xIsoTracks)
982 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
987 iso_pt += tlvIsoTrack.Pt();
990 return iso_pt / xDiTau.
pt();
999 Warning(
"decorNtracks()",
"Track links not available.");
1000 return StatusCode::FAILURE;
1004 int nSubjets = n_subjetsAcc(xDiTau);
1007 float Rsubjet = R_subjetAcc(xDiTau);
1008 std::vector<int> nTracks(nSubjets, 0);
1011 for (
const auto &xTrack: xTracks)
1013 double dRmin = 1111;
1016 for (
int i=0;
i<nSubjets; ++
i)
1018 TLorentzVector tlvSubjet = TLorentzVector();
1019 tlvSubjet.SetPtEtaPhiE(xDiTau.
subjetPt(
i),
1023 double dR = tlvSubjet.DeltaR((*xTrack)->p4());
1026 if ((dR < Rsubjet) && (dR < dRmin))
1032 if (itrmin > -1) nTracks[itrmin]++;
1036 n_tracksDec(xDiTau) = nTracks;
1038 return StatusCode::SUCCESS;