ATLAS Offline Software
Loading...
Searching...
No Matches
TileTrackFillerTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*
6 * File: TileTrackFillerTool.cxx
7 * Author: Marco van Woerden <mvanwoer@cern.ch>, Gang Qin <gang.qin@cern.ch>, Archil Durglishvili <archil.durglishvili@cern.ch>
8 * Date: Nov 2014
9 *
10 */
11
12// INCLUDE HEADER FILE
14#include "TileTrackFillerTool.h"
15
16//xAOD tools
18
19namespace{
20 uint8_t *
21 uint8Ptr(auto * pv){
22 return reinterpret_cast<uint8_t *>(pv);
23 }
24
25}
26
27// ADD TILETRACKFILLERTOOL TO D3PD NAMESPACE
28namespace D3PD{
29//=========================================================================
31 const std::string& name,
32 const IInterface* parent)
33: D3PD::BlockFillerTool<xAOD::TrackParticle>(type,name,parent),
34m_trackToVertexTool("Reco::TrackToVertex"){
35 //=========================================================================
36
37 TileTrackFillerTool::book().ignore(); // AVOID COVERITY WARNINGS
38 declareProperty("LevelOfDetails", m_LevelOfDetails);
39 declareProperty("CellsName", m_calocellContainerName="SelectedCells" );
40 declareProperty("TrackTools", m_trackInCalo);
41 declareProperty("TrackToVertexTool", m_trackToVertexTool, "tool to map track to vertex");
42 declareProperty("TrackParType", m_trkParType = 1);
43
44} // TileTrackFillerTool::TileTrackFillerTool
45
46//===============================================
48 //===============================================
49 // RETRIEVES NECESSARY SERVICES AND TOOLS, INSTANTIATES GLOBAL VARIABLES
50
51 ATH_MSG_DEBUG("TILETRACKERFILLERTOOL::INITIALIZE()");
52
53 // CHECK WHETHER BLOCKFILLERTOOL HAS BEEN INITIALIZED
55
56 CHECK(m_trackInCalo.retrieve());
57
58 CHECK(m_trackToVertexTool.retrieve());
59
60 return StatusCode::SUCCESS;
61} // TileTrackFillerTool::initialize
62
63//=========================================
65 //=========================================
66 // ADDS VARIABLES TO THE D3PD TREE
67
68 // OUTPUT MESSAGING SERVICE
69 ATH_MSG_DEBUG("TileTrackFillerTool::book()");
70
71 if (m_LevelOfDetails > 0){
72
75 if(m_trkParType)
76 {
77 CHECK( addVariable("eta_layer", m_eta ));
78 CHECK( addVariable("phi_layer", m_phi ));
79 } else
80 {
81 CHECK( addVariable("eta_sampling", m_eta ));
82 CHECK( addVariable("phi_sampling", m_phi ));
83 }
84
85 CHECK( addVariable("numberOfPixelHits", m_numberOfPixelHits, "", m_defaultValue));
86 CHECK( addVariable("numberOfSCTHits", m_numberOfSCTHits, "", m_defaultValue));
87 CHECK( addVariable("numberOfTRTHits", m_numberOfTRTHits, "", m_defaultValue));
88
90 CHECK( addVariable("z0", m_z0, "", m_defaultValue));
91 } // IF
92
93 if (m_LevelOfDetails > 1){
94
95 if(m_trkParType)
96 {
97 CHECK( addVariable("x_layer", m_x ));
98 CHECK( addVariable("y_layer", m_y ));
99 CHECK( addVariable("z_layer", m_z ));
100 } else
101 {
102 CHECK( addVariable("x_sampling", m_x ));
103 CHECK( addVariable("y_sampling", m_y ));
104 CHECK( addVariable("z_sampling", m_z ));
105 }
106
107 CHECK( addVariable("vtxX", m_vtxX, "", m_defaultValue));
108 CHECK( addVariable("vtxY", m_vtxY, "", m_defaultValue));
109 CHECK( addVariable("vtxZ", m_vtxZ, "", m_defaultValue));
110 CHECK( addVariable("phi0", m_phi0, "", m_defaultValue));
111 CHECK( addVariable("theta", m_theta, "", m_defaultValue));
112 CHECK( addVariable("qOverP", m_qOverP, "", m_defaultValue));
113 }
114
115 if (m_LevelOfDetails > 2){
116 CHECK( addVariable("nucone05", m_nucone05, "", m_defaultValue));
117 CHECK( addVariable("nucone10", m_nucone10, "", m_defaultValue));
118 CHECK( addVariable("nucone20", m_nucone20, "", m_defaultValue));
119 CHECK( addVariable("nucone30", m_nucone30, "", m_defaultValue));
120 CHECK( addVariable("nucone40", m_nucone40, "", m_defaultValue));
121
122 CHECK( addVariable("ptcone10", m_ptcone10, "", m_defaultValue));
123 CHECK( addVariable("ptcone20", m_ptcone20, "", m_defaultValue));
124 CHECK( addVariable("ptcone30", m_ptcone30, "", m_defaultValue));
125 CHECK( addVariable("ptcone40", m_ptcone40, "", m_defaultValue));
126 CHECK( addVariable("ptcone45", m_ptcone45, "", m_defaultValue));
127 }
128
129 if (m_LevelOfDetails > 3){
130 CHECK( addVariable("numberOfInnermostPixelLayerHits", m_numberOfBLayerHits, "", m_defaultValue));
131 CHECK( addVariable("numberOfTRTHighThresholdHits", m_numberOfTRTHighThresholdHits, "", m_defaultValue));
132 CHECK( addVariable("numberOfInnermostPixelLayerSharedHits", m_numberOfBLayerSharedHits, "", m_defaultValue));
133 CHECK( addVariable("numberOfPixelSharedHits", m_numberOfPixelSharedHits, "", m_defaultValue));
134 CHECK( addVariable("numberOfPixelHoles", m_numberOfPixelHoles, "", m_defaultValue));
135 CHECK( addVariable("numberOfSCTSharedHits", m_numberOfSCTSharedHits, "", m_defaultValue));
136 CHECK( addVariable("numberOfSCTHoles", m_numberOfSCTHoles, "", m_defaultValue));
137 CHECK( addVariable("numberOfTRTOutliers", m_numberOfTRTOutliers, "", m_defaultValue));
138 CHECK( addVariable("numberOfTRTHighThresholdOutliers", m_numberOfTRTHighThresholdOutliers, "", m_defaultValue));
139
140 CHECK( addVariable("numberOfGangedPixels", m_numberOfGangedPixels, "", m_defaultValue));
141 CHECK( addVariable("numberOfOutliersOnTrack", m_numberOfOutliersOnTrack, "", m_defaultValue));
142 CHECK( addVariable("numberOfTrackSummaryTypes", m_numberOfTrackSummaryTypes, "", m_defaultValue));
143 }
144
145 return StatusCode::SUCCESS;
146} // TileTrackFillerTool::book
147
148//================================================================
150 //================================================================
151 // OUTPUT MESSAGING SERVICE
152 ATH_MSG_DEBUG("TileTrackFillerTool::fill");
153
154 // Get Track information
155 const xAOD::TrackParticle* trackPointer = &p;
156
157 if(!trackPointer) { ATH_MSG_INFO("NULL POINTER"); return StatusCode::RECOVERABLE; }
158 auto perigee = m_trackToVertexTool->perigeeAtVertex(Gaudi::Hive::currentContext(), *trackPointer);
159
160 // STORE TRACK PARAMETERS
161 if(m_LevelOfDetails > 0){
162 *m_pt = trackPointer->pt();
163 *m_p = trackPointer->p4().P();
164
165 std::vector< std::vector<double> > positions = (m_trkParType) ? m_trackInCalo->getXYZEtaPhiPerLayer(trackPointer) :
166 m_trackInCalo->getXYZEtaPhiPerSampling(trackPointer);
167
168 if( (m_trkParType) ? (positions.size() == 11) : (positions.size() == 21) ){
169 for(uint i=0;i<positions.size();++i){
170 if(m_LevelOfDetails > 1)
171 {
172 m_x->push_back( (positions[i].size()!=5) ? -9999. : positions[i][0] );
173 m_y->push_back( (positions[i].size()!=5) ? -9999. : positions[i][1] );
174 m_z->push_back( (positions[i].size()!=5) ? -9999. : positions[i][2] );
175 }
176 m_eta->push_back( (positions[i].size()!=5) ? -9999. : positions[i][3] );
177 m_phi->push_back( (positions[i].size()!=5) ? -9999. : positions[i][4] );
178 }
179 } // IF
180
181 trackPointer->summaryValue( *uint8Ptr(m_numberOfPixelHits), xAOD::numberOfPixelHits );
182 trackPointer->summaryValue( *uint8Ptr(m_numberOfSCTHits), xAOD::numberOfSCTHits );
183 trackPointer->summaryValue( *uint8Ptr(m_numberOfTRTHits), xAOD::numberOfTRTHits );
184
185 *m_d0 = perigee->parameters()[Trk::d0];
186 *m_z0 = perigee->parameters()[Trk::d0];
187 }
188
189 if(m_LevelOfDetails > 1){
190 *m_vtxX = perigee->parameters()[Trk::x];
191 *m_vtxY = perigee->parameters()[Trk::y];
192 *m_vtxZ = perigee->parameters()[Trk::z];
193 *m_phi0 = perigee->parameters()[Trk::phi0];
194 *m_theta = perigee->parameters()[Trk::theta];
195 *m_qOverP = perigee->parameters()[Trk::qOverP];
196 }
197
198 if(m_LevelOfDetails > 2){
199
200 std::vector<xAOD::Iso::IsolationType> ptcones = {xAOD::Iso::ptcone40,xAOD::Iso::ptcone30,
202 xAOD::TrackIsolation trackIsolation;
203 if( !m_trackInCalo->trackIsolation(trackIsolation, *trackPointer, ptcones) )
204 {
205 ATH_MSG_WARNING("Calculation of TrackIsolation failed");
206 }
207 else
208 {
209 *m_ptcone40 = trackIsolation.ptcones[0];
210 *m_ptcone30 = trackIsolation.ptcones[1];
211 *m_ptcone20 = trackIsolation.ptcones[2];
212 }
213
214 /* THIS IS GOING TO BE USED
215 std::vector<xAOD::Iso::IsolationType> nucones = { xAOD::Iso::neflowisol10,xAOD::Iso::neflowisol15,xAOD::Iso::neflowisol20,
216 xAOD::Iso::neflowisol25,xAOD::Iso::neflowisol30,xAOD::Iso::neflowisol35,
217 xAOD::Iso::neflowisol40,xAOD::Iso::neflowisol45 };
218 xAOD::CaloIsolation caloIsolation;
219 if( !m_trackInCalo->neutralEflowIsolation(caloIsolation, *trackPointer, nucones, xAOD::ICaloIsolationTool::Ecore) )
220 {
221 ATH_MSG_WARNING("Calculation of CaloIsolation failed");
222 }
223 else
224 {
225 ;
226 }
227 */
228 } // IF
229
230 if(m_LevelOfDetails > 3){
239 trackPointer->summaryValue( *uint8Ptr(m_numberOfSCTHoles), xAOD::numberOfSCTHoles );
244 }
245
246 return StatusCode::SUCCESS;
247} // TileTrackFillerTool::fill
248} // namespace D3PD
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
#define CHECK(...)
Evaluate an expression and check for errors.
unsigned int uint
virtual StatusCode addVariable(const std::string &name, const std::type_info &ti, void *&ptr, const std::string &docstring="", const void *defval=0)
Type-safe wrapper for block filler tools.
virtual StatusCode fill(const xAOD::TrackParticle &p)
Fill one block — type-safe version.
std::vector< float > * m_y
ToolHandle< ITrackTools > m_trackInCalo
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
std::vector< float > * m_x
TileTrackFillerTool(const std::string &type, const std::string &name, const IInterface *parent)
std::vector< float > * m_phi
virtual StatusCode book()
Declare tuple variables.
std::vector< float > * m_z
virtual StatusCode initialize()
std::vector< float > * m_eta
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Block filler tool for noisy FEB information.
@ x
Definition ParamDefs.h:55
@ z
global position (cartesian)
Definition ParamDefs.h:57
@ phi0
Definition ParamDefs.h:65
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
@ y
Definition ParamDefs.h:56
@ d0
Definition ParamDefs.h:63
@ ptcone20
Track isolation.
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
@ numberOfGangedPixels
number of pixels which have a ganged ambiguity [unit8_t].
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfTRTHighThresholdOutliers
number of TRT high threshold outliers (only xenon counted) [unit8_t].
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfOutliersOnTrack
number of measurements flaged as outliers in TSOS [unit8_t].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
@ numberOfTRTHighThresholdHits
number of TRT hits which pass the high threshold (only xenon counted) [unit8_t].
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].
std::vector< float > ptcones