ATLAS Offline Software
DiTauIDVarDecorator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 // Core include(s):
8 #include "AthLinks/ElementLink.h"
11 
12 // EDM include(s):
15 
16 #include "xAODTau/DiTauJet.h"
17 
18 DiTauIDVarDecorator::DiTauIDVarDecorator( const std::string& type, const std::string& name, const IInterface * parent) :
20  m_dDefault(-1234)
21 {
22  declareInterface<DiTauToolBase > (this);
23  declareProperty( "DefaultValue", m_dDefault = -1234);
24 }
25 
26 
28 
29 
31  ATH_MSG_INFO( "Initializing DiTauIDVarDecorator" );
32  ATH_CHECK( m_ditau_ptDecKey.initialize() );
33  ATH_CHECK( m_f_core_leadDecKey.initialize() );
34  ATH_CHECK( m_f_core_sublDecKey.initialize() );
35  ATH_CHECK( m_f_subjet_leadDecKey.initialize() );
36  ATH_CHECK( m_f_subjet_sublDecKey.initialize() );
37  ATH_CHECK( m_f_subjetsDecKey.initialize() );
38  ATH_CHECK( m_f_track_leadDecKey.initialize() );
39  ATH_CHECK( m_f_track_sublDecKey.initialize() );
40  ATH_CHECK( m_R_max_leadDecKey.initialize() );
41  ATH_CHECK( m_R_max_sublDecKey.initialize() );
42  ATH_CHECK( m_n_trackDecKey.initialize() );
43  ATH_CHECK( m_n_tracks_leadDecKey.initialize() );
44  ATH_CHECK( m_n_tracks_sublDecKey.initialize() );
45  ATH_CHECK( m_n_isotrackDecKey.initialize() );
46  ATH_CHECK( m_R_trackDecKey.initialize() );
47  ATH_CHECK( m_R_track_coreDecKey.initialize() );
48  ATH_CHECK( m_R_track_allDecKey.initialize() );
49  ATH_CHECK( m_R_isotrackDecKey.initialize() );
50  ATH_CHECK( m_R_core_leadDecKey.initialize() );
51  ATH_CHECK( m_R_core_sublDecKey.initialize() );
52  ATH_CHECK( m_R_tracks_leadDecKey.initialize() );
53  ATH_CHECK( m_R_tracks_sublDecKey.initialize() );
54  ATH_CHECK( m_M_trackDecKey.initialize() );
55  ATH_CHECK( m_M_track_coreDecKey.initialize() );
56  ATH_CHECK( m_M_core_leadDecKey.initialize() );
57  ATH_CHECK( m_M_core_sublDecKey.initialize() );
58  ATH_CHECK( m_M_track_allDecKey.initialize() );
59  ATH_CHECK( m_M_tracks_leadDecKey.initialize() );
60  ATH_CHECK( m_M_tracks_sublDecKey.initialize() );
61  ATH_CHECK( m_E_frac_sublDecKey.initialize() );
62  ATH_CHECK( m_E_frac_subsublDecKey.initialize() );
63  ATH_CHECK( m_R_subjets_sublDecKey.initialize() );
64  ATH_CHECK( m_R_subjets_subsublDecKey.initialize() );
65  ATH_CHECK( m_d0_leadtrack_leadDecKey.initialize() );
66  ATH_CHECK( m_d0_leadtrack_sublDecKey.initialize() );
67  ATH_CHECK( m_f_isotracksDecKey.initialize() );
68 
69  return StatusCode::SUCCESS;
70 }
71 
72 
74  xAOD::DiTauJet* xDiTauPtr = data->xAODDiTau;
75  xAOD::DiTauJet& xDiTau = *xDiTauPtr;
76  ATH_MSG_DEBUG("Calculate DiTau ID variables");
77 
78  static const SG::Accessor< int > n_subjetsDec("n_subjets");
79  DitauTrackingInfo ditauTrackingInfo;
80  ATH_CHECK( getTrackingInfo(xDiTau, ditauTrackingInfo) );
81  n_subjetsDec(xDiTau) = ditauTrackingInfo.nSubjets;
82 
84  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > f_core_leadDec (m_f_core_leadDecKey, ctx); f_core_leadDec(xDiTau) = m_dDefault;
85  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > f_core_sublDec (m_f_core_sublDecKey, ctx); f_core_sublDec(xDiTau) = m_dDefault;
86  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > f_subjet_leadDec (m_f_subjet_leadDecKey, ctx); f_subjet_leadDec(xDiTau) = m_dDefault;
87  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > f_subjet_sublDec (m_f_subjet_sublDecKey, ctx); f_subjet_sublDec(xDiTau) = m_dDefault;
88  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > f_subjetsDec (m_f_subjetsDecKey, ctx); f_subjetsDec(xDiTau) = m_dDefault;
89  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > f_track_leadDec (m_f_track_leadDecKey, ctx); f_track_leadDec(xDiTau) = m_dDefault;
90  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > f_track_sublDec (m_f_track_sublDecKey, ctx); f_track_sublDec(xDiTau) = m_dDefault;
91  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_max_leadDec (m_R_max_leadDecKey, ctx); R_max_leadDec(xDiTau) = m_dDefault;
92  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_max_sublDec (m_R_max_sublDecKey, ctx); R_max_sublDec(xDiTau) = m_dDefault;
94  SG::WriteDecorHandle<xAOD::DiTauJetContainer, int > n_tracks_leadDec (m_n_tracks_leadDecKey, ctx); n_tracks_leadDec(xDiTau) = m_dDefault;
95  SG::WriteDecorHandle<xAOD::DiTauJetContainer, int > n_tracks_sublDec (m_n_tracks_sublDecKey, ctx); n_tracks_sublDec(xDiTau) = m_dDefault;
96  SG::WriteDecorHandle<xAOD::DiTauJetContainer, int > n_isotrackDec (m_n_isotrackDecKey, ctx); n_isotrackDec(xDiTau) = m_dDefault;
98  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_track_coreDec (m_R_track_coreDecKey, ctx); R_track_coreDec(xDiTau) = m_dDefault;
99  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_track_allDec (m_R_track_allDecKey, ctx); R_track_allDec(xDiTau) = m_dDefault;
100  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_isotrackDec (m_R_isotrackDecKey, ctx); R_isotrackDec(xDiTau) = m_dDefault;
101  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_core_leadDec (m_R_core_leadDecKey, ctx); R_core_leadDec(xDiTau) = m_dDefault;
102  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_core_sublDec (m_R_core_sublDecKey, ctx); R_core_sublDec(xDiTau) = m_dDefault;
103  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_tracks_leadDec (m_R_tracks_leadDecKey, ctx); R_tracks_leadDec(xDiTau) = m_dDefault;
104  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_tracks_sublDec (m_R_tracks_sublDecKey, ctx); R_tracks_sublDec(xDiTau) = m_dDefault;
106  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > M_track_coreDec (m_M_track_coreDecKey, ctx); M_track_coreDec(xDiTau) = m_dDefault;
107  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > M_core_leadDec (m_M_core_leadDecKey, ctx); M_core_leadDec(xDiTau) = m_dDefault;
108  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > M_core_sublDec (m_M_core_sublDecKey, ctx); M_core_sublDec(xDiTau) = m_dDefault;
109  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > M_track_allDec (m_M_track_allDecKey, ctx); M_track_allDec(xDiTau) = m_dDefault;
110  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > M_tracks_leadDec (m_M_tracks_leadDecKey, ctx); M_tracks_leadDec(xDiTau) = m_dDefault;
111  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > M_tracks_sublDec (m_M_tracks_sublDecKey, ctx); M_tracks_sublDec(xDiTau) = m_dDefault;
112  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > E_frac_sublDec (m_E_frac_sublDecKey, ctx); E_frac_sublDec(xDiTau) = m_dDefault;
113  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > E_frac_subsublDec (m_E_frac_subsublDecKey, ctx); E_frac_subsublDec(xDiTau) = m_dDefault;
114  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_subjets_sublDec (m_R_subjets_sublDecKey, ctx); R_subjets_sublDec(xDiTau) = m_dDefault;
115  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > R_subjets_subsublDec (m_R_subjets_subsublDecKey, ctx); R_subjets_subsublDec(xDiTau) = m_dDefault;
116  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > d0_leadtrack_leadDec (m_d0_leadtrack_leadDecKey, ctx); d0_leadtrack_leadDec(xDiTau) = m_dDefault;
117  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > d0_leadtrack_sublDec (m_d0_leadtrack_sublDecKey, ctx); d0_leadtrack_sublDec(xDiTau) = m_dDefault;
118  SG::WriteDecorHandle<xAOD::DiTauJetContainer, float > f_isotracksDec (m_f_isotracksDecKey, ctx); f_isotracksDec(xDiTau) = m_dDefault;
119 
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);
123 
124  M_track_allDec(xDiTau) = mass_track_all(xDiTau, ditauTrackingInfo);
125  f_isotracksDec(xDiTau) = f_isotracks(xDiTau, ditauTrackingInfo);
126 
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);
130  }
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);
138  M_track_coreDec(xDiTau) = mass_track_core(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);
151  }
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);
163  }
164  return StatusCode::SUCCESS;
165 }
166 
168  int nSubjet = 0;
169  while (xDiTau.subjetPt(nSubjet) > 0. ){
170  nSubjet++;
171  }
172  return nSubjet;
173 }
174 
176 {
177  return xDiTau.subjetPt(0)+xDiTau.subjetPt(1);
178 }
179 
180 float DiTauIDVarDecorator::f_core(const xAOD::DiTauJet& xDiTau, const DitauTrackingInfo&, int iSubjet) const
181 {
182  return xDiTau.fCore(iSubjet);
183 }
184 
185 float DiTauIDVarDecorator::f_subjet(const xAOD::DiTauJet& xDiTau, const DitauTrackingInfo&, int iSubjet) const {
186  return xDiTau.subjetPt(iSubjet) / xDiTau.pt();
187 }
188 
190 {
191  return (xDiTau.subjetPt(0) + xDiTau.subjetPt(1))/ xDiTau.pt();
192 }
193 
194 float DiTauIDVarDecorator::f_track(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const
195 {
196  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
197  float leadTrackPt = subjetInfo.leadTrack ? subjetInfo.leadTrack->pt() : 0;
198  float subjetPt = subjetInfo.subjet_p4.Pt();
199  return leadTrackPt / subjetPt;
200 }
201 
202 float DiTauIDVarDecorator::R_max(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const {
203  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
204  float Rmax = 0;
205  for (const xAOD::TrackParticle* xTrack: subjetInfo.vTracks) {
206  if (subjetInfo.subjet_p4.DeltaR(xTrack->p4()) > Rmax) {
207  Rmax = subjetInfo.subjet_p4.DeltaR(xTrack->p4());
208  }
209  }
210  return Rmax;
211 }
212 
214  return xDiTau.nTracks();
215 }
216 
217 int DiTauIDVarDecorator::n_tracks(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const {
218  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
219  return subjetInfo.vTracks.size();
220 }
221 
223  return xDiTau.nIsoTracks();
224 }
225 
226 float DiTauIDVarDecorator::R_tracks(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const {
227  double R_sum = 0;
228  double pt = 0;
229 
230  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
231  for (const xAOD::TrackParticle* xTrack: subjetInfo.vTracks) {
232  R_sum += subjetInfo.subjet_p4.DeltaR(xTrack->p4()) * xTrack->pt();
233  pt += xTrack->pt();
234  }
235  if (pt == 0) {
236  return m_dDefault;
237  }
238  return R_sum / pt;
239 }
240 
241 float DiTauIDVarDecorator::R_core(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const {
242  double R_sum = 0;
243  double pt = 0;
244  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
245  for (const xAOD::TrackParticle* xTrack: subjetInfo.vCoreTracks) {
246  R_sum += subjetInfo.subjet_p4.DeltaR(xTrack->p4()) * xTrack->pt();
247  pt += xTrack->pt();
248  }
249  if (pt == 0) {
250  return m_dDefault;
251  }
252  return R_sum / pt;
253 
254 }
255 
257  float R_sum = 0;
258  float pt = 0;
259  for (int i = 0; i < 2; i++) {
260  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(i);
261  for (const xAOD::TrackParticle* xTrack: subjetInfo.vCoreTracks) {
262  R_sum += subjetInfo.subjet_p4.DeltaR(xTrack->p4()) * xTrack->pt();
263  pt += xTrack->pt();
264  }
265  }
266  if (pt == 0) {
267  return m_dDefault;
268  }
269  return R_sum / pt;
270 }
271 
272 float DiTauIDVarDecorator::R_track(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo) const
273 {
274  float R_sum = 0;
275  float pt = 0;
276  for (int i = 0; i < 2; i++) {
277  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(i);
278  for (const xAOD::TrackParticle* xTrack: subjetInfo.vTracks) {
279  R_sum += subjetInfo.subjet_p4.DeltaR(xTrack->p4()) * xTrack->pt();
280  pt += xTrack->pt();
281  }
282  }
283  if (pt == 0) {
284  return m_dDefault;
285  }
286  return R_sum / pt;
287 }
288 
290 {
291  double R_sum = 0;
292  double pt = 0;
293 
294  for (const SubjetTrackingInfo& subjetInfo : ditauInfo.vSubjetInfo) {
295  for (const xAOD::TrackParticle* xTrack: subjetInfo.vTracks) {
296  R_sum += subjetInfo.subjet_p4.DeltaR(xTrack->p4())*xTrack->pt();
297  pt += xTrack->pt();
298  }
299  }
300  if (pt == 0) {
301  return m_dDefault;
302  }
303  return R_sum / pt;
304 }
305 
307 {
308  float R_sum = 0;
309  float pt = 0;
310  for (int i = 0; i < 2; i++) {
311  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(i);
312  for (const xAOD::TrackParticle* xTrack: subjetInfo.vIsoTracks) {
313  R_sum += subjetInfo.subjet_p4.DeltaR(xTrack->p4()) * xTrack->pt();
314  pt += xTrack->pt();
315  }
316  }
317  if (pt == 0) {
318  return m_dDefault;
319  }
320  return R_sum / pt;
321 }
322 
324 {
325  TLorentzVector allCoreTracks_p4;
326  for (int i = 0; i < 2; i++) {
327  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(i);
328  for (const xAOD::TrackParticle* xTrack: subjetInfo.vCoreTracks) {
329  allCoreTracks_p4 += xTrack->p4();
330  }
331  }
332  float mass = allCoreTracks_p4.M();
333  if (mass < 0) {
334  return m_dDefault;
335  }
336  return mass;
337 }
338 
339 float DiTauIDVarDecorator::mass_core(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const {
340  TLorentzVector allCoreTracks_p4;
341  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
342  for (const xAOD::TrackParticle* xTrack: subjetInfo.vCoreTracks) {
343  allCoreTracks_p4 += xTrack->p4();
344  }
345  float mass = allCoreTracks_p4.M();
346  if (mass < 0) {
347  return m_dDefault;
348  }
349  return mass;
350 }
351 
352 float DiTauIDVarDecorator::mass_tracks(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const {
353  TLorentzVector allTracks_p4;
354  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
355  for (const xAOD::TrackParticle* xTrack: subjetInfo.vTracks) {
356  allTracks_p4 += xTrack->p4();
357  }
358  float mass = allTracks_p4.M();
359  if (mass < 0) {
360  return m_dDefault;
361  }
362  return mass;
363 }
364 
365 float DiTauIDVarDecorator::mass_track(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo) const {
366  TLorentzVector allTracks_p4;
367  for (const xAOD::TrackParticle* xTrack: ditauInfo.vTracks) {
368  allTracks_p4 += xTrack->p4();
369  }
370  float mass = allTracks_p4.M();
371  if (mass < 0) {
372  return m_dDefault;
373  }
374  return mass;
375 }
376 
378  TLorentzVector allTracks_p4;
379  for (const xAOD::TrackParticle* xTrack: ditauInfo.vTracks) {
380  allTracks_p4 += xTrack->p4();
381  }
382  for (const xAOD::TrackParticle* xTrack: ditauInfo.vIsoTracks) {
383  allTracks_p4 += xTrack->p4();
384  }
385  float mass = allTracks_p4.M();
386  if (mass < 0) {
387  return m_dDefault;
388  }
389  return mass;
390 }
391 
392 float DiTauIDVarDecorator::E_frac(const xAOD::DiTauJet& xDiTau, const DitauTrackingInfo&, int iSubjet) const {
393  return xDiTau.subjetE(iSubjet) / xDiTau.subjetE(0);
394 }
395 
396 float DiTauIDVarDecorator::R_subjets(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const {
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);
400 }
401 
402 float DiTauIDVarDecorator::d0_leadtrack(const xAOD::DiTauJet&, const DitauTrackingInfo& ditauInfo, int iSubjet) const {
403  SubjetTrackingInfo subjetInfo = ditauInfo.vSubjetInfo.at(iSubjet);
404  if (!subjetInfo.leadTrack) {
405  return m_dDefault;
406  }
407  return subjetInfo.leadTrack->d0();
408 }
409 
410 float DiTauIDVarDecorator::f_isotracks(const xAOD::DiTauJet& xDiTau, const DitauTrackingInfo& ditauInfo) const {
411  double iso_pt = 0;
412  for (const xAOD::TrackParticle* xTrack: ditauInfo.vIsoTracks) {
413  iso_pt += xTrack->pt();
414  }
415  return iso_pt / xDiTau.pt();
416 }
417 
419  static const SG::ConstAccessor<std::vector<ElementLink<xAOD::TrackParticleContainer>>> trackLinksAcc("trackLinks");
420  static const SG::ConstAccessor<std::vector<ElementLink<xAOD::TrackParticleContainer>>> isoTrackLinksAcc("isoTrackLinks");
421  static const SG::ConstAccessor<float> R_subjetAcc("R_subjet");
422  static const SG::ConstAccessor<float> R_coreAcc("R_core");
423 
424 
425  if (!trackLinksAcc.isAvailable(xDiTau) || !isoTrackLinksAcc.isAvailable(xDiTau)) {
426  ATH_MSG_WARNING("Track " << (!trackLinksAcc.isAvailable(xDiTau) ? "DiTauJet.trackLinks" : "DiTauJet.isoTrackLinks") << " links not available.");
427  return StatusCode::FAILURE;
428  }
429 
430  int nSubjets = n_subjets(xDiTau, trackingInfo);
431  float Rsubjet = R_subjetAcc(xDiTau);
432  float RCore = R_coreAcc(xDiTau);
433 
434  trackingInfo.nSubjets = nSubjets;
435  trackingInfo.vSubjetInfo.clear();
436  trackingInfo.vIsoTracks.clear();
437  trackingInfo.vTracks.clear();
438 
439  // Get the track links from the DiTauJet and store them in the tracking info
440  std::vector<ElementLink<xAOD::TrackParticleContainer>> isoTrackLinks = xDiTau.isoTrackLinks();
441  for (const auto &trackLink: isoTrackLinks) {
442  if (!trackLink.isValid()) {
443  ATH_MSG_WARNING("Iso track link is not valid");
444  continue;
445  }
446  const xAOD::TrackParticle* xTrack = *trackLink;
447  trackingInfo.vIsoTracks.push_back(xTrack);
448  }
449  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackLinks = xDiTau.trackLinks();
450  for (const auto &trackLink : trackLinks) {
451  if (!trackLink.isValid()) {
452  ATH_MSG_WARNING("track link is not valid");
453  continue;
454  }
455  const xAOD::TrackParticle* xTrack = *trackLink;
456  trackingInfo.vTracks.push_back(xTrack);
457  }
458  // store subjet p4
459  for (int i=0; i<nSubjets; ++i){
460  SubjetTrackingInfo subjetTrackingInfo;
461  TLorentzVector subjet_p4 = TLorentzVector();
462  subjet_p4.SetPtEtaPhiE( xDiTau.subjetPt(i), xDiTau.subjetEta(i), xDiTau.subjetPhi(i), xDiTau.subjetE(i));
463  subjetTrackingInfo.subjet_p4 = subjet_p4;
464  trackingInfo.vSubjetInfo.push_back(subjetTrackingInfo);
465  }
466  for (const auto track : trackingInfo.vTracks) {
467  float dRMin = 999;
468  int inSubjet = -1;
469  for (int i=0; i<nSubjets; ++i){
470  float dRTrackSubjet = trackingInfo.vSubjetInfo[i].subjet_p4.DeltaR(track->p4());
471  if (dRTrackSubjet < Rsubjet && dRTrackSubjet < dRMin){
472  dRMin = dRTrackSubjet;
473  inSubjet = i;
474  }
475  }
476  if (inSubjet >= 0){
477  trackingInfo.vSubjetInfo[inSubjet].vTracks.push_back(track);
478  }
479  }
480  // find leading track in subjets
481  for (int i=0; i<nSubjets; ++i){
482  float ptLeadTrack = 0;
483  for (const auto track : trackingInfo.vSubjetInfo[i].vTracks){
484  if (track->pt() > ptLeadTrack){
485  ptLeadTrack = track->pt();
486  trackingInfo.vSubjetInfo[i].leadTrack = track;
487  }
488  }
489  }
490  // find core track in subjets
491  for (int i=0; i<nSubjets; ++i){
492  for (const auto track : trackingInfo.vSubjetInfo[i].vTracks){
493  auto subjetTrackingInfo = trackingInfo.vSubjetInfo[i];
494  if (subjetTrackingInfo.subjet_p4.DeltaR(track->p4()) < RCore){
495  trackingInfo.vSubjetInfo[i].vCoreTracks.push_back(track);
496  }
497  }
498  }
499  //find isotracks in subjets
500  for (const auto track : trackingInfo.vIsoTracks){
501  float RIso = 0.4;
502  float dRMin = 999;
503  int inSubjet = -1;
504  for (int i=0; i<nSubjets; ++i){
505  float dRTrackSubjet = trackingInfo.vSubjetInfo[i].subjet_p4.DeltaR(track->p4());
506  if (dRTrackSubjet > Rsubjet && dRTrackSubjet < RIso && dRTrackSubjet < dRMin){
507  dRMin = dRTrackSubjet;
508  inSubjet = i;
509  }
510  }
511  if (inSubjet >= 0){
512  trackingInfo.vSubjetInfo[inSubjet].vIsoTracks.push_back(track);
513  }
514  }
515  return StatusCode::SUCCESS;
516 }
DiTauIDVarDecorator::getTrackingInfo
StatusCode getTrackingInfo(xAOD::DiTauJet &xDiTau, DitauTrackingInfo &trackingInfo) const
Definition: DiTauIDVarDecorator.cxx:418
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:74
DiTauIDVarDecorator::mass_track_all
float mass_track_all(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:377
xAOD::DiTauJet_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
DiTauIDVarDecorator::E_frac
float E_frac(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:392
DiTauIDVarDecorator::m_ditau_ptDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_ditau_ptDecKey
Definition: DiTauIDVarDecorator.h:70
xAOD::DiTauJet_v1::fCore
float fCore(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:167
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
DiTauIDVarDecorator::f_isotracks
float f_isotracks(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:410
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
DiTauIDVarDecorator::m_E_frac_subsublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_E_frac_subsublDecKey
Definition: DiTauIDVarDecorator.h:100
SG::Accessor< int >
DiTauIDVarDecorator::m_R_track_allDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_track_allDecKey
Definition: DiTauIDVarDecorator.h:86
DiTauIDVarDecorator::SubjetTrackingInfo::vIsoTracks
std::vector< const xAOD::TrackParticle * > vIsoTracks
Definition: DiTauIDVarDecorator.h:29
DiTauIDVarDecorator::m_f_subjet_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_f_subjet_leadDecKey
Definition: DiTauIDVarDecorator.h:73
DiTauIDVarDecorator::DiTauIDVarDecorator
DiTauIDVarDecorator(const std::string &type, const std::string &name, const IInterface *parent)
Definition: DiTauIDVarDecorator.cxx:18
DiTauIDVarDecorator::m_M_core_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_M_core_leadDecKey
Definition: DiTauIDVarDecorator.h:94
DiTauIDVarDecorator::mass_core
float mass_core(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:339
DiTauIDVarDecorator::m_M_trackDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_M_trackDecKey
Definition: DiTauIDVarDecorator.h:92
xAOD::DiTauJet_v1::subjetPhi
float subjetPhi(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:111
test_pyathena.pt
pt
Definition: test_pyathena.py:11
DiTauIDVarDecorator::m_E_frac_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_E_frac_sublDecKey
Definition: DiTauIDVarDecorator.h:99
DiTauIDVarDecorator::m_M_core_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_M_core_sublDecKey
Definition: DiTauIDVarDecorator.h:95
DiTauIDVarDecorator::m_R_subjets_subsublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_subjets_subsublDecKey
Definition: DiTauIDVarDecorator.h:102
DiTauIDVarDecorator::SubjetTrackingInfo::vTracks
std::vector< const xAOD::TrackParticle * > vTracks
Definition: DiTauIDVarDecorator.h:28
DiTauIDVarDecorator::m_R_max_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_max_leadDecKey
Definition: DiTauIDVarDecorator.h:78
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
DiTauIDVarDecorator::SubjetTrackingInfo::vCoreTracks
std::vector< const xAOD::TrackParticle * > vCoreTracks
Definition: DiTauIDVarDecorator.h:30
DiTauIDVarDecorator::m_f_isotracksDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_f_isotracksDecKey
Definition: DiTauIDVarDecorator.h:105
DiTauIDVarDecorator::f_core
float f_core(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:180
DiTauIDVarDecorator::m_d0_leadtrack_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_d0_leadtrack_sublDecKey
Definition: DiTauIDVarDecorator.h:104
DiTauIDVarDecorator::m_R_subjets_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_subjets_sublDecKey
Definition: DiTauIDVarDecorator.h:101
DiTauIDVarDecorator::m_R_tracks_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_tracks_leadDecKey
Definition: DiTauIDVarDecorator.h:90
DiTauIDVarDecorator::R_subjets
float R_subjets(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:396
DiTauIDVarDecorator::m_M_tracks_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_M_tracks_leadDecKey
Definition: DiTauIDVarDecorator.h:97
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
DiTauIDVarDecorator::~DiTauIDVarDecorator
virtual ~DiTauIDVarDecorator()
xAOD::TrackParticle_v1::d0
float d0() const
Returns the parameter.
DiTauIDVarDecorator::mass_tracks
float mass_tracks(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:352
DiTauIDVarDecorator::m_f_core_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_f_core_leadDecKey
Definition: DiTauIDVarDecorator.h:71
DiTauIDVarDecorator::f_subjet
float f_subjet(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:185
DiTauIDVarDecorator::n_track
int n_track(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:213
xAOD::DiTauJet_v1::subjetE
float subjetE(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:121
DiTauIDVarDecorator::execute
virtual StatusCode execute(DiTauCandidateData *data, const EventContext &ctx) const override
Execute - called for each Ditau candidate.
Definition: DiTauIDVarDecorator.cxx:73
xAOD::TrackParticle_v1::p4
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
Definition: TrackParticle_v1.cxx:130
DiTauIDVarDecorator::DitauTrackingInfo
Definition: DiTauIDVarDecorator.h:33
DiTauIDVarDecorator::R_max
float R_max(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:202
lumiFormat.i
int i
Definition: lumiFormat.py:85
DiTauIDVarDecorator::initialize
virtual StatusCode initialize() override
Tool initializer.
Definition: DiTauIDVarDecorator.cxx:30
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
DiTauIDVarDecorator::R_track_core
float R_track_core(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:256
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
DiTauIDVarDecorator::m_M_track_coreDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_M_track_coreDecKey
Definition: DiTauIDVarDecorator.h:93
DiTauIDVarDecorator::SubjetTrackingInfo
Definition: DiTauIDVarDecorator.h:26
DiTauIDVarDecorator::R_track
float R_track(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:272
DiTauIDVarDecorator::mass_track
float mass_track(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:365
DiTauIDVarDecorator::SubjetTrackingInfo::leadTrack
const xAOD::TrackParticle * leadTrack
Definition: DiTauIDVarDecorator.h:31
DiTauIDVarDecorator::m_n_tracks_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_n_tracks_leadDecKey
Definition: DiTauIDVarDecorator.h:81
DiTauIDVarDecorator::DitauTrackingInfo::nSubjets
int nSubjets
Definition: DiTauIDVarDecorator.h:36
test_pyathena.parent
parent
Definition: test_pyathena.py:15
DiTauIDVarDecorator::R_core
float R_core(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:241
DiTauIDVarDecorator::f_track
float f_track(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:194
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DiTauIDVarDecorator::ditau_pt
float ditau_pt(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:175
DiTauIDVarDecorator::m_d0_leadtrack_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_d0_leadtrack_leadDecKey
Definition: DiTauIDVarDecorator.h:103
DiTauIDVarDecorator::m_f_track_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_f_track_leadDecKey
Definition: DiTauIDVarDecorator.h:76
DiTauIDVarDecorator::R_isotrack
float R_isotrack(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:306
DiTauIDVarDecorator::m_dDefault
float m_dDefault
Definition: DiTauIDVarDecorator.h:66
DiTauJet.h
DiTauIDVarDecorator::f_subjets
float f_subjets(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:189
xAOD::DiTauJet_v1::subjetEta
float subjetEta(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:101
xAOD::DiTauJet_v1::nIsoTracks
size_t nIsoTracks() const
Definition: DiTauJet_v1.cxx:256
xAOD::DiTauJet_v1::nTracks
size_t nTracks() const
Definition: DiTauJet_v1.cxx:224
DiTauIDVarDecorator::m_R_trackDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_trackDecKey
Definition: DiTauIDVarDecorator.h:84
DiTauIDVarDecorator::m_n_isotrackDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_n_isotrackDecKey
Definition: DiTauIDVarDecorator.h:83
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
DiTauIDVarDecorator::m_R_track_coreDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_track_coreDecKey
Definition: DiTauIDVarDecorator.h:85
Accessor.h
Helper class to provide type-safe access to aux data.
DiTauToolBase
The base class for all tau tools.
Definition: DiTauToolBase.h:20
DiTauIDVarDecorator::DitauTrackingInfo::vSubjetInfo
std::vector< SubjetTrackingInfo > vSubjetInfo
Definition: DiTauIDVarDecorator.h:37
DiTauIDVarDecorator::m_R_max_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_max_sublDecKey
Definition: DiTauIDVarDecorator.h:79
DiTauIDVarDecorator::m_f_track_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_f_track_sublDecKey
Definition: DiTauIDVarDecorator.h:77
TrackParticle.h
DiTauIDVarDecorator::mass_track_core
float mass_track_core(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:323
DiTauIDVarDecorator::m_f_subjetsDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_f_subjetsDecKey
Definition: DiTauIDVarDecorator.h:75
DiTauIDVarDecorator::m_n_trackDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_n_trackDecKey
Definition: DiTauIDVarDecorator.h:80
DiTauIDVarDecorator::m_f_core_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_f_core_sublDecKey
Definition: DiTauIDVarDecorator.h:72
DiTauIDVarDecorator::R_track_all
float R_track_all(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:289
DiTauIDVarDecorator::DitauTrackingInfo::vTracks
std::vector< const xAOD::TrackParticle * > vTracks
Definition: DiTauIDVarDecorator.h:34
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DiTauIDVarDecorator::R_tracks
float R_tracks(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:226
DiTauIDVarDecorator::m_R_core_leadDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_core_leadDecKey
Definition: DiTauIDVarDecorator.h:88
DiTauIDVarDecorator::n_isotrack
int n_isotrack(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:222
xAOD::DiTauJet_v1
Definition: DiTauJet_v1.h:31
xAOD::DiTauJet_v1::isoTrackLinks
const TrackParticleLinks_t & isoTrackLinks() const
DiTauIDVarDecorator::m_R_tracks_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_tracks_sublDecKey
Definition: DiTauIDVarDecorator.h:91
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
DiTauIDVarDecorator::m_R_core_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_core_sublDecKey
Definition: DiTauIDVarDecorator.h:89
DiTauIDVarDecorator::n_tracks
int n_tracks(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:217
DiTauCandidateData
Definition: DiTauCandidateData.h:15
DiTauIDVarDecorator.h
DiTauIDVarDecorator::m_n_tracks_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_n_tracks_sublDecKey
Definition: DiTauIDVarDecorator.h:82
xAOD::DiTauJet_v1::subjetPt
float subjetPt(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:91
DiTauIDVarDecorator::m_M_tracks_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_M_tracks_sublDecKey
Definition: DiTauIDVarDecorator.h:98
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
xAOD::DiTauJet_v1::trackLinks
const TrackParticleLinks_t & trackLinks() const
DiTauIDVarDecorator::DitauTrackingInfo::vIsoTracks
std::vector< const xAOD::TrackParticle * > vIsoTracks
Definition: DiTauIDVarDecorator.h:35
DiTauIDVarDecorator::m_R_isotrackDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_R_isotrackDecKey
Definition: DiTauIDVarDecorator.h:87
DiTauIDVarDecorator::d0_leadtrack
float d0_leadtrack(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo, int iSubjet) const
Definition: DiTauIDVarDecorator.cxx:402
DiTauIDVarDecorator::SubjetTrackingInfo::subjet_p4
TLorentzVector subjet_p4
Definition: DiTauIDVarDecorator.h:27
DiTauIDVarDecorator::m_M_track_allDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_M_track_allDecKey
Definition: DiTauIDVarDecorator.h:96
TrackParticleContainer.h
DiTauIDVarDecorator::n_subjets
float n_subjets(const xAOD::DiTauJet &xDiTau, const DitauTrackingInfo &ditauInfo) const
Definition: DiTauIDVarDecorator.cxx:167
DiTauIDVarDecorator::m_f_subjet_sublDecKey
SG::WriteDecorHandleKey< xAOD::DiTauJetContainer > m_f_subjet_sublDecKey
Definition: DiTauIDVarDecorator.h:74