ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
TrkAlignment
TrkAlignGenTools
src
AlignTrackDresser.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
#include "GaudiKernel/MsgStream.h"
6
#include "CLHEP/Matrix/SymMatrix.h"
7
8
#include "
TrkTrack/TrackStateOnSurface.h
"
9
#include "
TrkMeasurementBase/MeasurementBase.h
"
10
#include "
TrkRIO_OnTrack/RIO_OnTrack.h
"
11
#include "
TrkCompetingRIOsOnTrack/CompetingRIOsOnTrack.h
"
12
13
#include "
TrkTrack/Track.h
"
14
15
#include "
TrkAlignInterfaces/IFillNtupleTool.h
"
16
#include "
TrkAlignEvent/AlignTSOS.h
"
17
#include "
TrkAlignEvent/AlignModule.h
"
18
#include "
TrkAlignEvent/AlignTrack.h
"
19
20
#include "
TrkAlignGenTools/AlignTrackDresser.h
"
21
22
namespace
Trk
{
23
24
//________________________________________________________________________
25
AlignTrackDresser::AlignTrackDresser
(
const
std::string &
type
,
const
std::string & name,
const
IInterface * parent)
26
:
AthAlgTool
(
type
,name,parent)
27
{
28
declareInterface<IAlignTrackDresser>(
this
);
29
}
30
31
//________________________________________________________________________
32
StatusCode
AlignTrackDresser::initialize
()
33
{
34
ATH_MSG_DEBUG
(
"in AlignTrackDresser initialize()"
);
35
36
// Get DerivCalcTool (will have to be moved to AlignTool)
37
if
(
m_derivCalcTool
.retrieve().isFailure() ) {
38
ATH_MSG_FATAL
(
"Failed to retrieve tool "
<<
m_derivCalcTool
);
39
return
StatusCode::FAILURE;
40
}
41
ATH_MSG_INFO
(
"Retrieved tool "
<<
m_derivCalcTool
);
42
43
return
StatusCode::SUCCESS;
44
}
45
46
//________________________________________________________________________
47
void
AlignTrackDresser::setLogStream
(std::ostream * os)
48
{
49
m_logStream
= os;
50
m_derivCalcTool
->setLogStream(
m_logStream
);
51
}
52
53
//________________________________________________________________________
54
StatusCode
AlignTrackDresser::finalize
()
55
{
56
if
(
m_numBadCovWMatrix
>0)
57
ATH_MSG_INFO
(
"Total of "
<<
m_numBadCovWMatrix
<<
" tracks had invalid weight matrix."
);
58
return
StatusCode::SUCCESS;
59
}
60
61
//________________________________________________________________________
62
bool
AlignTrackDresser::dressAlignTrack
(
AlignTrack
* alignTrack)
63
{
64
// set hit residuals
65
setResiduals
(alignTrack);
66
67
ATH_MSG_DEBUG
(
"residuals set, getting partial derivatives from m_derivCalcTool="
<<
m_derivCalcTool
);
68
69
// set partial derivatives of hit residuals w.r.t. alignment parameters
70
if
(!
m_derivCalcTool
->setDerivatives(alignTrack))
71
return
false
;
72
73
// for global method we let the deriv.calc.tool calculate the weight matrix
74
// get W = V^{-1} R V^{-1} (simply V^{-1} for numerical derivatives)
75
bool
Wisvalid =
m_derivCalcTool
->setResidualCovMatrix(alignTrack);
76
77
if
(!Wisvalid) {
78
ATH_MSG_INFO
(
"something is wrong with the cov matrix for the residuals."
);
79
++
m_numBadCovWMatrix
;
80
}
81
82
return
Wisvalid;
83
}
84
85
//________________________________________________________________________
86
void
AlignTrackDresser::setResiduals
(
AlignTrack
* alignTrack)
const
87
{
88
if
(alignTrack->
residualVector
())
89
ATH_MSG_ERROR
(
"alignTrack already has residuals!"
);
90
91
const
int
NMEAS = alignTrack->
nAlignTSOSMeas
();
92
Amg::VectorX
* residuals =
new
Amg::VectorX
(NMEAS);
93
94
int
imeas = 0;
95
AlignTSOSCollection::const_iterator
atsosItr = alignTrack->
firstAtsos
();
96
for
( ; atsosItr != alignTrack->
lastAtsos
(); ++atsosItr) {
97
98
if
(!(*atsosItr)->isValid())
99
continue
;
100
101
std::vector<Residual>::const_iterator itRes = (**atsosItr).firstResidual();
102
for
( ; itRes != (**atsosItr).lastResidual() ; ++itRes, ++imeas) {
103
(*residuals)[imeas] = itRes->residual();
104
if
(
msgLvl
(MSG::DEBUG)) {
105
double
z
=(**atsosItr).measurementOnTrack()->globalPosition().z();
106
ATH_MSG_DEBUG
(
"pos.z: "
<<
z
<<
", res["
<<imeas<<
"]="
<<itRes->residual()<<
" res/sq["
<<imeas<<
"]="
<<itRes->residualNorm());
107
}
108
}
109
}
110
111
if
(imeas!=NMEAS) {
112
ATH_MSG_ERROR
(
"problem with nmeas. imeas="
<<imeas<<
", NMEAS="
<<NMEAS);
113
throw
std::runtime_error(
"Error in AlignTrackDresser::setResiduals"
);
114
}
115
116
alignTrack->
setResidualVector
(residuals);
// residuals owned by alignTrack
117
ATH_MSG_DEBUG
(
"residuals set for AlignTrack"
);
118
}
119
120
}
// end namespace
121
AlignModule.h
AlignTSOS.h
AlignTrackDresser.h
AlignTrack.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition
AthMsgStreamMacros.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
CompetingRIOsOnTrack.h
IFillNtupleTool.h
MeasurementBase.h
RIO_OnTrack.h
TrackStateOnSurface.h
Track.h
AthAlgTool::AthAlgTool
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Definition
AthAlgTool.cxx:16
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition
AthCommonMsg.h:30
DataVector< AlignTSOS >::const_iterator
DataModel_detail::const_iterator< DataVector > const_iterator
Definition
DataVector.h:838
Trk::AlignTrackDresser::finalize
virtual StatusCode finalize() override
Definition
AlignTrackDresser.cxx:54
Trk::AlignTrackDresser::dressAlignTrack
virtual bool dressAlignTrack(AlignTrack *alignTrack) override
dresses alignTrack with derivatives and other information
Definition
AlignTrackDresser.cxx:62
Trk::AlignTrackDresser::m_numBadCovWMatrix
unsigned int m_numBadCovWMatrix
number of tracks with invalid weight matrix from the deriv.calc.tool
Definition
AlignTrackDresser.h:57
Trk::AlignTrackDresser::setResiduals
void setResiduals(AlignTrack *alignTrack) const
sets residuals for TSOS on alignTrack
Definition
AlignTrackDresser.cxx:86
Trk::AlignTrackDresser::AlignTrackDresser
AlignTrackDresser(const std::string &type, const std::string &name, const IInterface *parent)
Definition
AlignTrackDresser.cxx:25
Trk::AlignTrackDresser::initialize
virtual StatusCode initialize() override
Definition
AlignTrackDresser.cxx:32
Trk::AlignTrackDresser::m_derivCalcTool
ToolHandle< IDerivCalcTool > m_derivCalcTool
Definition
AlignTrackDresser.h:53
Trk::AlignTrackDresser::setLogStream
virtual void setLogStream(std::ostream *os) override
sets the output stream for the logfile
Definition
AlignTrackDresser.cxx:47
Trk::AlignTrack
Definition
AlignTrack.h:41
Trk::AlignTrack::lastAtsos
AlignTSOSCollection::const_iterator lastAtsos() const
returns iterator pointer to last element in collection
Definition
AlignTrack.h:280
Trk::AlignTrack::nAlignTSOSMeas
int nAlignTSOSMeas() const
number of alignTSOS (including scatterers if included on AlignTrack
Definition
AlignTrack.h:128
Trk::AlignTrack::residualVector
const Amg::VectorX * residualVector() const
Vector of residuals of the alignTSOS on the alignTrack, to be set by AlignTrackDresser.
Definition
AlignTrack.h:150
Trk::AlignTrack::firstAtsos
AlignTSOSCollection::const_iterator firstAtsos() const
retrieve iterator pointer to first element in collection
Definition
AlignTrack.h:279
Trk::AlignTrack::setResidualVector
void setResidualVector(Amg::VectorX *vec)
Definition
AlignTrack.h:151
Trk::IAlignTrackDresser::m_logStream
std::ostream * m_logStream
logfile output stream
Definition
IAlignTrackDresser.h:42
Amg::VectorX
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Definition
EventPrimitives.h:30
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition
FakeTrackBuilder.h:9
Trk::z
@ z
global position (cartesian)
Definition
ParamDefs.h:57
type
Generated on
for ATLAS Offline Software by
1.17.0