ATLAS Offline Software
TrigTauRecMerged.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TrigTauRecMerged.h"
6 
7 #include "GaudiKernel/SystemOfUnits.h"
10 
12 
15 
16 #include "xAODJet/Jet.h"
18 #include "xAODJet/JetContainer.h"
19 
22 #include "xAODTau/TauJet.h"
23 
24 #include "xAODTau/TauDefs.h"
25 #include "xAODTau/TauTrack.h"
28 
29 #include <iterator>
30 #include <algorithm>
31 
32 
33 TrigTauRecMerged::TrigTauRecMerged(const std::string& name, ISvcLocator* pSvcLocator)
34  : AthReentrantAlgorithm(name, pSvcLocator)
35 {
36 
37 }
38 
39 
41 {
42  ATH_MSG_DEBUG("Initialize");
43 
44  if(m_commonTools.begin() == m_commonTools.end()) {
45  ATH_MSG_ERROR("No tools given for this algorithm");
46  return StatusCode::FAILURE;
47  }
48 
49  for(const auto& tool : m_commonTools) ATH_CHECK(tool.retrieve());
50  for(const auto& tool : m_commonToolsBeforeTF) ATH_CHECK(tool.retrieve());
51  for(const auto& tool : m_vertexFinderTools) ATH_CHECK(tool.retrieve());
52  for(const auto& tool : m_trackFinderTools) ATH_CHECK(tool.retrieve());
53  for(const auto& tool : m_vertexVarsTools) ATH_CHECK(tool.retrieve());
54  for(const auto& tool : m_idTools) ATH_CHECK(tool.retrieve());
55 
56  if(!m_monTool.name().empty()) ATH_CHECK(m_monTool.retrieve());
57 
58  ATH_MSG_DEBUG("Initialising handle keys");
64 
66  ATH_CHECK(m_tauJetOutputKey.initialize());
67  ATH_CHECK(m_tauTrackOutputKey.initialize());
68 
69  for(const auto& [key, p] : m_monitoredIdScores) {
70  m_monitoredIdAccessors.emplace(
71  key,
73  );
74  }
75 
76 
77  return StatusCode::SUCCESS;
78 }
79 
80 
81 StatusCode TrigTauRecMerged::execute(const EventContext& ctx) const
82 {
83  //===============================================================================
84  // Initialize monitoring variables
85  //===============================================================================
86 
87  // Common CaloOnly and Precision monitored variables:
88  auto n_taus = Monitored::Scalar<int>("NTauCandidates", 0);
89 
90  auto pT = Monitored::Scalar<float>("Pt", 0);
91  auto eta = Monitored::Scalar<float>("Eta", -99.9);
92  auto phi = Monitored::Scalar<float>("Phi", -99.9);
93 
94  auto etaRoI = Monitored::Scalar<float>("EtaRoI", -99.9);
95  auto phiRoI = Monitored::Scalar<float>("PhiRoI", -99.9);
96  auto dEta_RoI = Monitored::Scalar<float>("dEtaTau_RoI", -10);
97  auto dPhi_RoI = Monitored::Scalar<float>("dPhiTau_RoI", -10);
98 
99  auto mEflowApprox = Monitored::Scalar<float>("mEflowApprox", -99.9);
100  auto ptRatioEflowApprox = Monitored::Scalar<float>("ptRatioEflowApprox", -99.9);
101  auto pt_jetseed_log = Monitored::Scalar<float>("pt_jetseed_log", -99.9);
102  auto etaDetectorAxis = Monitored::Scalar<float>("etaDetectorAxis", -99.9);
103  auto ptDetectorAxis = Monitored::Scalar<float>("ptDetectorAxis", -99.9);
104  auto ptDetectorAxis_log = Monitored::Scalar<float>("ptDetectorAxis_log", -99.9);
105 
106  auto n_cells = Monitored::Scalar<int>("NCaloCells", 0);
107  auto EMRadius = Monitored::Scalar<float>("EMRadius", -0.099);
108  auto HadRadius = Monitored::Scalar<float>("HadRadius", -0.099);
109  auto EtHad = Monitored::Scalar<float>("EtHad", -10);
110  auto EtEm = Monitored::Scalar<float>("EtEm", -10);
111  auto EMFrac = Monitored::Scalar<float>("EMFrac", -10);
112  auto IsoFrac = Monitored::Scalar<float>("IsoFrac", -1);
113  auto CentFrac = Monitored::Scalar<float>("CentFrac", -10);
114 
115  auto clustersMeanCenterLambda = Monitored::Scalar<float>("clustersMeanCenterLambda", 0);
116  auto clustersMeanFirstEngDens = Monitored::Scalar<float>("clustersMeanFirstEngDens", 0);
117  auto clustersMeanEMProbability = Monitored::Scalar<float>("clustersMeanEMProbability", 0);
118  auto clustersMeanSecondLambda = Monitored::Scalar<float>("clustersMeanSecondLambda", 0);
119  auto clustersMeanPresamplerFrac = Monitored::Scalar<float>("clustersMeanPresamplerFrac", 0);
120 
121  auto n_clusters = Monitored::Scalar<int>("NClusters", 0);
122  std::vector<float> cluster_et_log, cluster_dEta, cluster_dPhi;
123  std::vector<float> cluster_log_SECOND_R, cluster_SECOND_LAMBDA, cluster_CENTER_LAMBDA;
124  auto mon_cluster_et_log = Monitored::Collection("cluster_et_log", cluster_et_log);
125  auto mon_cluster_dEta = Monitored::Collection("cluster_dEta", cluster_dEta);
126  auto mon_cluster_dPhi = Monitored::Collection("cluster_dPhi", cluster_dPhi);
127  auto mon_cluster_log_SECOND_R = Monitored::Collection("cluster_log_SECOND_R", cluster_log_SECOND_R);
128  auto mon_cluster_SECOND_LAMBDA = Monitored::Collection("cluster_SECOND_LAMBDA", cluster_SECOND_LAMBDA);
129  auto mon_cluster_CENTER_LAMBDA = Monitored::Collection("cluster_CENTER_LAMBDA", cluster_CENTER_LAMBDA);
130  std::vector<unsigned char> calo_errors;
131  auto mon_calo_errors = Monitored::Collection("calo_errors", calo_errors);
132 
133  // Precision monitored variables
134  auto n_tracks = Monitored::Scalar<int>("NTracks", -10);
135  auto n_iso_tracks = Monitored::Scalar<int>("NIsoTracks", -10);
136 
137  auto ipSigLeadTrk = Monitored::Scalar<float>("ipSigLeadTrk", -1000);
138  auto trFlightPathSig = Monitored::Scalar<float>("trFlightPathSig", -10);
139  auto massTrkSys = Monitored::Scalar<float>("massTrkSys", -10);
140  auto dRmax = Monitored::Scalar<float>("dRmax", -10);
141  auto trkAvgDist = Monitored::Scalar<float>("TrkAvgDist", -1);
142  auto innerTrkAvgDist = Monitored::Scalar<float>("innerTrkAvgDist", -1);
143  auto etovPtLead = Monitored::Scalar<float>("EtovPtLead", -10);
144  auto PSSFraction = Monitored::Scalar<float>("PSSFraction", -999.9);
145  auto EMPOverTrkSysP = Monitored::Scalar<float>("EMPOverTrkSysP", -999.9);
146  auto ChPiEMEOverCaloEME = Monitored::Scalar<float>("ChPiEMEOverCaloEME", -999.9);
147  auto vertex_x = Monitored::Scalar<float>("vertex_x", -999.9);
148  auto vertex_y = Monitored::Scalar<float>("vertex_y", -999.9);
149  auto vertex_z = Monitored::Scalar<float>("vertex_z", -999.9);
150 
151  auto n_all_tracks = Monitored::Scalar<int>("NAllTracks", 0);
152  std::vector<float> track_pt_log, track_dEta, track_dPhi;
153  std::vector<float> track_d0_abs_log, track_z0sinthetaTJVA_abs_log;
154  std::vector<float> track_nPixelHitsPlusDeadSensors, track_nSCTHitsPlusDeadSensors;
155  auto mon_track_pt_log = Monitored::Collection("track_pt_log", track_pt_log);
156  auto mon_track_dEta = Monitored::Collection("track_dEta", track_dEta);
157  auto mon_track_dPhi = Monitored::Collection("track_dPhi", track_dPhi);
158  auto mon_track_d0_abs_log = Monitored::Collection("track_d0_abs_log", track_d0_abs_log);
159  auto mon_track_z0sinthetaTJVA_abs_log = Monitored::Collection("track_z0sinthetaTJVA_abs_log", track_z0sinthetaTJVA_abs_log);
160  auto mon_track_nPixelHitsPlusDeadSensors = Monitored::Collection("track_nPixelHitsPlusDeadSensors", track_nPixelHitsPlusDeadSensors);
161  auto mon_track_nSCTHitsPlusDeadSensors = Monitored::Collection("track_nSCTHitsPlusDeadSensors", track_nSCTHitsPlusDeadSensors);
162  std::vector<unsigned char> track_errors;
163  auto mon_track_errors = Monitored::Collection("track_errors", track_errors);
164 
165  std::map<std::string, Monitored::Scalar<float>> monitoredIdVariables;
166  for(const auto& [key, p] : m_monitoredIdScores) {
167  monitoredIdVariables.emplace(key + "_TauJetScore_0p", Monitored::Scalar<float>(key + "_TauJetScore_0p", -1));
168  monitoredIdVariables.emplace(key + "_TauJetScoreTrans_0p", Monitored::Scalar<float>(key + "_TauJetScoreTrans_0p", -1));
169  monitoredIdVariables.emplace(key + "_TauJetScore_1p", Monitored::Scalar<float>(key + "_TauJetScore_1p", -1));
170  monitoredIdVariables.emplace(key + "_TauJetScoreTrans_1p", Monitored::Scalar<float>(key + "_TauJetScoreTrans_1p", -1));
171  monitoredIdVariables.emplace(key + "_TauJetScore_mp", Monitored::Scalar<float>(key + "_TauJetScore_mp", -1));
172  monitoredIdVariables.emplace(key + "_TauJetScoreTrans_mp", Monitored::Scalar<float>(key + "_TauJetScoreTrans_mp", -1));
173  }
174 
175  std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> monVars = {
176  std::ref(n_taus),
178  std::ref(etaRoI), std::ref(phiRoI), std::ref(dEta_RoI), std::ref(dPhi_RoI),
180  std::ref(etaDetectorAxis), std::ref(ptDetectorAxis), std::ref(ptDetectorAxis_log),
181  std::ref(n_cells),
182  std::ref(EMRadius), std::ref(HadRadius), std::ref(EtHad), std::ref(EtEm), std::ref(EMFrac), std::ref(IsoFrac), std::ref(CentFrac),
183  std::ref(clustersMeanCenterLambda), std::ref(clustersMeanFirstEngDens), std::ref(clustersMeanEMProbability),
184  std::ref(clustersMeanSecondLambda), std::ref(clustersMeanPresamplerFrac),
185  std::ref(n_clusters), std::ref(mon_cluster_et_log), std::ref(mon_cluster_dEta), std::ref(mon_cluster_dPhi),
186  std::ref(mon_cluster_log_SECOND_R), std::ref(mon_cluster_SECOND_LAMBDA), std::ref(mon_cluster_CENTER_LAMBDA),
187  std::ref(mon_calo_errors),
188  std::ref(n_tracks), std::ref(n_iso_tracks),
191  std::ref(vertex_x), std::ref(vertex_y), std::ref(vertex_z),
192  std::ref(n_all_tracks), std::ref(mon_track_pt_log), std::ref(mon_track_dEta), std::ref(mon_track_dPhi),
193  std::ref(mon_track_d0_abs_log), std::ref(mon_track_z0sinthetaTJVA_abs_log),
194  std::ref(mon_track_nPixelHitsPlusDeadSensors), std::ref(mon_track_nSCTHitsPlusDeadSensors),
195  std::ref(mon_track_errors)
196  };
197  for(auto& [key, var] : monitoredIdVariables) monVars.push_back(std::ref(var));
198  auto monitorIt = Monitored::Group(m_monTool, monVars);
199 
200 
201  ATH_MSG_DEBUG("Executing TrigTauRecMerged");
202 
203  //===============================================================================
204  // Main TauJet object:
205  //===============================================================================
206  xAOD::TauJet* tau = nullptr;
207 
208 
209  //===============================================================================
210  // Retrieve RoI
211  //===============================================================================
213  if(!roisHandle.isValid()) {
214  ATH_MSG_ERROR("No RoIHandle found");
215  return StatusCode::FAILURE;
216  }
217 
218  if(roisHandle->empty()) {
219  ATH_MSG_ERROR("Empty RoIHandle");
220  return StatusCode::FAILURE;
221  }
222 
223  const TrigRoiDescriptor *roiDescriptor = roisHandle->at(0);
224  if(roiDescriptor) {
225  ATH_MSG_DEBUG("RoI: " << *roiDescriptor);
226  } else {
227  ATH_MSG_ERROR("Failed to find TrigRoiDescriptor");
228  calo_errors.push_back(NoROIDescr);
229  return StatusCode::FAILURE;
230  }
231 
232 
233  //===============================================================================
234  // Prepare Output TauJet and TauTrack containers
235  //===============================================================================
236 
237  // Create and register the output TauJetContainer
238  std::unique_ptr<xAOD::TauJetContainer> outputContainer = std::make_unique<xAOD::TauJetContainer>();
239  std::unique_ptr<xAOD::TauJetAuxContainer> outputAuxContainer = std::make_unique<xAOD::TauJetAuxContainer>();
240  outputContainer->setStore(outputAuxContainer.get());
241 
243  ATH_CHECK(outputTauHandle.record(std::move(outputContainer), std::move(outputAuxContainer)));
244 
245  // Create and register the output TauTrackContainer
246  std::unique_ptr<xAOD::TauTrackContainer> outputTrackContainer = std::make_unique<xAOD::TauTrackContainer>();
247  std::unique_ptr<xAOD::TauTrackAuxContainer> outputTrackAuxContainer = std::make_unique<xAOD::TauTrackAuxContainer>();
248  outputTrackContainer->setStore(outputTrackAuxContainer.get());
249 
251  ATH_CHECK(tauTrackHandle.record(std::move(outputTrackContainer), std::move(outputTrackAuxContainer)));
252 
253 
254  //===============================================================================
255  // Initial TauJet calo-reco / input-retrieval
256  //===============================================================================
257  // We now have two options for the TauJet reconstruction:
258  // 1) Reconstruct the TauJet from scratch, using the bare calo-clusters (1st trigger step)
259  // 2) Fetch a preceding TauJet (and dummy TauTracks), and use them to seed the current reconstruction
260 
261  //-------------------------------------------------------------------------------
262  // Option 1: Calorimeter-only reconstruction from clusters (CaloMVA step)
263  //-------------------------------------------------------------------------------
264  if(doCaloReconstruction()) {
265  // Retrieve Calocluster container
267  ATH_CHECK(CCContainerHandle.isValid());
268 
269  const xAOD::CaloClusterContainer *RoICaloClusterContainer = CCContainerHandle.get();
270  if(RoICaloClusterContainer) {
271  ATH_MSG_DEBUG("CaloCluster container found of size: " << RoICaloClusterContainer->size());
272 
273  // If size is zero, don't stop just continue to produce empty TauJetCollection
274  if(RoICaloClusterContainer->empty()) calo_errors.push_back(NoClustCont);
275  } else {
276  ATH_MSG_ERROR("No CaloCluster container found");
277  calo_errors.push_back(NoClustCont);
278  return StatusCode::FAILURE;
279  }
280 
281  // Also create the seed-jet containers
282  std::unique_ptr<xAOD::JetContainer> jetContainer{std::make_unique<xAOD::JetContainer>()};
283  std::unique_ptr<xAOD::JetAuxContainer> jetAuxContainer{std::make_unique<xAOD::JetAuxContainer>()};
284  jetContainer->setStore(jetAuxContainer.get());
285 
287  ATH_CHECK(outputTauSeedJetHandle.record(std::move(jetContainer), std::move(jetAuxContainer)));
288 
289  // And create the seed-jet object itself
290  outputTauSeedJetHandle->push_back(std::make_unique<xAOD::Jet>());
291  xAOD::Jet *jet = outputTauSeedJetHandle->back();
292 
293 
294  // Build the jet, also keep track of the kinematics by hand
295  // Eventually, want to use FastJet here?
296  // We are using calibrated clusters, we need to keep track of this
297  jet->setConstituentsSignalState(xAOD::JetConstitScale::CalibratedJetConstituent);
298  TLorentzVector cluster_p4, barycenter;
299  for(const xAOD::CaloCluster* cluster : *RoICaloClusterContainer) {
300  ATH_MSG_DEBUG("Cluster (e, eta, phi): (" << cluster->e() << ", " << cluster->eta() << ", " << cluster->phi() << ")");
301 
302  if(cluster->e() < 0) {
303  ATH_MSG_DEBUG("Negative energy cluster is rejected");
304  continue;
305  }
306 
307  cluster_p4.SetPtEtaPhiE(cluster->pt(), cluster->eta(), cluster->phi(), cluster->e());
308  jet->addConstituent(cluster);
309 
310  barycenter += cluster_p4;
311  }
312 
313  jet->setJetP4(xAOD::JetFourMom_t(barycenter.Pt(), barycenter.Eta(), barycenter.Phi(), barycenter.M()));
314  ATH_MSG_DEBUG("Built jet with eta: " << jet->eta() << ", phi: " << jet->phi() << ", pT: " << jet->pt() << ", E: "<< jet->e() );
315 
316 
317  // If we're running calo-clustering, that means we just started the HLT reco,
318  // and there's no input TauJet container to this step. Create one instead!
319  outputTauHandle->push_back(std::make_unique<xAOD::TauJet>());
320  tau = outputTauHandle->back();
321  tau->setROIWord(roiDescriptor->roiWord());
322 
323  // Using the new Jet collection, setup the tau candidate structure
324  tau->setJet(outputTauSeedJetHandle.ptr(), jet);
325 
326  // Fix eta, phi in case the jet's energy is negative
327  if(jet->e() <= 0) {
328  ATH_MSG_DEBUG("Changing (eta, phi) back to the RoI center due to negative energy: " << jet->e());
329  tau->setP4(tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), tau->m());
330  ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId() << ", tau eta: " << tau->eta() << ", tau phi: " << tau->phi() );
331  }
332  }
333 
334 
335  //-------------------------------------------------------------------------------
336  // Option 2: Use input TauJet (and TauTracks) as seeds (non calo-only reco)
337  //-------------------------------------------------------------------------------
338  if(!doCaloReconstruction()) {
339  // Retrieve input TauJet container
340  if(!m_tauJetInputKey.key().empty()) {
342  const xAOD::TauJetContainer* inputTauContainer = tauInputHandle.cptr();
343  ATH_MSG_DEBUG("Input TauJet Container size: " << inputTauContainer->size());
344 
345  // Copy the input TauJets to the output container
346  ATH_CHECK(deepCopy(outputTauHandle, inputTauContainer));
347  }
348 
349  // Retrieve input TauTrack container
350  if(!m_tauTrackInputKey.key().empty()) {
352  const xAOD::TauTrackContainer* inputTauTrackContainer = tauTrackInputHandle.cptr();
353  ATH_MSG_DEBUG("Tau Track Container Size " << inputTauTrackContainer->size());
354 
355  // Copy the input TauTracks to the output container
356  ATH_CHECK(deepCopy(tauTrackHandle, inputTauTrackContainer));
357  }
358 
359 
360  // Now retrieve the main TauJet object, if available (the recently created copy of the input TauJet)
361  if(!outputTauHandle->empty()) {
362  tau = outputTauHandle->back();
363 
364  // Check if the tau has a valid jetLink
365  ATH_CHECK(tau->jetLink().isValid());
366 
367  // Clear all previous TauTrack links (if any), since we will run the
368  // TauTrackFinder tool (and the associated InDet helpers) in the
369  // Presel and Precision steps, refilling the tracks
370  if(!m_tauTrackInputKey.key().empty()) tau->clearTauTrackLinks();
371  }
372  }
373 
374 
375  //===============================================================================
376  // Get Vertex Container (optional)
377  //===============================================================================
378  const xAOD::VertexContainer* RoIVxContainer = nullptr;
379  if(!m_vertexInputKey.key().empty()){
381 
382  if(!VertexContainerHandle.isValid()) {
383  ATH_MSG_DEBUG("No VertexContainer retrieved for the trigger element");
384  track_errors.push_back(NoVtxCont);
385  } else {
386  RoIVxContainer = VertexContainerHandle.get();
387  ATH_MSG_DEBUG("Size of VertexContainer: " << RoIVxContainer->size());
388  }
389  }
390 
391 
392  ATH_MSG_DEBUG("roiDescriptor roiWord: " << roiDescriptor->roiWord() << ", saved in TauJet: " << tau->ROIWord());
393 
394 
395  //===============================================================================
396  // Loop over all booked tau tools:
397  //===============================================================================
398  StatusCode processStatus = StatusCode::SUCCESS;
399 
400  // Sequence: VertexFinderTools -> CommonToolsBeforeTF -> TrackFinderTools -> CommonTools -> VertexVarsTools -> IDTools
401 
402  for(const auto& tool : m_vertexFinderTools) {
403  ATH_MSG_DEBUG("Starting Tool: " << tool->name());
404 
405  processStatus = tool->executeVertexFinder(*tau, RoIVxContainer);
406 
407  if(!processStatus.isFailure()) {
408  ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
409  } else {
410  ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
411  break;
412  }
413  }
414 
415  for(const auto& tool : m_commonToolsBeforeTF) {
416  if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
417  else break;
418 
419  processStatus = tool->execute(*tau);
420 
421  if(!processStatus.isFailure()) {
422  ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
423  } else {
424  ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
425  break;
426  }
427  }
428 
429  for(const auto& tool : m_trackFinderTools) {
430  if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
431  else break;
432 
433  processStatus = tool->executeTrackFinder(*tau, *tauTrackHandle);
434 
435  if(!processStatus.isFailure()) {
436  ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
437  } else {
438  ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
439  break;
440  }
441  }
442 
443  for(const auto& tool : m_commonTools) {
444  if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
445  else break;
446 
447  processStatus = tool->execute(*tau);
448 
449  if(!processStatus.isFailure()) {
450  ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
451  } else {
452  ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
453  break;
454  }
455  }
456 
457  // Dummy container passed to TauVertexVariables, not used in trigger though
458  xAOD::VertexContainer dummyVxCont;
459  for(const auto& tool : m_vertexVarsTools) {
460  if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
461  else break;
462 
463  processStatus = tool->executeVertexVariables(*tau, dummyVxCont);
464 
465  if(!processStatus.isFailure()) {
466  ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
467  } else {
468  ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
469  break;
470  }
471  }
472 
473  for(const auto& tool : m_idTools) {
474  if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
475  else break;
476 
477  processStatus = tool->execute(*tau);
478 
479  if(!processStatus.isFailure()) {
480  ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
481  } else {
482  ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
483  break;
484  }
485  }
486 
487  ATH_MSG_DEBUG("This tau has " << tau->allTracks() << " tracks linked");
488 
489 
490  // Cleanup in case any of the tools failed (rejected Tau)
491  if(!processStatus.isSuccess()) {
492  ATH_MSG_DEBUG("The tau object has NOT been registered in the tau container");
493 
494  xAOD::TauJet* bad_tau = outputTauHandle->back();
495  ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << " tracks associated with tau");
496  tauTrackHandle->erase(tauTrackHandle->end() - bad_tau->nAllTracks(), tauTrackHandle->end());
497 
498  outputTauHandle->pop_back();
499 
500  ATH_MSG_DEBUG("Clean up done after jet seed");
501 
502  } else {
503  // Check that the seed-jet energy is positive
504  // Otherwise, try to salvage it by replacing the tau position with the RoI's
505  float fJetEnergy = (*tau->jetLink())->e();
506  ATH_MSG_DEBUG("Seed jet E: " << fJetEnergy);
507 
508  if(fJetEnergy < 0.00001) {
509  ATH_MSG_DEBUG("Changing tau's (eta,phi) to RoI ones due to negative energy (PxPyPzE flips eta and phi)");
510  ATH_MSG_DEBUG("This is probably not needed anymore, method PxPyPzE has been corrected");
511  // TODO: Do we still need this??
512 
513  tau->setP4(tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), tau->m());
514 
515  ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId() << ", Tau eta: " << tau->eta() << ", phi: " << tau->phi() << ", pT: " << tau->pt());
516  }
517 
518 
519  //===============================================================================
520  // Monitor tau variables
521  //===============================================================================
522 
523  pT = tau->pt()/Gaudi::Units::GeV;
524  eta = tau->eta();
525  phi = tau->phi();
526 
527 
528  etaRoI = roiDescriptor->eta();
529  phiRoI = roiDescriptor->phi();
530  dEta_RoI = eta - roiDescriptor->eta();
531  dPhi_RoI = phi - roiDescriptor->phi();
532  if(dPhi_RoI < -M_PI) dPhi_RoI += 2.0*M_PI;
533  if(dPhi_RoI > M_PI) dPhi_RoI -= 2.0*M_PI;
534 
535 
536  float pre_mEflowApprox;
537  tau->detail(xAOD::TauJetParameters::mEflowApprox, pre_mEflowApprox);
538  mEflowApprox = std::log10(std::max(pre_mEflowApprox, 140.0f));
539 
540  float pre_ptRatioEflowApprox;
541  tau->detail(xAOD::TauJetParameters::ptRatioEflowApprox, pre_ptRatioEflowApprox);
542  ptRatioEflowApprox = std::min(pre_ptRatioEflowApprox, 4.0f);
543 
544  pt_jetseed_log = std::log10(tau->ptJetSeed());
545  etaDetectorAxis = tau->etaDetectorAxis();
547  ptDetectorAxis_log = std::log10(std::min(tau->ptDetectorAxis()/Gaudi::Units::GeV, 10000.0));
548 
549 
552  tau->detail(xAOD::TauJetParameters::hadRadius, HadRadius);
554  EtHad /= Gaudi::Units::GeV;
556  EtEm /= Gaudi::Units::GeV;
557 
558  float Et_raw = EtEm + EtHad;
559  if(Et_raw != 0) EMFrac = EtEm / Et_raw;
560 
563 
564 
565  // Monitor BRT variables
566  float tmp = 0;
568  if(test) clustersMeanCenterLambda = tmp;
570  if(test) clustersMeanFirstEngDens = tmp;
572  if(test) clustersMeanEMProbability = tmp;
574  if(test) clustersMeanSecondLambda = tmp;
576  if(test) clustersMeanPresamplerFrac = tmp;
577 
578 
579  // Cluster variables monitoring
580  n_clusters = tau->clusters().size();
581  for(const auto& cluster : tau->clusters()) {
582  const xAOD::CaloCluster* cls = dynamic_cast<const xAOD::CaloCluster*>(cluster);
583 
584  cluster_et_log.push_back(std::log10(cls->et()));
585  cluster_dEta.push_back(cls->eta() - tau->eta());
586  cluster_dPhi.push_back(cls->p4().DeltaPhi(tau->p4()));
587 
588  double log_second_R = -999;
589  const bool success_SECOND_R = cls->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_R, log_second_R);
590  if(success_SECOND_R) log_second_R = std::log10(log_second_R + 0.1);
591  cluster_log_SECOND_R.push_back(log_second_R);
592 
593  double second_lambda = -999;
594  const bool success_SECOND_LAMBDA = cls->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_LAMBDA, second_lambda);
595  if(success_SECOND_LAMBDA) second_lambda = std::log10(second_lambda + 0.1);
596  cluster_SECOND_LAMBDA.push_back(second_lambda);
597 
598  double center_lambda = -999;
599  const bool success_CENTER_LAMBDA = cls->retrieveMoment(xAOD::CaloCluster::MomentType::CENTER_LAMBDA, center_lambda);
600  if(success_CENTER_LAMBDA) center_lambda = std::log10(center_lambda + 1e-6);
601  cluster_CENTER_LAMBDA.push_back(center_lambda);
602  }
603 
604 
605  // Tracks summary monitoring
606  n_tracks = tau->nTracks();
607  n_iso_tracks = tau->nTracksIsolation();
609  if(tau->nTracks() > 0) ipSigLeadTrk = std::abs(tau->track(0)->d0SigTJVA()); // TODO: Is this needed?
620 
621  if(tau->vertexLink().isValid() && tau->vertex() && tau->vertex()->vertexType() != xAOD::VxType::NoVtx) {
622  vertex_x = tau->vertex()->x();
623  vertex_y = tau->vertex()->y();
624  vertex_z = tau->vertex()->z();
625  }
626 
627 
628  // Track variables monitoring
629  n_all_tracks = tau->allTracks().size();
630  for(const xAOD::TauTrack* track : tau->allTracks()) {
631  track_pt_log.push_back(std::log10(track->pt()));
632  track_dEta.push_back(track->eta() - tau->eta());
633  track_dPhi.push_back(track->p4().DeltaPhi(tau->p4()));
634  track_d0_abs_log.push_back(std::log10(std::abs(track->track()->d0()) + 1e-6));
635  track_z0sinthetaTJVA_abs_log.push_back(track->z0sinthetaTJVA());
636 
637  uint8_t pixel_hits, pixel_dead;
638  const bool success1_pixel_hits = track->track()->summaryValue(pixel_hits, xAOD::numberOfPixelHits);
639  const bool success2_pixel_dead = track->track()->summaryValue(pixel_dead, xAOD::numberOfPixelDeadSensors);
640  float nPixelHitsPlusDeadSensor = -999;
641  if(success1_pixel_hits && success2_pixel_dead) nPixelHitsPlusDeadSensor = pixel_hits + pixel_dead;
642  track_nPixelHitsPlusDeadSensors.push_back(nPixelHitsPlusDeadSensor);
643 
644  uint8_t sct_hits, sct_dead;
645  const bool success1_sct_hits = track->track()->summaryValue(sct_hits, xAOD::numberOfSCTHits);
646  const bool success2_sct_dead = track->track()->summaryValue(sct_dead, xAOD::numberOfSCTDeadSensors);
647  float nSCTHitsPlusDeadSensors = -999;
648  if(success1_sct_hits && success2_sct_dead) nSCTHitsPlusDeadSensors = sct_hits + sct_dead;
649  track_nSCTHitsPlusDeadSensors.push_back(nSCTHitsPlusDeadSensors);
650  }
651 
652 
653  // TauID Score monitoring
654  for(const auto& [key, p] : m_monitoredIdAccessors) {
655  if(p.first.isAvailable(*tau)) {
656  if(tau->nTracks() == 0) {
657  monitoredIdVariables.at(key + "_TauJetScore_0p") = p.first(*tau);
658  } else if(tau->nTracks() == 1) {
659  monitoredIdVariables.at(key + "_TauJetScore_1p") = p.first(*tau);
660  } else { // MP tau
661  monitoredIdVariables.at(key + "_TauJetScore_mp") = p.first(*tau);
662  }
663  }
664 
665  if(p.second.isAvailable(*tau)) {
666  if(tau->nTracks() == 0) {
667  monitoredIdVariables.at(key + "_TauJetScoreTrans_0p") = p.second(*tau);
668  } else if(tau->nTracks() == 1) {
669  monitoredIdVariables.at(key + "_TauJetScoreTrans_1p") = p.second(*tau);
670  } else { // MP tau
671  monitoredIdVariables.at(key + "_TauJetScoreTrans_mp") = p.second(*tau);
672  }
673  }
674  }
675 
676 
677  ++n_taus;
678 
679 
680  ATH_MSG_DEBUG("RoI: " << roiDescriptor->roiId()
681  << ", Tau pT (GeV): " << pT << ", Tau eta: " << eta << ", Tau phi: " << phi
682  << ", wrt RoI dEta: " << dEta_RoI << ", dPhi: " << dPhi_RoI);
683  }
684 
685  //-------------------------------------------------------------------------------
686  // All done!
687  //-------------------------------------------------------------------------------
688 
689  ATH_MSG_DEBUG("Output TauJetContainer size: " << outputTauHandle->size());
690  ATH_MSG_DEBUG("Output TauJetTrackContainer size: " << tauTrackHandle->size());
691 
692  return StatusCode::SUCCESS;
693 }
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
xAOD::Vertex_v1::x
float x() const
Returns the x position.
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
TrigTauRecMerged::m_vertexInputKey
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexInputKey
Definition: TrigTauRecMerged.h:73
TauGNNUtils::Variables::Cluster::CENTER_LAMBDA
bool CENTER_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauGNNUtils.cxx:840
Jet.h
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
TrigTauRecMerged::m_monitoredIdScores
Gaudi::Property< std::map< std::string, std::pair< std::string, std::string > > > m_monitoredIdScores
Definition: TrigTauRecMerged.h:67
TrigTauRecMerged::m_clustersInputKey
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clustersInputKey
Definition: TrigTauRecMerged.h:72
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigTauRecMerged::NoClustCont
@ NoClustCont
Definition: TrigTauRecMerged.h:40
TrigTauRecMerged::m_idTools
const ToolHandleArray< ITauToolBase > m_idTools
Definition: TrigTauRecMerged.h:63
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
TrigTauRecMerged::m_commonTools
const ToolHandleArray< ITauToolBase > m_commonTools
Definition: TrigTauRecMerged.h:58
xAOD::TauJetParameters::trFlightPathSig
@ trFlightPathSig
Definition: TauDefs.h:163
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
TrigTauRecMerged::NoROIDescr
@ NoROIDescr
Definition: TrigTauRecMerged.h:37
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
xAOD::TauJet_v3::nAllTracks
size_t nAllTracks() const
Definition: TauJet_v3.cxx:554
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.
xAOD::TauJet_v3::etaDetectorAxis
double etaDetectorAxis() const
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
xAOD::TauJetParameters::ClustersMeanSecondLambda
@ ClustersMeanSecondLambda
Definition: TauDefs.h:315
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
TrigTauRecMerged::TrigTauRecMerged
TrigTauRecMerged(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrigTauRecMerged.cxx:33
TrigTauRecMerged::doCaloReconstruction
bool doCaloReconstruction() const
Definition: TrigTauRecMerged.h:83
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
TrigTauRecMerged::m_vertexFinderTools
const ToolHandleArray< ITauToolBase > m_vertexFinderTools
Definition: TrigTauRecMerged.h:60
xAOD::TauJet_v3::clearTauTrackLinks
void clearTauTrackLinks()
Remove all tracks from the tau.
Definition: TauJet_v3.cxx:567
xAOD::TauJet_v3::m
virtual double m() const
The invariant mass of the particle.
TauTrackAuxContainer.h
xAOD::TauJet_v3::nTracks
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Definition: TauJet_v3.cxx:526
AllowedVariables::nSCTHitsPlusDeadSensors
@ nSCTHitsPlusDeadSensors
Definition: AsgElectronSelectorTool.cxx:58
M_PI
#define M_PI
Definition: ActiveFraction.h:11
TrigRoiDescriptor::roiWord
virtual unsigned int roiWord() const override final
Definition: TrigRoiDescriptor.h:135
CaloClusterListBadChannel.cls
cls
Definition: CaloClusterListBadChannel.py:8
xAOD::TauJetParameters::ClustersMeanPresamplerFrac
@ ClustersMeanPresamplerFrac
Definition: TauDefs.h:316
xAOD::TauJetParameters::mEflowApprox
@ mEflowApprox
Definition: TauDefs.h:292
TrigTauRecMerged.h
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
TrigRoiDescriptor
nope - should be used for standalone also, perhaps need to protect the class def bits #ifndef XAOD_AN...
Definition: TrigRoiDescriptor.h:56
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:147
TrigTauRecMerged::m_monTool
const ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigTauRecMerged.h:66
TrigTauRecMerged::m_tauTrackOutputKey
SG::WriteHandleKey< xAOD::TauTrackContainer > m_tauTrackOutputKey
Definition: TrigTauRecMerged.h:80
TauTrackContainer.h
xAOD::TauJet_v3::ptJetSeed
double ptJetSeed() const
xAOD::TauJet_v3::ptDetectorAxis
double ptDetectorAxis() const
xAOD::TauJetParameters::ptRatioEflowApprox
@ ptRatioEflowApprox
Definition: TauDefs.h:293
xAOD::Vertex_v1::vertexType
VxType::VertexType vertexType() const
The type of the vertex.
xAOD::VxType::NoVtx
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Definition: TrackingPrimitives.h:570
xAOD::TauJetParameters::hadRadius
@ hadRadius
Get hadron calorimeter radius.
Definition: TauDefs.h:192
xAOD::TauJet_v3::setP4
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
Definition: TauJet_v3.cxx:172
xAOD::TauJetParameters::ipSigLeadTrk
@ ipSigLeadTrk
Definition: TauDefs.h:160
TrigTauRecMerged::deepCopy
StatusCode deepCopy(SG::WriteHandle< DataVector< V >> &writeHandle, const DataVector< V > *oldContainer) const
Definition: TrigTauRecMerged.h:87
TauJetAuxContainer.h
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
xAOD::TauJet_v3::clusters
std::vector< const IParticle * > clusters() const
Definition: TauJet_v3.cxx:585
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
xAOD::TauJetParameters::centFrac
@ centFrac
Get centrality fraction.
Definition: TauDefs.h:200
xAOD::TauJetParameters::dRmax
@ dRmax
Get maximal dR of tracks associated to calo-seeded tau.
Definition: TauDefs.h:226
TauGNNUtils::Variables::Track::pt_jetseed_log
bool pt_jetseed_log(const xAOD::TauJet &tau, const xAOD::TauTrack &, double &out)
Definition: TauGNNUtils.cxx:492
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
xAOD::TauJet_v3::ROIWord
unsigned int ROIWord() const
the ROIWord, in case TauJet is used in EF trigger
xAOD::TauJet_v3::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
xAOD::TauJet_v3::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
TauDefs.h
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:59
xAOD::TauJetParameters::etHadAtEMScale
@ etHadAtEMScale
Get Hadronic energy at EM scale.
Definition: TauDefs.h:196
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigTauRecMerged::m_vertexVarsTools
const ToolHandleArray< ITauToolBase > m_vertexVarsTools
Definition: TrigTauRecMerged.h:62
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
SG::ReadHandle::get
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::TauJetParameters::trkAvgDist
@ trkAvgDist
Get calibrated EM transverse energy (DEPRECATED since r19)
Definition: TauDefs.h:214
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
xAOD::TauJet_v3::jetLink
const JetLink_t & jetLink() const
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
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::TauJetParameters::etOverPtLeadTrk
@ etOverPtLeadTrk
Definition: TauDefs.h:158
hist_file_dump.f
f
Definition: hist_file_dump.py:135
TrigTauRecMerged::initialize
virtual StatusCode initialize() override
Definition: TrigTauRecMerged.cxx:40
xAOD::Vertex_v1::z
float z() const
Returns the z position.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TauGNNUtils::Variables::Cluster::SECOND_LAMBDA
bool SECOND_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauGNNUtils.cxx:835
xAOD::CalibratedJetConstituent
@ CalibratedJetConstituent
Definition: JetTypes.h:22
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
TauJetContainer.h
DataVector::back
const T * back() const
Access the last element in the collection as an rvalue.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
xAOD::TauJetParameters::massTrkSys
@ massTrkSys
Definition: TauDefs.h:161
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TrigTauRecMerged::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrigTauRecMerged.cxx:81
xAOD::TauJet_v3::setJet
void setJet(const xAOD::JetContainer *cont, const xAOD::Jet *jet)
Definition: TauJet_v3.cxx:683
xAOD::JetFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition: JetTypes.h:17
TrigTauRecMerged::m_tauJetOutputKey
SG::WriteHandleKey< xAOD::TauJetContainer > m_tauJetOutputKey
Definition: TrigTauRecMerged.h:79
xAOD::TauJet_v3::detail
bool detail(TauJetParameters::Detail detail, int &value) const
Set veto flag.
Definition: TauJet_v3.cxx:292
TrigTauRecMerged::m_roiInputKey
SG::ReadHandleKey< TrigRoiDescriptorCollection > m_roiInputKey
Definition: TrigTauRecMerged.h:71
TrigTauRecMerged::NoVtxCont
@ NoVtxCont
Definition: TrigTauRecMerged.h:52
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
xAOD::TauJetParameters::ClustersMeanEMProbability
@ ClustersMeanEMProbability
Definition: TauDefs.h:313
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
xAOD::TauJetParameters::ClustersMeanCenterLambda
@ ClustersMeanCenterLambda
Definition: TauDefs.h:312
TauGNNUtils::Variables::Cluster::SECOND_R
bool SECOND_R(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauGNNUtils.cxx:830
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
TrigTauRecMerged::m_trackFinderTools
const ToolHandleArray< ITauToolBase > m_trackFinderTools
Definition: TrigTauRecMerged.h:61
TauTrack.h
TrigRoiDescriptor::roiId
virtual unsigned int roiId() const override final
these quantities probably don't need to be used any more
Definition: TrigRoiDescriptor.h:133
AthAnalysisHelper.h
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
VertexContainer.h
TrigTauRecMerged::m_tauTrackInputKey
SG::ReadHandleKey< xAOD::TauTrackContainer > m_tauTrackInputKey
Definition: TrigTauRecMerged.h:75
xAOD::TauJetParameters::numCells
@ numCells
Definition: TauDefs.h:171
xAOD::TauJetParameters::innerTrkAvgDist
@ innerTrkAvgDist
Definition: TauDefs.h:287
xAOD::TauJet_v3::setROIWord
void setROIWord(unsigned int)
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
JetContainer.h
xAOD::TauJet_v3::vertex
const Vertex * vertex() const
xAOD::TauJetParameters::ChPiEMEOverCaloEME
@ ChPiEMEOverCaloEME
Definition: TauDefs.h:278
RoiDescriptor::phi
virtual double phi() const override final
Methods to retrieve data members.
Definition: RoiDescriptor.h:100
xAOD::numberOfSCTDeadSensors
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
Definition: TrackingPrimitives.h:273
ref
const boost::regex ref(r_ef)
xAOD::TauTrack_v1
Definition: TauTrack_v1.h:27
xAOD::TauJet_v3::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: TauJet_v3.cxx:97
DataVector::pop_back
void pop_back()
Remove the last element from the collection.
TauJet.h
xAOD::Vertex_v1::y
float y() const
Returns the y position.
TrigTauRecMerged::m_monitoredIdAccessors
std::map< std::string, std::pair< SG::AuxElement::ConstAccessor< float >, SG::AuxElement::ConstAccessor< float > > > m_monitoredIdAccessors
Definition: TrigTauRecMerged.h:68
xAOD::TauJetParameters::ClustersMeanFirstEngDens
@ ClustersMeanFirstEngDens
Definition: TauDefs.h:314
xAOD::TauJetParameters::isolFrac
@ isolFrac
Get isolation fraction.
Definition: TauDefs.h:198
RoiDescriptor::eta
virtual double eta() const override final
Definition: RoiDescriptor.h:101
JetAuxContainer.h
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
TrigRoiDescriptor.h
TrigTauRecMerged::m_commonToolsBeforeTF
const ToolHandleArray< ITauToolBase > m_commonToolsBeforeTF
Definition: TrigTauRecMerged.h:59
xAOD::numberOfPixelDeadSensors
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
Definition: TrackingPrimitives.h:266
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TauGNNUtils::Variables::ptDetectorAxis
bool ptDetectorAxis(const xAOD::TauJet &tau, double &out)
Definition: TauGNNUtils.cxx:343
DataVector::erase
iterator erase(iterator position)
Remove element at a given position.
xAOD::TauJet_v3::nTracksIsolation
size_t nTracksIsolation() const
Definition: TauJet_v3.cxx:536
TrigTauRecMerged::m_tauJetInputKey
SG::ReadHandleKey< xAOD::TauJetContainer > m_tauJetInputKey
Definition: TrigTauRecMerged.h:74
xAOD::TauJetParameters::PSSFraction
@ PSSFraction
Definition: TauDefs.h:277
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
xAOD::TauJetParameters::EMRadius
@ EMRadius
Get E_T radius.
Definition: TauDefs.h:190
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
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
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
TrackParticleContainer.h
xAOD::TauJet_v3::vertexLink
const VertexLink_t & vertexLink() const
xAOD::TauJetParameters::EMPOverTrkSysP
@ EMPOverTrkSysP
Definition: TauDefs.h:279
TrigTauRecMerged::m_tauSeedOutputKey
SG::WriteHandleKey< xAOD::JetContainer > m_tauSeedOutputKey
Definition: TrigTauRecMerged.h:78
xAOD::TauJetParameters::etEMAtEMScale
@ etEMAtEMScale
Get EM energy at EM scale.
Definition: TauDefs.h:194
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37