8 #include "AthLinks/ElementLink.h"
22 declareInterface<DiTauToolBase > (
this);
69 return StatusCode::SUCCESS;
81 n_subjetsDec(xDiTau) = ditauTrackingInfo.
nSubjets;
120 n_trackDec(xDiTau) =
n_track(xDiTau, ditauTrackingInfo);
121 n_isotrackDec(xDiTau) =
n_isotrack(xDiTau, ditauTrackingInfo);
122 R_track_allDec(xDiTau) =
R_track_all(xDiTau, ditauTrackingInfo);
124 M_track_allDec(xDiTau) =
mass_track_all(xDiTau, ditauTrackingInfo);
125 f_isotracksDec(xDiTau) =
f_isotracks(xDiTau, ditauTrackingInfo);
127 if (ditauTrackingInfo.
nSubjets > 2) {
128 E_frac_subsublDec(xDiTau) =
E_frac (xDiTau, ditauTrackingInfo, 2);
129 R_subjets_subsublDec(xDiTau) =
R_subjets (xDiTau, ditauTrackingInfo, 2);
131 if (ditauTrackingInfo.
nSubjets > 1) {
132 ditau_ptDec(xDiTau) =
ditau_pt (xDiTau, ditauTrackingInfo);
133 f_subjetsDec(xDiTau) =
f_subjets (xDiTau, ditauTrackingInfo);
134 R_track_coreDec(xDiTau) =
R_track_core (xDiTau, ditauTrackingInfo);
135 R_trackDec(xDiTau) =
R_track (xDiTau, ditauTrackingInfo);
136 R_isotrackDec(xDiTau) =
R_isotrack (xDiTau, ditauTrackingInfo);
137 M_trackDec(xDiTau) =
mass_track (xDiTau, ditauTrackingInfo);
139 d0_leadtrack_sublDec(xDiTau) =
d0_leadtrack (xDiTau, ditauTrackingInfo, 1);
140 f_core_sublDec(xDiTau) =
f_core (xDiTau, ditauTrackingInfo, 1);
141 f_subjet_sublDec(xDiTau) =
f_subjet (xDiTau, ditauTrackingInfo, 1);
142 f_track_sublDec(xDiTau) =
f_track (xDiTau, ditauTrackingInfo, 1);
143 R_max_sublDec(xDiTau) =
R_max (xDiTau, ditauTrackingInfo, 1);
144 n_tracks_sublDec(xDiTau) =
n_tracks (xDiTau, ditauTrackingInfo, 1);
145 R_core_sublDec(xDiTau) =
R_core (xDiTau, ditauTrackingInfo, 1);
146 R_tracks_sublDec(xDiTau) =
R_tracks (xDiTau, ditauTrackingInfo, 1);
147 M_core_sublDec(xDiTau) =
mass_core (xDiTau, ditauTrackingInfo, 1);
148 M_tracks_sublDec(xDiTau) =
mass_tracks (xDiTau, ditauTrackingInfo, 1);
149 E_frac_sublDec(xDiTau) =
E_frac (xDiTau, ditauTrackingInfo, 1);
150 R_subjets_sublDec(xDiTau) =
R_subjets (xDiTau, ditauTrackingInfo, 1);
152 if (ditauTrackingInfo.
nSubjets > 0) {
153 d0_leadtrack_leadDec(xDiTau) =
d0_leadtrack (xDiTau, ditauTrackingInfo, 0);
154 f_core_leadDec(xDiTau) =
f_core (xDiTau, ditauTrackingInfo, 0);
155 f_subjet_leadDec(xDiTau) =
f_subjet (xDiTau, ditauTrackingInfo, 0);
156 f_track_leadDec(xDiTau) =
f_track (xDiTau, ditauTrackingInfo, 0);
157 R_max_leadDec(xDiTau) =
R_max (xDiTau, ditauTrackingInfo, 0);
158 n_tracks_leadDec(xDiTau) =
n_tracks (xDiTau, ditauTrackingInfo, 0);
159 R_core_leadDec(xDiTau) =
R_core (xDiTau, ditauTrackingInfo, 0);
160 R_tracks_leadDec(xDiTau) =
R_tracks (xDiTau, ditauTrackingInfo, 0);
161 M_core_leadDec(xDiTau) =
mass_core (xDiTau, ditauTrackingInfo, 0);
162 M_tracks_leadDec(xDiTau) =
mass_tracks (xDiTau, ditauTrackingInfo, 0);
164 return StatusCode::SUCCESS;
169 while (xDiTau.
subjetPt(nSubjet) > 0. ){
182 return xDiTau.
fCore(iSubjet);
186 return xDiTau.
subjetPt(iSubjet) / xDiTau.
pt();
198 float subjetPt = subjetInfo.
subjet_p4.Pt();
199 return leadTrackPt / subjetPt;
206 if (subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) > Rmax) {
219 return subjetInfo.
vTracks.size();
232 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
246 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
259 for (
int i = 0;
i < 2;
i++) {
262 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
276 for (
int i = 0;
i < 2;
i++) {
279 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
296 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4())*xTrack->
pt();
310 for (
int i = 0;
i < 2;
i++) {
313 R_sum += subjetInfo.
subjet_p4.DeltaR(xTrack->
p4()) * xTrack->
pt();
325 TLorentzVector allCoreTracks_p4;
326 for (
int i = 0;
i < 2;
i++) {
329 allCoreTracks_p4 += xTrack->
p4();
332 float mass = allCoreTracks_p4.M();
340 TLorentzVector allCoreTracks_p4;
343 allCoreTracks_p4 += xTrack->
p4();
345 float mass = allCoreTracks_p4.M();
353 TLorentzVector allTracks_p4;
356 allTracks_p4 += xTrack->
p4();
358 float mass = allTracks_p4.M();
366 TLorentzVector allTracks_p4;
368 allTracks_p4 += xTrack->
p4();
370 float mass = allTracks_p4.M();
378 TLorentzVector allTracks_p4;
380 allTracks_p4 += xTrack->
p4();
383 allTracks_p4 += xTrack->
p4();
385 float mass = allTracks_p4.M();
397 TLorentzVector leadSubjet_p4 = ditauInfo.
vSubjetInfo.at(0).subjet_p4;
398 TLorentzVector subjet_p4 = ditauInfo.
vSubjetInfo.at(iSubjet).subjet_p4;
399 return leadSubjet_p4.DeltaR(subjet_p4);
413 iso_pt += xTrack->
pt();
415 return iso_pt / xDiTau.
pt();
426 ATH_MSG_WARNING(
"Track " << (!trackLinksAcc.
isAvailable(xDiTau) ?
"DiTauJet.trackLinks" :
"DiTauJet.isoTrackLinks") <<
" links not available.");
427 return StatusCode::FAILURE;
430 int nSubjets =
n_subjets(xDiTau, trackingInfo);
431 float Rsubjet = R_subjetAcc(xDiTau);
432 float RCore = R_coreAcc(xDiTau);
440 std::vector<ElementLink<xAOD::TrackParticleContainer>> isoTrackLinks = xDiTau.
isoTrackLinks();
441 for (
const auto &trackLink: isoTrackLinks) {
442 if (!trackLink.isValid()) {
449 std::vector<ElementLink<xAOD::TrackParticleContainer>> trackLinks = xDiTau.
trackLinks();
450 for (
const auto &trackLink : trackLinks) {
451 if (!trackLink.isValid()) {
456 trackingInfo.
vTracks.push_back(xTrack);
459 for (
int i=0;
i<nSubjets; ++
i){
461 TLorentzVector subjet_p4 = TLorentzVector();
463 subjetTrackingInfo.
subjet_p4 = subjet_p4;
464 trackingInfo.
vSubjetInfo.push_back(subjetTrackingInfo);
469 for (
int i=0;
i<nSubjets; ++
i){
471 if (dRTrackSubjet < Rsubjet && dRTrackSubjet < dRMin){
472 dRMin = dRTrackSubjet;
481 for (
int i=0;
i<nSubjets; ++
i){
482 float ptLeadTrack = 0;
484 if (
track->pt() > ptLeadTrack){
485 ptLeadTrack =
track->pt();
491 for (
int i=0;
i<nSubjets; ++
i){
494 if (subjetTrackingInfo.subjet_p4.DeltaR(
track->p4()) < RCore){
504 for (
int i=0;
i<nSubjets; ++
i){
506 if (dRTrackSubjet > Rsubjet && dRTrackSubjet < RIso && dRTrackSubjet < dRMin){
507 dRMin = dRTrackSubjet;
515 return StatusCode::SUCCESS;