ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::AlignVertex Class Reference

#include <AlignVertex.h>

Collaboration diagram for Trk::AlignVertex:

Public Types

enum  AlignVertexType {
  Unknown = 0 , Primary = 1 , Refitted = 2 , Accumulated = 3 ,
  NVertexTypes
}

Public Member Functions

 AlignVertex ()
 default constructor
 AlignVertex (const xAOD::Vertex *originalVertex)
 constructor takes the original vertex candidate but doesn't own it
 AlignVertex (const AlignVertex &rhs)
 copy constructor
AlignVertexoperator= (const AlignVertex &rhs)
 assignment
 ~AlignVertex ()
 destructor
const xAOD::VertexoriginalVertex () const
 retrieve pointer to original vertex and its position
const Amg::Vector3DoriginalPosition () const
void setOriginalVertex (const xAOD::Vertex *vertex)
 set pointer to original vertex
AlignVertexType type () const
 get and set the refit type
void setType (AlignVertexType type)
const Amg::Vector3Dposition () const
 get the vertex position and covariance
const AmgSymMatrix (3) *covariance() const
const std::vector< AlignModuleVertexDerivatives > * derivatives () const
 The Amg::VectorX is a vector of first-derivatives of the alignTSOS on the alignTrack w.r.t.
void setDerivatives (std::vector< AlignModuleVertexDerivatives > *vecvec)
void addDerivatives (std::vector< AlignModuleVertexDerivatives > *vecvec)
void dump (MsgStream &msg)
 dump align vertex information
void incrementVector (const Amg::Vector3D &vtxV)
 increment algebra objects for this verterx:
void incrementMatrix (const AmgSymMatrix(3) vtxM)
void fitVertex ()
 fit the vertex internally
int Ntracks () const
 get the number of contributing tracks
void setConstraint (AmgSymMatrix(3) *, Amg::Vector3D *)
 set and get the constraint on VTX position
const AmgSymMatrix (3) *Qmatrix() const
const Amg::Vector3DVvector () const
void setUnconstrained ()
bool Constrained () const

Private Member Functions

 AmgSymMatrix (3) *m_matrix
 AmgSymMatrix (3) *m_covariance
 AmgSymMatrix (3) *m_qMatrix

Private Attributes

int m_nTracks
Amg::Vector3Dm_vector
const xAOD::Vertexm_original
Amg::Vector3Dm_originalPosition
Amg::Vector3Dm_position
std::vector< AlignModuleVertexDerivatives > * m_derivatives
Amg::Vector3Dm_vVector
bool m_constrained
AlignVertexType m_type

Detailed Description

Definition at line 34 of file AlignVertex.h.

Member Enumeration Documentation

◆ AlignVertexType

Enumerator
Unknown 

default type

Primary 

not refitted, just copy constructed from original Track

Refitted 

normally refitted, without adding any pseudo-measurement

Accumulated 

accumulated by the GX algorithm.

NVertexTypes 

total number of track types

Definition at line 38 of file AlignVertex.h.

38 {
39 Unknown = 0,
40 Primary = 1,
41 Refitted = 2,
42 Accumulated = 3,
43
45 };
@ NVertexTypes
total number of track types
Definition AlignVertex.h:44
@ Primary
not refitted, just copy constructed from original Track
Definition AlignVertex.h:40
@ Unknown
default type
Definition AlignVertex.h:39
@ Refitted
normally refitted, without adding any pseudo-measurement
Definition AlignVertex.h:41
@ Accumulated
accumulated by the GX algorithm.
Definition AlignVertex.h:42

Constructor & Destructor Documentation

◆ AlignVertex() [1/3]

AlignVertex::AlignVertex ( )

default constructor

Definition at line 12 of file AlignVertex.cxx.

13 : m_matrix(nullptr)
14 , m_vector(nullptr)
15 , m_original(nullptr)
16 , m_originalPosition(nullptr)
17 , m_position(nullptr)
18 , m_covariance(nullptr)
19 , m_derivatives(nullptr)
20 , m_qMatrix(nullptr)
21 , m_vVector(nullptr)
22 , m_constrained(false)
24 {
25 m_vector=new Amg::Vector3D(0.,0.,0.);
26 m_matrix=new AmgSymMatrix(3);
27 m_derivatives=new std::vector<AlignModuleVertexDerivatives >(0);
28 m_qMatrix= new AmgSymMatrix(3);
29 m_vVector=new Amg::Vector3D(0.,0.,0.);
30 m_nTracks=0;
31 }
#define AmgSymMatrix(dim)
AlignVertexType m_type
Amg::Vector3D * m_originalPosition
Amg::Vector3D * m_vVector
std::vector< AlignModuleVertexDerivatives > * m_derivatives
Amg::Vector3D * m_position
const xAOD::Vertex * m_original
Amg::Vector3D * m_vector
Eigen::Matrix< double, 3, 1 > Vector3D

