14DiTauIDVarCalculator::DiTauIDVarCalculator(
const std::string& name )
28 return StatusCode::SUCCESS;
85 ditau_ptDec(xDiTau) =
ditau_pt(xDiTau);
86 f_core_leadDec(xDiTau) =
f_core(xDiTau, 0);
87 f_core_sublDec(xDiTau) =
f_core(xDiTau, 1);
88 f_subjet_leadDec(xDiTau) =
f_subjet(xDiTau, 0);
89 f_subjet_sublDec(xDiTau) =
f_subjet(xDiTau, 1);
91 f_track_leadDec(xDiTau) =
f_track(xDiTau, 0);
92 f_track_sublDec(xDiTau) =
f_track(xDiTau, 1);
93 R_max_leadDec(xDiTau) =
R_max(xDiTau, 0);
94 R_max_sublDec(xDiTau) =
R_max(xDiTau, 1);
95 n_trackDec(xDiTau) =
n_track(xDiTau);
96 n_tracks_leadDec(xDiTau) =
n_tracks(xDiTau, 0);
97 n_tracks_sublDec(xDiTau) =
n_tracks(xDiTau, 1);
99 R_trackDec(xDiTau) =
R_track(xDiTau);
103 R_core_leadDec(xDiTau) =
R_core(xDiTau, 0);
104 R_core_sublDec(xDiTau) =
R_core(xDiTau, 1);
105 R_tracks_leadDec(xDiTau) =
R_tracks(xDiTau, 0);
106 R_tracks_sublDec(xDiTau) =
R_tracks(xDiTau, 1);
109 M_core_leadDec(xDiTau) =
mass_core(xDiTau, 0);
110 M_core_sublDec(xDiTau) =
mass_core(xDiTau, 1);
114 E_frac_sublDec(xDiTau) =
E_frac(xDiTau,1);
115 E_frac_subsublDec(xDiTau) =
E_frac(xDiTau, 2);
116 R_subjets_sublDec(xDiTau) =
R_subjets(xDiTau, 1);
117 R_subjets_subsublDec(xDiTau) =
R_subjets(xDiTau, 2);
122 return StatusCode::SUCCESS;
131 while (xDiTau.
subjetPt(nSubjet) > 0. )
143 if (n_subjetsAcc(xDiTau) < 2 ) {
155 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
159 return xDiTau.
fCore(iSubjet);
167 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
171 return xDiTau.
subjetPt(iSubjet) / xDiTau.
pt();
179 if (n_subjetsAcc(xDiTau) < 2 ) {
191 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
203 TLorentzVector tlvSubjet;
204 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
209 TLorentzVector tlvTrack;
210 TLorentzVector tlvLeadTrack;
211 tlvLeadTrack.SetPtEtaPhiE( 0,0,0, 0);
213 for (
const auto &xTrack: xTracks)
220 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
225 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
227 if (tlvLeadTrack.Pt() < tlvTrack.Pt())
229 tlvLeadTrack = tlvTrack;
234 return tlvLeadTrack.Pt() / tlvSubjet.Pt();
242 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
248 TLorentzVector tlvSubjet;
249 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
254 TLorentzVector tlvTrack;
255 TLorentzVector tlvRmaxTrack;
258 for (
const auto &xTrack: xTracks)
260 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
265 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rsubjet )
267 if (tlvTrack.DeltaR(tlvSubjet) > Rmax)
269 Rmax = tlvTrack.DeltaR(tlvSubjet);
288 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
295 ATH_MSG_DEBUG(
"n_tracks decoration not available. Try with track links.");
306 TLorentzVector tlvSubjet;
307 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
312 TLorentzVector tlvTrack;
314 for (
const auto &xTrack: xTracks)
316 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
320 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 ) nTracks++;
326 return n_tracksAcc(xDiTau).at(iSubjet);
349 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
355 TLorentzVector tlvSubjet;
356 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
361 TLorentzVector tlvTrack;
363 for (
const auto& xTrack: xTracks)
365 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
370 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
373 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
398 if (iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
404 TLorentzVector tlvSubjet;
405 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
410 TLorentzVector tlvTrack;
412 for (
const auto& xTrack: xTracks)
414 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
419 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
421 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
446 if (n_subjetsAcc(xDiTau) < 2) {
451 for (
int i = 0; i<=1; i++)
456 TLorentzVector tlvSubjet;
457 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(i),
462 TLorentzVector tlvTrack;
464 for (
const auto& xTrack: xTracks)
466 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
470 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
473 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
498 if (n_subjetsAcc(xDiTau) < 2) {
502 for (
int i = 0; i<=1; i++)
507 TLorentzVector tlvSubjet;
508 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(i),
513 TLorentzVector tlvTrack;
515 for (
const auto& xTrack: xTracks)
517 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
522 if (tlvSubjet.DeltaR(tlvTrack) < 0.2)
524 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
549 for (
int i = 0; i<n_subjetsAcc(xDiTau); i++)
554 TLorentzVector tlvSubjet;
555 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(i),
560 TLorentzVector tlvTrack;
562 for (
const auto& xTrack: xTracks)
564 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
569 if (tlvSubjet.DeltaR(tlvTrack) <= 0.2)
571 R_sum += tlvSubjet.DeltaR(tlvTrack)*tlvTrack.Pt();
598 if (n_subjetsAcc(xDiTau) < 2) {
602 for (
int i = 0; i<=1; i++)
607 TLorentzVector tlvSubjet;
608 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(i),
613 TLorentzVector tlvIsoTrack;
615 for (
const auto& xIsoTrack: xIsoTracks)
617 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
622 if (tlvSubjet.DeltaR(tlvIsoTrack) < 0.4)
624 R_sum += tlvSubjet.DeltaR(tlvIsoTrack)*tlvIsoTrack.Pt();
625 pt += tlvIsoTrack.Pt();
649 if (n_subjetsAcc(xDiTau) < 2) {
653 TLorentzVector tlvallTracks;
655 for (
int i = 0; i<=1; i++)
660 TLorentzVector tlvSubjet;
661 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(i),
666 TLorentzVector tlvTrack;
668 for (
const auto& xTrack: xTracks)
670 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
674 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
677 tlvallTracks += tlvTrack;
681 if (tlvallTracks.M() < 0)
686 return tlvallTracks.M();
700 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
704 TLorentzVector tlvallTracks;
709 TLorentzVector tlvSubjet;
710 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
715 TLorentzVector tlvTrack;
717 for (
const auto& xTrack: xTracks)
719 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
723 if ( tlvSubjet.DeltaR(tlvTrack) <
m_Rcore )
726 tlvallTracks += tlvTrack;
730 if (tlvallTracks.M() < 0)
735 return tlvallTracks.M();
749 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
753 TLorentzVector tlvallTracks;
757 TLorentzVector tlvSubjet;
758 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
763 TLorentzVector tlvTrack;
765 for (
const auto& xTrack: xTracks)
767 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
771 if ( tlvSubjet.DeltaR(tlvTrack) < 0.2 )
773 tlvallTracks += tlvTrack;
777 if (tlvallTracks.M() < 0)
782 return tlvallTracks.M();
794 TLorentzVector tlvallTracks;
798 TLorentzVector tlvTrack;
800 for (
const auto& xTrack: xTracks)
802 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
807 tlvallTracks += tlvTrack;
810 if (tlvallTracks.M() < 0)
814 return tlvallTracks.M();
826 TLorentzVector tlvallTracks;
830 TLorentzVector tlvTrack;
832 for (
const auto& xTrack: xTracks)
834 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
839 tlvallTracks += tlvTrack;
845 TLorentzVector tlvIsoTrack;
847 for (
const auto& xIsoTrack: xIsoTracks)
849 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
854 tlvallTracks += tlvIsoTrack;
857 if (tlvallTracks.M() < 0)
862 return tlvallTracks.M();
869 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
881 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
891 TLorentzVector tlvLeadSubjet;
892 tlvLeadSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(0),
897 TLorentzVector tlvSubjet;
898 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
902 return tlvLeadSubjet.DeltaR(tlvSubjet);
908 double pt_leadtrk = 0;
917 if ( iSubjet < 0 || iSubjet >= n_subjetsAcc(xDiTau)) {
921 TLorentzVector tlvSubjet;
922 tlvSubjet.SetPtEtaPhiE( xDiTau.
subjetPt(iSubjet),
929 TLorentzVector tlvTrack;
931 for (
auto &xTrack: xTracks)
933 tlvTrack.SetPtEtaPhiE( (*xTrack)->pt(),
938 if (tlvTrack.DeltaR(tlvSubjet) <
m_Rcore)
940 if (tlvTrack.Pt() > pt_leadtrk)
942 pt_leadtrk = tlvTrack.Pt();
943 d0 = (*xTrack)->d0();
962 TLorentzVector tlvIsoTrack;
964 for (
const auto& xIsoTrack: xIsoTracks)
966 tlvIsoTrack.SetPtEtaPhiE( (*xIsoTrack)->pt(),
971 iso_pt += tlvIsoTrack.Pt();
974 return iso_pt / xDiTau.
pt();
983 Warning(
"decorNtracks()",
"Track links not available.");
984 return StatusCode::FAILURE;
988 int nSubjets = n_subjetsAcc(xDiTau);
990 std::vector<int> nTracks(nSubjets, 0);
993 for (
const auto &xTrack: xTracks)
998 for (
int i=0; i<nSubjets; ++i)
1000 TLorentzVector tlvSubjet = TLorentzVector();
1001 tlvSubjet.SetPtEtaPhiE(xDiTau.
subjetPt(i),
1005 double dR = tlvSubjet.DeltaR((*xTrack)->p4());
1014 if (itrmin > -1) nTracks[itrmin]++;
1018 n_tracksDec(xDiTau) = nTracks;
1020 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
const TrackParticleLinks_t & isoTrackLinks() const
float fCore(unsigned int numSubjet) const
float subjetEta(unsigned int numSubjet) const
virtual double pt() const
The transverse momentum ( ) of the particle.
float subjetE(unsigned int numSubjet) const
float subjetPt(unsigned int numSubjet) const
float subjetPhi(unsigned int numSubjet) const
const TrackParticleLinks_t & trackLinks() const
size_t nIsoTracks() const
DiTauJet_v1 DiTauJet
Definition of the current version.