ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
TrkValidation
TrkValTools
src
PositionMomentumWriter.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
// PositionMomentumWriter.cxx, (c) ATLAS Detector software
8
9
// InDet include
10
#include "
TrkValTools/PositionMomentumWriter.h
"
11
#include "
TrkEventPrimitives/ParticleHypothesis.h
"
12
// Gaudi
13
#include "TTree.h"
14
#include "GaudiKernel/ITHistSvc.h"
15
16
// constructor
17
Trk::PositionMomentumWriter::PositionMomentumWriter
(
const
std::string& t,
const
std::string& n,
const
IInterface* p) :
18
AthAlgTool
(t,n,p),
19
m_treeName
(
"PositionMomentumWriter"
),
20
m_treeFolder
(
"/val/"
),
21
m_treeDescription
(
"Position Momentum Writer"
),
22
m_tree
{},
23
m_pM
{},
24
m_pEta
{},
25
m_pPhi
{},
26
m_pE
{},
27
m_eEta
{},
28
m_ePhi
{},
29
m_eE
{},
30
m_pPdg
{},
31
m_pPositionX
{},
32
m_pPositionY
{},
33
m_pPositionZ
{},
34
m_pPositionR
{},
35
m_pMomentumX
{},
36
m_pMomentumY
{},
37
m_pMomentumZ
{},
38
m_pMomentumMag
{},
39
m_pMomentumEta
{},
40
m_pMomentumPhi
{}
41
42
43
{
44
declareInterface<Trk::IPositionMomentumWriter>(
this
);
45
// from outside
46
declareProperty
(
"TreeName"
,
m_treeName
);
47
declareProperty
(
"TreeFolder"
,
m_treeFolder
);
48
declareProperty
(
"TreeDescription"
,
m_treeDescription
);
49
}
50
51
// Athena standard methods
52
// initialize
53
StatusCode
Trk::PositionMomentumWriter::initialize
()
54
{
55
ATH_MSG_VERBOSE
(
"Booking the Extrapolation test Tree."
);
56
57
// ------------------------------> OUTPUT NTUPLE (geometry validation)
58
m_tree
=
new
TTree(
m_treeName
.c_str(),
m_treeDescription
.c_str());
59
60
// add the Branches
61
m_tree
->Branch(
"StartEta"
, &
m_pEta
);
62
m_tree
->Branch(
"StartPhi"
, &
m_pPhi
);
63
m_tree
->Branch(
"StartEnergy"
, &
m_pE
);
64
m_tree
->Branch(
"EndEta"
, &
m_eEta
);
65
m_tree
->Branch(
"EndPhi"
, &
m_ePhi
);
66
m_tree
->Branch(
"EndEnergy"
, &
m_eE
);
67
m_tree
->Branch(
"Pdg"
, &
m_pPdg
);
68
m_tree
->Branch(
"Mass"
, &
m_pM
);
69
// the branches
70
m_pPositionX
=
new
std::vector<float>;
71
m_pPositionY
=
new
std::vector<float>;
72
m_pPositionZ
=
new
std::vector<float>;
73
m_pPositionR
=
new
std::vector<float>;
74
m_pMomentumX
=
new
std::vector<float>;
75
m_pMomentumY
=
new
std::vector<float>;
76
m_pMomentumZ
=
new
std::vector<float>;
77
m_pMomentumMag
=
new
std::vector<float>;
78
m_pMomentumEta
=
new
std::vector<float>;
79
m_pMomentumPhi
=
new
std::vector<float>;
80
// add the Position Branches
81
m_tree
->Branch(
"PositionX"
,
m_pPositionX
);
82
m_tree
->Branch(
"PositionY"
,
m_pPositionY
);
83
m_tree
->Branch(
"PositionZ"
,
m_pPositionZ
);
84
m_tree
->Branch(
"PositionR"
,
m_pPositionR
);
85
m_tree
->Branch(
"MomentumX"
,
m_pMomentumX
);
86
m_tree
->Branch(
"MomentumY"
,
m_pMomentumY
);
87
m_tree
->Branch(
"MomentumZ"
,
m_pMomentumZ
);
88
m_tree
->Branch(
"MomentumMag"
,
m_pMomentumMag
);
89
m_tree
->Branch(
"MomentumEta"
,
m_pMomentumEta
);
90
m_tree
->Branch(
"MomentumPhi"
,
m_pMomentumPhi
);
91
92
// now register the Tree
93
SmartIF<ITHistSvc> tHistSvc{service(
"THistSvc"
)};
94
if
(!tHistSvc) {
95
ATH_MSG_ERROR
(
"initialize() Could not find Hist Service -> Switching Tree output off !"
);
96
delete
m_pPositionX
;
m_pPositionX
=
nullptr
;
97
delete
m_pPositionY
;
m_pPositionY
=
nullptr
;
98
delete
m_pPositionZ
;
m_pPositionZ
=
nullptr
;
99
delete
m_pPositionR
;
m_pPositionR
=
nullptr
;
100
delete
m_pMomentumX
;
m_pMomentumX
=
nullptr
;
101
delete
m_pMomentumY
;
m_pMomentumY
=
nullptr
;
102
delete
m_pMomentumZ
;
m_pMomentumZ
=
nullptr
;
103
delete
m_pMomentumMag
;
m_pMomentumMag
=
nullptr
;
104
delete
m_pMomentumEta
;
m_pMomentumEta
=
nullptr
;
105
delete
m_pMomentumPhi
;
m_pMomentumPhi
=
nullptr
;
106
delete
m_tree
;
m_tree
=
nullptr
;
107
}
108
if
(tHistSvc && ((tHistSvc->regTree(
m_treeFolder
+
m_treeName
,
m_tree
)).isFailure()) ) {
109
ATH_MSG_ERROR
(
"initialize() Could not register the validation Tree -> Switching Tree output off !"
);
110
delete
m_tree
;
m_tree
=
nullptr
;
111
delete
m_pPositionX
;
m_pPositionX
=
nullptr
;
112
delete
m_pPositionY
;
m_pPositionY
=
nullptr
;
113
delete
m_pPositionZ
;
m_pPositionZ
=
nullptr
;
114
delete
m_pPositionR
;
m_pPositionR
=
nullptr
;
115
delete
m_pMomentumX
;
m_pMomentumX
=
nullptr
;
116
delete
m_pMomentumY
;
m_pMomentumY
=
nullptr
;
117
delete
m_pMomentumZ
;
m_pMomentumZ
=
nullptr
;
118
delete
m_pMomentumMag
;
m_pMomentumMag
=
nullptr
;
119
delete
m_pMomentumEta
;
m_pMomentumEta
=
nullptr
;
120
delete
m_pMomentumPhi
;
m_pMomentumPhi
=
nullptr
;
121
}
122
123
return
StatusCode::SUCCESS;
124
}
125
126
// finalize
127
StatusCode
Trk::PositionMomentumWriter::finalize
()
128
{
129
// delete the memory
130
delete
m_pPositionX
;
m_pPositionX
=
nullptr
;
131
delete
m_pPositionY
;
m_pPositionY
=
nullptr
;
132
delete
m_pPositionZ
;
m_pPositionZ
=
nullptr
;
133
delete
m_pPositionR
;
m_pPositionR
=
nullptr
;
134
delete
m_pMomentumX
;
m_pMomentumX
=
nullptr
;
135
delete
m_pMomentumY
;
m_pMomentumY
=
nullptr
;
136
delete
m_pMomentumZ
;
m_pMomentumZ
=
nullptr
;
137
delete
m_pMomentumMag
;
m_pMomentumMag
=
nullptr
;
138
delete
m_pMomentumEta
;
m_pMomentumEta
=
nullptr
;
139
delete
m_pMomentumPhi
;
m_pMomentumPhi
=
nullptr
;
140
// return success
141
return
StatusCode::SUCCESS;
142
}
143
144
145
void
Trk::PositionMomentumWriter::initializeTrack
(
const
Amg::Vector3D
& pos,
146
const
Amg::Vector3D
& mom,
147
double
m,
int
pdg)
148
{
149
if
(
m_tree
){
150
// initialize the parmeters
151
m_pM
= m;
152
m_pEta
= mom.eta();
153
m_pPhi
= mom.phi();
154
m_pE
= sqrt(mom.mag()*mom.mag()+m*m);
155
m_pPdg
= pdg;
156
// record the momentum / position
157
m_pPositionX
->push_back(pos.x());
158
m_pPositionY
->push_back(pos.y());
159
m_pPositionZ
->push_back(pos.z());
160
m_pPositionR
->push_back(pos.perp());
161
m_pMomentumX
->push_back(mom.x());
162
m_pMomentumY
->push_back(mom.y());
163
m_pMomentumZ
->push_back(mom.z());
164
m_pMomentumMag
->push_back(mom.mag());
165
m_pMomentumEta
->push_back(mom.eta());
166
m_pMomentumPhi
->push_back(mom.phi());
167
}
168
}
169
170
void
Trk::PositionMomentumWriter::recordTrackState
(
const
Amg::Vector3D
& pos,
171
const
Amg::Vector3D
& mom)
172
{
173
if
(
m_tree
){
174
// record the momentum / position
175
m_pPositionX
->push_back(pos.x());
176
m_pPositionY
->push_back(pos.y());
177
m_pPositionZ
->push_back(pos.z());
178
m_pPositionR
->push_back(pos.perp());
179
m_pMomentumX
->push_back(mom.x());
180
m_pMomentumY
->push_back(mom.y());
181
m_pMomentumZ
->push_back(mom.z());
182
m_pMomentumMag
->push_back(mom.mag());
183
m_pMomentumEta
->push_back(mom.eta());
184
m_pMomentumPhi
->push_back(mom.phi());
185
}
186
}
187
188
void
Trk::PositionMomentumWriter::finalizeTrack
()
189
{
190
if
(
m_tree
){
191
192
if
(!
m_pMomentumX
->empty()){
193
// the index of the last momentum record
194
size_t
lIndex = size_t(
m_pMomentumX
->size()-1);
195
Amg::Vector3D
lastMom(
m_pMomentumX
->at(lIndex),
196
m_pMomentumY
->at(lIndex),
197
m_pMomentumZ
->at(lIndex));
198
// end parameters
199
m_eE
= sqrt(lastMom.mag()*lastMom.mag()+
m_pM
*
m_pM
);
200
m_eEta
= lastMom.eta();
201
m_ePhi
= lastMom.phi();
202
}
203
204
// fill the tree
205
m_tree
->Fill();
206
// re-initialize
207
m_pEta
= 0.;
208
m_pPhi
= 0.;
209
m_pE
= 0.;
210
m_eEta
= 0.;
211
m_ePhi
= 0.;
212
m_eE
= 0.;
213
m_pM
= 0.;
214
m_pPdg
= 0;
215
// clear the
216
m_pPositionX
->clear();
217
m_pPositionY
->clear();
218
m_pPositionZ
->clear();
219
m_pPositionR
->clear();
220
m_pMomentumX
->clear();
221
m_pMomentumY
->clear();
222
m_pMomentumZ
->clear();
223
m_pMomentumMag
->clear();
224
m_pMomentumEta
->clear();
225
m_pMomentumPhi
->clear();
226
}
227
}
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ParticleHypothesis.h
PositionMomentumWriter.h
AthAlgTool::AthAlgTool
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Definition
AthAlgTool.cxx:16
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
Trk::PositionMomentumWriter::initializeTrack
virtual void initializeTrack(const Amg::Vector3D &pos, const Amg::Vector3D &mom, double m, int pdg) override
Initialize State.
Definition
PositionMomentumWriter.cxx:145
Trk::PositionMomentumWriter::m_pMomentumMag
std::vector< float > * m_pMomentumMag
Definition
PositionMomentumWriter.h:71
Trk::PositionMomentumWriter::m_tree
TTree * m_tree
Definition
PositionMomentumWriter.h:54
Trk::PositionMomentumWriter::m_pM
float m_pM
Definition
PositionMomentumWriter.h:56
Trk::PositionMomentumWriter::m_pMomentumEta
std::vector< float > * m_pMomentumEta
Definition
PositionMomentumWriter.h:72
Trk::PositionMomentumWriter::m_eEta
float m_eEta
Definition
PositionMomentumWriter.h:60
Trk::PositionMomentumWriter::m_pPhi
float m_pPhi
Definition
PositionMomentumWriter.h:58
Trk::PositionMomentumWriter::finalize
virtual StatusCode finalize() override
Definition
PositionMomentumWriter.cxx:127
Trk::PositionMomentumWriter::finalizeTrack
virtual void finalizeTrack() override
Finalization State.
Definition
PositionMomentumWriter.cxx:188
Trk::PositionMomentumWriter::m_pPositionY
std::vector< float > * m_pPositionY
Definition
PositionMomentumWriter.h:65
Trk::PositionMomentumWriter::m_pPositionZ
std::vector< float > * m_pPositionZ
Definition
PositionMomentumWriter.h:66
Trk::PositionMomentumWriter::m_treeFolder
std::string m_treeFolder
Definition
PositionMomentumWriter.h:52
Trk::PositionMomentumWriter::m_pMomentumZ
std::vector< float > * m_pMomentumZ
Definition
PositionMomentumWriter.h:70
Trk::PositionMomentumWriter::m_treeName
std::string m_treeName
Definition
PositionMomentumWriter.h:51
Trk::PositionMomentumWriter::m_pEta
float m_pEta
Definition
PositionMomentumWriter.h:57
Trk::PositionMomentumWriter::m_pPositionR
std::vector< float > * m_pPositionR
Definition
PositionMomentumWriter.h:67
Trk::PositionMomentumWriter::PositionMomentumWriter
PositionMomentumWriter(const std::string &, const std::string &, const IInterface *)
standard AlgTool constructor / destructor
Definition
PositionMomentumWriter.cxx:17
Trk::PositionMomentumWriter::m_pE
float m_pE
Definition
PositionMomentumWriter.h:59
Trk::PositionMomentumWriter::initialize
virtual StatusCode initialize() override
standard Athena methods
Definition
PositionMomentumWriter.cxx:53
Trk::PositionMomentumWriter::m_pMomentumPhi
std::vector< float > * m_pMomentumPhi
Definition
PositionMomentumWriter.h:73
Trk::PositionMomentumWriter::m_eE
float m_eE
Definition
PositionMomentumWriter.h:62
Trk::PositionMomentumWriter::m_pMomentumX
std::vector< float > * m_pMomentumX
Definition
PositionMomentumWriter.h:68
Trk::PositionMomentumWriter::recordTrackState
virtual void recordTrackState(const Amg::Vector3D &pos, const Amg::Vector3D &mom) override
Record a single TrackState.
Definition
PositionMomentumWriter.cxx:170
Trk::PositionMomentumWriter::m_pPositionX
std::vector< float > * m_pPositionX
Definition
PositionMomentumWriter.h:64
Trk::PositionMomentumWriter::m_ePhi
float m_ePhi
Definition
PositionMomentumWriter.h:61
Trk::PositionMomentumWriter::m_pPdg
int m_pPdg
Definition
PositionMomentumWriter.h:63
Trk::PositionMomentumWriter::m_treeDescription
std::string m_treeDescription
Definition
PositionMomentumWriter.h:53
Trk::PositionMomentumWriter::m_pMomentumY
std::vector< float > * m_pMomentumY
Definition
PositionMomentumWriter.h:69
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
Generated on
for ATLAS Offline Software by
1.17.0