Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TauJetRNNUtils.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 #include <algorithm>
8 #define GeV 1000
9 
10 namespace TauJetRNNUtils {
11 
12 VarCalc::VarCalc() : asg::AsgMessaging("TauJetRNNUtils::VarCalc") {
13 }
14 
15 bool VarCalc::compute(const std::string &name, const xAOD::TauJet &tau,
16  double &out) const {
17  // Retrieve calculator function
18  ScalarCalc func = nullptr;
19  try {
20  func = m_scalar_map.at(name);
21  } catch (const std::out_of_range &e) {
22  ATH_MSG_ERROR("Variable '" << name << "' not defined");
23  throw;
24  }
25 
26  // Calculate variable
27  return func(tau, out);
28 }
29 
30 bool VarCalc::compute(const std::string &name, const xAOD::TauJet &tau,
31  const std::vector<const xAOD::TauTrack *> &tracks,
32  std::vector<double> &out) const {
33  out.clear();
34 
35  // Retrieve calculator function
36  TrackCalc func = nullptr;
37  try {
38  func = m_track_map.at(name);
39  } catch (const std::out_of_range &e) {
40  ATH_MSG_ERROR("Variable '" << name << "' not defined");
41  throw;
42  }
43 
44  // Calculate variables for selected tracks
45  bool success = true;
46  double value;
47  for (const auto *const trk : tracks) {
48  success = success && func(tau, *trk, value);
49  out.push_back(value);
50  }
51 
52  return success;
53 }
54 
55 bool VarCalc::compute(const std::string &name, const xAOD::TauJet &tau,
56  const std::vector<xAOD::CaloVertexedTopoCluster> &clusters,
57  std::vector<double> &out) const {
58  out.clear();
59 
60  // Retrieve calculator function
61  ClusterCalc func = nullptr;
62  try {
63  func = m_cluster_map.at(name);
64  } catch (const std::out_of_range &e) {
65  ATH_MSG_ERROR("Variable '" << name << "' not defined");
66  throw;
67  }
68 
69  // Calculate variables for selected clusters
70  bool success = true;
71  double value;
72  for (const xAOD::CaloVertexedTopoCluster& cluster : clusters) {
73  success = success && func(tau, cluster, value);
74  out.push_back(value);
75  }
76 
77  return success;
78 }
79 
80 void VarCalc::insert(const std::string &name, ScalarCalc func, const std::vector<std::string>& scalar_vars) {
81  if (std::find(scalar_vars.begin(), scalar_vars.end(), name) == scalar_vars.end()) {
82  return;
83  }
84  if (!func) {
85  throw std::invalid_argument("Nullptr passed to VarCalc::insert");
86  }
87  m_scalar_map[name] = func;
88 }
89 
90 void VarCalc::insert(const std::string &name, TrackCalc func, const std::vector<std::string>& track_vars) {
91  if (std::find(track_vars.begin(), track_vars.end(), name) == track_vars.end()) {
92  return;
93  }
94  if (!func) {
95  throw std::invalid_argument("Nullptr passed to VarCalc::insert");
96  }
97  m_track_map[name] = func;
98 }
99 
100 void VarCalc::insert(const std::string &name, ClusterCalc func, const std::vector<std::string>& cluster_vars) {
101  if (std::find(cluster_vars.begin(), cluster_vars.end(), name) == cluster_vars.end()) {
102  return;
103  }
104  if (!func) {
105  throw std::invalid_argument("Nullptr passed to VarCalc::insert");
106  }
107  m_cluster_map[name] = func;
108 }
109 
110 std::unique_ptr<VarCalc> get_calculator(const std::vector<std::string>& scalar_vars,
111  const std::vector<std::string>& track_vars,
112  const std::vector<std::string>& cluster_vars) {
113  auto calc = std::make_unique<VarCalc>();
114 
115  // Scalar variable calculator functions
116  calc->insert("centFrac", Variables::centFrac, scalar_vars);
117  calc->insert("etOverPtLeadTrk", Variables::etOverPtLeadTrk, scalar_vars);
118  calc->insert("innerTrkAvgDist", Variables::innerTrkAvgDist, scalar_vars);
119  calc->insert("absipSigLeadTrk", Variables::absipSigLeadTrk, scalar_vars);
120  calc->insert("SumPtTrkFrac", Variables::SumPtTrkFrac, scalar_vars);
121  calc->insert("EMPOverTrkSysP", Variables::EMPOverTrkSysP, scalar_vars);
122  calc->insert("ptRatioEflowApprox", Variables::ptRatioEflowApprox, scalar_vars);
123  calc->insert("mEflowApprox", Variables::mEflowApprox, scalar_vars);
124  calc->insert("dRmax", Variables::dRmax, scalar_vars);
125  calc->insert("trFlightPathSig", Variables::trFlightPathSig, scalar_vars);
126  calc->insert("massTrkSys", Variables::massTrkSys, scalar_vars);
127  calc->insert("pt", Variables::pt, scalar_vars);
128  calc->insert("pt_tau_log", Variables::pt_tau_log, scalar_vars);
129  calc->insert("ptDetectorAxis", Variables::ptDetectorAxis, scalar_vars);
130  //---added for the eVeto
131  calc->insert("ptJetSeed_log", Variables::ptJetSeed_log, scalar_vars);
132  calc->insert("absleadTrackEta", Variables::absleadTrackEta, scalar_vars);
133  calc->insert("leadTrackDeltaEta", Variables::leadTrackDeltaEta, scalar_vars);
134  calc->insert("leadTrackDeltaPhi", Variables::leadTrackDeltaPhi, scalar_vars);
135  calc->insert("leadTrackProbNNorHT", Variables::leadTrackProbNNorHT, scalar_vars);
136  calc->insert("EMFracFixed", Variables::EMFracFixed, scalar_vars);
137  calc->insert("etHotShotWinOverPtLeadTrk", Variables::etHotShotWinOverPtLeadTrk, scalar_vars);
138  calc->insert("hadLeakFracFixed", Variables::hadLeakFracFixed, scalar_vars);
139  calc->insert("PSFrac", Variables::PSFrac, scalar_vars);
140  calc->insert("ClustersMeanCenterLambda", Variables::ClustersMeanCenterLambda, scalar_vars);
141  calc->insert("ClustersMeanFirstEngDens", Variables::ClustersMeanFirstEngDens, scalar_vars);
142  calc->insert("ClustersMeanPresamplerFrac", Variables::ClustersMeanPresamplerFrac, scalar_vars);
143 
144  // Track variable calculator functions
145  calc->insert("pt_log", Variables::Track::pt_log, track_vars);
146  calc->insert("pt_tau_log", Variables::Track::pt_tau_log, track_vars);
147  calc->insert("pt_jetseed_log", Variables::Track::pt_jetseed_log, track_vars);
148  calc->insert("d0_abs_log", Variables::Track::d0_abs_log, track_vars);
149  calc->insert("z0sinThetaTJVA_abs_log", Variables::Track::z0sinThetaTJVA_abs_log, track_vars);
150  calc->insert("z0sinthetaTJVA", Variables::Track::z0sinthetaTJVA, track_vars);
151  calc->insert("z0sinthetaSigTJVA", Variables::Track::z0sinthetaSigTJVA, track_vars);
152  calc->insert("d0TJVA", Variables::Track::d0TJVA, track_vars);
153  calc->insert("d0SigTJVA", Variables::Track::d0SigTJVA, track_vars);
154  calc->insert("dEta", Variables::Track::dEta, track_vars);
155  calc->insert("dPhi", Variables::Track::dPhi, track_vars);
156  calc->insert("nInnermostPixelHits", Variables::Track::nInnermostPixelHits, track_vars);
157  calc->insert("nPixelHits", Variables::Track::nPixelHits, track_vars);
158  calc->insert("nSCTHits", Variables::Track::nSCTHits, track_vars);
159  calc->insert("nIBLHitsAndExp", Variables::Track::nIBLHitsAndExp, track_vars);
160  calc->insert("nPixelHitsPlusDeadSensors", Variables::Track::nPixelHitsPlusDeadSensors, track_vars);
161  calc->insert("nSCTHitsPlusDeadSensors", Variables::Track::nSCTHitsPlusDeadSensors, track_vars);
162  calc->insert("eProbabilityNNorHT", Variables::Track::eProbabilityNNorHT, track_vars);
163 
164  // Cluster variable calculator functions
165  calc->insert("et_log", Variables::Cluster::et_log, cluster_vars);
166  calc->insert("pt_tau_log", Variables::Cluster::pt_tau_log, cluster_vars);
167  calc->insert("pt_jetseed_log", Variables::Cluster::pt_jetseed_log, cluster_vars);
168  calc->insert("dEta", Variables::Cluster::dEta, cluster_vars);
169  calc->insert("dPhi", Variables::Cluster::dPhi, cluster_vars);
170  calc->insert("SECOND_R", Variables::Cluster::SECOND_R, cluster_vars);
171  calc->insert("SECOND_LAMBDA", Variables::Cluster::SECOND_LAMBDA, cluster_vars);
172  calc->insert("CENTER_LAMBDA", Variables::Cluster::CENTER_LAMBDA, cluster_vars);
173  //---added for the eVeto
174  calc->insert("SECOND_LAMBDAOverClustersMeanSecondLambda", Variables::Cluster::SECOND_LAMBDAOverClustersMeanSecondLambda, cluster_vars);
175  calc->insert("CENTER_LAMBDAOverClustersMeanCenterLambda", Variables::Cluster::CENTER_LAMBDAOverClustersMeanCenterLambda, cluster_vars);
176  calc->insert("FirstEngDensOverClustersMeanFirstEngDens" , Variables::Cluster::FirstEngDensOverClustersMeanFirstEngDens, cluster_vars);
177 
178  return calc;
179 }
180 
181 
182 namespace Variables {
184 
185 bool centFrac(const xAOD::TauJet &tau, double &out) {
186  float centFrac;
187  const auto success = tau.detail(TauDetail::centFrac, centFrac);
188  out = std::min(centFrac, 1.0f);
189  return success;
190 }
191 
192 bool etOverPtLeadTrk(const xAOD::TauJet &tau, double &out) {
193  float etOverPtLeadTrk;
194  const auto success = tau.detail(TauDetail::etOverPtLeadTrk, etOverPtLeadTrk);
195  out = std::log10(std::max(etOverPtLeadTrk, 0.1f));
196  return success;
197 }
198 
199 bool innerTrkAvgDist(const xAOD::TauJet &tau, double &out) {
200  float innerTrkAvgDist;
201  const auto success = tau.detail(TauDetail::innerTrkAvgDist, innerTrkAvgDist);
203  return success;
204 }
205 
206 bool absipSigLeadTrk(const xAOD::TauJet &tau, double &out) {
207  float ipSigLeadTrk = (tau.nTracks()>0) ? tau.track(0)->d0SigTJVA() : 0.;
208  out = std::min(std::abs(ipSigLeadTrk), 30.0f);
209  return true;
210 }
211 
212 bool SumPtTrkFrac(const xAOD::TauJet &tau, double &out) {
213  float SumPtTrkFrac;
214  const auto success = tau.detail(TauDetail::SumPtTrkFrac, SumPtTrkFrac);
215  out = SumPtTrkFrac;
216  return success;
217 }
218 
219 bool EMPOverTrkSysP(const xAOD::TauJet &tau, double &out) {
220  float EMPOverTrkSysP;
221  const auto success = tau.detail(TauDetail::EMPOverTrkSysP, EMPOverTrkSysP);
222  out = std::log10(std::max(EMPOverTrkSysP, 1e-3f));
223  return success;
224 }
225 
226 bool ptRatioEflowApprox(const xAOD::TauJet &tau, double &out) {
227  float ptRatioEflowApprox;
228  const auto success = tau.detail(TauDetail::ptRatioEflowApprox, ptRatioEflowApprox);
230  return success;
231 }
232 
233 bool mEflowApprox(const xAOD::TauJet &tau, double &out) {
234  float mEflowApprox;
235  const auto success = tau.detail(TauDetail::mEflowApprox, mEflowApprox);
236  out = std::log10(std::max(mEflowApprox, 140.0f));
237  return success;
238 }
239 
240 bool dRmax(const xAOD::TauJet &tau, double &out) {
241  float dRmax;
242  const auto success = tau.detail(TauDetail::dRmax, dRmax);
243  out = dRmax;
244  return success;
245 }
246 
247 bool trFlightPathSig(const xAOD::TauJet &tau, double &out) {
248  float trFlightPathSig;
249  const auto success = tau.detail(TauDetail::trFlightPathSig, trFlightPathSig);
250  out = std::log10(std::max(trFlightPathSig, 0.01f));
251  return success;
252 }
253 
254 bool massTrkSys(const xAOD::TauJet &tau, double &out) {
255  float massTrkSys;
256  const auto success = tau.detail(TauDetail::massTrkSys, massTrkSys);
257  out = std::log10(std::max(massTrkSys, 140.0f));
258  return success;
259 }
260 
261 bool pt(const xAOD::TauJet &tau, double &out) {
262  out = std::log10(std::min(tau.pt() / GeV, 100.0));
263  return true;
264 }
265 
266 bool pt_tau_log(const xAOD::TauJet &tau, double &out) {
267  out = std::log10(std::max(tau.pt() / GeV, 1e-6));
268  return true;
269 }
270 
271 bool ptDetectorAxis(const xAOD::TauJet &tau, double &out) {
272  out = std::log10(std::min(tau.ptDetectorAxis() / GeV, 100.0));
273  return true;
274 }
275 
276 bool ptJetSeed_log(const xAOD::TauJet &tau, double &out) {
277  out = std::log10(std::max(tau.ptJetSeed(), 1e-3));
278  return true;
279 }
280 
281 
282 bool absleadTrackEta(const xAOD::TauJet &tau, double &out){
283  static const SG::ConstAccessor<float> acc_absEtaLeadTrack("ABS_ETA_LEAD_TRACK");
284  float absEtaLeadTrack = acc_absEtaLeadTrack(tau);
285  out = std::max(0.f, absEtaLeadTrack);
286  return true;
287 }
288 
289 bool leadTrackDeltaEta(const xAOD::TauJet &tau, double &out){
290  static const SG::ConstAccessor<float> acc_absDeltaEta("TAU_ABSDELTAETA");
291  float absDeltaEta = acc_absDeltaEta(tau);
292  out = std::max(0.f, absDeltaEta);
293  return true;
294 }
295 
296 bool leadTrackDeltaPhi(const xAOD::TauJet &tau, double &out){
297  static const SG::ConstAccessor<float> acc_absDeltaPhi("TAU_ABSDELTAPHI");
298  float absDeltaPhi = acc_absDeltaPhi(tau);
299  out = std::max(0.f, absDeltaPhi);
300  return true;
301 }
302 
303 bool leadTrackProbNNorHT(const xAOD::TauJet &tau, double &out){
304  auto tracks = tau.allTracks();
305 
306  // Sort tracks in descending pt order
307  if (!tracks.empty()) {
308  auto cmp_pt = [](const xAOD::TauTrack *lhs, const xAOD::TauTrack *rhs) {
309  return lhs->pt() > rhs->pt();
310  };
311  std::sort(tracks.begin(), tracks.end(), cmp_pt);
312 
313  const xAOD::TauTrack* tauLeadTrack = tracks.at(0);
314  const xAOD::TrackParticle* xTrackParticle = tauLeadTrack->track();
316  static const SG::ConstAccessor<float> acc_eProbabilityNN("eProbabilityNN");
317  float eProbabilityNN = acc_eProbabilityNN(*xTrackParticle);
318  out = (tauLeadTrack->pt()>2000.) ? eProbabilityNN : eProbabilityHT;
319  }
320  else {
321  out = 0.;
322  }
323  return true;
324 }
325 
326 bool EMFracFixed(const xAOD::TauJet &tau, double &out){
327  static const SG::ConstAccessor<float> acc_emFracFixed("EMFracFixed");
328  float emFracFixed = acc_emFracFixed(tau);
329  out = std::max(emFracFixed, 0.0f);
330  return true;
331 }
332 
333 bool etHotShotWinOverPtLeadTrk(const xAOD::TauJet &tau, double &out){
334  static const SG::ConstAccessor<float> acc_etHotShotWinOverPtLeadTrk("etHotShotWinOverPtLeadTrk");
335  float etHotShotWinOverPtLeadTrk = acc_etHotShotWinOverPtLeadTrk(tau);
337  out = std::log10(out);
338  return true;
339 }
340 
341 bool hadLeakFracFixed(const xAOD::TauJet &tau, double &out){
342  static const SG::ConstAccessor<float> acc_hadLeakFracFixed("hadLeakFracFixed");
343  float hadLeakFracFixed = acc_hadLeakFracFixed(tau);
345  return true;
346 }
347 
348 bool PSFrac(const xAOD::TauJet &tau, double &out){
349  float PSFrac;
350  const auto success = tau.detail(TauDetail::PSSFraction, PSFrac);
351  out = std::max(0.f,PSFrac);
352  return success;
353 }
354 
355 bool ClustersMeanCenterLambda(const xAOD::TauJet &tau, double &out){
359  return success;
360 }
361 
362 bool ClustersMeanEMProbability(const xAOD::TauJet &tau, double &out){
366  return success;
367 }
368 
369 bool ClustersMeanFirstEngDens(const xAOD::TauJet &tau, double &out){
373  return success;
374 }
375 
376 bool ClustersMeanPresamplerFrac(const xAOD::TauJet &tau, double &out){
380  return success;
381 }
382 
383 bool ClustersMeanSecondLambda(const xAOD::TauJet &tau, double &out){
387  return success;
388 }
389 
390 namespace Track {
391 
392 bool pt_log(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
393  out = std::log10(track.pt());
394  return true;
395 }
396 
397 bool pt_tau_log(const xAOD::TauJet &tau, const xAOD::TauTrack& /*track*/, double &out) {
398  out = std::log10(std::max(tau.pt(), 1e-6));
399  return true;
400 }
401 
402 bool pt_jetseed_log(const xAOD::TauJet &tau, const xAOD::TauTrack& /*track*/, double &out) {
403  out = std::log10(tau.ptJetSeed());
404  return true;
405 }
406 
407 bool z0sinThetaTJVA_abs_log(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
408  out = std::log10(std::abs(track.z0sinthetaTJVA()) + 1e-6);
409  return true;
410 }
411 
412 bool d0_abs_log(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
413  out = std::log10(std::abs(track.d0TJVA()) + 1e-6);
414  return true;
415 }
416 
417 bool z0sinthetaTJVA(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
418  out = track.z0sinthetaTJVA();
419  return true;
420 }
421 
422 bool z0sinthetaSigTJVA(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
423  out = track.z0sinthetaSigTJVA();
424  return true;
425 }
426 
427 bool d0TJVA(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
428  out = track.d0TJVA();
429  return true;
430 }
431 
432 bool d0SigTJVA(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
433  out = track.d0SigTJVA();
434  return true;
435 }
436 
437 bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out) {
438  out = track.eta() - tau.eta();
439  return true;
440 }
441 
442 bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out) {
443  out = track.p4().DeltaPhi(tau.p4());
444  return true;
445 }
446 
447 bool nInnermostPixelHits(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
448  uint8_t inner_pixel_hits;
449  const auto success = track.track()->summaryValue(inner_pixel_hits, xAOD::numberOfInnermostPixelLayerHits);
450  out = inner_pixel_hits;
451  return success;
452 }
453 
454 bool nPixelHits(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
455  uint8_t pixel_hits;
456  const auto success = track.track()->summaryValue(pixel_hits, xAOD::numberOfPixelHits);
457  out = pixel_hits;
458  return success;
459 }
460 
461 bool nSCTHits(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
462  uint8_t sct_hits;
463  const auto success = track.track()->summaryValue(sct_hits, xAOD::numberOfSCTHits);
464  out = sct_hits;
465  return success;
466 }
467 
468 // same as in tau track classification for trigger
469 bool nIBLHitsAndExp(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
470  uint8_t inner_pixel_hits, inner_pixel_exp;
471  const auto success1 = track.track()->summaryValue(inner_pixel_hits, xAOD::numberOfInnermostPixelLayerHits);
472  const auto success2 = track.track()->summaryValue(inner_pixel_exp, xAOD::expectInnermostPixelLayerHit);
473  out = inner_pixel_exp ? inner_pixel_hits : 1.;
474  return success1 && success2;
475 }
476 
477 bool nPixelHitsPlusDeadSensors(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
478  uint8_t pixel_hits, pixel_dead;
479  const auto success1 = track.track()->summaryValue(pixel_hits, xAOD::numberOfPixelHits);
480  const auto success2 = track.track()->summaryValue(pixel_dead, xAOD::numberOfPixelDeadSensors);
481  out = pixel_hits + pixel_dead;
482  return success1 && success2;
483 }
484 
485 bool nSCTHitsPlusDeadSensors(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
486  uint8_t sct_hits, sct_dead;
487  const auto success1 = track.track()->summaryValue(sct_hits, xAOD::numberOfSCTHits);
488  const auto success2 = track.track()->summaryValue(sct_dead, xAOD::numberOfSCTDeadSensors);
489  out = sct_hits + sct_dead;
490  return success1 && success2;
491 }
492 
493 bool eProbabilityNNorHT(const xAOD::TauJet& /*tau*/, const xAOD::TauTrack &track, double &out) {
494  auto atrack = track.track();
495  float eProbabilityHT = atrack->summaryValue(eProbabilityHT, xAOD::eProbabilityHT);
496  static const SG::ConstAccessor<float> acc_eProbabilityNN("eProbabilityNN");
497  float eProbabilityNN = acc_eProbabilityNN(*atrack);
498  out = (atrack->pt()>2000.) ? eProbabilityNN : eProbabilityHT;
499  return true;
500 }
501 
502 } // namespace Track
503 
504 
505 namespace Cluster {
507 
508 bool et_log(const xAOD::TauJet& /*tau*/, const xAOD::CaloVertexedTopoCluster &cluster, double &out) {
509  out = std::log10(cluster.p4().Et());
510  return true;
511 }
512 
513 bool pt_tau_log(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster& /*cluster*/, double &out) {
514  out = std::log10(std::max(tau.pt(), 1e-6));
515  return true;
516 }
517 
518 bool pt_jetseed_log(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster& /*cluster*/, double &out) {
519  out = std::log10(tau.ptJetSeed());
520  return true;
521 }
522 
523 bool dEta(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out) {
524  out = cluster.eta() - tau.eta();
525  return true;
526 }
527 
528 bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out) {
529  out = cluster.p4().DeltaPhi(tau.p4());
530  return true;
531 }
532 
533 bool SECOND_R(const xAOD::TauJet& /*tau*/, const xAOD::CaloVertexedTopoCluster &cluster, double &out) {
534  const auto success = cluster.clust().retrieveMoment(MomentType::SECOND_R, out);
535  out = std::log10(out + 0.1);
536  return success;
537 }
538 
539 bool SECOND_LAMBDA(const xAOD::TauJet& /*tau*/, const xAOD::CaloVertexedTopoCluster &cluster, double &out) {
540  const auto success = cluster.clust().retrieveMoment(MomentType::SECOND_LAMBDA, out);
541  out = std::log10(out + 0.1);
542  return success;
543 }
544 
545 bool CENTER_LAMBDA(const xAOD::TauJet& /*tau*/, const xAOD::CaloVertexedTopoCluster &cluster, double &out) {
546  const auto success = cluster.clust().retrieveMoment(MomentType::CENTER_LAMBDA, out);
547  out = std::log10(out + 1e-6);
548  return success;
549 }
550 
552  static const SG::ConstAccessor<float> acc_ClustersMeanSecondLambda("ClustersMeanSecondLambda");
553  float ClustersMeanSecondLambda = acc_ClustersMeanSecondLambda(tau);
554  double secondLambda(0);
555  const auto success = cluster.clust().retrieveMoment(MomentType::SECOND_LAMBDA, secondLambda);
556  out = (ClustersMeanSecondLambda != 0.) ? secondLambda/ClustersMeanSecondLambda : 0.;
557  return success;
558 }
559 
561  static const SG::ConstAccessor<float> acc_ClustersMeanCenterLambda("ClustersMeanCenterLambda");
562  float ClustersMeanCenterLambda = acc_ClustersMeanCenterLambda(tau);
563  double centerLambda(0);
564  const auto success = cluster.clust().retrieveMoment(MomentType::CENTER_LAMBDA, centerLambda);
565  if (ClustersMeanCenterLambda == 0.){
566  out = 250.;
567  }else {
568  out = centerLambda/ClustersMeanCenterLambda;
569  }
570 
571  out = std::min(out, 250.);
572 
573  return success;
574 }
575 
576 
578  // the ClustersMeanFirstEngDens is the log10 of the energy weighted average of the First_ENG_DENS
579  // divided by ETot to make it dimension-less,
580  // so we need to evaluate the difference of log10(clusterFirstEngDens/clusterTotalEnergy) and the ClustersMeanFirstEngDens
581  double clusterFirstEngDens = 0.0;
582  bool status = cluster.clust().retrieveMoment(MomentType::FIRST_ENG_DENS, clusterFirstEngDens);
583  if (clusterFirstEngDens < 1e-6) clusterFirstEngDens = 1e-6;
584 
585  static const SG::ConstAccessor<float> acc_ClusterTotalEnergy("ClusterTotalEnergy");
586  float clusterTotalEnergy = acc_ClusterTotalEnergy(tau);
587  if (clusterTotalEnergy < 1e-6) clusterTotalEnergy = 1e-6;
588 
589  static const SG::ConstAccessor<float> acc_ClustersMeanFirstEngDens("ClustersMeanFirstEngDens");
590  float clustersMeanFirstEngDens = acc_ClustersMeanFirstEngDens(tau);
591 
592  out = std::log10(clusterFirstEngDens/clusterTotalEnergy) - clustersMeanFirstEngDens;
593 
594  return status;
595 }
596 
597 } // namespace Cluster
598 } // namespace Variables
599 } // namespace TauJetRNNUtils
TauJetRNNUtils::Variables::Track::nSCTHitsPlusDeadSensors
bool nSCTHitsPlusDeadSensors(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:485
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
TauJetRNNUtils::Variables::Track::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:442
TauJetRNNUtils::Variables::Cluster::CENTER_LAMBDAOverClustersMeanCenterLambda
bool CENTER_LAMBDAOverClustersMeanCenterLambda(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:560
TauJetRNNUtils::Variables::dRmax
bool dRmax(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:240
TauJetRNNUtils::Variables::trFlightPathSig
bool trFlightPathSig(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:247
TauJetRNNUtils.h
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
xAOD::TauTrack_v1::d0SigTJVA
float d0SigTJVA() const
Definition: TauTrack_v1.cxx:129
xAOD::TauJet_v3::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
TauJetRNNUtils::Variables::SumPtTrkFrac
bool SumPtTrkFrac(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:212
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
TauJetRNNUtils::Variables::Cluster::pt_jetseed_log
bool pt_jetseed_log(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &, double &out)
Definition: TauJetRNNUtils.cxx:518
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
TauJetRNNUtils::Variables::Track::d0TJVA
bool d0TJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:427
xAOD::TrackParticle_v1::summaryValue
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
Definition: TrackParticle_v1.cxx:736
TauJetRNNUtils::Variables::Track::nIBLHitsAndExp
bool nIBLHitsAndExp(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:469
TauJetRNNUtils::Variables::ClustersMeanCenterLambda
bool ClustersMeanCenterLambda(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:355
xAOD::TauJet_v3::nTracks
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Definition: TauJet_v3.cxx:526
asg
Definition: DataHandleTestTool.h:28
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
TauJetRNNUtils::Variables::ptJetSeed_log
bool ptJetSeed_log(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:276
TauJetRNNUtils::Variables::EMPOverTrkSysP
bool EMPOverTrkSysP(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:219
athena.value
value
Definition: athena.py:124
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:260
xAOD::expectInnermostPixelLayerHit
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
Definition: TrackingPrimitives.h:237
TauJetRNNUtils::Variables::ptDetectorAxis
bool ptDetectorAxis(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:271
SG::ConstAccessor< float >
TauJetRNNUtils::Variables::Track::pt_tau_log
bool pt_tau_log(const xAOD::TauJet &tau, const xAOD::TauTrack &, double &out)
Definition: TauJetRNNUtils.cxx:397
TauJetRNNUtils::Variables::Track::z0sinthetaSigTJVA
bool z0sinthetaSigTJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:422
xAOD::TauJet_v3::ptJetSeed
double ptJetSeed() const
xAOD::TauJet_v3::ptDetectorAxis
double ptDetectorAxis() const
TauJetRNNUtils::Variables::massTrkSys
bool massTrkSys(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:254
TauJetRNNUtils::Variables::ClustersMeanEMProbability
bool ClustersMeanEMProbability(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:362
TauJetRNNUtils::Variables::Cluster::CENTER_LAMBDA
bool CENTER_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:545
TauJetRNNUtils::VarCalc::compute
bool compute(const std::string &name, const xAOD::TauJet &tau, double &out) const
Definition: TauJetRNNUtils.cxx:15
xAOD::TauJetParameters::ipSigLeadTrk
@ ipSigLeadTrk
Definition: TauDefs.h:160
xAOD::CaloCluster_v1::MomentType
MomentType
Enums to identify different moments.
Definition: CaloCluster_v1.h:123
TauJetRNNUtils::Variables::pt
bool pt(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:261
xAOD::TauJet_v3::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
TauJetRNNUtils::Variables::Track::pt_log
bool pt_log(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:392
xAOD::TauJetParameters::Detail
Detail
Enum for tau parameters - used mainly for backward compatibility with the analysis code.
Definition: TauDefs.h:156
TauJetRNNUtils::Variables::Track::d0_abs_log
bool d0_abs_log(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:412
TauJetRNNUtils::Variables::absleadTrackEta
bool absleadTrackEta(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:282
TauJetRNNUtils
Definition: TauJetRNNUtils.cxx:10
TauJetRNNUtils::Variables::Track::dEta
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:437
TauJetRNNUtils::Variables::Cluster::dEta
bool dEta(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:523
TauJetRNNUtils::Variables::mEflowApprox
bool mEflowApprox(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:233
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TauJetRNNUtils::VarCalc::TrackCalc
bool(*)(const xAOD::TauJet &, const xAOD::TauTrack &, double &) TrackCalc
Definition: TauJetRNNUtils.h:35
TauJetRNNUtils::Variables::Track::nPixelHitsPlusDeadSensors
bool nPixelHitsPlusDeadSensors(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:477
TauJetRNNUtils::Variables::Cluster::SECOND_LAMBDAOverClustersMeanSecondLambda
bool SECOND_LAMBDAOverClustersMeanSecondLambda(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:551
TauJetRNNUtils::Variables::Cluster::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:528
Trk::eProbabilityNN
@ eProbabilityNN
Electron probability from NN.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:217
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
TauJetRNNUtils::Variables::Track::nSCTHits
bool nSCTHits(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:461
xAOD::TauJet_v3::track
const TauTrack * track(size_t i, TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged, int *container_index=0) const
Get the pointer to a given tauTrack associated with this tau /*container index needed by trackNonCons...
Definition: TauJet_v3.cxx:450
TauJetRNNUtils::Variables::ClustersMeanPresamplerFrac
bool ClustersMeanPresamplerFrac(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:376
TauJetRNNUtils::get_calculator
std::unique_ptr< VarCalc > get_calculator(const std::vector< std::string > &scalar_vars, const std::vector< std::string > &track_vars, const std::vector< std::string > &cluster_vars)
Definition: TauJetRNNUtils.cxx:110
hist_file_dump.f
f
Definition: hist_file_dump.py:141
TauJetRNNUtils::Variables::Track::z0sinThetaTJVA_abs_log
bool z0sinThetaTJVA_abs_log(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:407
TauJetRNNUtils::Variables::Track::eProbabilityNNorHT
bool eProbabilityNNorHT(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:493
TauJetRNNUtils::Variables::ptRatioEflowApprox
bool ptRatioEflowApprox(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:226
TauJetRNNUtils::Variables::ClustersMeanFirstEngDens
bool ClustersMeanFirstEngDens(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:369
TauJetRNNUtils::VarCalc::m_cluster_map
std::unordered_map< std::string, ClusterCalc > m_cluster_map
Definition: TauJetRNNUtils.h:68
TauJetRNNUtils::Variables::Track::nPixelHits
bool nPixelHits(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:454
TauJetRNNUtils::Variables::etOverPtLeadTrk
bool etOverPtLeadTrk(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:192
TauJetRNNUtils::Variables::Track::nInnermostPixelHits
bool nInnermostPixelHits(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:447
TauJetRNNUtils::VarCalc::m_track_map
std::unordered_map< std::string, TrackCalc > m_track_map
Definition: TauJetRNNUtils.h:67
xAOD::TauJet_v3::detail
bool detail(TauJetParameters::Detail detail, int &value) const
Set veto flag.
Definition: TauJet_v3.cxx:292
xAOD::TauTrack_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
TauJetRNNUtils::VarCalc::m_scalar_map
std::unordered_map< std::string, ScalarCalc > m_scalar_map
Definition: TauJetRNNUtils.h:66
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TauJetRNNUtils::VarCalc::insert
void insert(const std::string &name, ScalarCalc func, const std::vector< std::string > &scalar_vars)
Definition: TauJetRNNUtils.cxx:80
TauJetRNNUtils::Variables::etHotShotWinOverPtLeadTrk
bool etHotShotWinOverPtLeadTrk(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:333
TauJetRNNUtils::Variables::Cluster::SECOND_LAMBDA
bool SECOND_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:539
TauJetRNNUtils::Variables::leadTrackDeltaPhi
bool leadTrackDeltaPhi(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:296
TauJetRNNUtils::Variables::leadTrackDeltaEta
bool leadTrackDeltaEta(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:289
TauJetRNNUtils::VarCalc::ScalarCalc
bool(*)(const xAOD::TauJet &, double &) ScalarCalc
Definition: TauJetRNNUtils.h:32
TauJetRNNUtils::VarCalc::VarCalc
VarCalc()
Definition: TauJetRNNUtils.cxx:12
TauJetRNNUtils::Variables::pt_tau_log
bool pt_tau_log(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:266
TauJetRNNUtils::Variables::Cluster::SECOND_R
bool SECOND_R(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:533
TauJetRNNUtils::Variables::leadTrackProbNNorHT
bool leadTrackProbNNorHT(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:303
TauJetRNNUtils::Variables::EMFracFixed
bool EMFracFixed(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:326
TauJetRNNUtils::Variables::Cluster::et_log
bool et_log(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:508
TauJetRNNUtils::Variables::Track::d0SigTJVA
bool d0SigTJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:432
xAOD::numberOfSCTDeadSensors
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
Definition: TrackingPrimitives.h:274
xAOD::TauTrack_v1
Definition: TauTrack_v1.h:27
TauJetRNNUtils::Variables::PSFrac
bool PSFrac(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:348
xAOD::TauJet_v3::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: TauJet_v3.cxx:97
GlobalVariables.Variables
Variables
Definition: GlobalVariables.py:276
HelperFunctions.h
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
TauGNNUtils::Variables::Cluster::FIRST_ENG_DENS
bool FIRST_ENG_DENS(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauGNNUtils.cxx:912
TauJetRNNUtils::Variables::Track::pt_jetseed_log
bool pt_jetseed_log(const xAOD::TauJet &tau, const xAOD::TauTrack &, double &out)
Definition: TauJetRNNUtils.cxx:402
xAOD::eProbabilityHT
@ eProbabilityHT
Electron probability from High Threshold (HT) information [float].
Definition: TrackingPrimitives.h:302
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:269
TauJetRNNUtils::VarCalc::ClusterCalc
bool(*)(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &, double &) ClusterCalc
Definition: TauJetRNNUtils.h:38
TauJetRNNUtils::Variables::Cluster::FirstEngDensOverClustersMeanFirstEngDens
bool FirstEngDensOverClustersMeanFirstEngDens(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauJetRNNUtils.cxx:577
TauJetRNNUtils::Variables::Track::z0sinthetaTJVA
bool z0sinthetaTJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauJetRNNUtils.cxx:417
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
TauJetRNNUtils::Variables::absipSigLeadTrk
bool absipSigLeadTrk(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:206
merge.status
status
Definition: merge.py:17
xAOD::numberOfPixelDeadSensors
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
Definition: TrackingPrimitives.h:267
xAOD::TauTrack_v1::track
const TrackParticle * track() const
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
TauJetRNNUtils::Variables::innerTrkAvgDist
bool innerTrkAvgDist(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:199
xAOD::CaloVertexedTopoCluster
Evaluate cluster kinematics with a different vertex / signal state.
Definition: Event/xAOD/xAODCaloEvent/xAODCaloEvent/CaloVertexedTopoCluster.h:38
xAOD::TauJetParameters::PSSFraction
@ PSSFraction
Definition: TauDefs.h:277
beamspotnt.calc
calc
Definition: bin/beamspotnt.py:1252
TauJetRNNUtils::Variables::hadLeakFracFixed
bool hadLeakFracFixed(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:341
xAOD::TauJet_v3::allTracks
std::vector< const TauTrack * > allTracks() const
Get the v<const pointer> to all tracks associated with this tau, regardless of classification.
Definition: TauJet_v3.cxx:514
TauJetRNNUtils::Variables::centFrac
bool centFrac(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:185
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:238
TauJetRNNUtils::Variables::Cluster::pt_tau_log
bool pt_tau_log(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &, double &out)
Definition: TauJetRNNUtils.cxx:513
TauJetRNNUtils::Variables::ClustersMeanSecondLambda
bool ClustersMeanSecondLambda(const xAOD::TauJet &tau, double &out)
Definition: TauJetRNNUtils.cxx:383
GeV
#define GeV
Definition: TauJetRNNUtils.cxx:8