ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
JetTagging
JetHitAssociation
src
JetHitAssociation.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
JetHitAssociation/JetHitAssociation.h
"
6
7
//Include some helpful ROOT objects here.
8
#include <TVector3.h>
9
10
// Constructor
11
JetHitAssociation::JetHitAssociation
(
const
std::string& name, ISvcLocator* svcloc)
12
:
AthAlgorithm
(name, svcloc),
13
m_nStoredPixHits
(0),
14
m_nStoredSCTHits
(0),
15
m_nTotalPixHits
(0),
16
m_nTotalSCTHits
(0) {
17
18
declareProperty
(
"jetCollectionName"
,
m_jetCollectionName
=
"AntiKt4EMPFlowJets"
,
19
"Jet collection that will be used for matching the Hits"
);
20
declareProperty
(
"vertexCollectionName"
,
m_vertexCollectionName
=
"PrimaryVertices"
,
21
"Name of PV collection. Default is PrimaryVertices"
);
22
declareProperty
(
"outputPixHitCollectionName"
,
m_outputPixHitCollectionName
=
"JetAssociatedPixelClusters"
,
23
"Name of output pixel hit collection. JetAssociatedPixelClusters is default."
);
24
declareProperty
(
"outputSCTHitCollectionName"
,
m_outputSCTHitCollectionName
=
"JetAssociatedSCTClusters"
,
25
"Name of output SCT hit collection. JetAssociatedSCTClusters is default."
);
26
declareProperty
(
"inputPixHitCollectionName"
,
m_inputPixHitCollectionName
=
"PixelClusters"
,
27
"Name of input pixel hit collection. PixelClusters is default"
);
28
declareProperty
(
"inputSCTHitCollectionName"
,
m_inputSCTHitCollectionName
=
"SCT_Clusters"
,
29
"Name of input SCT hit collection. SCT_Clusters is default"
);
30
declareProperty
(
"jetPtThreshold"
,
m_jetPtThreshold
= 250000.0,
31
"Hits are saved only if they match to jets with pT > jetPtThreshold [in MeV]"
);
32
declareProperty
(
"dRmatchHitToJet"
,
m_dRmatchHitToJet
= 0.4,
33
"The radius used for matching hits to jets"
);
34
35
declare(
m_outputPixHitCollectionName
);
36
declare(
m_outputSCTHitCollectionName
);
37
}
38
39
StatusCode
JetHitAssociation::initialize
() {
40
41
ATH_CHECK
( AthAlgorithm::initialize() );
42
43
ATH_MSG_DEBUG
(
"jetCollectionName = "
<<
m_jetCollectionName
);
44
ATH_MSG_DEBUG
(
"vertexCollectionName = "
<<
m_vertexCollectionName
);
45
ATH_MSG_DEBUG
(
"inputPixHitCollectionName = "
<<
m_inputPixHitCollectionName
);
46
ATH_MSG_DEBUG
(
"inputSCTHitCollectionName = "
<<
m_inputSCTHitCollectionName
);
47
ATH_MSG_DEBUG
(
"outputPixHitCollectionName = "
<<
m_outputPixHitCollectionName
);
48
ATH_MSG_DEBUG
(
"outputSCTHitCollectionName = "
<<
m_outputSCTHitCollectionName
);
49
ATH_MSG_DEBUG
(
"jetPtThreshold [MeV] = "
<<
m_jetPtThreshold
);
50
ATH_MSG_DEBUG
(
"dRmatchHitToJet = "
<<
m_dRmatchHitToJet
);
51
52
ATH_CHECK
(
m_inputPixHitCollectionName
.initialize());
53
ATH_CHECK
(
m_inputSCTHitCollectionName
.initialize());
54
ATH_CHECK
(
m_jetCollectionName
.initialize());
55
ATH_CHECK
(
m_vertexCollectionName
.initialize());
56
ATH_CHECK
(
m_outputPixHitCollectionName
.initialize());
57
ATH_CHECK
(
m_outputSCTHitCollectionName
.initialize());
58
59
ATH_MSG_DEBUG
(
"JetHitAssociation: Initialized"
);
60
61
return
StatusCode::SUCCESS;
62
}
63
64
65
// Function for saving hits matched to jets
66
StatusCode
JetHitAssociation::execute
(
const
EventContext& ctx) {
67
68
69
// All jets
70
SG::ReadHandle<xAOD::JetContainer>
jetReadHandle(
m_jetCollectionName
, ctx);
71
if
( !jetReadHandle.
isValid
() ) {
72
ATH_MSG_ERROR
(
"Failed to retrieve jet container with key "
<<
m_jetCollectionName
.key() );
73
return
StatusCode::FAILURE;
74
}
75
76
// Keep only jets above threashold
77
std::vector<const xAOD::Jet*> jets;
78
jets.reserve( jetReadHandle->size() );
79
for
(
const
xAOD::Jet
*
jet
: *jetReadHandle) {
80
if
(
jet
->pt() >
m_jetPtThreshold
) jets.push_back(
jet
);
81
}
82
83
// Create write handles
84
SG::WriteHandle<xAOD::TrackMeasurementValidationContainer>
outputPixHits(
m_outputPixHitCollectionName
, ctx);
85
SG::WriteHandle<xAOD::TrackMeasurementValidationContainer>
outputSCTHits(
m_outputSCTHitCollectionName
, ctx);
86
87
88
// Vertex collection
89
SG::ReadHandle<xAOD::VertexContainer>
vertexReadHandle(
m_vertexCollectionName
, ctx);
90
if
( !vertexReadHandle.
isValid
() ) {
91
ATH_MSG_ERROR
(
"Failed to retrieve PrimaryVertices container"
);
92
return
StatusCode::FAILURE;
93
}
94
95
// Find primary vertex
96
const
xAOD::Vertex
*primVtx =
nullptr
;
97
for
(
const
xAOD::Vertex
*vertex : *vertexReadHandle) {
98
if
(vertex->vertexType() ==
xAOD::VxType::PriVtx
) {
99
primVtx = vertex;
100
break
;
101
}
102
}
103
104
// Read pixel hits
105
SG::ReadHandle<xAOD::TrackMeasurementValidationContainer>
pixHitReadHandle(
m_inputPixHitCollectionName
, ctx);
106
if
( !pixHitReadHandle.
isValid
() ) {
107
ATH_MSG_ERROR
(
"Failed to retrieve pixel hit container with key "
<<
m_inputPixHitCollectionName
);
108
return
StatusCode::FAILURE;
109
}
110
111
// Read SCT hits
112
SG::ReadHandle<xAOD::TrackMeasurementValidationContainer>
sctHitReadHandle(
m_inputSCTHitCollectionName
, ctx);
113
if
( !sctHitReadHandle.
isValid
() ) {
114
ATH_MSG_ERROR
(
"Failed to retrieve SCT hit container with key "
<<
m_inputSCTHitCollectionName
);
115
return
StatusCode::FAILURE;
116
}
117
118
// These subroutines check for viable jets and write out hits if any exist.
119
// A JetAssociatedPixelCluster or JetAssociatedSCTCluster container is created for each event regardless
120
ATH_CHECK
(
saveHits
(jets, primVtx, pixHitReadHandle, outputPixHits,
m_nStoredPixHits
,
m_nTotalPixHits
) );
121
ATH_CHECK
(
saveHits
(jets, primVtx, sctHitReadHandle, outputSCTHits,
m_nStoredSCTHits
,
m_nTotalSCTHits
) );
122
123
return
StatusCode::SUCCESS;
124
}
125
126
127
StatusCode
JetHitAssociation::saveHits
(
const
std::vector<const xAOD::Jet*> &jets,
128
const
xAOD::Vertex
*
const
vertex,
129
SG::ReadHandle<xAOD::TrackMeasurementValidationContainer>
&hits,
130
const
SG::WriteHandle<xAOD::TrackMeasurementValidationContainer>
&outputHits,
131
unsigned
long
long
int
&nStoredHits,
132
unsigned
long
long
int
&nTotalHits) {
133
134
// Collection where output hits are stored
135
auto
outputHitCollection = std::make_unique<xAOD::TrackMeasurementValidationContainer>();
136
auto
outputHitCollectionAux = std::make_unique<xAOD::TrackMeasurementValidationAuxContainer>();
137
outputHitCollection->setStore(outputHitCollectionAux.get());
138
139
140
// if there are no jets you need to skip this loop but you still need to write out the
141
// if the vertex is a null pointer (no primary vertex in the event) do the same
142
// JetAssociatedSCTClusters and JetAssociatedPixelClusters
143
if
(!jets.empty() && vertex!=
nullptr
) {
144
145
// Get the x,y,z of the primary vertex
146
TVector3 PVposition(vertex->x(), vertex->y(), vertex->z());
147
ATH_MSG_DEBUG
(
"JetHitAssociation: PrimaryVertex Z Position = "
<< PVposition.Z());
148
149
// Loop over hits
150
for
(
const
xAOD::TrackMeasurementValidation
*
hit
: *hits) {
151
// Get pixel globalX,Y,Z
152
float
x
=
hit
->globalX();
153
float
y
=
hit
->globalY();
154
float
z
=
hit
->globalZ();
155
156
// Put the x,y,z in a TVector3
157
TVector3 hitPosition(
x
,
y
,
z
);
158
159
// Correct for the PV position
160
hitPosition = hitPosition - PVposition;
161
162
// Loop over jets
163
for
(
const
xAOD::Jet
*
jet
: jets) {
164
// Calculate dR(hit,jet)
165
float
dR = hitPosition.DeltaR(
jet
->p4().Vect());
166
167
// if the dR is smaller than the dR association threshold save the hit
168
if
(dR <
m_dRmatchHitToJet
) {
169
outputHitCollection->push_back(std::make_unique<xAOD::TrackMeasurementValidation>(*
hit
));
170
*outputHitCollection->back() = *
hit
;
//Without this line. entries are filled with zero instead of the correct values
171
++nStoredHits;
172
break
;
173
}
174
}
175
}
176
}
177
// count the total number of hits run
178
nTotalHits += hits->size();
179
180
// Write output container
181
if
( ! outputHits.
put
( std::move(outputHitCollection), std::move(outputHitCollectionAux) ) ) {
182
ATH_MSG_ERROR
(
"Could not write output hit containers"
);
183
return
StatusCode::FAILURE;
184
}
185
186
return
StatusCode::SUCCESS;
187
}
188
189
StatusCode
JetHitAssociation::finalize
() {
190
191
ATH_MSG_DEBUG
(
"JetHitAssociation: Total number of Pix Hits tested = "
<<
m_nTotalPixHits
);
192
ATH_MSG_DEBUG
(
"JetHitAssociation: Total number of Pix Hits Stored = "
<<
m_nStoredPixHits
);
193
ATH_MSG_DEBUG
(
"JetHitAssociation: Total number of SCT Hits tested = "
<<
m_nTotalSCTHits
);
194
ATH_MSG_DEBUG
(
"JetHitAssociation: Total number of SCT Hits Stored = "
<<
m_nStoredSCTHits
);
195
196
return
StatusCode::SUCCESS;
197
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
JetHitAssociation.h
hit
bool hit(const Container &ids, int pdgId)
Definition
JetIRCSafeLabelTool.cxx:64
y
#define y
x
#define x
z
#define z
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
AthCommonAlgorithm< Gaudi::Algorithm >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
JetHitAssociation::m_nTotalPixHits
unsigned long long int m_nTotalPixHits
Definition
JetHitAssociation.h:59
JetHitAssociation::m_jetCollectionName
SG::ReadHandleKey< xAOD::JetContainer > m_jetCollectionName
Definition
JetHitAssociation.h:47
JetHitAssociation::execute
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
Definition
JetHitAssociation.cxx:66
JetHitAssociation::m_vertexCollectionName
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexCollectionName
Definition
JetHitAssociation.h:48
JetHitAssociation::m_outputSCTHitCollectionName
SG::WriteHandleKey< xAOD::TrackMeasurementValidationContainer > m_outputSCTHitCollectionName
Definition
JetHitAssociation.h:52
JetHitAssociation::m_inputSCTHitCollectionName
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_inputSCTHitCollectionName
Definition
JetHitAssociation.h:50
JetHitAssociation::m_jetPtThreshold
float m_jetPtThreshold
Definition
JetHitAssociation.h:55
JetHitAssociation::m_inputPixHitCollectionName
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_inputPixHitCollectionName
Definition
JetHitAssociation.h:49
JetHitAssociation::m_nTotalSCTHits
unsigned long long int m_nTotalSCTHits
Definition
JetHitAssociation.h:60
JetHitAssociation::saveHits
StatusCode saveHits(const std::vector< const xAOD::Jet * > &jets, const xAOD::Vertex *const vertex, SG::ReadHandle< xAOD::TrackMeasurementValidationContainer > &hits, const SG::WriteHandle< xAOD::TrackMeasurementValidationContainer > &writeHandle, unsigned long long int &nStoredHits, unsigned long long int &nTotalHits)
Definition
JetHitAssociation.cxx:127
JetHitAssociation::initialize
virtual StatusCode initialize() override
Definition
JetHitAssociation.cxx:39
JetHitAssociation::JetHitAssociation
JetHitAssociation(const std::string &name, ISvcLocator *svcloc)
Constructor with parameters:
Definition
JetHitAssociation.cxx:11
JetHitAssociation::finalize
virtual StatusCode finalize() override
Definition
JetHitAssociation.cxx:189
JetHitAssociation::m_nStoredPixHits
unsigned long long int m_nStoredPixHits
Definition
JetHitAssociation.h:57
JetHitAssociation::m_nStoredSCTHits
unsigned long long int m_nStoredSCTHits
Definition
JetHitAssociation.h:58
JetHitAssociation::m_outputPixHitCollectionName
SG::WriteHandleKey< xAOD::TrackMeasurementValidationContainer > m_outputPixHitCollectionName
Definition
JetHitAssociation.h:51
JetHitAssociation::m_dRmatchHitToJet
float m_dRmatchHitToJet
Definition
JetHitAssociation.h:56
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SG::WriteHandle::put
const_pointer_type put(std::unique_ptr< T > data, bool returnExisting=false) const
Record an object to the store.
jet
Definition
JetCalibTools_PlotJESFactors.cxx:23
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition
TrackingPrimitives.h:590
xAOD::Jet
Jet_v1 Jet
Definition of the current "jet version".
Definition
Event/xAOD/xAODJet/xAODJet/Jet.h:17
xAOD::TrackMeasurementValidation
TrackMeasurementValidation_v1 TrackMeasurementValidation
Reference the current persistent version:
Definition
TrackMeasurementValidation.h:13
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition
Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
Generated on
for ATLAS Offline Software by
1.17.0