◆ AlignVertex() [2/3]

AlignVertex::AlignVertex ( const xAOD::Vertex * originalVertex)

constructor takes the original vertex candidate but doesn't own it

Definition at line 74 of file AlignVertex.cxx.

75 : m_matrix(nullptr)
76 , m_vector(nullptr)
78 , m_originalPosition(nullptr)
79 , m_position(nullptr)
80 , m_covariance(nullptr)
81 , m_derivatives(nullptr)
82 , m_qMatrix(nullptr)
83 , m_vVector(nullptr)
84 , m_constrained(false)
86 {
87 m_vector=new Amg::Vector3D(0.,0.,0.);
88 m_matrix=new AmgSymMatrix(3);
90 m_originalPosition = new Amg::Vector3D( vertex->position() );
91 m_derivatives=new std::vector<AlignModuleVertexDerivatives >(0);
92 m_qMatrix=new AmgSymMatrix(3);
93 m_vVector=new Amg::Vector3D(0.,0.,0.);
94 m_nTracks=0;
95 }

◆ AlignVertex() [3/3]

AlignVertex::AlignVertex ( const AlignVertex & rhs)

copy constructor

Definition at line 34 of file AlignVertex.cxx.

35 : m_nTracks(rhs.m_nTracks)
36 , m_matrix(new AmgSymMatrix(3)(*(rhs.m_matrix)))
37 , m_vector(new Amg::Vector3D(*(rhs.m_vector)))
38 , m_original(rhs.m_original) //non-owning
39 , m_originalPosition(new Amg::Vector3D( *(rhs.m_originalPosition )))
40 , m_position(new Amg::Vector3D(*(rhs.m_position)))
41 , m_covariance(new AmgSymMatrix(3) (*(rhs.m_covariance)) )
42 , m_derivatives(new auto(*(rhs.m_derivatives)))
43 , m_qMatrix(new AmgSymMatrix(3) (*(rhs.m_qMatrix)) )
44 , m_vVector(new Amg::Vector3D(*(rhs.m_vVector)))
45 , m_constrained(rhs.m_constrained)
46 , m_type(rhs.m_type)
47 {
48
49 }

◆ ~AlignVertex()

AlignVertex::~AlignVertex ( )

destructor

Definition at line 99 of file AlignVertex.cxx.

100 {
101 if( m_matrix ) delete m_matrix;
102 if( m_vector ) delete m_vector;
103
105
106 if( m_position ) delete m_position;
107 if( m_covariance ) delete m_covariance;
108 if( m_derivatives ) delete m_derivatives;
109
110 if( m_qMatrix ) delete m_qMatrix;
111 if( m_vVector ) delete m_vVector;
112 }

Member Function Documentation

◆ addDerivatives()

void AlignVertex::addDerivatives ( std::vector< AlignModuleVertexDerivatives > * vec)

Definition at line 133 of file AlignVertex.cxx.

134 {
135 std::vector<AlignModuleVertexDerivatives>::iterator derivIt = vec->begin();
136 std::vector<AlignModuleVertexDerivatives>::iterator derivIt_end = vec->end();
137
138 for ( ; derivIt!=derivIt_end ; ++derivIt) {
139 m_derivatives->push_back(*derivIt);
140 }
141
142 }
std::vector< size_t > vec

◆ AmgSymMatrix() [1/5]

const Trk::AlignVertex::AmgSymMatrix ( 3 ) const
inline

Definition at line 77 of file AlignVertex.h.

77{return m_covariance;}

◆ AmgSymMatrix() [2/5]

Trk::AlignVertex::AmgSymMatrix ( 3 )
private

◆ AmgSymMatrix() [3/5]

Trk::AlignVertex::AmgSymMatrix ( 3 )
private

◆ AmgSymMatrix() [4/5]

Trk::AlignVertex::AmgSymMatrix ( 3 )
private

◆ AmgSymMatrix() [5/5]

const Trk::AlignVertex::AmgSymMatrix ( 3 ) const
inline

Definition at line 103 of file AlignVertex.h.

103{ return m_qMatrix; }

◆ Constrained()

bool Trk::AlignVertex::Constrained ( ) const
inline

Definition at line 109 of file AlignVertex.h.

109{ return m_constrained; }

◆ derivatives()

const std::vector< AlignModuleVertexDerivatives > * Trk::AlignVertex::derivatives ( ) const
inline

