ATLAS Offline Software
TrigTauRecMerged.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 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 // Invokes base class constructor.
34 TrigTauRecMerged::TrigTauRecMerged(const std::string& name,ISvcLocator* pSvcLocator)
35  :AthReentrantAlgorithm(name, pSvcLocator)
36 {
37 }
38 
40 {
41  ATH_MSG_DEBUG("TrigTauRecMerged::initialize()");
42 
43  if ( m_commonTools.begin() == m_commonTools.end() ) {
44  ATH_MSG_ERROR(" no tools given for this algorithm.");
45  return StatusCode::FAILURE;
46  }
47 
48  for(const auto& tool : m_commonTools) {
49  ATH_CHECK( tool.retrieve() );
50  }
51 
52  for(const auto& tool : m_vertexFinderTools) {
53  ATH_CHECK( tool.retrieve() );
54  }
55 
56  for(const auto& tool : m_trackFinderTools) {
57  ATH_CHECK( tool.retrieve() );
58  }
59 
60  for(const auto& tool : m_vertexVarsTools) {
61  ATH_CHECK( tool.retrieve() );
62  }
63 
64  for(const auto& tool : m_idTools) {
65  ATH_CHECK( tool.retrieve() );
66  }
67 
68  if ( not m_monTool.name().empty() ) {
69  ATH_CHECK( m_monTool.retrieve() );
70  }
71 
72  ATH_MSG_DEBUG("Initialising Handle Keys");
79  ATH_CHECK(m_trigtauSeedOutKey.initialize());
80  ATH_CHECK(m_trigtauRecOutKey.initialize());
81  ATH_CHECK(m_trigtauTrkOutKey.initialize());
82 
83  return StatusCode::SUCCESS;
84 }
85 
86 StatusCode TrigTauRecMerged::execute(const EventContext& ctx) const
87 {
88  ATH_MSG_DEBUG("Execution");
89 
90  // variables to initialize and keep values for monitoring variables
91  std::vector<unsigned char> calo_errors(0);
92  std::vector<unsigned char> track_errors(0);
93  //std::vector<const xAOD::CaloCluster *> clusters;
94  std::vector<float> cluster_et_log(0);
95  std::vector<float> cluster_dEta(0);
96  std::vector<float> cluster_dPhi(0);
97  std::vector<float> cluster_log_SECOND_R(0);
98  std::vector<float> cluster_SECOND_LAMBDA(0);
99  std::vector<float> cluster_CENTER_LAMBDA(0);
100  std::vector<float> track_pt_log(0);
101  std::vector<float> track_dEta(0);
102  std::vector<float> track_dPhi(0);
103  std::vector<float> track_z0sinthetaTJVA_abs_log(0);
104  std::vector<float> track_d0_abs_log(0);
105  std::vector<float> track_nIBLHitsAndExp(0);
106  std::vector<float> track_nPixelHitsPlusDeadSensors(0);
107  std::vector<float> track_nSCTHitsPlusDeadSensors(0);
108 
109  auto nCells = Monitored::Scalar<int>("nRoI_EFTauCells", 0);
110  auto nTracks = Monitored::Scalar<int>("nRoI_EFTauTracks", -10);
111  auto dEta = Monitored::Scalar<float>("dEtaEFTau_RoI", -10.);
112  auto dPhi = Monitored::Scalar<float>("dPhiEFTau_RoI", -10.);
113  auto emRadius = Monitored::Scalar<float>("EMRadius", -0.099);
114  auto hadRadius = Monitored::Scalar<float>("HadRadius", -0.099);
115  auto EtFinal = Monitored::Scalar<float>("EtFinal", 0.);
116  auto Et = Monitored::Scalar<float>("Et", 0.);
117  auto EtHad = Monitored::Scalar<float>("EtHad",-10.);
118  auto EtEm = Monitored::Scalar<float>("EtEm",-10.);
119  auto EMFrac = Monitored::Scalar<float>("EMFrac",-10.);
120  auto IsoFrac = Monitored::Scalar<float>("IsoFrac",-1.);
121  auto centFrac = Monitored::Scalar<float>("centFrac",-10.);
122  auto nWideTrk = Monitored::Scalar<int>("nWideTrk",-10);
123  auto ipSigLeadTrk = Monitored::Scalar<float>("ipSigLeadTrk",-1000.);
124  auto trFlightPathSig = Monitored::Scalar<float>("trFlightPathSig",-10.);
125  auto massTrkSys = Monitored::Scalar<float>("massTrkSys",-10.);
126  auto dRmax = Monitored::Scalar<float>("dRmax",-10.);
127  auto numTrack = Monitored::Scalar<int>("NTrk", -10);
128  auto trkAvgDist = Monitored::Scalar<float>("TrkAvgDist",-1.0);
129  auto etovPtLead = Monitored::Scalar<float>("EtovPtLead",-10.);
130  auto PSSFraction = Monitored::Scalar<float>("PSSFraction",-999.9);
131  auto EMPOverTrkSysP = Monitored::Scalar<float>("EMPOverTrkSysP",-999.9);
132  auto ChPiEMEOverCaloEME = Monitored::Scalar<float>("ChPiEMEOverCaloEME",-999.9);
133  auto SumPtTrkFrac = Monitored::Scalar<float>("SumPtTrkFrac",-999.9);
134  auto innerTrkAvgDist = Monitored::Scalar<float>("innerTrkAvgDist",-1.0);
135  auto Ncand = Monitored::Scalar<int>("nCand",0);
136  auto EtaL1 = Monitored::Scalar<float>("EtaL1",-99.9);
137  auto PhiL1 = Monitored::Scalar<float>("PhiL1",-99.9);
138  auto EtaEF = Monitored::Scalar<float>("EtaEF",-99.9);
139  auto PhiEF = Monitored::Scalar<float>("PhiEF",-99.9);
140  auto mEflowApprox = Monitored::Scalar<float>("mEflowApprox", -99.9);
141  auto ptRatioEflowApprox = Monitored::Scalar<float>("ptRatioEflowApprox", -99.9);
142  auto pt_jetseed_log = Monitored::Scalar<float>("pt_jetseed_log",-99.9);
143  auto ptDetectorAxis = Monitored::Scalar<float>("ptDetectorAxis",-99.9);
144  auto etaDetectorAxis = Monitored::Scalar<float>("etaDetectorAxis",-99.9);
145  auto ptDetectorAxis_log = Monitored::Scalar<float>("ptDetectorAxis_log",-99.9);
146  auto RNN_tracknumber = Monitored::Scalar<int>("RNN_tracknumber",0);
147  auto RNN_clusternumber = Monitored::Scalar<int>("RNN_clusternumber",0);
148  auto RNNJetScore_0p = Monitored::Scalar<float>("RNNJetScore_0p",-999);
149  auto RNNJetScoreSigTrans_0p = Monitored::Scalar<float>("RNNJetScoreSigTrans_0p",-999);
150  auto RNNJetScore_1p = Monitored::Scalar<float>("RNNJetScore_1p",-999);
151  auto RNNJetScoreSigTrans_1p = Monitored::Scalar<float>("RNNJetScoreSigTrans_1p",-999);
152  auto RNNJetScore_mp = Monitored::Scalar<float>("RNNJetScore_mp",-999);
153  auto RNNJetScoreSigTrans_mp = Monitored::Scalar<float>("RNNJetScoreSigTrans_mp",-999);
154  auto EF_vertex_x = Monitored::Scalar<float>("vertex_x", -999.9);
155  auto EF_vertex_y = Monitored::Scalar<float>("vertex_y", -999.9);
156  auto EF_vertex_z = Monitored::Scalar<float>("vertex_z", -999.9);
157 
158  auto EF_calo_errors = Monitored::Collection("calo_errors",calo_errors);
159  auto EF_track_errors = Monitored::Collection("track_errors",track_errors);
160 
161  auto Cluster_et_log = Monitored::Collection("cluster_et_log", cluster_et_log);
162  auto Cluster_dEta = Monitored::Collection("cluster_dEta", cluster_dEta);
163  auto Cluster_dPhi = Monitored::Collection("cluster_dPhi", cluster_dPhi);
164  auto Cluster_log_SECOND_R = Monitored::Collection("cluster_log_SECOND_R", cluster_log_SECOND_R);
165  auto Cluster_SECOND_LAMBDA = Monitored::Collection("cluster_SECOND_LAMBDA", cluster_SECOND_LAMBDA);
166  auto Cluster_CENTER_LAMBDA = Monitored::Collection("cluster_CENTER_LAMBDA", cluster_CENTER_LAMBDA);
167 
168  auto Track_pt_log = Monitored::Collection("track_pt_log", track_pt_log);
169  auto Track_dEta = Monitored::Collection("track_dEta", track_dEta);
170  auto Track_dPhi = Monitored::Collection("track_dPhi", track_dPhi);
171  auto Track_z0sinthetaTJVA_abs_log = Monitored::Collection("track_z0sinthetaTJVA_abs_log", track_z0sinthetaTJVA_abs_log);
172  auto Track_d0_abs_log = Monitored::Collection("track_d0_abs_log", track_d0_abs_log);
173  auto Track_nIBLHitsAndExp = Monitored::Collection("track_nIBLHitsAndExp", track_nIBLHitsAndExp);
174  auto Track_nPixelHitsPlusDeadSensors = Monitored::Collection("track_nPixelHitsPlusDeadSensors", track_nPixelHitsPlusDeadSensors);
175  auto Track_nSCTHitsPlusDeadSensors = Monitored::Collection("track_nSCTHitsPlusDeadSensors", track_nSCTHitsPlusDeadSensors);
176 
177  auto clustersMeanCenterLambda = Monitored::Scalar<float>("clustersMeanCenterLambda",0.0);
178  auto clustersMeanFirstEngDens = Monitored::Scalar<float>("clustersMeanFirstEngDens",0.0);
179  auto clustersMeanEMProbability = Monitored::Scalar<float>("clustersMeanEMProbability",0.0);
180  auto clustersMeanSecondLambda = Monitored::Scalar<float>("clustersMeanSecondLambda",0.0);
181  auto clustersMeanPresamplerFrac = Monitored::Scalar<float>("clustersMeanPresamplerFrac",0.0);
182 
183  auto monitorIt = Monitored::Group( m_monTool, nCells, nTracks, dEta, dPhi, emRadius, hadRadius,
184  EtFinal, Et, EtHad, EtEm, EMFrac, IsoFrac, centFrac, nWideTrk, ipSigLeadTrk, trFlightPathSig, massTrkSys,
186  innerTrkAvgDist, Ncand, EtaL1, PhiL1, EtaEF, PhiEF, mEflowApprox, ptRatioEflowApprox, pt_jetseed_log,
187  ptDetectorAxis, etaDetectorAxis, ptDetectorAxis_log, RNN_clusternumber, RNNJetScore_0p, RNNJetScoreSigTrans_0p,
188  RNNJetScore_1p, RNNJetScoreSigTrans_1p,RNNJetScore_mp,RNNJetScoreSigTrans_mp,Cluster_et_log, Cluster_dEta, Cluster_dPhi, Cluster_log_SECOND_R,
189  Cluster_SECOND_LAMBDA, Cluster_CENTER_LAMBDA, RNN_tracknumber, EF_vertex_x, EF_vertex_y, EF_vertex_z, EF_calo_errors, EF_track_errors, Track_pt_log, Track_dEta, Track_dPhi, Track_z0sinthetaTJVA_abs_log, Track_d0_abs_log, Track_nIBLHitsAndExp,
190  Track_nPixelHitsPlusDeadSensors, Track_nSCTHitsPlusDeadSensors, clustersMeanCenterLambda, clustersMeanFirstEngDens, clustersMeanEMProbability, clustersMeanSecondLambda, clustersMeanPresamplerFrac);
191 
192 
193  // Retrieve store.
194  ATH_MSG_DEBUG("Executing TrigTauRecMerged");
195 
196  // Get RoiDescriptor
198  if ( not roisHandle.isValid() ) {
199  ATH_MSG_ERROR("No roisHandle found");
200  return StatusCode::FAILURE;
201  }
202 
203  if(roisHandle->empty()){
204  ATH_MSG_ERROR("RoIHandle size = Zero");
205  return StatusCode::FAILURE;
206  }
207  const TrigRoiDescriptor *roiDescriptor = roisHandle->at(0);
208 
209  if ( roiDescriptor != nullptr ) {
210  ATH_MSG_DEBUG(" RoI " << *roiDescriptor);
211  }
212  else {
213  ATH_MSG_ERROR("Failed to find RoiDescriptor ");
214  calo_errors.push_back(NoROIDescr);
215  return StatusCode::FAILURE;
216  }
217 
218  // get TauJetContainer from SG
219  const xAOD::TauJetContainer *pTauContainer = nullptr;
220  const xAOD::TauTrackContainer *pTauTrackContainer = nullptr;
221 
222  if (!m_trigTauJetKey.key().empty() && m_clustersKey.key().empty()) {
224  pTauContainer = tauInputHandle.cptr();
225  ATH_MSG_DEBUG("Input TauJet Container size: " << pTauContainer->size());
226  }
227 
228  if (!m_trigTauTrackInKey.key().empty() && m_clustersKey.key().empty()) {
230  pTauTrackContainer = tauTrackInputHandle.cptr();
231  ATH_MSG_DEBUG("Tau Track Container Size " << pTauTrackContainer->size());
232  }
233 
234  // Make new container which is deep copy of that
235  std::unique_ptr<xAOD::TauJetContainer> pContainer = std::make_unique<xAOD::TauJetContainer>();
236  std::unique_ptr<xAOD::TauJetAuxContainer> pAuxContainer = std::make_unique<xAOD::TauJetAuxContainer>();
237  pContainer->setStore(pAuxContainer.get());
238 
239  // Write final taujets container
241  ATH_CHECK(outputTauHandle.record(std::move(pContainer),std::move(pAuxContainer)));
242 
243  xAOD::TauJet* tau(nullptr);
244  xAOD::TauJet* p_tau(nullptr);
245 
246  ATH_CHECK(deepCopy(outputTauHandle, tau, pTauContainer));
247  if(!outputTauHandle->empty()) p_tau = outputTauHandle->back();
248 
249  std::unique_ptr<xAOD::TauTrackContainer> pTrackContainer = std::make_unique<xAOD::TauTrackContainer>();
250  std::unique_ptr<xAOD::TauTrackAuxContainer> pTrackAuxContainer = std::make_unique<xAOD::TauTrackAuxContainer>();
251  pTrackContainer->setStore(pTrackAuxContainer.get());
252 
254  ATH_MSG_DEBUG(" write: " << tauTrackHandle.key() << " = " << "..." );
255  ATH_CHECK(tauTrackHandle.record(std::move(pTrackContainer), std::move(pTrackAuxContainer)));
256 
257  xAOD::TauTrack* tautrack(nullptr);
258 
259  ATH_CHECK(deepCopy(tauTrackHandle, tautrack, pTauTrackContainer));
260 
261  if(!m_trigTauTrackInKey.key().empty() && m_clustersKey.key().empty()){
262  p_tau->clearTauTrackLinks();
263  }
264 
265  const xAOD::CaloClusterContainer *RoICaloClusterContainer = nullptr;
266 
267  if(!m_clustersKey.key().empty()){
268  // Retrieve Calocluster container
270  CHECK( CCContainerHandle.isValid() );
271 
272  RoICaloClusterContainer = CCContainerHandle.get();
273 
274  if(RoICaloClusterContainer != nullptr) {
275  ATH_MSG_DEBUG( "CaloCluster container found of size: " << RoICaloClusterContainer->size());
276  //If size is zero, don't stop just continue to produce empty TauJetCollection
277  if(RoICaloClusterContainer->empty()) {
278  calo_errors.push_back(NoClustCont);
279  }
280  }
281  else {
282  ATH_MSG_ERROR( "no CaloCluster container found " );
283  calo_errors.push_back(NoClustCont);
284  return StatusCode::FAILURE;
285  }
286 
287  if(p_tau==nullptr){
288  p_tau = new xAOD::TauJet();
289  outputTauHandle->push_back(p_tau);
290  p_tau->setROIWord(roiDescriptor->roiWord());
291  }
292 
293  std::unique_ptr<xAOD::JetContainer> theJetContainer{std::make_unique<xAOD::JetContainer>()};
294  std::unique_ptr<xAOD::JetAuxContainer> theJetAuxContainer{std::make_unique<xAOD::JetAuxContainer>()};
295 
296  theJetContainer->setStore(theJetAuxContainer.get());
297 
298  xAOD::Jet *aJet = new xAOD::Jet;
299 
300  theJetContainer->push_back(aJet);
301 
302  // Build the jet, also keep track of the kinematics by hand
303  // We are using calibrated clusters, we need to keep track of this
305 
306  // Make a minimal effort to speed things up ;)
307  // Eventually, want to use FastJet here?
308  TLorentzVector myCluster;
309  TLorentzVector TauBarycenter(0., 0., 0., 0.);
310 
312  for (clusterIt=RoICaloClusterContainer->begin(); clusterIt != RoICaloClusterContainer->end(); ++clusterIt) {
313  ATH_MSG_DEBUG(" Cluster (e, eta, phi) : ("<< (*clusterIt)->e() << " , " <<(*clusterIt)->eta()<<" , "<<(*clusterIt)->phi()<< " )");
314 
315  if((*clusterIt)->e() < 0)
316  {
317  ATH_MSG_DEBUG(" Negative energy cluster is rejected");
318  continue;
319  }
320 
321  myCluster.SetPtEtaPhiE((*clusterIt)->pt(), (*clusterIt)->eta(), (*clusterIt)->phi(), (*clusterIt)->e());
322  aJet->addConstituent(*clusterIt);
323 
324  TauBarycenter += myCluster;
325  }
326 
327  aJet->setJetP4(xAOD::JetFourMom_t(TauBarycenter.Pt(), TauBarycenter.Eta(), TauBarycenter.Phi(), TauBarycenter.M() ) );
328 
329  ATH_MSG_DEBUG("jet formed"<< aJet->eta() <<" , " << aJet->phi() <<" , " << aJet->pt() << " , "<< aJet->e() );
330 
331  //-------------------------------------------------------------------------
332  // using Jet collection
333  // setup tau candidate structure
334  //-------------------------------------------------------------------------
335 
336  p_tau->setJet(theJetContainer.get(), aJet);
337 
338  if(aJet->e()<=0) {
339  ATH_MSG_DEBUG( "Roi: changing eta due to energy " << aJet->e() );
340  p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m());
341  ATH_MSG_DEBUG( "Roi: " << roiDescriptor->roiId() << " Tau eta: " << p_tau->eta() << " Tau phi: " << p_tau->phi() );
342  }
343 
344  // Save Outputs
346  CHECK( outTauSeedHandle.record( std::move( theJetContainer ), std::move( theJetAuxContainer ) ) );
347  }
348 
349  //Check if jetLink is valid for all taus
350  CHECK(p_tau->jetLink().isValid());
351 
352  // get TrackContainer
353  if(!m_tracksKey.key().empty()){
355 
356  const xAOD::TrackParticleContainer *RoITrackParticleContainer = nullptr;
357 
358  if ( !TPContainerHandle.isValid() ) {
359  ATH_MSG_DEBUG(" No Track container found.");
360  track_errors.push_back(NoTrkCont);
361  }
362  else {
363  RoITrackParticleContainer = TPContainerHandle.get();
364  ATH_MSG_DEBUG(" Size of vector Track container is " << RoITrackParticleContainer->size());
365  if(RoITrackParticleContainer != nullptr) nTracks = RoITrackParticleContainer->size();
366  }
367  }
368 
369  const xAOD::VertexContainer* RoIVxContainer = nullptr;
370 
371  // get Vertex Container
372  if(!m_vertexKey.key().empty()){
374 
375  if( !VertexContainerHandle.isValid() ) {
376  ATH_MSG_DEBUG(" No VxContainers retrieved for the trigger element");
377  track_errors.push_back(NoVtxCont);
378  }
379  else {
380  RoIVxContainer = VertexContainerHandle.get();
381  ATH_MSG_DEBUG(" Size of vector Vertex container " << RoIVxContainer->size());
382  }
383  }
384 
385  ATH_MSG_DEBUG(" roidescriptor roiword " << roiDescriptor->roiWord() << " saved " << p_tau->ROIWord() );
386 
387  //-------------------------------------------------------------------------
388  // loop over booked tau tools
389  //-------------------------------------------------------------------------
390 
391  StatusCode processStatus = StatusCode::SUCCESS;
392 
393  // dummy container passed to TauVertexVariables, not used in trigger though
394  xAOD::VertexContainer dummyVxCont;
395 
396  for (const auto& tool: m_vertexFinderTools){
397  ATH_MSG_DEBUG("Starting Tool: " << tool->name() );
398 
399  processStatus = tool->executeVertexFinder(*p_tau,RoIVxContainer);
400 
401  if ( !processStatus.isFailure() ) {
402  ATH_MSG_DEBUG(" "<< tool->name() << " executed successfully ");
403  } else {
404  ATH_MSG_DEBUG(" "<< tool->name() << " execution failed ");
405  break;
406  }
407 
408  }
409 
410  if ( !processStatus.isFailure() ) {
411  ATH_MSG_DEBUG("Starting Tool: " << m_commonTools[0]->name() );
412  processStatus = m_commonTools[0]->execute( *p_tau);
413  }
414 
415  for (const auto& tool: m_trackFinderTools){
416 
417  if( !processStatus.isFailure() ) ATH_MSG_DEBUG("Starting Tool: " << tool->name() );
418  else break;
419 
420  processStatus = tool->executeTrackFinder(*p_tau, *tauTrackHandle);
421 
422  if ( !processStatus.isFailure() ) {
423  ATH_MSG_DEBUG(" "<< tool->name() << " executed successfully ");
424  } else {
425  ATH_MSG_DEBUG(" "<< tool->name() << " execution failed ");
426  break;
427  }
428 
429  }
430 
431  for (unsigned int i=1; i< m_commonTools.size(); i++) {
432 
433  if( !processStatus.isFailure() ) ATH_MSG_DEBUG("Starting Tool: " << m_commonTools[i]->name() );
434  else break;
435 
436  processStatus = m_commonTools[i]->execute(*p_tau);
437 
438  if ( !processStatus.isFailure() ) {
439  ATH_MSG_DEBUG(" "<< m_commonTools[i]->name() << " executed successfully ");
440  } else {
441  ATH_MSG_DEBUG(" "<< m_commonTools[i]->name() << " execution failed ");
442  break;
443  }
444 
445  }
446 
447  for (const auto& tool: m_vertexVarsTools){
448 
449  if( !processStatus.isFailure() ) ATH_MSG_DEBUG("Starting Tool: " << tool->name() );
450  else break;
451 
452  processStatus = tool->executeVertexVariables(*p_tau, dummyVxCont);
453 
454  if ( !processStatus.isFailure() ) {
455  ATH_MSG_DEBUG(" "<< tool->name() << " executed successfully ");
456  } else {
457  ATH_MSG_DEBUG(" "<< tool->name() << " execution failed ");
458  break;
459  }
460 
461  }
462 
463  for (const auto& tool: m_idTools) {
464 
465  if( !processStatus.isFailure() ) ATH_MSG_DEBUG("Starting Tool: " << tool->name() );
466  else break;
467 
468  processStatus = tool->execute(*p_tau);
469 
470  if ( !processStatus.isFailure() ) {
471  ATH_MSG_DEBUG(" "<< tool->name() << " executed successfully ");
472  } else {
473  ATH_MSG_DEBUG(" "<< tool->name() << " execution failed ");
474  break;
475  }
476 
477  }
478 
479  ATH_MSG_DEBUG("This tau has " << p_tau->allTracks() << " tracks linked");
480 
481  //check status
482  if ( !processStatus.isSuccess() ) { // some problem
483  ATH_MSG_DEBUG("The tau object has NOT been registered in the tau container");
484 
485  xAOD::TauJet* bad_tau = outputTauHandle->back();
486  ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << " tracks associated with tau");
487  tauTrackHandle->erase(tauTrackHandle->end()-bad_tau->nAllTracks(), tauTrackHandle->end());
488 
489  outputTauHandle->pop_back();
490 
491  ATH_MSG_DEBUG("Clean up done after jet seed");
492  }
493  else {
494 
495  float fJetEnergy = (*p_tau->jetLink())->e();
496  ATH_MSG_DEBUG("Roi: jet e "<< fJetEnergy);
497 
498  if( fJetEnergy < 0.00001 ) {
499  ATH_MSG_DEBUG("Roi: changing eta phi to L1 ones due to energy negative (PxPyPzE flips eta and phi)");
500  ATH_MSG_DEBUG("Roi: this is probably not needed anymore, method PxPyPzE has been corrected");
501 
502  p_tau->setP4(p_tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), p_tau->m());
503 
504  ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId()
505  << " Tau eta: " << p_tau->eta()
506  << " Tau phi: " << p_tau->phi()
507  << " Tau pT : "<< p_tau->pt());
508  }
509 
510  // get tau detail variables for Monitoring
511 
512  numTrack = p_tau->nTracks();
513  nWideTrk = p_tau->nTracksIsolation();
520  p_tau->detail(xAOD::TauJetParameters::isolFrac, IsoFrac);
526 
532 
535  EtEm /= Gaudi::Units::GeV;
537  EtHad /= Gaudi::Units::GeV;
538  Et = EtEm + EtHad;
539  EtFinal = p_tau->pt()/Gaudi::Units::GeV;
540 
541  EtaEF = p_tau->eta();
542  PhiEF = p_tau->phi();
543 
544  if( Et !=0) EMFrac = EtEm/ Et ;
545 
546  EtaL1 = roiDescriptor->eta();
547  PhiL1 = roiDescriptor->phi();
548  dEta = EtaEF - roiDescriptor->eta();
549  dPhi = PhiEF - roiDescriptor->phi();
550  if(dPhi<-M_PI) dPhi += 2.0*M_PI;
551  if(dPhi>M_PI) dPhi -= 2.0*M_PI;
552 
553 
554  float pre_mEflowApprox;
555  p_tau->detail(xAOD::TauJetParameters::mEflowApprox, pre_mEflowApprox);
556  mEflowApprox = std::log10(std::max(pre_mEflowApprox, 140.0f));
557 
558  float pre_ptRatioEflowApprox;
559  p_tau->detail(xAOD::TauJetParameters::ptRatioEflowApprox, pre_ptRatioEflowApprox);
560  ptRatioEflowApprox = std::min(pre_ptRatioEflowApprox, 4.0f);
561 
562  pt_jetseed_log = std::log10(p_tau->ptJetSeed());
563 
564  ptDetectorAxis = std::min(p_tau->ptDetectorAxis() / 1000.0, 10000.0);
565  ptDetectorAxis_log = std::log10(std::min(p_tau->ptDetectorAxis() / 1000.0, 10000.0));
566 
567  etaDetectorAxis = p_tau->etaDetectorAxis();
568 
569  if( p_tau->nTracks() > 0 ) {
570  ipSigLeadTrk = std::abs(p_tau->track(0)->d0SigTJVA());
571  }
572 
573  // track variables monitoring
574  for( auto track : p_tau->allTracks()){
575 
576  RNN_tracknumber += 1;
577  track_pt_log.push_back(std::log10( track->pt()));
578  track_dEta.push_back(track->eta()- p_tau->eta());
579  track_dPhi.push_back(track->p4().DeltaPhi(p_tau->p4()));
580  track_z0sinthetaTJVA_abs_log.push_back(track->z0sinthetaTJVA());
581  track_d0_abs_log.push_back(std::log10( std::abs(track->track()->d0()) + 1e-6));
582 
583  uint8_t inner_pixel_hits, inner_pixel_exp;
584  const auto success1_innerPixel_hits = track->track()->summaryValue(inner_pixel_hits, xAOD::numberOfInnermostPixelLayerHits);
585  const auto success2_innerPixel_exp = track->track()->summaryValue(inner_pixel_exp, xAOD::expectInnermostPixelLayerHit);
586  float nIBLHitsAndExp = -999;
587  if (success1_innerPixel_hits && success2_innerPixel_exp) {nIBLHitsAndExp=inner_pixel_exp ? inner_pixel_hits : 1.;};
588  track_nIBLHitsAndExp.push_back(nIBLHitsAndExp);
589 
590  uint8_t pixel_hits, pixel_dead;
591  const auto success1_pixel_hits = track->track()->summaryValue(pixel_hits, xAOD::numberOfPixelHits);
592  const auto success2_pixel_dead = track->track()->summaryValue(pixel_dead, xAOD::numberOfPixelDeadSensors);
593  float nPixelHitsPlusDeadSensor = -999;
594  if (success1_pixel_hits && success2_pixel_dead) {nPixelHitsPlusDeadSensor=pixel_hits + pixel_dead;};
595  track_nPixelHitsPlusDeadSensors.push_back(nPixelHitsPlusDeadSensor);
596 
597  uint8_t sct_hits, sct_dead;
598  const auto success1_sct_hits = track->track()->summaryValue(sct_hits, xAOD::numberOfSCTHits);
599  const auto success2_sct_dead = track->track()->summaryValue(sct_dead, xAOD::numberOfSCTDeadSensors);
600  float nSCTHitsPlusDeadSensors = -999;
601  if (success1_sct_hits && success2_sct_dead) {nSCTHitsPlusDeadSensors=sct_hits + sct_dead;};
602  track_nSCTHitsPlusDeadSensors.push_back(nSCTHitsPlusDeadSensors);
603  }
604 
605  RNN_clusternumber = p_tau->clusters().size();
606 
607  // cluster variables monitoring
608  for ( auto cluster : p_tau->clusters()){
609 
610  auto cls = dynamic_cast<const xAOD::CaloCluster*>(cluster);
611 
612  cluster_et_log.push_back(std::log10( cls->et()));
613  cluster_dEta.push_back( cls->eta()- p_tau->eta());
614  cluster_dPhi.push_back( cls ->p4().DeltaPhi(p_tau->p4()));
615 
616  double log_second_R = -999.;
617  const auto success_SECOND_R = cls->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_R,log_second_R);
618  if (success_SECOND_R) log_second_R = std::log10(log_second_R + 0.1);
619  cluster_log_SECOND_R.push_back(log_second_R);
620 
621  double second_lambda = -999.;
622  const auto success_SECOND_LAMBDA = cls->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_LAMBDA, second_lambda);
623  if (success_SECOND_LAMBDA) second_lambda = std::log10(second_lambda + 0.1);
624  cluster_SECOND_LAMBDA.push_back(second_lambda);
625 
626  double center_lambda = -999.;
627  const auto success_CENTER_LAMBDA = cls->retrieveMoment(xAOD::CaloCluster::MomentType::CENTER_LAMBDA, center_lambda);
628  if (success_CENTER_LAMBDA) center_lambda = std::log10(center_lambda + 1e-6);
629  cluster_CENTER_LAMBDA.push_back(center_lambda);
630  }
631 
632  // monitoring tau vertex
633  if( p_tau->vertexLink().isValid() && p_tau->vertex() && p_tau->vertex()->vertexType() != xAOD::VxType::NoVtx ){
634  EF_vertex_x = p_tau->vertex()->x();
635  EF_vertex_y = p_tau->vertex()->y();
636  EF_vertex_z = p_tau->vertex()->z();
637  }
638 
639  ATH_MSG_DEBUG(" Roi: " << roiDescriptor->roiId()
640  << " Tau being saved eta: " << EtaEF << " Tau phi: " << PhiEF
641  << " wrt L1 dEta "<< dEta<<" dPhi "<<dPhi
642  << " Tau Et (GeV): "<< EtFinal);
643 
644  // monitor RNN score
646  if(p_tau->nTracks() == 0){
647  RNNJetScore_0p = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScore);
648  } else if (p_tau->nTracks() == 1) {
649  RNNJetScore_1p = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScore);
650  } else {
651  RNNJetScore_mp = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScore);
652  }
653  }
654 
656  if(p_tau->nTracks() == 0){
657  RNNJetScoreSigTrans_0p = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans);
658  } else if (p_tau->nTracks() == 1){
659  RNNJetScoreSigTrans_1p = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans);
660  } else {
661  RNNJetScoreSigTrans_mp = p_tau->discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans);
662  }
663  }
664 
665  // monitor BRT variables
666 
667  // use dummy variable to temporarily store results retrieved from tau EDM before final assignment
668  float avariable = 0.;
669 
671  if(test) clustersMeanCenterLambda = avariable;
672 
674  if(test) clustersMeanFirstEngDens = avariable;
675 
677  if(test) clustersMeanEMProbability = avariable;
678 
680  if(test) clustersMeanSecondLambda = avariable;
681 
683  if(test) clustersMeanPresamplerFrac = avariable;
684 
685  ++Ncand;
686  }
687 
688  //-------------------------------------------------------------------------
689  // all done, register the tau Container in TDS.
690  //-------------------------------------------------------------------------
691 
692  ATH_MSG_DEBUG("Output TauJetContainer size:"<< outputTauHandle->size());
693  ATH_MSG_DEBUG("Output TauJetTrackContainer size:"<< tauTrackHandle->size());
694 
695 
696  ATH_MSG_DEBUG("Recorded a tau container: HLT_TrigTauRecMerged");
697  ATH_MSG_DEBUG("the tau object has been registered in the tau container");
698 
699  return StatusCode::SUCCESS;
700 }
xAOD::Vertex_v1::x
float x() const
Returns the x position.
xAOD::TauJetParameters::RNNJetScoreSigTrans
@ RNNJetScoreSigTrans
RNN score which is signal transformed/flattened.
Definition: TauDefs.h:92
TauGNNUtils::Variables::Cluster::CENTER_LAMBDA
bool CENTER_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
Definition: TauGNNUtils.cxx:826
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
Jet.h
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigTauRecMerged::NoClustCont
@ NoClustCont
Definition: TrigTauRecMerged.h:45
max
#define max(a, b)
Definition: cfImp.cxx:41
TrigTauRecMerged::m_idTools
const ToolHandleArray< ITauToolBase > m_idTools
Definition: TrigTauRecMerged.h:64
TrigTauRecMerged::m_commonTools
const ToolHandleArray< ITauToolBase > m_commonTools
internal tool store
Definition: TrigTauRecMerged.h:60
xAOD::TauJetParameters::trFlightPathSig
@ trFlightPathSig
Definition: TauDefs.h:163
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
TrigTauRecMerged::NoROIDescr
@ NoROIDescr
Definition: TrigTauRecMerged.h:42
xAOD::TauJet_v3::discriminant
double discriminant(TauJetParameters::TauID discID) const
Get value of discriminant.
Definition: TauJet_v3.cxx:253
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
xAOD::TauJetParameters::ClustersMeanSecondLambda
@ ClustersMeanSecondLambda
Definition: TauDefs.h:315
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
TrigTauRecMerged::TrigTauRecMerged
TrigTauRecMerged(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrigTauRecMerged.cxx:34
TrigTauRecMerged::m_vertexFinderTools
const ToolHandleArray< ITauToolBase > m_vertexFinderTools
Definition: TrigTauRecMerged.h:61
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
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
TrigTauRecMerged::m_clustersKey
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clustersKey
Definition: TrigTauRecMerged.h:73
xAOD::TauJetParameters::ClustersMeanPresamplerFrac
@ ClustersMeanPresamplerFrac
Definition: TauDefs.h:316
xAOD::TauJetParameters::mEflowApprox
@ mEflowApprox
Definition: TauDefs.h:292
xAOD::Jet_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition: Jet_v1.cxx:54
TrigTauRecMerged.h
xAOD::TauJet_v3::hasDiscriminant
bool hasDiscriminant(TauJetParameters::TauID discID) const
Check if class contains requested discriminant.
Definition: TauJet_v3.cxx:242
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
xAOD::expectInnermostPixelLayerHit
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
Definition: TrackingPrimitives.h:236
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:146
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
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
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::Jet_v1::setJetP4
void setJetP4(const JetFourMom_t &p4)
Definition: Jet_v1.cxx:171
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:490
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
TrigTauRecMerged::m_trigtauSeedOutKey
SG::WriteHandleKey< xAOD::JetContainer > m_trigtauSeedOutKey
Definition: TrigTauRecMerged.h:79
xAOD::TauJetParameters::etHadAtEMScale
@ etHadAtEMScale
Get Hadronic energy at EM scale.
Definition: TauDefs.h:196
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigTauRecMerged::m_vertexVarsTools
const ToolHandleArray< ITauToolBase > m_vertexVarsTools
Definition: TrigTauRecMerged.h:63
TrigTauRecMerged::m_trigtauRecOutKey
SG::WriteHandleKey< xAOD::TauJetContainer > m_trigtauRecOutKey
Definition: TrigTauRecMerged.h:80
xAOD::nCells
setRawEt setRawPhi nCells
Definition: TrigCaloCluster_v1.cxx:33
lumiFormat.i
int i
Definition: lumiFormat.py:92
TrigTauRecMerged::m_vertexKey
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexKey
Definition: TrigTauRecMerged.h:75
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
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
TauGNNUtils::Variables::Track::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:530
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
xAOD::TauJetParameters::nChargedTracks
@ nChargedTracks
Definition: TauDefs.h:322
xAOD::TauJet_v3::jetLink
const JetLink_t & jetLink() const
xAOD::Jet_v1::setConstituentsSignalState
void setConstituentsSignalState(JetConstitScale t)
Set the state at which constituents were when this jet was found. This function is called by jet buil...
Definition: Jet_v1.cxx:141
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
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
TrigTauRecMerged::initialize
virtual StatusCode initialize() override
Definition: TrigTauRecMerged.cxx:39
xAOD::Vertex_v1::z
float z() const
Returns the z position.
xAOD::TauJet
TauJet_v3 TauJet
Definition of the current "tau version".
Definition: Event/xAOD/xAODTau/xAODTau/TauJet.h:17
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:821
xAOD::CalibratedJetConstituent
@ CalibratedJetConstituent
Definition: JetTypes.h:22
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:581
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?
TauJetParameters::emRadius
@ emRadius
Definition: TauJetParameters.h:149
TrigTauRecMerged::m_roIInputKey
SG::ReadHandleKey< TrigRoiDescriptorCollection > m_roIInputKey
Definition: TrigTauRecMerged.h:72
xAOD::Jet_v1::addConstituent
void addConstituent(const ElementLink< IParticleContainer > &link, float weight=1.0)
Add a constituent directly in the ElementLink format.
Definition: Jet_v1.cxx:111
TrigTauRecMerged::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrigTauRecMerged.cxx:86
xAOD::Jet_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: Jet_v1.cxx:49
min
#define min(a, b)
Definition: cfImp.cxx:40
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
xAOD::TauJet_v3::detail
bool detail(TauJetParameters::Detail detail, int &value) const
Set veto flag.
Definition: TauJet_v3.cxx:292
TrigTauRecMerged::NoVtxCont
@ NoVtxCont
Definition: TrigTauRecMerged.h:56
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
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:816
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
TrigTauRecMerged::m_trigTauJetKey
SG::ReadHandleKey< xAOD::TauJetContainer > m_trigTauJetKey
Definition: TrigTauRecMerged.h:76
TrigTauRecMerged::m_trackFinderTools
const ToolHandleArray< ITauToolBase > m_trackFinderTools
Definition: TrigTauRecMerged.h:62
TauTrack.h
SG::VarHandleBase::key
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:64
TrigRoiDescriptor::roiId
virtual unsigned int roiId() const override final
these quantities probably don't need to be used any more
Definition: TrigRoiDescriptor.h:133
xAOD::TauJetParameters::RNNJetScore
@ RNNJetScore
RNN score for Jet rejection (not transformed)
Definition: TauDefs.h:90
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
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
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
TauGNNUtils::Variables::Track::nSCTHitsPlusDeadSensors
bool nSCTHitsPlusDeadSensors(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:573
TrigTauRecMerged::m_trigTauTrackInKey
SG::ReadHandleKey< xAOD::TauTrackContainer > m_trigTauTrackInKey
Definition: TrigTauRecMerged.h:77
xAOD::Jet_v1::e
virtual double e() const
The total energy of the particle.
Definition: Jet_v1.cxx:63
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
xAOD::TauTrack_v1
Definition: TauTrack_v1.h:27
TrigTauRecMerged::NoTrkCont
@ NoTrkCont
Definition: TrigTauRecMerged.h:55
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.
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::deepCopy
StatusCode deepCopy(T *&containerOut, U *&containerStoreOut, const V *dummyContainerType, const T *&oldContainer)
TrigTauRecMerged::m_trigtauTrkOutKey
SG::WriteHandleKey< xAOD::TauTrackContainer > m_trigtauTrkOutKey
Definition: TrigTauRecMerged.h:81
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.
xAOD::TauJetParameters::SumPtTrkFrac
@ SumPtTrkFrac
Definition: TauDefs.h:289
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:341
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
TauGNNUtils::Variables::Track::dEta
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:525
xAOD::TauJetParameters::PSSFraction
@ PSSFraction
Definition: TauDefs.h:277
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
xAOD::Jet_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition: Jet_v1.cxx:44
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx: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.
TrigTauRecMerged::m_monTool
const ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigTauRecMerged.h:69
xAOD::Jet
Jet_v1 Jet
Definition of the current "jet version".
Definition: Event/xAOD/xAODJet/xAODJet/Jet.h:17
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
TauGNNUtils::Variables::Track::nIBLHitsAndExp
bool nIBLHitsAndExp(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:557
xAOD::TauJetParameters::etEMAtEMScale
@ etEMAtEMScale
Get EM energy at EM scale.
Definition: TauDefs.h:194
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
TrigTauRecMerged::m_tracksKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_tracksKey
Definition: TrigTauRecMerged.h:74