ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetRecEvent
InDetCompetingRIOsOnTrack
src
CompetingTRT_DriftCirclesOnTrack.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
// CompetingTRT_DriftCirclesOnTrack.cxx, (c) ATLAS Detector software
8
9
// Trk
10
#include "GaudiKernel/MsgStream.h"
11
#include "
TrkSurfaces/Surface.h
"
12
// InDet
13
#include "
InDetCompetingRIOsOnTrack/CompetingTRT_DriftCirclesOnTrack.h
"
14
// std
15
#include <cmath>
16
#include <ostream>
17
18
// default constructor
19
InDet::CompetingTRT_DriftCirclesOnTrack::CompetingTRT_DriftCirclesOnTrack
()
20
:
Trk
::
CompetingRIOsOnTrack
()
21
,
Trk
::SurfacePtrHolderDetEl(nullptr)
22
,
m_globalPosition
{}
23
,
m_containedChildRots
()
24
,
m_ROTsHaveCommonSurface
(8)
25
{
26
}
27
28
// copy constructor
29
InDet::CompetingTRT_DriftCirclesOnTrack::CompetingTRT_DriftCirclesOnTrack
(
30
const
InDet::CompetingTRT_DriftCirclesOnTrack
& compROT)
31
:
Trk
::
CompetingRIOsOnTrack
(compROT)
32
,
Trk
::SurfacePtrHolderDetEl(compROT)
33
,
m_globalPosition
{}
34
,
m_containedChildRots
{}
35
,
m_ROTsHaveCommonSurface
(compROT.
m_ROTsHaveCommonSurface
)
36
{
37
std::vector<const InDet::TRT_DriftCircleOnTrack*>::const_iterator rotIter =
38
compROT.
m_containedChildRots
.begin();
39
for
(; rotIter != compROT.
m_containedChildRots
.end(); ++rotIter) {
40
m_containedChildRots
.push_back((*rotIter)->clone());
41
}
42
if
(compROT.
m_globalPosition
) {
43
m_globalPosition.store(
44
std::make_unique<const Amg::Vector3D>(*(compROT.m_globalPosition)));
45
}
46
}
47
48
// explicit constructor
49
InDet::CompetingTRT_DriftCirclesOnTrack::CompetingTRT_DriftCirclesOnTrack
(
50
const
Trk::Surface
* sf,
51
std::vector<const InDet::TRT_DriftCircleOnTrack*>&& childrots,
52
std::vector<AssignmentProb>&& assgnProb,
53
const
Trk::LocalParameters
& effecLocalPars,
54
const
Amg::MatrixX
& effecLocalErrMat,
55
int
ROTsHaveComSrfc
// meaning of the values are described in the definition
56
// of ROTsHaveCommonSurface()
57
)
58
:
Trk
::
CompetingRIOsOnTrack
(
std
::move(assgnProb))
59
,
Trk
::SurfacePtrHolderDetEl(sf)
60
,
m_globalPosition
{}
61
,
m_containedChildRots
(
std
::move(childrots))
62
,
m_ROTsHaveCommonSurface
(ROTsHaveComSrfc)
63
{
64
m_localParams
= effecLocalPars;
65
m_localCovariance
= effecLocalErrMat;
66
}
67
68
InDet::CompetingTRT_DriftCirclesOnTrack
&
69
InDet::CompetingTRT_DriftCirclesOnTrack::operator=
(
70
const
InDet::CompetingTRT_DriftCirclesOnTrack
& compROT)
71
{
72
if
(
this
!= &compROT) {
73
// assignment operator of base class
74
Trk::CompetingRIOsOnTrack::operator=
(compROT);
75
Trk::SurfacePtrHolderDetEl::operator=
(compROT);
76
77
// clear rots
78
clearChildRotVector
();
79
m_containedChildRots
.clear();
80
81
if
(compROT.
m_globalPosition
) {
82
m_globalPosition
.store(
83
std::make_unique<const Amg::Vector3D>(*compROT.
m_globalPosition
));
84
}
else
if
(
m_globalPosition
) {
85
m_globalPosition
.release().reset();
86
}
87
//
88
m_ROTsHaveCommonSurface
= compROT.
m_ROTsHaveCommonSurface
;
89
//
90
std::vector<const InDet::TRT_DriftCircleOnTrack*>::const_iterator rotIter =
91
compROT.
m_containedChildRots
.begin();
92
for
(; rotIter != compROT.
m_containedChildRots
.end(); ++rotIter)
93
m_containedChildRots
.push_back((*rotIter)->clone());
94
}
95
return
(*
this
);
96
}
97
98
InDet::CompetingTRT_DriftCirclesOnTrack
&
99
InDet::CompetingTRT_DriftCirclesOnTrack::operator=
(
100
InDet::CompetingTRT_DriftCirclesOnTrack
&& compROT)
noexcept
101
{
102
if
(
this
!= &compROT) {
103
// base class move
104
Trk::CompetingRIOsOnTrack::operator=
(compROT);
105
Trk::SurfacePtrHolderDetEl::operator=
(compROT);
106
// rots
107
clearChildRotVector
();
108
m_containedChildRots
= std::move(compROT.m_containedChildRots);
109
m_globalPosition
= std::move(compROT.m_globalPosition);
110
m_ROTsHaveCommonSurface
= compROT.m_ROTsHaveCommonSurface;
111
}
112
return
(*
this
);
113
}
114
115
InDet::CompetingTRT_DriftCirclesOnTrack::~CompetingTRT_DriftCirclesOnTrack
()
116
{
117
clearChildRotVector
();
118
}
119
120
void
121
InDet::CompetingTRT_DriftCirclesOnTrack::clearChildRotVector
()
122
{
123
std::vector<const InDet::TRT_DriftCircleOnTrack*>::const_iterator rotIter =
124
m_containedChildRots
.begin();
125
for
(; rotIter !=
m_containedChildRots
.end(); ++rotIter) {
126
delete
(*rotIter);
127
}
128
}
129
130
MsgStream&
131
InDet::CompetingTRT_DriftCirclesOnTrack::dump
(MsgStream& out)
const
132
{
133
using
std::ios;
134
out <<
"Trk::CompetingTRT_DriftCirclesOnTrack with ["
135
<<
numberOfContainedROTs
() <<
"] competing RIO_OnTrack objects"
136
<< std::endl;
137
out <<
" - "
138
<< (this->
ROTsHaveCommonSurface
(
true
) ?
"on common surface"
139
:
"over different surfaces"
)
140
<<
" (given prob>cut)"
<< std::endl;
141
Trk::CompetingRIOsOnTrack::dump
(out);
142
out <<
" - GlobalPosition : "
;
143
if
(not
m_globalPosition
)
144
out <<
"null pointer"
<<
endmsg
;
145
else
146
out << *
m_globalPosition
<<
endmsg
;
147
return
out;
148
}
149
150
std::ostream&
151
InDet::CompetingTRT_DriftCirclesOnTrack::dump
(std::ostream& out)
const
152
{
153
using
std::ios;
154
out <<
"Trk::CompetingTRT_DriftCirclesOnTrack with ["
155
<<
numberOfContainedROTs
() <<
"] competing RIO_OnTrack objects"
156
<< std::endl;
157
out <<
" - "
158
<< (this->
ROTsHaveCommonSurface
(
true
) ?
"on common surface"
159
:
"over different surfaces"
)
160
<<
" (given prob>cut)"
<< std::endl;
161
Trk::CompetingRIOsOnTrack::dump
(out);
162
out <<
" - GlobalPosition : "
;
163
if
(not
m_globalPosition
)
164
out <<
"null pointer"
<< std::endl;
165
else
166
out << *
m_globalPosition
<< std::endl;
167
return
out;
168
}
169
170
// Have all the contained ROTs a common associated surface?
171
bool
172
InDet::CompetingTRT_DriftCirclesOnTrack::ROTsHaveCommonSurface
(
173
const
bool
withNonVanishingAssignProb)
const
174
{
175
// if (m_ROTsHaveCommonSurface==0) {
176
// values of int m_ROTsHaveCommonSurface:
177
// no yes NA (ROTs on a common surface) NA means not checked yet
178
// 0 1 2
179
// for all | just ROTs with non-vanishing assgnProb
180
// * 1 | * 3
181
if
(withNonVanishingAssignProb) {
182
return
(
m_ROTsHaveCommonSurface
/ 3);
183
}
else
{
184
return
(
m_ROTsHaveCommonSurface
% 3);
185
}
186
}
187
188
const
Amg::Vector3D
&
189
InDet::CompetingTRT_DriftCirclesOnTrack::globalPosition
()
const
190
{
191
if
(
m_globalPosition
) {
192
return
*
m_globalPosition
;
193
}
194
// cannot use the localToGlobal transformation, because the local z-coordinate
195
// along the wire is not known here. The contained TRT_DriftCircleOnTrack use
196
// the full transformation => use the weighted mean of their GlobalPositions
197
// FIXME: introduce a special function in base class, which returns the sum of
198
// assignment probabilities
199
double
assgnProbSum = 0.;
200
std::vector<AssignmentProb>::const_iterator assgnProbIter =
201
m_assignProb
.begin();
202
for
(; assgnProbIter !=
m_assignProb
.end(); ++assgnProbIter) {
203
assgnProbSum += (*assgnProbIter);
204
}
205
206
Amg::Vector3D
globalPos(0., 0., 0.);
207
if
(assgnProbSum > 0.) {
208
std::vector<const InDet::TRT_DriftCircleOnTrack*>::const_iterator rotIter =
209
std::as_const(
m_containedChildRots
).begin();
210
assgnProbIter =
m_assignProb
.begin();
211
for
(; rotIter != std::as_const(
m_containedChildRots
).end();
212
++rotIter, ++assgnProbIter) {
213
globalPos +=
214
(((*assgnProbIter) / assgnProbSum) * ((*rotIter)->globalPosition()));
215
}
216
217
}
else
{
218
globalPos = std::as_const(
m_containedChildRots
)[0]->globalPosition();
219
}
220
m_globalPosition
.set(std::make_unique<const Amg::Vector3D>(globalPos));
221
return
*
m_globalPosition
;
222
}
223
224
void
225
InDet::CompetingTRT_DriftCirclesOnTrack::setLocalParametersAndErrorMatrix
()
226
{
227
std::cout <<
"InDet::CompetingTRT_DriftCirclesOnTrack: can not handle ROTs "
228
"in different surfaces without detector specific knowledge "
229
<< std::endl;
230
}
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
CompetingTRT_DriftCirclesOnTrack.h
Surface.h
InDet::CompetingTRT_DriftCirclesOnTrack
Class for competing TRT_DriftCircles, it extends the Trk::CompetingRIOsOnTrack base class.
Definition
CompetingTRT_DriftCirclesOnTrack.h:48
InDet::CompetingTRT_DriftCirclesOnTrack::clearChildRotVector
void clearChildRotVector()
private method to clear the Trk::RIO_OnTrack vector
Definition
CompetingTRT_DriftCirclesOnTrack.cxx:121
InDet::CompetingTRT_DriftCirclesOnTrack::operator=
CompetingTRT_DriftCirclesOnTrack & operator=(const CompetingTRT_DriftCirclesOnTrack &compROT)
Assignment operator.
Definition
CompetingTRT_DriftCirclesOnTrack.cxx:69
InDet::CompetingTRT_DriftCirclesOnTrack::setLocalParametersAndErrorMatrix
virtual void setLocalParametersAndErrorMatrix()
recalculate the LocalParameters and ErrorMatrix
Definition
CompetingTRT_DriftCirclesOnTrack.cxx:225
InDet::CompetingTRT_DriftCirclesOnTrack::globalPosition
const Amg::Vector3D & globalPosition() const
Interface method to get the global Position.
Definition
CompetingTRT_DriftCirclesOnTrack.cxx:189
InDet::CompetingTRT_DriftCirclesOnTrack::~CompetingTRT_DriftCirclesOnTrack
virtual ~CompetingTRT_DriftCirclesOnTrack()
Destructor.
Definition
CompetingTRT_DriftCirclesOnTrack.cxx:115
InDet::CompetingTRT_DriftCirclesOnTrack::m_ROTsHaveCommonSurface
int m_ROTsHaveCommonSurface
Definition
CompetingTRT_DriftCirclesOnTrack.h:131
InDet::CompetingTRT_DriftCirclesOnTrack::numberOfContainedROTs
unsigned int numberOfContainedROTs() const
Number of RIO_OnTracks to be contained by this CompetingRIOsOnTrack.
Definition
CompetingTRT_DriftCirclesOnTrack.h:159
InDet::CompetingTRT_DriftCirclesOnTrack::m_globalPosition
CxxUtils::CachedUniquePtr< const Amg::Vector3D > m_globalPosition
The global Position.
Definition
CompetingTRT_DriftCirclesOnTrack.h:121
InDet::CompetingTRT_DriftCirclesOnTrack::ROTsHaveCommonSurface
bool ROTsHaveCommonSurface(const bool withNonVanishingAssignProb=true) const
Have all the contained ROTs a common associated surface?
Definition
CompetingTRT_DriftCirclesOnTrack.cxx:172
InDet::CompetingTRT_DriftCirclesOnTrack::CompetingTRT_DriftCirclesOnTrack
CompetingTRT_DriftCirclesOnTrack()
Default Constructor for POOL.
Definition
CompetingTRT_DriftCirclesOnTrack.cxx:19
InDet::CompetingTRT_DriftCirclesOnTrack::dump
MsgStream & dump(MsgStream &out) const
returns some information about this MeasurementBase/CompetingTRT_DriftCirclesOnTrack.
Definition
CompetingTRT_DriftCirclesOnTrack.cxx:131
InDet::CompetingTRT_DriftCirclesOnTrack::m_containedChildRots
std::vector< const InDet::TRT_DriftCircleOnTrack * > m_containedChildRots
The vector of contained InDet::TRT_DriftCircleOnTrack objects.
Definition
CompetingTRT_DriftCirclesOnTrack.h:124
Trk::CompetingRIOsOnTrack::m_assignProb
std::vector< AssignmentProb > m_assignProb
assignment probabilities of the ROTs
Definition
CompetingRIOsOnTrack.h:125
Trk::CompetingRIOsOnTrack::operator=
CompetingRIOsOnTrack & operator=(const CompetingRIOsOnTrack &compROT)=default
Assignment operator.
Trk::CompetingRIOsOnTrack::dump
virtual MsgStream & dump(MsgStream &out) const override
returns the some information about the base class members (avoid code duplication)
Definition
CompetingRIOsOnTrack.cxx:114
Trk::CompetingRIOsOnTrack::CompetingRIOsOnTrack
CompetingRIOsOnTrack()
Default Constructor for POOL.
Definition
CompetingRIOsOnTrack.cxx:18
Trk::LocalParameters
Definition
LocalParameters.h:100
Trk::MeasurementBase::m_localParams
LocalParameters m_localParams
Definition
MeasurementBase.h:111
Trk::MeasurementBase::m_localCovariance
Amg::MatrixX m_localCovariance
Definition
MeasurementBase.h:112
Trk::SurfacePtrHolderImplDetEl< Surface >::operator=
SurfacePtrHolderImplDetEl & operator=(const SurfacePtrHolderImplDetEl &other)
Definition
SurfaceHolderImpl.h:169
Trk::Surface
Abstract Base Class for tracking surfaces.
Definition
Surface.h:79
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition
EventPrimitives.h:27
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition
FakeTrackBuilder.h:9
std
STL namespace.
Generated on
for ATLAS Offline Software by
1.17.0