The Amg::VectorX is a vector of first-derivatives of the alignTSOS on the alignTrack w.r.t.

a particular alignment parameter times W*F. There is one Amg::VectorX in the vector for each alignment parameter of each align module. Set by accumulateVTX.

Definition at line 82 of file AlignVertex.h.

82{ return m_derivatives; }

◆ dump()

void AlignVertex::dump ( MsgStream & msg)

dump align vertex information

Definition at line 219 of file AlignVertex.cxx.

220 {
221 msg<<"dumping AlignVertex: "<<endmsg;
222
223 msg<<" vertex Position: "<< (*m_position) << endmsg;
224 msg<<" vertex Covariance: "<< (*m_covariance) << endmsg;
225 msg<< endmsg;
226
227 }
#define endmsg
MsgStream & msg
Definition testRead.cxx:32

◆ fitVertex()

void AlignVertex::fitVertex ( )

fit the vertex internally

Definition at line 145 of file AlignVertex.cxx.

146 {
147
148 m_type = Unknown;
149
150 if( Ntracks() < 2 ) return; // this is not a good vertex!
151
152
153 if( !m_matrix ) {
154 std::cout <<"NULL pointer to the matrix! Bailing out..."<< std::endl;
155 return;
156 }
157
158 Amg::Vector3D vec = (*m_vector);
159 AmgSymMatrix(3) cov = (*m_matrix);
160 AmgSymMatrix(3) covcons = (*m_matrix);
161
162 AmgSymMatrix(3) Qinv;
163 if( m_constrained && m_qMatrix->determinant() > 1.0e-24 ) { // just my guess sigma>0.1 micron ???
164
165 bool invertible;
166 m_qMatrix->computeInverseWithCheck(Qinv,invertible);
167
168 if(!invertible) {
169 std::cout <<"fitVertex: Q inversion failed. " << std::endl;
170 return;
171 }
172
173
174 Amg::Vector3D vtemp(3, 0);
175
176 vtemp = *m_originalPosition;
177 vtemp -= *m_vVector;
178
179 covcons += 2.0*Qinv;
180 vec += 2.0*Qinv*vtemp;
181 }
182
183 // invert the constrained covariance:
184 AmgSymMatrix(3) invcovcons;
185
186 bool invertible;
187 covcons.computeInverseWithCheck(invcovcons,invertible);
188
189 if(!invertible) {
190 std::cout <<"fitVertex: covcons inversion failed. " << std::endl;
191 return;
192 }
193
194 // invert the covariance matrix:
195 AmgSymMatrix(3) invcov;
196 cov.computeInverseWithCheck(invcov,invertible);
197
198 if(!invertible) {
199 std::cout <<"fitVertex: cov inversion failed. " << std::endl;
200 return;
201 }
202
203
204
205 // calculate corrections (mind the sign!)
206 Amg::Vector3D delta(invcovcons * vec);
207
208 if ( !m_position ) m_position=new Amg::Vector3D(0.,0.,0.);
210 *m_position -= delta;
211
212
213 if ( !m_covariance ) m_covariance= new AmgSymMatrix(3);
214 (*m_covariance)=invcov; // this one is unconstrained!
215
217 }
if(pathvar)
int Ntracks() const
get the number of contributing tracks
Definition AlignVertex.h:98
const AmgSymMatrix(3) *covariance() const
Definition AlignVertex.h:77

◆ incrementMatrix()

void Trk::AlignVertex::incrementMatrix ( const AmgSymMatrix(3) vtxM)
inline

Definition at line 91 of file AlignVertex.h.

91{ (*m_matrix)+=vtxM; }

◆ incrementVector()

void Trk::AlignVertex::incrementVector ( const Amg::Vector3D & vtxV)
inline

increment algebra objects for this verterx:

Definition at line 90 of file AlignVertex.h.

90{ (*m_vVector)+=vtxV; }

◆ Ntracks()

int Trk::AlignVertex::Ntracks ( ) const
inline

get the number of contributing tracks

Definition at line 98 of file AlignVertex.h.

98{ return m_nTracks; }

◆ operator=()

AlignVertex & AlignVertex::operator= ( const AlignVertex & rhs)

assignment

Definition at line 52 of file AlignVertex.cxx.

