8 #include "AthLinks/ElementLink.h"
21 declareInterface<DiTauToolBase > (
this);
65 return StatusCode::SUCCESS;
72 return StatusCode::SUCCESS;
82 n_subjetsDec(xDiTau) = ditauTrackingInfo.
nSubjets;
121 n_trackDec(xDiTau) =
n_track(xDiTau, ditauTrackingInfo);
122 n_isotrackDec(xDiTau) =
n_isotrack(xDiTau, ditauTrackingInfo);
123 R_track_allDec(xDiTau) =
R_track_all(xDiTau, ditauTrackingInfo);
125 M_track_allDec(xDiTau) =
mass_track_all(xDiTau, ditauTrackingInfo);
126 f_isotracksDec(xDiTau) =
f_isotracks(xDiTau, ditauTrackingInfo);
128 if (ditauTrackingInfo.
nSubjets > 2) {
129 E_frac_subsublDec(xDiTau) =
E_frac (xDiTau, ditauTrackingInfo, 2);
130 R_subjets_subsublDec(xDiTau) =
R_subjets (xDiTau, ditauTrackingInfo, 2);
132 if (ditauTrackingInfo.
nSubjets > 1) {
133 ditau_ptDec(xDiTau) =
ditau_pt (xDiTau, ditauTrackingInfo);
134 f_subjetsDec(xDiTau) =
f_subjets (xDiTau, ditauTrackingInfo);
135 R_track_coreDec(xDiTau) =
R_track_core (xDiTau, ditauTrackingInfo);
136 R_trackDec(xDiTau) =
R_track (xDiTau, ditauTrackingInfo);
137 R_isotrackDec(xDiTau) =
R_isotrack (xDiTau, ditauTrackingInfo);
138 M_trackDec(xDiTau) =
mass_track (xDiTau, ditauTrackingInfo);
140 d0_leadtrack_sublDec(xDiTau) =
d0_leadtrack (xDiTau, ditauTrackingInfo, 1);
141 f_core_sublDec(xDiTau) =
f_core (xDiTau, ditauTrackingInfo, 1);
142 f_subjet_sublDec(xDiTau) =
f_subjet (xDiTau, ditauTrackingInfo, 1);
143 f_track_sublDec(xDiTau) =
f_track (xDiTau, ditauTrackingInfo, 1);
144 R_max_sublDec(xDiTau) =
R_max (xDiTau, ditauTrackingInfo, 1);
145 n_tracks_sublDec(xDiTau) =
n_tracks (xDiTau, ditauTrackingInfo, 1);
146 R_core_sublDec(xDiTau) =
R_core (xDiTau, ditauTrackingInfo, 1);
147 R_tracks_sublDec(xDiTau) =
R_tracks (xDiTau, ditauTrackingInfo, 1);
148 M_core_sublDec(xDiTau) =
mass_core (xDiTau, ditauTrackingInfo, 1);
149 M_tracks_sublDec(xDiTau) =
mass_tracks (xDiTau, ditauTrackingInfo, 1);
150 E_frac_sublDec(xDiTau) =
E_frac (xDiTau, ditauTrackingInfo, 1);
151 R_subjets_sublDec(xDiTau) =
R_subjets (xDiTau, ditauTrackingInfo, 1);
153 if (ditauTrackingInfo.
nSubjets > 0) {
154 d0_leadtrack_leadDec(xDiTau) =
d0_leadtrack (xDiTau, ditauTrackingInfo, 0);
155 f_core_leadDec(xDiTau) =
f_core (xDiTau, ditauTrackingInfo, 0);
156 f_subjet_leadDec(xDiTau) =
f_subjet (xDiTau, ditauTrackingInfo, 0);
157 f_track_leadDec(xDiTau) =
f_track (xDiTau, ditauTrackingInfo, 0);
158 R_max_leadDec(xDiTau) =
R_max (xDiTau, ditauTrackingInfo, 0);
159 n_tracks_leadDec(xDiTau) =
n_tracks (xDiTau, ditauTrackingInfo, 0);
160 R_core_leadDec(xDiTau) =
R_core (xDiTau, ditauTrackingInfo, 0);
161 R_tracks_leadDec(xDiTau) =
R_tracks (xDiTau, ditauTrackingInfo, 0);
162 M_core_leadDec(xDiTau) =
mass_core (xDiTau, ditauTrackingInfo, 0);
163 M_tracks_leadDec(xDiTau) =
mass_tracks (xDiTau, ditauTrackingInfo, 0);
165 return StatusCode::SUCCESS;
170 while (xDiTau.
subjetPt(nSubjet) > 0. ){
183 return xDiTau.
fCore(iSubjet);
187 return xDiTau.
subjetPt(iSubjet) / xDiTau.
pt();
199 float subjetPt = subjetInfo.
subjet_p4.Pt();
200 return leadTrackPt / subjetPt;
207 if (subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) > Rmax) {
220 return subjetInfo.
vTracks.size();
233 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
247 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
260 for (
int i = 0;
i < 2;
i++) {
263 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
277 for (
int i = 0;
i < 2;
i++) {
280 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
297 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4())*xTrack->
pt();
311 for (
int i = 0;
i < 2;
i++) {
314 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
326 TLorentzVector allCoreTracks_p4;
327 for (
int i = 0;
i < 2;
i++) {
330 allCoreTracks_p4 += xTrack->
p4();
333 float mass = allCoreTracks_p4.M();
341 TLorentzVector allCoreTracks_p4;
344 allCoreTracks_p4 += xTrack->
p4();
346 float mass = allCoreTracks_p4.M();
354 TLorentzVector allTracks_p4;
357 allTracks_p4 += xTrack->
p4();
359 float mass = allTracks_p4.M();
367 TLorentzVector allTracks_p4;
369 allTracks_p4 += xTrack->
p4();
371 float mass = allTracks_p4.M();
379 TLorentzVector allTracks_p4;
381 allTracks_p4 += xTrack->
p4();
384 allTracks_p4 += xTrack->
p4();
386 float mass = allTracks_p4.M();
398 TLorentzVector leadSubjet_p4 = ditauInfo.
vSubjetInfo.at(0).subjet_p4;
399 TLorentzVector subjet_p4 = ditauInfo.
vSubjetInfo.at(iSubjet).subjet_p4;
400 return leadSubjet_p4.DeltaR(subjet_p4);
414 iso_pt += xTrack->
pt();
416 return iso_pt / xDiTau.
pt();
427 ATH_MSG_WARNING(
"Track " << (!trackLinksAcc.
isAvailable(xDiTau) ?
"DiTauJet.trackLinks" :
"DiTauJet.isoTrackLinks") <<
" links not available.");
428 return StatusCode::FAILURE;
431 int nSubjets =
n_subjets(xDiTau, trackingInfo);
432 float Rsubjet = R_subjetAcc(xDiTau);
433 float RCore = R_coreAcc(xDiTau);
441 std::vector<ElementLink<xAOD::TrackParticleContainer>> isoTrackLinks = xDiTau.
isoTrackLinks();
442 for (
const auto &trackLink: isoTrackLinks) {
443 if (!trackLink.isValid()) {
450 std::vector<ElementLink<xAOD::TrackParticleContainer>> trackLinks = xDiTau.
trackLinks();
451 for (
const auto &trackLink : trackLinks) {
452 if (!trackLink.isValid()) {
457 trackingInfo.
vTracks.push_back(xTrack);
460 for (
int i=0;
i<nSubjets; ++
i){
462 TLorentzVector subjet_p4 = TLorentzVector();
464 subjetTrackingInfo.
subjet_p4 = subjet_p4;
465 trackingInfo.
vSubjetInfo.push_back(subjetTrackingInfo);
470 for (
int i=0;
i<nSubjets; ++
i){
472 if (dRTrackSubjet < Rsubjet && dRTrackSubjet < dRMin){
473 dRMin = dRTrackSubjet;
482 for (
int i=0;
i<nSubjets; ++
i){
483 float ptLeadTrack = 0;
485 if (
track->pt() > ptLeadTrack){
486 ptLeadTrack =
track->pt();
492 for (
int i=0;
i<nSubjets; ++
i){
495 if (subjetTrackingInfo.subjet_p4.DeltaR(
track->p4()) < RCore){
505 for (
int i=0;
i<nSubjets; ++
i){
507 if (dRTrackSubjet > Rsubjet && dRTrackSubjet < RIso && dRTrackSubjet < dRMin){
508 dRMin = dRTrackSubjet;
516 return StatusCode::SUCCESS;