ATLAS Offline Software
PFTrackMuonIsoTaggingAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "StoreGate/ReadHandle.h"
9 #include <memory>
11 
12 PFTrackMuonIsoTaggingAlg::PFTrackMuonIsoTaggingAlg(const std::string &name, ISvcLocator *pSvcLocator)
13  : AthReentrantAlgorithm(name, pSvcLocator)
14 {
15 }
16 
18 
20 {
23  ATH_CHECK(m_inputVerticesKey.initialize());
25  ATH_CHECK(m_trkIsoTool.retrieve());
26  ATH_CHECK(m_caloIsoTool.retrieve());
27  return StatusCode::SUCCESS;
28 }
29 
30 StatusCode PFTrackMuonIsoTaggingAlg::execute(const EventContext &ctx) const
31 {
33  if (!inputTracks.isValid())
34  {
35  ATH_MSG_ERROR("Failed to retrieve " << m_inputTracksKey);
36  return StatusCode::FAILURE;
37  }
38  auto inputClusters = SG::makeHandle(m_inputClustersKey, ctx);
39  if (!inputClusters.isValid())
40  {
41  ATH_MSG_ERROR("Failed to retrieve " << m_inputClustersKey);
42  return StatusCode::FAILURE;
43  }
44  auto inputVertices = SG::makeHandle(m_inputVerticesKey, ctx);
45  if (!inputVertices.isValid())
46  {
47  ATH_MSG_ERROR("Failed to retrieve " << m_inputVerticesKey);
48  return StatusCode::FAILURE;
49  }
50  auto outputHandle = SG::makeHandle(m_outputTracksKey, ctx);
51  const xAOD::Vertex *primaryVtx = nullptr;
52  for (const xAOD::Vertex *ivtx : *inputVertices)
53  {
54  if (ivtx->vertexType() == xAOD::VxType::PriVtx)
55  {
56  primaryVtx = ivtx;
57  break;
58  }
59  }
60 
61  auto outputTracks = std::make_unique<ConstDataVector<xAOD::TrackParticleContainer>>(SG::VIEW_ELEMENTS);
62  for (const xAOD::TrackParticle *itrk : *inputTracks)
63  {
64  if (itrk->pt() > m_minPt)
65  {
66  xAOD::TrackIsolation trackIsoResult;
67  std::vector<xAOD::Iso::IsolationType> trackIsoTypes{xAOD::Iso::ptcone20};
68  xAOD::TrackCorrection trackIsoCorr;
70  m_trkIsoTool->trackIsolation(trackIsoResult, *itrk, trackIsoTypes, trackIsoCorr, primaryVtx, nullptr, inputTracks.ptr());
71  float ptCone20 = trackIsoResult.ptcones[0];
72  xAOD::CaloIsolation caloIsoResult;
73  xAOD::CaloCorrection caloIsoCorr;
75  m_caloIsoTool->caloTopoClusterIsolation(caloIsoResult, *itrk, {xAOD::Iso::IsolationType::etcone20}, caloIsoCorr, inputClusters.ptr());
77  float rerr = Amg::error(itrk->definingParametersCovMatrix(), 4) / fabs(itrk->qOverP());
78  float eOverP = etConeCore / itrk->pt();
79  float trackIso = ptCone20 / itrk->pt();
80  float ptsum = itrk->pt() + ptCone20;
81  float caloIso = etConeCore / ptsum;
82  float trkPtFraction = itrk->pt() / ptsum;
83 
84  bool fakeTrack = false;
85  bool muonTrack = false;
86  if (trackIso < m_hltTrkIsoThresh)
87  {
88  if (rerr > m_hltFakeTrkRErr)
89  fakeTrack = true;
90  else if (eOverP < m_hltIsoMuonEOverP)
91  muonTrack = true;
92  else if (rerr > 0.1 || (eOverP > 0.1 && rerr > 0.05))
93  fakeTrack = true;
94  }
95  else
96  {
97  muonTrack = caloIso < m_hltNonIsoMuonEOverP && trkPtFraction > m_hltNonIsoMuonTrkPtFraction;
98  }
99  if (muonTrack || fakeTrack)
100  continue;
101  }
102  outputTracks->push_back(itrk);
103  }
104  ATH_CHECK(outputHandle.put(ctx, std::move(outputTracks)) != nullptr);
105 
106  return StatusCode::SUCCESS;
107 }
PFTrackMuonIsoTaggingAlg::m_caloIsoTool
ToolHandle< xAOD::ICaloTopoClusterIsolationTool > m_caloIsoTool
Definition: PFTrackMuonIsoTaggingAlg.h:44
PFTrackMuonIsoTaggingAlg::~PFTrackMuonIsoTaggingAlg
virtual ~PFTrackMuonIsoTaggingAlg() override
xAOD::TrackCorrection
Definition: IsolationCommon.h:18
xAOD::Iso::coreEnergy
@ coreEnergy
energy stored for this correction
Definition: Event/xAOD/xAODPrimitives/xAODPrimitives/IsolationCorrection.h:93
PFTrackMuonIsoTaggingAlg::m_inputClustersKey
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_inputClustersKey
Input cluster collection.
Definition: PFTrackMuonIsoTaggingAlg.h:32
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
ConstDataVector.h
DataVector adapter that acts like it holds const pointers.
xAOD::Iso::coreTrackPtr
@ coreTrackPtr
tracks pointer
Definition: Event/xAOD/xAODPrimitives/xAODPrimitives/IsolationCorrection.h:66
PFTrackMuonIsoTaggingAlg::m_outputTracksKey
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_outputTracksKey
The output tracks, excluding those identified as muons.
Definition: PFTrackMuonIsoTaggingAlg.h:38
EventPrimitivesHelpers.h
xAOD::TrackCorrection::trackbitset
Iso::IsolationTrackCorrectionBitset trackbitset
Definition: IsolationCommon.h:19
PFTrackMuonIsoTaggingAlg::m_inputVerticesKey
SG::ReadHandleKey< xAOD::VertexContainer > m_inputVerticesKey
Input vertex collection.
Definition: PFTrackMuonIsoTaggingAlg.h:35
xAOD::Iso::ptcone20
@ ptcone20
Track isolation.
Definition: IsolationType.h:40
PFTrackMuonIsoTaggingAlg::m_hltIsoMuonEOverP
Gaudi::Property< float > m_hltIsoMuonEOverP
HLT E over P selection for isolated muon tracks.
Definition: PFTrackMuonIsoTaggingAlg.h:53
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
PFTrackMuonIsoTaggingAlg::PFTrackMuonIsoTaggingAlg
PFTrackMuonIsoTaggingAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: PFTrackMuonIsoTaggingAlg.cxx:12
WriteHandle.h
Handle class for recording to StoreGate.
xAOD::CaloIsolation
Definition: IsolationCommon.h:22
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
python.TrigInDetConfig.inputTracks
inputTracks
Definition: TrigInDetConfig.py:168
PFTrackMuonIsoTaggingAlg::m_minPt
Gaudi::Property< float > m_minPt
Definition: PFTrackMuonIsoTaggingAlg.h:63
xAOD::TauJetParameters::caloIso
@ caloIso
Get sum of transvers energy of clusters around jet seed within 0.2 < dR < 0.4
Definition: TauDefs.h:222
xAOD::Iso::etcone20
@ etcone20
Calorimeter isolation.
Definition: IsolationType.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAOD::CaloIsolation::coreCorrections
std::map< Iso::IsolationCaloCorrection, std::map< Iso::IsolationCorrectionParameter, float > > coreCorrections
Definition: IsolationCommon.h:26
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
PFTrackMuonIsoTaggingAlg::m_trkIsoTool
ToolHandle< xAOD::ITrackIsolationTool > m_trkIsoTool
Definition: PFTrackMuonIsoTaggingAlg.h:41
PFTrackMuonIsoTaggingAlg::initialize
virtual StatusCode initialize() override
Definition: PFTrackMuonIsoTaggingAlg.cxx:19
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
PFTrackMuonIsoTaggingAlg::m_inputTracksKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_inputTracksKey
The input track collection.
Definition: PFTrackMuonIsoTaggingAlg.h:29
xAOD::TrackIsolation
Definition: IsolationCommon.h:33
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
xAOD::Iso::coreCone
@ coreCone
core energy (in dR<0.1).
Definition: Event/xAOD/xAODPrimitives/xAODPrimitives/IsolationCorrection.h:29
PFTrackMuonIsoTaggingAlg::m_hltFakeTrkRErr
Gaudi::Property< float > m_hltFakeTrkRErr
HLT fake track relative error threshold.
Definition: PFTrackMuonIsoTaggingAlg.h:50
PFTrackMuonIsoTaggingAlg::m_hltNonIsoMuonTrkPtFraction
Gaudi::Property< float > m_hltNonIsoMuonTrkPtFraction
HLT track pt fraction for non-isolated muon tracks.
Definition: PFTrackMuonIsoTaggingAlg.h:60
xAOD::TrackIsolation::ptcones
std::vector< float > ptcones
Definition: IsolationCommon.h:36
PFTrackMuonIsoTaggingAlg::m_hltTrkIsoThresh
Gaudi::Property< float > m_hltTrkIsoThresh
HLT track isolation threshold.
Definition: PFTrackMuonIsoTaggingAlg.h:47
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
xAOD::CaloCorrection
Definition: IsolationCommon.h:14
PFTrackMuonIsoTaggingAlg.h
PFTrackMuonIsoTaggingAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: PFTrackMuonIsoTaggingAlg.cxx:30
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ReadHandle.h
Handle class for reading from StoreGate.
xAOD::CaloCorrection::calobitset
Iso::IsolationCaloCorrectionBitset calobitset
Definition: IsolationCommon.h:15