52 {
53 if (&rhs!=this){
54 m_nTracks = rhs.m_nTracks;
55 delete m_matrix; m_matrix = new AmgSymMatrix(3)(*(rhs.m_matrix));
56 delete m_vector; m_vector = new Amg::Vector3D(*(rhs.m_vector));
57 m_original = rhs.m_original; //non-owning
58 delete m_originalPosition; m_originalPosition = new Amg::Vector3D( *(rhs.m_originalPosition ));
59 delete m_position; m_position = new Amg::Vector3D(*(rhs.m_position));
60 delete m_covariance; m_covariance = new AmgSymMatrix(3) (*(rhs.m_covariance));
61 delete m_derivatives; m_derivatives = new auto(*(rhs.m_derivatives));
62 delete m_qMatrix; m_qMatrix = new AmgSymMatrix(3) (*(rhs.m_qMatrix));
63 delete m_vVector; m_vVector = new Amg::Vector3D(*(rhs.m_vVector));
64 m_constrained = rhs.m_constrained;
65 m_type = rhs.m_type;
66 }
67 return *this;
68 }

◆ originalPosition()

const Amg::Vector3D * Trk::AlignVertex::originalPosition ( ) const
inline

Definition at line 66 of file AlignVertex.h.

66{return m_originalPosition;}

◆ originalVertex()

const xAOD::Vertex * Trk::AlignVertex::originalVertex ( ) const
inline

retrieve pointer to original vertex and its position

Definition at line 65 of file AlignVertex.h.

65{ return m_original; }

◆ position()

const Amg::Vector3D * Trk::AlignVertex::position ( ) const
inline

get the vertex position and covariance

Definition at line 76 of file AlignVertex.h.

76{return m_position;}

◆ setConstraint()

void AlignVertex::setConstraint ( AmgSymMatrix(3) * Q,
Amg::Vector3D * V )

set and get the constraint on VTX position

Definition at line 115 of file AlignVertex.cxx.

116 {
117 if( Q->rows()!=3 || V->rows()!=3 ) {
118 std::cout <<"Unexpected size of the constraint:"<< std::endl;
119 std::cout <<" Q size = "<< Q->rows() << ", V size = "<< V->rows() << std::endl;
120 return;
121 }
122 if( Q->determinant() < 1.0e-24 ) {
123 std::cout <<" Suspicious Q determinant: detQ = "<< Q->determinant() << std::endl;
124 return;
125 }
126 (*m_qMatrix) = (*Q);
127 (*m_vVector) = (*V);
128 m_constrained = true;
129 }

◆ setDerivatives()

void Trk::AlignVertex::setDerivatives ( std::vector< AlignModuleVertexDerivatives > * vec)
inline

Definition at line 83 of file AlignVertex.h.

◆ setOriginalVertex()

void Trk::AlignVertex::setOriginalVertex ( const xAOD::Vertex * vertex)
inline

set pointer to original vertex

Definition at line 69 of file AlignVertex.h.

69{ m_original = vertex; }

◆ setType()

void Trk::AlignVertex::setType ( AlignVertexType type)
inline

Definition at line 73 of file AlignVertex.h.

73{m_type = type;}
AlignVertexType type() const
get and set the refit type
Definition AlignVertex.h:72

◆ setUnconstrained()

void Trk::AlignVertex::setUnconstrained ( )
inline

Definition at line 107 of file AlignVertex.h.

107{ m_constrained=false; }

◆ type()

AlignVertexType Trk::AlignVertex::type ( ) const
inline

get and set the refit type

Definition at line 72 of file AlignVertex.h.

72{return m_type;}

◆ Vvector()

const Amg::Vector3D * Trk::AlignVertex::Vvector ( ) const
inline

Definition at line 105 of file AlignVertex.h.

105{ return m_vVector; }

Member Data Documentation

◆ m_constrained

bool Trk::AlignVertex::m_constrained
private

Definition at line 129 of file AlignVertex.h.

◆ m_derivatives

std::vector<AlignModuleVertexDerivatives >* Trk::AlignVertex::m_derivatives
private

Definition at line 125 of file AlignVertex.h.

◆ m_nTracks

int Trk::AlignVertex::m_nTracks
private

Definition at line 113 of file AlignVertex.h.

◆ m_original

const xAOD::Vertex* Trk::AlignVertex::m_original
private

Definition at line 118 of file AlignVertex.h.

◆ m_originalPosition

Amg::Vector3D* Trk::AlignVertex::m_originalPosition
private

Definition at line 119 of file AlignVertex.h.

◆ m_position

Amg::Vector3D* Trk::AlignVertex::m_position
private

Definition at line 122 of file AlignVertex.h.

◆ m_type

AlignVertexType Trk::AlignVertex::m_type
private

Definition at line 132 of file AlignVertex.h.

◆ m_vector

Amg::Vector3D* Trk::AlignVertex::m_vector
private

Definition at line 116 of file AlignVertex.h.

◆ m_vVector

Amg::Vector3D* Trk::AlignVertex::m_vVector
private

Definition at line 128 of file AlignVertex.h.


The documentation for this class was generated from the following files: