FEDRA emulsion software from the OPERA Collaboration
VERTEX::Vertex Class Reference

#include <VtVertex.hh>

Inheritance diagram for VERTEX::Vertex:
Collaboration diagram for VERTEX::Vertex:

Public Member Functions

— Constructors —
 Vertex ()
 
 Vertex (const Vertex &rhs)
 
 Vertex (const Track_v &v)
 
 Vertex (Track &t1, Track &t2)
 
 ~Vertex ()
 
— VertexIf access functions —
float vx () const
 $x$ of vertex More...
 
float vy () const
 $y$ of vertex More...
 
float vz () const
 $z$ of vertex More...
 
float chi2 () const
 $\chi^2$ of vertex fit More...
 
float prob () const
 upper tail $\chi^2$ probability More...
 
unsigned short int ndf () const
 degrees of freedom of vertex fit More...
 
unsigned short int ntracks () const
 no of tracks in vertex $n$ More...
 
float vtx_cov_x () const
 $\sigma_x^2$ of vertex More...
 
float vtx_cov_y () const
 $\sigma_y^2$ of vertex More...
 
float vtx_cov_z () const
 $\sigma_z^2$ of vertex More...
 
– Other access methods —
double angle () const
 
double dist () const
 available after call to rmsDistAngle() More...
 
double vxerr () const
 $\sqrt{\sigma_{vx}^2}$ vertex $x$-error More...
 
double vyerr () const
 $\sqrt{\sigma_{vy}^2}$ vertex $y$-error More...
 
double vzerr () const
 $\sqrt{\sigma_{vz}^2}$ vertex $z$-error More...
 
double pmaxfrac () const
 $\max|p_i/p_j|$ max. momentum fraction More...
 
const MATRIX::VtSymMatrixCS () const
 $3\times3$ Vertex covariance matrix More...
 
const MATRIX::VtSymMatrixcovn () const
 $(3\cdot n+3)\times(3\cdot n+3)$ general covariance matrix More...
 
bool valid () const
 is vertex valid? More...
 
void set_invalid ()
 mark vertex as invalid More...
 
— Mass calculation routines —

@memo $m = \sqrt{\sum_i p_i^2 + m_i^2 - \sum_i \vec{p}_i^2}$

double mass (const bool use=false) const
 rest-mass 0 or track rest mass More...
 
double massCC (const bool use=false) const
 rest-mass 0 or conjugated track rest mass More...
 
double mass (double m1) const
 single rest-mass calc., More...
 
double mass (double m1, double m2) const
 2-track mass with particle rest-masses More...
 
double mass (double m1, double m2, double m3) const
 3-track mass with rest-masses More...
 
double mass (double m1, double m2, double m3, double m4) const
 4-track mass with rest-masses More...
 
double mass (const Vector_d &m02, bool use=false, bool CC=false) const
 specify $n$ rest masses More...
 
— Vertexing routines —
const bool findVertex2D (void)
 unweighted 2-D min. dist. More...
 
const bool findVertex3D (void)
 unweighted 3-D min. dist. More...
 
const bool findVertexVt ()
 Vt Kalman-filter. More...
 
const bool VtEstimateVertex ()
 weighted 2-D min. dist. More...
 
const bool VtEstimateVertexMath (double &x, double &y, double &z)
 estimate Vertex without changing Vertex object More...
 
const bool VtEstimateVertexMathTA (double &x, double &y, double &z)
 estimate Vertex without changing Vertex object More...
 
const bool VtMass ()
 Kalman filter with mass constraints. More...
 
— Adding tracks —
void push_back (Track &track)
 
— Misc functions —
double rmsDistAngle () const
 calc rms dist and rms angle More...
 
bool calc_mother (bool use_kalman=true)
 calc track params of mother particle More...
 
bool calc_mother_cov ()
 calc cov. matrix of mother particle More...
 
const bool remove_last ()
 remove last track from vertex, do inverse Kalman filter More...
 
void remove_worst ()
 remove track with biggest $\chi^2$ contribution, do inverse Kalman filter More...
 
double track_chi2 (int i)
 get track $\chi^2$ contribution More...
 
int track_worst ()
 get track with biggest $\chi^2$ contribution More...
 
void use_momentum (const bool use)
 set for all tracks whether momentum should be used or not More...
 
void use_kalman (const bool use)
 use refitted track parameters or not More...
 
bool use_kalman () const
 
double distance (double x, double y, double z) const
 $\chi^2$ distance to space point, $ndf = 3$ More...
 
double distance (Track &t) const
 $\chi^2$ distance to track, $ndf = 2$ More...
 
double distance (const Vertex &rhs) const
 $\chi^2$ distance to vertex, $ndf = 3$ More...
 
— Expert routines —
void clear ()
 clear all track-vertex relations, makes vertex invalid More...
 
const bool VtFilter ()
 
const bool VtInverseFilter () const
 
void VtSmoothX ()
 smooth vertex position More...
 
void VtSmoothQ ()
 smooth momenta More...
 
const bool VtRemoveTrack (Relation &track)
 remove track using inverse Kalman filter More...
 
const bool VtFit ()
 Kalman filter + smoother. More...
 
const MATRIX::VtVectorxv () const
 
const MATRIX::VtVectorxvs () const
 vector of vertex-positions More...
 
std::ostream & print (std::ostream &os) const
 called by operator<<() More...
 
double chi2n () const
 $\chi^2$ after last filter step More...
 
double chi2l () const
 $\chi^2$ contribution of last filter step More...
 
virtual void remove (Relation *r)
 unbook relation More...
 
virtual const iterator erase (const iterator &pos)
 erase a relation without refit More...
 
const MATRIX::VtSymMatrixbigcov ()
 compute general $(3\cdot n+3) \times (3\cdot n+3)$ covariance matrix More...
 
— Mass Constraint routines —
void MassConstr (double m)
 add a mass constraint for all tracks, $m$ = mass of mother particle More...
 
MassCaddMassConstr (double m=0.)
 add a mass constraint More...
 
void clearMassConstr ()
 delete the mass constraints More...
 
unsigned int nMassConstr () const
 number of mass constraints More...
 
- Public Member Functions inherited from VERTEX::Track
 Track ()
 
 Track (const Track *const track)
 
 Track (const Track &rhs)
 
 Track (const MATRIX::VtVector &v, const MATRIX::CMatrix &c)
 
virtual ~Track ()
 
void set (double x, double y, double z, double tx, double ty, double p, const MATRIX::CMatrix &c)
 
Trackoperator= (const Track &rhs)
 
float x () const
 x at z=0 (in Vt: p(3,..)) More...
 
float y () const
 y at z=0 (in Vt: p(4,..)) More...
 
float x (float z) const
 Track $x$ position at $z$. More...
 
float y (float z) const
 Track $y$ position at $z$. More...
 
float z () const
 z = 0 in Vt More...
 
float tx () const
 slope (in Vt: p(1,..)) More...
 
float ty () const
 slope (in Vt: p(2,..)) More...
 
float p () const
 momentum (in Vt: p(5,..)) More...
 
float pt () const
 transv. momentum $\sqrt{p_x^2 + p_y^2}$ More...
 
float pz () const
 $p \cdot e_z$ More...
 
float chi2 () const
 dummy function: always return 0 More...
 
unsigned short int ndf () const
 dummy function: always return 0 More...
 
float phi () const
 azimuthal angle $\phi$ More...
 
float theta () const
 polar angle $\theta = \cos^{-1}(e_z)$ More...
 
float eta () const
 rapidity $-\log\tan(\theta/2.)$ More...
 
int charge () const
 charge More...
 
float energy (double rm=0.) const
 Energy with given rest-mass (in GeV) $E = \sqrt{p^2 + m^2}$. More...
 
float xf (double rm=0.) const
 Feynman Variable $x_F = \frac{E+p_z}{(E+p_z)_{max}}$. More...
 
float rap (double rm=0.) const
 Rapidity $y = \frac{1}{2}\ln(\frac{E+p_z}{E-p_z})$. More...
 
MATRIX::VtVector evec () const
 $\vec{v} = (e_x,e_y,e_z)$ unit vector along refitted track More...
 
MATRIX::VtVector tvec () const
 $\vec{v} = (t_x,t_y,1.)$ refitted slope vector More...
 
MATRIX::VtVector pvec () const
 $\vec{v} = (p_x,p_y,p_z)$ refitted mom. vector More...
 
float cov_x (double dz=0.) const
 get $\sigma_x^2|_{z+dz}$ More...
 
float cov_y (double dz=0.) const
 get $\sigma_y^2|_{z+dz}$ More...
 
float cov_tx () const
 get $\sigma_{t_x}^2$ More...
 
float cov_ty () const
 get $\sigma_{t_y}^2$ More...
 
float cov_p () const
 get $\sigma_p^2$ More...
 
bool isValid () const
 dummy function: always return true More...
 
void valid ()
 dummy function: do nothing More...
 
void invalid ()
 dummy function: do nothing More...
 
bool propagate (const double zz)
 propagate track to $z$ More...
 
double px () const
 $p \cdot e_x$ More...
 
double py () const
 $p \cdot e_y$ More...
 
double ex () const
 $t_x \cdot e_z$ More...
 
double ey () const
 $t_y \cdot e_z$ More...
 
double ez () const
 $1/\sqrt{1+t_x^2+t_y^2}$ More...
 
double xerr (double dz=0) const
 $\sqrt{\sigma_x^2(z+dz)}$ More...
 
double yerr (double dz=0) const
 $\sqrt{\sigma_y^2(z+dz)}$ More...
 
double txerr () const
 $\sqrt{\sigma^2_{tx}}$ More...
 
double tyerr () const
 $\sqrt{\sigma^2_{ty}}$ More...
 
double perr () const
 $\sqrt{\sigma^2_p}$ More...
 
const MATRIX::CMatrixV () const
 covariance matrix More...
 
const MATRIX::CMatrixG () const
 inverse $5\times5$ covariance matrix More...
 
const MATRIX::CMatrixGM () const
 inverse $4\times4$ covariance matrix, without momentum More...
 
std::ostream & print (std::ostream &os) const
 called by cout More...
 
double rm () const
 rest-mass More...
 
void rm (const double mass)
 set rest-mass (needed for mass constrained fits) More...
 
double rmCC () const
 conjugated rest-mass More...
 
void rmCC (const double mass)
 set conjugated rest-mass More...
 
void delete_mom ()
 
- Public Member Functions inherited from VERTEX::RelationList
 RelationList ()
 
virtual ~RelationList ()
 
void push__back (Relation *rel)
 add a relation More...
 
Relationback () const
 return last relation More...
 
unsigned int size () const
 return no of relations More...
 
iterator begin ()
 
iterator end ()
 
const_iterator begin () const
 
const_iterator end () const
 
reverse_iterator rbegin ()
 
reverse_iterator rend ()
 
const_reverse_iterator rbegin () const
 
const_reverse_iterator rend () const
 
Relation *const operator[] (unsigned int i) const
 direct access More...
 
void print (std::ostream &os) const
 
void unbook (Relation *const rel)
 get rid of relation pointer More...
 
const RelationListoperator= (const RelationList &rhs)
 
bool operator== (const RelationList &rhs) const
 

— Operators —

bool v_use_kalman
 
bool v_valid
 
bool v_Mvalid
 
bool v_mother
 
bool v_angdist
 
double v_angle
 
double v_dist
 
double v_bk13
 
double v_chi2
 
MATRIX::VtVector kal_xv
 
MATRIX::VtVector kal_xvs
 
MATRIX::VtSymMatrix v_CS
 
MATRIX::VtSymMatrix v_CINV
 
MATRIX::VtSymMatrixv_covn
 
Track_v tracks
 
MassC_v xmass
 
const Vertexoperator= (const Vertex &rhs)
 
const bool operator== (const Vertex &rhs) const
 
const double operator- (const Vertex &rhs) const
 
void add_track (Track &t)
 
const Trackget_track (int i) const
 
const unsigned int bigdim () const
 
void invalid ()
 
 ClassDef (Vertex, 1)
 

Additional Inherited Members

- Public Types inherited from VERTEX::RelationList
typedef ConstRelationIterator const_iterator
 
typedef ConstReverseRelationIterator const_reverse_iterator
 
typedef RelationIterator iterator
 
typedef ReverseRelationIterator reverse_iterator
 
- Protected Member Functions inherited from VERTEX::Track
 ClassDef (Track, 1)
 
- Protected Attributes inherited from VERTEX::Track
MATRIX::VtVector t_p
 
MATRIX::CMatrix t_V
 
MATRIX::CMatrix t_G
 
MATRIX::CMatrix t_GM
 

Detailed Description

Vertex class

Constructor & Destructor Documentation

◆ Vertex() [1/4]

Vertex::Vertex ( )
88 :
89 Track (),
90 v_use_kalman(false),
91 v_valid (false),
92 v_Mvalid (false),
93 v_mother (false),
94 v_angdist (false),
95 v_angle (0.),
96 v_dist (0.),
97 v_bk13 (0.),
98 v_chi2 (0.),
99 kal_xv (VtVector(3)),
100 kal_xvs (VtVector(3)),
101 v_CS (VtSymMatrix(3,1.e5)),
102 v_CINV (CINV0),
103 v_covn (0),
104 tracks (),
105 xmass ()
106 {}
Definition: VtSymMatrix.hh:49
Definition: VtVector.hh:45
Track()
Definition: VtTrack.C:64
bool v_mother
Definition: VtVertex.hh:287
MATRIX::VtSymMatrix * v_covn
Definition: VtVertex.hh:300
MATRIX::VtVector kal_xvs
Definition: VtVertex.hh:295
bool v_angdist
Definition: VtVertex.hh:288
bool v_Mvalid
Definition: VtVertex.hh:286
double v_angle
Definition: VtVertex.hh:289
bool v_valid
Definition: VtVertex.hh:285
MassC_v xmass
Definition: VtVertex.hh:302
MATRIX::VtVector kal_xv
Definition: VtVertex.hh:294
double v_bk13
Definition: VtVertex.hh:291
Track_v tracks
Definition: VtVertex.hh:301
MATRIX::VtSymMatrix v_CINV
Definition: VtVertex.hh:299
double v_dist
Definition: VtVertex.hh:290
bool v_use_kalman
Definition: VtVertex.hh:284
MATRIX::VtSymMatrix v_CS
Definition: VtVertex.hh:297
double v_chi2
Definition: VtVertex.hh:293

◆ Vertex() [2/4]

Vertex::Vertex ( const Vertex rhs)
156 :
157 Track (rhs),
158 v_use_kalman(rhs.v_use_kalman),
159 v_valid (rhs.v_valid),
160 v_Mvalid (rhs.v_Mvalid),
161 v_mother (rhs.v_mother),
162 v_angdist (rhs.v_angdist),
163 v_angle (rhs.v_angle),
164 v_dist (rhs.v_dist),
165 v_bk13 (rhs.v_bk13),
166 v_chi2 (rhs.v_chi2),
167 kal_xv (rhs.kal_xv),
168 kal_xvs (rhs.kal_xvs),
169 v_CS (rhs.v_CS),
170 v_CINV (v_CS.dsinv()),
171 v_covn (0)
172 // tracks (rhs.tracks),
173 // xmass (rhs.xmass)
174 {
175 // do not copy relations
176 }
const VtSymMatrix dsinv(int dim=0) const
return inverse
Definition: VtSymMatrix.C:275

◆ Vertex() [3/4]

VERTEX::Vertex::Vertex ( const Track_v v)

◆ Vertex() [4/4]

Vertex::Vertex ( Track t1,
Track t2 
)
108 :
109 Track (),
110 v_use_kalman(false),
111 v_valid (false),
112 v_Mvalid (false),
113 v_mother (false),
114 v_angdist (false),
115 v_angle (0.),
116 v_dist (0.),
117 v_bk13 (0.),
118 v_chi2 (0.),
119 kal_xv (VtVector(3)),
120 kal_xvs (VtVector(3)),
121 v_CS (VtSymMatrix(3,1.e5)),
122 v_CINV (CINV0),
123 v_covn (0),
124 tracks (),
125 xmass ()
126 {
127 createRelation(t1, *this);
128 createRelation(t2, *this);
129 }
bool createRelation(Track &t, Vertex &v)
Definition: VtRelationList.C:39

◆ ~Vertex()

Vertex::~Vertex ( )
178 {
179 // delete the mass constraints
181 // delete tracks owned by vertex
182 const Track_cit end = tracks.end();
183 for(Track_cit it = tracks.begin(); it != end; ++it) {
184 delete *it;
185 }
186 // delete big covariance matrix
187 if(v_covn != 0) delete v_covn;
188 }
iterator end()
Definition: VtRelationList.hh:256
void clearMassConstr()
delete the mass constraints
Definition: VtVertex.C:328
std::vector< Track * >::const_iterator Track_cit
Definition: VtVertex.hh:81

Member Function Documentation

◆ add_track()

void Vertex::add_track ( Track t)
261 {
262 tracks.push_back(&t); // add track to the tracks list in a way that vertex become the owner
263 push_back(t); // set the relation
264 }
void push_back(Track &track)
Definition: VtVertex.C:271
TTree * t
Definition: check_shower.C:4

◆ addMassConstr()

MassC & Vertex::addMassConstr ( double  m = 0.)

add a mass constraint

320 {
321 xmass.push_back(new MassC(m));
322 return *xmass.back();
323 }

◆ angle()

double VERTEX::Vertex::angle ( ) const

$\sqrt{n\cdot\sum_it_{x,i}^2 - (\sum_i t_{x,i})^2 + n\cdot\sum_i t_{y,i}^2 - (\sum_i t_{y,i})^2} / n$

◆ bigcov()

const VtSymMatrix & Vertex::bigcov ( )

compute general $(3\cdot n+3) \times (3\cdot n+3)$ covariance matrix

341 {
342
343 // build up big cov. matrix (in Vt: covn)
344 // covn consists of vertex + track parameter cov. matrices:
345 // vtx tr1 tr2 tr3 ...
346 //
347 // CS | ES | ES | ES | ... CC = cor(q_k,q_l) = F_k*C_n*F_l^T
348 // ---+----+----+----+ = -ES_k * F_l
349 // ES | DS | CC | CC | ...
350 // ---+----+----+----+
351 // ES | CC | DS | CC | ...
352 // ---+----+----+----+
353 // ES | CC | CC | DS | ...
354 // ...
355
356 if(v_covn == 0)
357 v_covn = new VtSymMatrix(bigdim());
358
360
361 // VtSymMatrix covn(bigdim());
362
363 covn.place_at(v_CS,0,0);
364
365 unsigned int ipos = 3;
366 const iterator last = end();
367 for(iterator it = begin(); it != last; ++it) {
368 const Kalman& kalman = it->kalman;
369
370 covn.place_at(kalman.ES(), ipos, 0);
371 covn.place_at(kalman.DS(), ipos, ipos);
372
373 // fill cor(q_k^n,q_l^n) = F_k*C_n*F_l^T = -E_k^n * F_l^T
374 unsigned int jpos = 6;
375 iterator tmp=it;
376 for(iterator it2=++tmp; it2 != last; ++it2) {
377 const Kalman& kalman2 = it2->kalman;
378
379 covn.place_at(-kalman.ES()*kalman2.F().T(), ipos,jpos);
380 jpos+=3;
381 }
382
383 ipos+=3;
384 }
385
386 return covn;
387 }
virtual void place_at(const VtMatrix &rhs, const unsigned int row, const unsigned int col)
copy a smaller matrix at a certain place
Definition: VtSymMatrix.C:412
iterator begin()
Definition: VtRelationList.hh:254
RelationIterator iterator
Definition: VtRelationList.hh:229
Kalman & kalman
Definition: VtRelation.hh:74
const unsigned int bigdim() const
const MATRIX::VtSymMatrix & covn() const
$(3\cdot n+3)\times(3\cdot n+3)$ general covariance matrix

◆ bigdim()

const unsigned int VERTEX::Vertex::bigdim ( ) const
private

◆ calc_mother()

bool Vertex::calc_mother ( bool  use_kalman = true)

calc track params of mother particle

392 {
393 // if(v_valid == false) return v_mother = false;
394
395 // add up track momenta
396 t_p[5] = 0;
397#if defined USE_ROOT
399#else
400 VtVector psum(0,0,0);
401#endif
402
403 const iterator last = end();
404 if(use_kalman == true) {
405 for(iterator it = begin(); it != last; ++it) {
406 const Kalman& t = it->kalman;
407 t_p[5] += t.p();
408 psum += t.pvec();
409 }
410
411 if(fabs(psum[2])>1e-20) {
412 t_p[3] = psum[0]/psum[2]; // tx = pxsum/pzsum
413 t_p[4] = psum[1]/psum[2]; // ty = pysum/pzsum
414 } else {
415 return v_mother = false;
416 }
417
418 // x,y at z = 0
419 t_p[0] = vx() - vz() * tx();
420 t_p[1] = vy() - vz() * ty();
421 t_p[2] = 0.;
422
423 } else {
424 double x, y, z;
426 for(iterator it = begin(); it != last; ++it) {
427 const Track& t = it->track;
428 t_p[5] += t.p();
429 psum += t.pvec();
430 }
431
432 if(fabs(psum[2])>1e-20) {
433 t_p[3] = psum[0]/psum[2]; // tx = pxsum/pzsum
434 t_p[4] = psum[1]/psum[2]; // ty = pysum/pzsum
435 } else {
436 return v_mother = false;
437 }
438
439 // x,y at z = 0
440 t_p[0] = x - z * tx();
441 t_p[1] = y - z * ty();
442 t_p[2] = 0.;
443 }
444
445 // t_p[5] = sqrt(sqr(pxsum) + sqr(pysum) + sqr(pzsum));
446
447 // what is the difference betwenn sum of track.p() and
448 // calculation sqrt(sqr(pxsum)+sqr(pysum)+sqr(pzsum))?????
449 // cout << " reco-p: " << sqrt(sqr(pxsum) + sqr(pysum) + sqr(pzsum))
450 // << " orig reco p: " << p() << endl;
451
452 return v_mother = true;
453 }
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
Definition: Track.h:10
float x() const
x at z=0 (in Vt: p(3,..))
Definition: VtTrack.C:148
float z() const
z = 0 in Vt
Definition: VtTrack.C:150
MATRIX::VtVector t_p
Definition: VtTrack.hh:228
float ty() const
slope (in Vt: p(2,..))
Definition: VtTrack.C:154
float y() const
y at z=0 (in Vt: p(4,..))
Definition: VtTrack.C:149
float tx() const
slope (in Vt: p(1,..))
Definition: VtTrack.C:153
const bool VtEstimateVertexMath(double &x, double &y, double &z)
estimate Vertex without changing Vertex object
Definition: VtVertex.C:1305
float vz() const
$z$ of vertex
Definition: VtVertex.C:235
float vy() const
$y$ of vertex
Definition: VtVertex.C:234
float vx() const
$x$ of vertex
Definition: VtVertex.C:233
bool use_kalman() const

◆ calc_mother_cov()

bool Vertex::calc_mother_cov ( )

calc cov. matrix of mother particle

458 {
459 // no track parameters computed
460 if(v_mother == false || v_valid == false) return false;
461 // get big covariance matrix
462 const VtSymMatrix& covn = (v_Mvalid==false)? bigcov() : *v_covn;
463
464 // fill jacobian
465 VtMatrix jac(bigdim(),5);
466
467 // unit vectors
468 double epx = ex();
469 double epy = ey();
470 double epz = ez();
471
472 // vertex part:
473 jac(0,0) = jac(1,1) = 1.;
474 jac(2,0) = -tx();
475 jac(2,1) = -ty();
476
477 double fact3 = 1./pz();
478 // double fact3 = 1./(p() * epz);
479
480 unsigned int i = 2;
481 const iterator last = end();
482 for(iterator it = begin(); it != last; ++it) {
483 const Kalman& t = it->kalman;
484
485 // unit vectors along track:
486 double ex = t.ex();
487 double ey = t.ey();
488 double ez = t.ez();
489
490 double fact2 = t.pz();
491 double fact = fact2 * fact3;
492
493 ++i;
494 jac(i,2) = fact * (1. - sqr(ex) + tx() * ex * ez);
495 jac(i,3) = fact * ex * (ty()*ez - ey);
496 jac(i,0) = -vz() * jac(i,2);
497 jac(i,1) = -vz() * jac(i,3);
498
499 jac(i,4) = fact2 * ( epx*(1.-sqr(ex)) - epy*ex*ey - epz*ex*ez );
500
501 ++i;
502 jac(i,2) = fact*ey*(tx()*ez-ex);
503 jac(i,3) = fact*(1. - sqr(ey) + ty()*ey*ez);
504 jac(i,0) = -vz() * jac(i,2);
505 jac(i,1) = -vz() * jac(i,3);
506
507 jac(i,4) = fact2 * ( epy*(1.-sqr(ey)) - epx*ex*ey - epz*ey*ez );
508
509 ++i;
510 jac(i,2) = fact3 * (ex - tx()*ez);
511 jac(i,3) = fact3 * (ey - ty()*ez);
512 jac(i,0) = -vz() * jac(i,2);
513 jac(i,1) = -vz() * jac(i,3);
514
515 jac(i,4) = epx*ex + epy*ey + epz*ez;
516 }
517
518#ifdef VtDEBUG
519 cout << " jac: " << jac << endl;
520#endif
521
522 // compute Track covariance matrix:
523 t_V = covn.product(jac);
524 // compute inverse
525 t_G = t_V;
526 t_G.VtDsinv();
527 t_GM.copy(t_V.dsinv(4)); // inverse without momentum
528
529 return true;
530 }
Definition: VtMatrix.hh:49
void copy(const VtSymMatrix &rhs)
in case matrix dimensions differ
Definition: VtSymMatrix.C:649
double product(const VtVector &rhs, unsigned int dim=0) const
compute $v^t*A*v$
Definition: VtSymMatrix.C:351
bool VtDsinv(int dim=0)
transform to inverse
Definition: VtSymMatrix.C:292
double ez() const
$1/\sqrt{1+t_x^2+t_y^2}$
double ey() const
$t_y \cdot e_z$
double ex() const
$t_x \cdot e_z$
MATRIX::CMatrix t_V
Definition: VtTrack.hh:230
MATRIX::CMatrix t_G
Definition: VtTrack.hh:231
MATRIX::CMatrix t_GM
Definition: VtTrack.hh:232
float pz() const
$p \cdot e_z$
Definition: VtTrack.C:157
const MATRIX::VtSymMatrix & bigcov()
compute general $(3\cdot n+3) \times (3\cdot n+3)$ covariance matrix
Definition: VtVertex.C:341
const T sqr(const T &x)
compute the square of a number: $x*x$
Definition: VtUtil.hh:37

◆ chi2()

float Vertex::chi2 ( ) const

$\chi^2$ of vertex fit

236{ return v_chi2; }

◆ chi2l()

double Vertex::chi2l ( ) const

$\chi^2$ contribution of last filter step

865 {
867 const_reverse_iterator it2 = it1 = rbegin();
868 ++it2;
869 return it1->kalman.chi2() - it2->kalman.chi2();
870 }
reverse_iterator rbegin()
Definition: VtRelationList.hh:262
ConstReverseRelationIterator const_reverse_iterator
Definition: VtRelationList.hh:232

◆ chi2n()

double Vertex::chi2n ( ) const

$\chi^2$ after last filter step

858 {
859 return back()->kalman.chi2();
860 }
double chi2() const
$\chi^2$ contribution of track
Relation * back() const
return last relation
Definition: VtRelationList.hh:246

◆ ClassDef()

VERTEX::Vertex::ClassDef ( Vertex  ,
 
)
private

◆ clear()

void Vertex::clear ( void  )
virtual

clear all track-vertex relations, makes vertex invalid

Reimplemented from VERTEX::RelationList.

196 {
198 invalid();
199 v_mother = v_use_kalman = false;
200 // delete the mass constraints
202 // delete tracks owned by vertex
203 const Track_cit end = tracks.end();
204 for(Track_cit it = tracks.begin(); it != end; ++it) {
205 delete *it;
206 }
207 tracks.clear();
208 // delete big covariance matrix
209 if(v_covn != 0) {
210 delete v_covn;
211 v_covn = 0;
212 }
213 }
virtual void clear()
clear all relations
Definition: VtRelationList.C:57
void invalid()
Definition: VtVertex.C:218

◆ clearMassConstr()

void Vertex::clearMassConstr ( )

delete the mass constraints

328 {
329 // delete mass constraints owned by vertex
330 const MassC_cit end = xmass.end();
331 for(MassC_cit it = xmass.begin(); it != end; ++it) {
332 delete *it;
333 }
334 xmass.clear();
335 return;
336 }
std::list< MassC * >::const_iterator MassC_cit
Definition: VtMassC_list.hh:32

◆ covn()

const MATRIX::VtSymMatrix & VERTEX::Vertex::covn ( ) const

$(3\cdot n+3)\times(3\cdot n+3)$ general covariance matrix

◆ CS()

const MATRIX::VtSymMatrix & VERTEX::Vertex::CS ( ) const

$3\times3$ Vertex covariance matrix

◆ dist()

double VERTEX::Vertex::dist ( ) const

available after call to rmsDistAngle()

◆ distance() [1/3]

double Vertex::distance ( const Vertex rhs) const

$\chi^2$ distance to vertex, $ndf = 3$

812 {
813 const VtSymMatrix& cov1 = back()->kalman.CINV();
814 const VtSymMatrix& cov2 = rhs.back()->kalman.CINV();
815 VtSymMatrix Cmat = cov1+cov2;
816
817 if(Cmat.VtDsinv() == false) return 1000.;
818
819 const VtVector x1 = cov1 * kal_xvs;
820 const VtVector x2 = cov2 * rhs.kal_xvs;
821 const VtVector xav = Cmat * (x1+x2);
822 const VtVector dx1 = xav - kal_xvs;
823 const VtVector dx2 = xav - rhs.kal_xvs;
824
825 // get a chi2 value
826 double sum1 = cov1.product(dx1);
827 double sum2 = cov2.product(dx2);
828 return (sum1 + sum2);
829 }
const MATRIX::VtSymMatrix & CINV() const

◆ distance() [2/3]

double Vertex::distance ( double  x,
double  y,
double  z 
) const

$\chi^2$ distance to space point, $ndf = 3$

803 {
804 VtVector dx(xx-vx(),yy-vy(),zz-vz());
805 return back()->kalman.CINV().product(dx);
806 }

◆ distance() [3/3]

double Vertex::distance ( Track t) const

$\chi^2$ distance to track, $ndf = 2$

843 {
844 Vertex tmp;
845 const const_iterator last = end();
846 for(RelationList::const_iterator it = begin(); it != last; ++it) {
847 Track& tp = it->track;
848 tmp.push_back(tp);
849 }
850 tmp.push_back(t);
851 if (tmp.findVertexVt() == false) return -10.;
852 return tmp.track_chi2(tmp.ntracks()-1);
853 }
ConstRelationIterator const_iterator
Definition: VtRelationList.hh:230
Vertex()
Definition: VtVertex.C:88

◆ erase()

const iterator Vertex::erase ( const iterator pos)
virtual

erase a relation without refit

Reimplemented from VERTEX::RelationList.

298 {
299 invalid();
300 return RelationList::erase(pos);
301 }
virtual const iterator erase(const iterator &pos)
Erase an element.
Definition: VtRelationList.C:105

◆ findVertex2D()

const bool Vertex::findVertex2D ( void  )

unweighted 2-D min. dist.

1111 {
1112
1113 unsigned int v_nrseg = size();
1114 if(v_nrseg < 2) return false;
1115
1116 double sumtx=0, sumty=0, sumrx=0, sumry=0, sumrt=0, sumtt=0;
1117
1118 double tx, ty, rx, ry;
1119 const RelationList::iterator last = end();
1120 for(RelationList::iterator pos = begin(); pos != last; ++pos) {
1121 const Track& track = pos->track;
1122
1123 // slopes and position at z=0
1124 tx = track.tx(); rx = track.x() - tx*track.z();
1125 ty = track.ty(); ry = track.y() - ty*track.z();
1126
1127 // update cumulants
1128 sumtx += tx; sumrx += rx;
1129 sumty += ty; sumry += ry;
1130 sumrt += rx*tx + ry*ty;
1131 sumtt += sqr(tx) + sqr(ty);
1132 }
1133
1134#ifdef VtDEBUG
1135 cout << " sumtx: " << sumtx << " sumty: " << sumty
1136 << " sumrx: " << sumrx << " sumry: " << sumry
1137 << " sumrt: " << sumrt << " sumtt: " << sumtt
1138 << endl;
1139#endif
1140
1141 // get vertex z-position
1142
1143 double z = -(v_nrseg*sumrt - sumrx*sumtx - sumry*sumty) /
1144 (v_nrseg*sumtt - sqr<double>(sumtx) - sqr<double>(sumty));
1145
1146 // and the transverse coordinates
1147 double x = (sumrx + z*sumtx)/static_cast<double>(v_nrseg);
1148 double y = (sumry + z*sumty)/static_cast<double>(v_nrseg);
1149
1150 // fill vertex parameters
1151 kal_xvs[0] = x; // x-vertex
1152 kal_xvs[1] = y; // y-vertex
1153 kal_xvs[2] = z; // z-vertex
1154
1155 v_valid = true;
1156 return true;
1157 }
unsigned int size() const
return no of relations
Definition: VtRelationList.hh:248
Definition: bitview.h:14
double z
Definition: bitview.h:20
double x
Definition: bitview.h:18
track()
Definition: bitview.cxx:346
double y
Definition: bitview.h:19

◆ findVertex3D()

const bool Vertex::findVertex3D ( void  )

unweighted 3-D min. dist.

1011 {
1012
1013 if(size() < 2) return false;
1014
1015 double c[3], v[3], tt[9];
1016 for(int i=0; i<9; i++) tt[i] = 0.;
1017 for(int i=0; i<3; i++) c[i] = v[i] = 0.;
1018
1019 double t[3], r[3], dt;
1020 const RelationList::iterator last = end();
1021 for(RelationList::iterator pos = begin(); pos != last; ++pos) {
1022 const Track& track = pos->track;
1023
1024 t[0] = track.tx(); r[0] = track.x();
1025 t[1] = track.ty(); r[1] = track.y();
1026 t[2] = 1; r[2] = track.z();
1027
1028 double tsq = sqr(t[0]) + sqr(t[1]) + sqr(t[2]);
1029
1030 for(int i=0; i<3; i++) {
1031 for(int j=0; j<3; j++) {
1032 dt = t[i]*t[j]/tsq; if(i==j) dt -= 1;
1033 c[i] += dt*r[j];
1034 tt[3*i+j] += dt;
1035 }
1036 }
1037 }
1038
1039 int ifail = 0, ndim = 3;
1040 double work[3];
1041 Dinv1(&ndim, tt, &ndim, work, &ifail);
1042
1043 if(ifail) {
1044 cout << "findVertex: matrix inversion failed" << endl;
1045 return false;
1046 }
1047
1048 // get the vertex position
1049 for(int i=0; i<3; i++) {
1050 for(int j=0; j<3; j++) v[i] += tt[3*i+j]*c[j];
1051 }
1052 printf("findVertex3D v: %f %f %f\n",v[0],v[1],v[2]);
1053
1054 // fill vertex parameters
1055 kal_xvs[0] = v[0]; // x-vertex
1056 kal_xvs[1] = v[1]; // y-vertex
1057 kal_xvs[2] = v[2]; // z-vertex
1058
1059 // require that vertex-z is smaller than smallest hit-z of rsegs
1060 // to avoid vertexing the downstream end of rseg's
1061 // for(RelationList::iterator it = begin(); it != last; ++it) {
1062 // if(vz() > it->track.z() ) return false;
1063 // }
1064
1065 v_valid = true;
1066 return true;
1067 }
void Dinv1(int *n, double *a, int *idim, double *ir, int *ifail)
Definition: VtSqMatrix.C:321
void r(int rid=2)
Definition: test.C:201

◆ findVertexVt()

const bool Vertex::findVertexVt ( )

Vt Kalman-filter.

1174 {
1175 v_valid = v_Mvalid = false;
1176 if(ntracks() < 2) { return false; }
1177
1178 // 1st step: find approximate Vertex from average of all given tracks.
1179 // Initialize Kalman-filter
1181 // kal_xvs[0] = vest[0];
1182 // kal_xvs[1] = vest[1];
1183 // kal_xvs[2] = vest[2];
1184
1185 // 2nd step: initialize kalman filter
1186 v_CS = VtSymMatrix(3,1.e5);
1187 v_CINV = CINV0;
1188 const RelationList::iterator last = end();
1189 for(RelationList::iterator tit = begin(); tit != last; ++tit) {
1190 tit->kalman.init();
1191 }
1192
1193#ifdef VtDEBUG
1194 cout << "-------------------------------" << endl;
1195 cout << "Estimated Vertex: (" << vx() << "," << vy() << "," << vz() << ")" << endl;
1196 cout << "Number of Tracks: " << size();
1197 //copy(begin(), end(), ostream_iterator<Relation>(cout," "));
1198 cout << endl;
1199#endif
1200
1201 double prChi2 = 0.;
1202 const Kalman& trackn = back()->kalman; // last element
1203
1204 // 3rd step: iterate the kalman filter
1205 unsigned int iter = 0;
1206 do {
1207
1208 if(VtFit() == false) return false;
1209
1210 double chi2 = trackn.chi2();
1211
1212#ifdef VtDEBUG
1213 cout << "----> chi2n: " << chi2 << " prChi2: " << prChi2 << " fabs(chi2-prChi2): "
1214 << fabs(chi2 - prChi2) << endl;
1215#endif
1216
1217 if(fabs(chi2 - prChi2) > 1.) {
1218 prChi2 = chi2;
1219 } else
1220 if(iter > 0)
1221 break;
1222 } while(++iter < 20);
1223
1224#ifdef VtDEBUG
1225 cout << "-------------------------------" << endl;
1226 cout << "No of iterations: " << iter << endl;
1227 cout << *this;
1228#endif
1229
1230 if(iter<20) { // && chi2()<10.
1231 v_valid = true;
1232 } else {
1233 // cout << "-----> VERTEX FIT FAILED!! <--------" << endl;
1234 }
1235 return v_valid;
1236 }
const bool VtEstimateVertex()
weighted 2-D min. dist.
Definition: VtVertex.C:1241
float chi2() const
$\chi^2$ of vertex fit
Definition: VtVertex.C:236
const bool VtFit()
Kalman filter + smoother.
Definition: VtVertex.C:1162
unsigned short int ntracks() const
no of tracks in vertex $n$
Definition: VtVertex.C:240

◆ get_track()

const Track * Vertex::get_track ( int  i) const
266{return tracks.at(i);}

◆ invalid()

void Vertex::invalid ( )
private
218 {
219 v_valid = v_Mvalid = false;
220
221 if(v_covn != 0) {
222 delete v_covn;
223 v_covn = 0;
224 }
225
226 return;
227 }

◆ mass() [1/6]

double Vertex::mass ( const bool  use = false) const

rest-mass 0 or track rest mass

929 {
930 return mass(vector<double>(ntracks(),0), use, false);
931 }
double mass(const bool use=false) const
rest-mass 0 or track rest mass
Definition: VtVertex.C:929

◆ mass() [2/6]

double Vertex::mass ( const Vector_d m02,
bool  use = false,
bool  CC = false 
) const

specify $n$ rest masses

961 {
962
963 double esum = 0.;
964#if defined USE_ROOT
966#else
967 VtVector psum(0,0,0);
968#endif
969
970 unsigned int i=0;
971 const const_iterator last = end();
972 for(RelationList::const_iterator it = begin(); it != last; ++it) {
973 const Track& t = it->track;
974 double p = 0.;
975 if(v_use_kalman == false && use == false) {
976 p = t.p();
977 psum += t.pvec();
978 } else {
979 const Kalman& k = it->kalman;
980 p = k.p();
981 psum += k.pvec();
982 }
983
984 // in case no rest-mass given, use permanent rest-mass
985 double mm = m02[i++];
986
987 // handle track rest masses
988 if(mm == 0.) {
989 double rm = t.rm();
990 if(CC == true) rm = t.rmCC(); // use conjugated mass
991 mm = rm * rm;
992 }
993 esum += sqrt(p*p + mm);
994 }
995 // cout << "unllllock mutex" << endl;
996 // pthread_mutex_unlock(&VTmutex);
997
998#if defined USE_ROOT
999 double mass2 = esum*esum - mag2(psum);
1000#else
1001 double mass2 = esum*esum - psum(0)*psum(0) - psum(1)*psum(1) -
1002 psum(2)*psum(2);
1003#endif
1004 if(mass2 < 0) return 0.;
1005 else return sqrt(mass2);
1006 }
T mag2(const SVector< T, D > &rhs)
Definition: Functions.hh:195
double rm() const
rest-mass
float p() const
momentum (in Vt: p(5,..))
Definition: VtTrack.C:155

◆ mass() [3/6]

double Vertex::mass ( double  m1) const

single rest-mass calc.,

933 {
934 return mass(vector<double>(ntracks(),m1*m1));
935 }

◆ mass() [4/6]

double Vertex::mass ( double  m1,
double  m2 
) const

2-track mass with particle rest-masses

937 {
938 if(ntracks() != 2) return -1;
939 vector<double> tmp(2);
940 tmp[0] = m1*m1, tmp[1] = m2*m2;
941 return mass(tmp);
942 }

◆ mass() [5/6]

double Vertex::mass ( double  m1,
double  m2,
double  m3 
) const

3-track mass with rest-masses

944 {
945 if(ntracks() != 3) return -1;
946 vector<double> tmp(3);
947 tmp[0] = m1*m1, tmp[1] = m2*m2, tmp[2] = m3*m3;
948 return mass(tmp);
949 }

◆ mass() [6/6]

double Vertex::mass ( double  m1,
double  m2,
double  m3,
double  m4 
) const

4-track mass with rest-masses

951 {
952 if(ntracks() != 4) return -1;
953 vector<double> tmp(4);
954 tmp[0] = m1*m1, tmp[1] = m2*m2, tmp[2] = m3*m3, tmp[4] = m4*m4;
955 return mass(tmp);
956 }

◆ massCC()

double Vertex::massCC ( const bool  use = false) const

rest-mass 0 or conjugated track rest mass

925 {
926 return mass(vector<double>(ntracks(),0), use, true);
927 }

◆ MassConstr()

void Vertex::MassConstr ( double  m)

add a mass constraint for all tracks, $m$ = mass of mother particle

306 {
307 MassC* massc = new MassC(m);
308 const RelationList::iterator last = end();
309 for(RelationList::iterator it = begin(); it != last; ++it) {
310 massc->push_back(*it);
311 }
312
313 xmass.push_back(massc);
314 return;
315 }

◆ ndf()

unsigned short int Vertex::ndf ( ) const

degrees of freedom of vertex fit

239 { return ((v_Mvalid == true) ? 2*ntracks()-3 + xmass.size() : 2*ntracks()-3); }

◆ nMassConstr()

unsigned int VERTEX::Vertex::nMassConstr ( ) const

number of mass constraints

◆ ntracks()

unsigned short int Vertex::ntracks ( ) const

no of tracks in vertex $n$

240{ return size(); }

◆ operator-()

const double Vertex::operator- ( const Vertex rhs) const
1563 {
1564 return sqrt(sqr(vx()-rhs.vx()) + sqr(vy()-rhs.vy()) + sqr(vz()-rhs.vz()));
1565 }

◆ operator=()

const Vertex & Vertex::operator= ( const Vertex rhs)
1525 {
1526 if( this == &rhs ) { return *this; }
1527
1528 Track::operator=(rhs);
1529
1530 v_use_kalman = rhs.v_use_kalman;
1531 v_valid = rhs.v_valid;
1532 v_Mvalid = rhs.v_Mvalid;
1533 v_mother = rhs.v_mother;
1534 v_angdist = rhs.v_angdist;
1535 v_angle = rhs.v_angle;
1536 v_dist = rhs.v_dist;
1537 v_bk13 = rhs.v_bk13;
1538 v_chi2 = rhs.v_chi2;
1539
1540 kal_xv = rhs.kal_xv;
1541 kal_xvs = rhs.kal_xvs;
1542 v_CS = rhs.v_CS;
1543
1544 // possible if tracks & xmass contain SmartPointers to the objects
1545 // tracks = rhs.tracks;
1546 // xmass = rhs.xmass;
1547
1548 return *this;
1549 }
Track & operator=(const Track &rhs)
Definition: VtTrack.C:128

◆ operator==()

const bool Vertex::operator== ( const Vertex rhs) const
1555 {
1556 return RelationList::operator==(rhs);
1557 }
bool operator==(const RelationList &rhs) const
Definition: VtRelationList.hh:283

◆ pmaxfrac()

double Vertex::pmaxfrac ( ) const

$\max|p_i/p_j|$ max. momentum fraction

1570 {
1571 double maxfrac = 0.;
1572
1573 const RelationList::const_iterator last = end();
1574 for(RelationList::const_iterator tit = begin(); tit != last; ++tit) {
1575 double p1 = fabs(tit->track.p());
1576
1578 for(++it; it != last; ++it) {
1579 double p2 = fabs(it->track.p());
1580 double frac = max(p1/p2, p2/p1);
1581 if( frac > maxfrac ) maxfrac = frac;
1582 }
1583 }
1584
1585 return maxfrac;
1586 }
const T max(const T &rhs, const T &lhs)
Definition: VtUtil.hh:51

◆ print()

std::ostream & Vertex::print ( std::ostream &  os) const

called by operator<<()

875 {
876 os.setf(ios::right,ios::adjustfield);
877 os.setf(ios::fixed,ios::floatfield);
878 if(v_mother == true) {
879 os << " Mother Track: ";
880 Track::print(os);
881 os << endl;
882 }
883// if (1) return os;
884 os << " Vertex:"
885 << " vx: " << setw(6) << setprecision(3) << vx()
886 << " vy: " << setw(6) << setprecision(3) << vy()
887 << " vz: " << setw(7) << setprecision(3) << vz()
888// if (1) return os;
889 << " chi2: " << setw(6) << setprecision(2) << chi2()
890 << " prob: " << setw(6) << setprecision(2) << prob()
891 << " angle: " << setw(5) << setprecision(3) << angle()
892 << " dist: " << setw(6) << setprecision(4) << dist()
893 << " mass: " << setw(6) << setprecision(4) << mass(v_use_kalman)
894 << " no of tracks: " << ntracks()
895 << endl;
896
897 if(xmass.size() > 0) {
898 os << "Mass constraints: " << endl;
899 const MassC_cit end = xmass.end();
900 for(MassC_cit it = xmass.begin(); it != end; ++it) {
901 os << " " << **it << endl;
902 }
903 }
904
905#ifdef VtDEBUG
906 os << " Relations: ";
907
909#endif
910
911 os << "Vertex cov. matrix: " << CS();
912
913#ifdef VtDEBUG
914 if(v_covn != 0) {
915 cout << " bigcov: " << *v_covn << endl;
916 }
917#endif
918
919 return os;
920 }
void print(std::ostream &os) const
Definition: VtRelationList.C:131
std::ostream & print(std::ostream &os) const
called by cout
Definition: VtTrack.C:213
double angle() const
const MATRIX::VtSymMatrix & CS() const
$3\times3$ Vertex covariance matrix
double dist() const
available after call to rmsDistAngle()
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237

◆ prob()

float Vertex::prob ( ) const

upper tail $\chi^2$ probability

237{ return CERN_prob(chi2(), ndf()); }
unsigned short int ndf() const
degrees of freedom of vertex fit
Definition: VtVertex.C:238

◆ push_back()

void Vertex::push_back ( Track track)
271 {
272 createRelation(track, *this);
273 invalid();
274 }

◆ remove()

void Vertex::remove ( Relation r)
virtual

unbook relation

Reimplemented from VERTEX::RelationList.

290 {
292 invalid();
293 }
virtual void remove(Relation *const rel)
remove a relation
Definition: VtRelationList.C:88

◆ remove_last()

const bool Vertex::remove_last ( )

remove last track from vertex, do inverse Kalman filter

725 {
726 return VtRemoveTrack(*back());
727 }
const bool VtRemoveTrack(Relation &track)
remove track using inverse Kalman filter
Definition: VtVertex.C:1443

◆ remove_worst()

void Vertex::remove_worst ( )

remove track with biggest $\chi^2$ contribution, do inverse Kalman filter

732 {
733 double prchi2 = 0.;
734 double maxchi2 = 0.;
735 Relation* worst = 0;
736
737 // a sorted list would be better here
738 const iterator last = end();
739 for(iterator it=begin(); it!=last; ++it) {
740 const Kalman& k = it->kalman;
741 double dchi2 = k.chi2() - prchi2;
742 prchi2 = k.chi2();
743
744 if(dchi2 > maxchi2){
745 maxchi2 = dchi2;
746 worst = &(*it);
747 }
748 }
749
750 if(worst != 0) VtRemoveTrack(*worst);
751 // if(worst != 0) remove(worst);
752 return;
753 }

◆ rmsDistAngle()

double Vertex::rmsDistAngle ( void  ) const

calc rms dist and rms angle

1073 {
1074
1075 // and the rms distance to the vertex
1076 v_dist = 0.;
1077 double tsq, rsq, rt, t[3], r[3];
1078 double sumtx = 0., sumty = 0.;
1079 double sumtx2 = 0., sumty2 = 0.;
1080 const RelationList::const_iterator last = end();
1081 for(RelationList::const_iterator pos = begin(); pos != last; ++pos) {
1082 const Track& track = pos->track;
1083
1084 t[0] = track.tx(); r[0] = track.x() - kal_xvs[0];
1085 t[1] = track.ty(); r[1] = track.y() - kal_xvs[1];
1086 t[2] = 1; r[2] = track.z() - kal_xvs[2];
1087
1088 sumtx += t[0]; sumtx2 += sqr(t[0]);
1089 sumty += t[1]; sumty2 += sqr(t[1]);
1090
1091 tsq = sqr(t[0]) + sqr(t[1]) + sqr(t[2]);
1092 rsq = sqr(r[0]) + sqr(r[1]) + sqr(r[2]);
1093 rt = r[0]*t[0] + r[1]*t[1] + r[2]*t[2];
1094
1095 v_dist += rsq - sqr(rt)/tsq;
1096 }
1097
1098 unsigned int v_nrseg = size();
1099 v_angle = sqrt(sumtx2*v_nrseg - sqr(sumtx) + sumty2*v_nrseg -
1100 sqr(sumty))/static_cast<double>(v_nrseg);
1101
1102 v_dist /= static_cast<double>(v_nrseg-1);
1103 v_dist = sqrt(v_dist);
1104 v_angdist = true;
1105 return v_dist;
1106 }

◆ set_invalid()

void VERTEX::Vertex::set_invalid ( )

mark vertex as invalid

◆ track_chi2()

double Vertex::track_chi2 ( int  i)

get track $\chi^2$ contribution

783 {
784 double prchi2 = 0.;
785 double dchi2 = 0.;
786 // a sorted list would be better here
787 const iterator last = end();
788 int ntr = 0;
789 for(iterator it=begin(); it!=last; ++it) {
790 const Kalman& k = it->kalman;
791 dchi2 = k.chi2() - prchi2;
792 if (ntr == i) return dchi2;
793 prchi2 = k.chi2();
794 ntr++;
795 }
796
797 return dchi2;
798 }

◆ track_worst()

int Vertex::track_worst ( )

get track with biggest $\chi^2$ contribution

758 {
759 double prchi2 = 0.;
760 double maxchi2 = 0.;
761
762 // a sorted list would be better here
763 const iterator last = end();
764 int num = -1, ntr = 0;
765 for(iterator it=begin(); it!=last; ++it) {
766 const Kalman& k = it->kalman;
767 double dchi2 = k.chi2() - prchi2;
768 prchi2 = k.chi2();
769
770 if(dchi2 > maxchi2){
771 maxchi2 = dchi2;
772 num = ntr;
773 }
774 ntr++;
775 }
776
777 return num;
778 }

◆ use_kalman() [1/2]

bool VERTEX::Vertex::use_kalman ( ) const

◆ use_kalman() [2/2]

void VERTEX::Vertex::use_kalman ( const bool  use)

use refitted track parameters or not

◆ use_momentum()

void Vertex::use_momentum ( const bool  use)

set for all tracks whether momentum should be used or not

279 {
280 const RelationList::iterator last = end();
281 for(RelationList::iterator tit = begin(); tit != last; ++tit) {
282 tit->kalman.use_momentum(use);
283 }
284 return;
285 }

◆ valid()

bool VERTEX::Vertex::valid ( ) const

is vertex valid?

◆ VtEstimateVertex()

const bool Vertex::VtEstimateVertex ( )

weighted 2-D min. dist.

1241 {
1242 //return VtEstimateVertexMath(kal_xvs[0], kal_xvs[1], kal_xvs[2]);
1243 return VtEstimateVertexMathTA(kal_xvs[0], kal_xvs[1], kal_xvs[2]);
1244 }
const bool VtEstimateVertexMathTA(double &x, double &y, double &z)
estimate Vertex without changing Vertex object
Definition: VtVertex.C:1249

◆ VtEstimateVertexMath()

const bool Vertex::VtEstimateVertexMath ( double &  x,
double &  y,
double &  z 
)

estimate Vertex without changing Vertex object

1305 {
1306
1307 double tx_sum = 0.;
1308 double x_sum = 0.;
1309 double xw_sum = 0.;
1310 double xtx_sum = 0.;
1311 double tx2_sum = 0.;
1312 double ty_sum = 0.;
1313 double y_sum = 0.;
1314 double yw_sum = 0.;
1315 double yty_sum = 0.;
1316 double ty2_sum = 0.;
1317
1318 // fill cumulants
1319 const RelationList::iterator last = end();
1320 for(RelationList::iterator tit = begin(); tit != last; ++tit) {
1321 const Track& track = tit->track;
1322
1323 double x = track.x();
1324 double y = track.y();
1325 double tx = track.tx();
1326 double ty = track.ty();
1327 double xweight = 1./track.V().x();
1328 double yweight = 1./track.V().y();
1329 double xweight2 = xweight*xweight;
1330 double yweight2 = yweight*yweight;
1331
1332 tx_sum += tx * xweight;
1333 x_sum += x * xweight;
1334 xw_sum += xweight;
1335 xtx_sum += x * tx * xweight2;
1336 tx2_sum += tx * tx * xweight2;
1337
1338 ty_sum += ty * yweight;
1339 y_sum += y * yweight;
1340 yw_sum += yweight;
1341 yty_sum += y * ty * yweight2;
1342 ty2_sum += ty * ty * yweight2;
1343
1344 } // for track
1345
1346 double det = -tx2_sum - ty2_sum + tx_sum*tx_sum/xw_sum + ty_sum*ty_sum/yw_sum;
1347
1348//#ifdef VtDEBUG
1349 cout << " txsum: " << tx_sum << " xsum: " << x_sum << " xwsum: " << xw_sum
1350 << " xtxsum: " << xtx_sum << " tx2sum: " << tx2_sum << endl;
1351 cout << " tysum: " << ty_sum << " ysum: " << y_sum << " ywsum: " << yw_sum
1352 << " ytysum: " << yty_sum << " ty2sum: " << ty2_sum << endl;
1353 cout << " det: " << det << endl;
1354//#endif
1355
1356 if(det == 0.) {
1357//#ifdef VtDEBUG
1358 cout << "VtVertex::VtEstimateVertex error: determinant == 0.!" << endl;
1359//#endif
1360 return false;
1361 }
1362
1363// kal_xvs[2] = ( xtx_sum + yty_sum - tx_sum*x_sum/xw_sum - ty_sum*y_sum/yw_sum ) / det;
1364// kal_xvs[0] = ( x_sum + tx_sum * vz() ) / xw_sum;
1365// kal_xvs[1] = ( y_sum + ty_sum * vz() ) / yw_sum;
1366
1367 z = ( xtx_sum + yty_sum - tx_sum*x_sum/xw_sum - ty_sum*y_sum/yw_sum ) / det;
1368 x = ( x_sum + tx_sum * z ) / xw_sum;
1369 y = ( y_sum + ty_sum * z ) / yw_sum;
1370
1371 v_valid = true;
1372 return true;
1373 }

◆ VtEstimateVertexMathTA()

const bool Vertex::VtEstimateVertexMathTA ( double &  x,
double &  y,
double &  z 
)

estimate Vertex without changing Vertex object

1249 {
1250 // Tomoko Ariga version inserted by VT 1/09/2011
1251 // calc vertex point with given segments. just topological calculation
1252
1253 double Det,Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz,Dx,Dy,Dz;
1254 Ax=0.;Ay=0.;Az=0.;Bx=0.;By=0.;Bz=0.;Cx=0.;Cy=0.;Cz=0.;Dx=0.;Dy=0.;Dz=0.;
1255
1256 const RelationList::iterator last = end();
1257 for(RelationList::iterator tit = begin(); tit != last; ++tit) {
1258 const Track& track = tit->track;
1259
1260 double x = track.x();
1261 double y = track.y();
1262 double ax = track.tx();
1263 double ay = track.ty();
1264 double az = 1.0;
1265 double z = track.z();
1266 double a = ax*ax+ay*ay+az*az;
1267 double c = -ax*x-ay*y-az*z;
1268 double b = (ax*ax+ay*ay);
1269// double w = 1.0/a/a; // weight for small angle tracks.
1270 double w = 1.0; // no weight
1271
1272 Ax+=2.0*w/b*( a*(ay*ay+az*az) );
1273 Bx+=2.0*w/b*( -a*ax*ay );
1274 Cx+=2.0*w/b*( -a*ax*az );
1275 Dx+=2.0*w/b*( -(a*x+c*ax)*(ax*ax-a)-(a*y+c*ay)*ax*ay-(a*z+c*az)*az*ax );
1276
1277 Ay+=2.0*w/b*( -a*ay*ax );
1278 By+=2.0*w/b*( a*(az*az+ax*ax) );
1279 Cy+=2.0*w/b*( -a*ay*az );
1280 Dy+=2.0*w/b*( -(a*y+c*ay)*(ay*ay-a)-(a*z+c*az)*ay*az-(a*x+c*ax)*ax*ay );
1281
1282 Az+=2.0*w/b*( -a*az*ax );
1283 Bz+=2.0*w/b*( -a*az*ay );
1284 Cz+=2.0*w/b*( a*b );
1285 Dz+=2.0*w/b*( -(a*z+c*az)*(az*az-a)-(a*x+c*ax)*az*ax-(a*y+c*ay)*ay*az );
1286
1287 }
1288
1289 Det=fabs( Ax*(By*Cz-Cy*Bz)-Bx*(Ay*Cz-Cy*Az)+Cx*(Ay*Bz-By*Az) );
1290 if( Det < 0.00000001 ) {
1291 cout << "VtVertex::VtEstimateVertexMathTA error: determinant is too small! " << Det << endl;
1292 return false;
1293 }
1294 xx=( (By*Cz-Cy*Bz)*Dx-(Bx*Cz-Cx*Bz)*Dy+(Bx*Cy-Cx*By)*Dz)/Det;
1295 yy=(-(Ay*Cz-Cy*Az)*Dx+(Ax*Cz-Cx*Az)*Dy-(Ax*Cy-Cx*Ay)*Dz)/Det;
1296 zz=( (Ay*Bz-By*Az)*Dx-(Ax*Bz-Bx*Az)*Dy+(Ax*By-Bx*Ay)*Dz)/Det;
1297
1298 v_valid = true;
1299 return true;
1300 }
void a()
Definition: check_aligned.C:59
void w(int rid=2, int nviews=2)
Definition: test.C:27

◆ VtFilter()

const bool Vertex::VtFilter ( )
1378 {
1379
1380 // initialize by vertex position & cov. matrix
1381 // const VtVector* prkal_xv = &kal_xv0;
1382 const VtVector* prkal_xv = &kal_xvs;
1383 const VtSymMatrix* prCINV = &v_CINV;
1384 double prChi2 = 0.;
1385 v_bk13 = vz();
1386
1387 // cout << "bk13: " << v_bk13 << endl;
1388
1389 const RelationList::iterator last = end();
1390 for(RelationList::iterator tit = begin(); tit != last; ++tit) {
1391 Kalman& kalman = tit->kalman;
1392
1393 // cout << "----> FILTER TRACK " << track;
1394#ifdef VtDEBUG
1395 cout << endl;
1396#endif
1397
1398 // compute contributions of track k
1399 if(kalman.filter(v_bk13, *prCINV, *prkal_xv) == false) {
1400 return false; // forget this vertex
1401 }
1402
1403 kalman.filter_chi2(v_bk13, prChi2, *prCINV, *prkal_xv);
1404
1405 // cout << "Track-Kalman chi2: " << kalman.chi2() << endl;
1406
1407 // store pointers to previous (k-1) values
1408 prkal_xv = &kalman.xv();
1409 prCINV = &kalman.CINV();
1410 prChi2 = kalman.chi2();
1411 } // for tracks
1412
1413 return true;
1414 }

◆ VtFit()

const bool Vertex::VtFit ( )

Kalman filter + smoother.

1162 {
1163 if(VtFilter() == false) return false;
1164 else {
1165 VtSmoothX();
1166 VtSmoothQ();
1167 }
1168 return true;
1169 }
const bool VtFilter()
Definition: VtVertex.C:1378
void VtSmoothQ()
smooth momenta
Definition: VtVertex.C:1506
void VtSmoothX()
smooth vertex position
Definition: VtVertex.C:1474

◆ VtInverseFilter()

const bool Vertex::VtInverseFilter ( ) const
1419 {
1420
1421 // get last track (in Vt: x_n)
1422 const Kalman& trackn = back()->kalman;
1423
1424 const VtSymMatrix* prCINV = &v_CINV;
1425
1426 const RelationList::const_iterator last = end();
1427 for(RelationList::const_iterator tit = begin(); tit != last; ++tit) {
1428 Kalman& kalman = tit->kalman;
1429
1430 if(kalman.inverse_filter(v_bk13, trackn.CINV(), *prCINV,
1431 trackn.xv()) == false) {
1432 return false;
1433 }
1434 prCINV = &kalman.CINV();
1435 }
1436
1437 return true;
1438 }

◆ VtMass()

const bool Vertex::VtMass ( )

Kalman filter with mass constraints.

535 {
536 v_Mvalid = false;
537
538 // should be assured:
539 use_momentum(true);
540 if(valid() == false && findVertexVt() == false) return false;
541
542 // check kinematic boundaries
543 const MassC_cit xend = xmass.end();
544 for(MassC_cit it = xmass.begin(); it != xend; ++it) {
545 if((*it)->check_kinematic() == false)
546 return false;
547 }
548
549 // fill general state vectors (in Vt: alp(1,...), alpc(1,...))
550 VtVector alpha (bigdim());
551 VtVector alphac(bigdim());
552
553 // initialize general state vector alphac (in Vt: alpc)
554 alphac.place_at(xvs(),0);
555
556 unsigned int i=3;
557 const iterator last = end();
558 for(iterator it = begin(); it != last; ++it,i+=3) {
559 it->kalman.alpc_init();
560 alphac.place_at(it->kalman.alpc(),i);
561 }
562
563#ifdef VtDEBUG
564 cout << " alphac0: " << alphac << endl;
565#endif
566
567 double chi2old = -100.;
568 double dchi2 = 0.;
569 double mc_chi2 = 0.;
570 const unsigned int maxiter = 100 * nMassConstr();
571
572 // declare some matrices which are needed outside do-loop
573 VtSymMatrix gaVga(nMassConstr());
574 VtMatrix Vgam(bigdim(),nMassConstr());
575
576 // iteration
577 unsigned int iter = 0;
578 do {
579
580 if(iter > 0) {
581 // redo filter and smoother
582 kal_xvs.copy(alphac,0);
583 unsigned int i=3;
584 for(iterator it = begin(); it != last; ++it,i+=3) {
585 Kalman& kalm = it->kalman;
586 kalm.qvs_nc().copy(alphac,i);
587 kalm.alpc_init();
588 }
589 if((v_valid = VtFit()) == false)
590 return false;
591 }
592
593 // fill general state vector alpha (in Vt: alp)
594 alpha.place_at(xvs(),0);
595
596 i=3;
597 for(iterator it = begin(); it != last; ++it,i+=3) {
598 Kalman& kalm = it->kalman;
599
600 kalm.alp_init();
601 kalm.calc_ealpc(); // n in Vt (eq. 40)
602 alpha.place_at(kalm.alp(),i);
603 }
604
605#ifdef VtDEBUG
606 cout << " alpha: " << alpha << endl;
607#endif
608
609 // get general covariance matrix v_covn (in Vt: Valp)
610 const VtSymMatrix& Valp = bigcov();
611
612#ifdef VtDEBUG
613 cout << "Valp: " << Valp << endl;
614#endif
615
616 // build up matrix gam (in Vt: Gamma^T, eq. 34, 44, 45, 46)
617 VtMatrix gam(bigdim(),nMassConstr());
618
619 // vector \vect{g}(\vect{\alpha}^(0))
620 VtVector galp(nMassConstr());
621
622 unsigned int j=0;
623 for(MassC_cit mit = xmass.begin(); mit != xend; ++mit,++j) {
624 MassC* mC = *mit;
625 mC->calc_Sl();
626 galp[j] = mC->galp();
627
628 i=3;
629 for(iterator it = begin(); it != last; ++it,i+=3) {
630 Relation& r = *it;
631 if(find(r.massc.begin(),r.massc.end(),mC) != r.massc.end()) {
632 gam.place_at(mC->gam(r),i,j);
633 }
634 }
635 } // end of for(MassC_cit)
636
637#ifdef VtDEBUG
638 cout << " galp: " << galp << endl;
639 cout << " gam: " << gam << endl;
640#endif
641
642 // calc (Gamma * V_alpha * Gamma^T)^-1 (in Vt: eq. 36,37,39)
643 gaVga = Valp.product(gam);
644 if(gaVga.VtDsinv() == false)
645 return false;
646
647#ifdef VtDEBUG
648 cout << " gaVga^-1: " << gaVga << endl;
649#endif
650
651 // calc g(alpha) + Gamma * (alpha - alpha_c)
652 VtVector gnum = galp + gam.T() * (alpha - alphac);
653
654 // calc \vect{\mu} (in Vt: xmu, eq. 36)
655 VtVector xmu = gaVga * gnum;
656
657#ifdef VtDEBUG
658 cout << " xmu: " << xmu << endl;
659#endif
660
661 // calc V_alpha*Gamma^T
662 VtMatrix Vgam = Valp * gam;
663
664 // calc alpha_c (in Vt: eq. 37)
665 alphac = alpha - Vgam * xmu;
666
667#ifdef VtDEBUG
668 cout << " alphac: " << alphac << endl;
669#endif
670
671 // calc chi^2 (in Vt: chi2m, eq. 39)
672 // this is an incremental chi2!
673 // (chi2 due to mass constraint, to be added to
674 // chi2 of unconstraint vertex fit!)
675 mc_chi2 = gaVga.product(gnum);
676
677 double chi = mc_chi2 + chi2n();
678 dchi2 = fabs(chi - chi2old);
679 chi2old = chi;
680
681#ifdef VtDEBUG
682 cout << "chi2m: " << setprecision(7) << mc_chi2
683 << " chi: " << chi2n()
684 << " fabs(chi2m + chi2() - chi2old: " << dchi2
685 << endl;
686#endif
687
688 } while(++iter < maxiter && dchi2 > 0.00001);
689
690#ifdef VtDEBUG
691 cout << " iterations: " << iter << endl;
692#endif
693 if(iter >= maxiter) return false;
694
695 VtSymMatrix& cov = *v_covn;
696
697 // v_covn = Valp => v_covn = Valp - gaVga.product(Vgam.T())
698 // calc v_covn (in Vt: cov(alpha_c), eq. 38)
699 cov -= gaVga.product(Vgam.T());
700
701#ifdef VtDEBUG
702 cout << " v_covn: " << cov << endl;
703#endif
704
705 // get results
706 v_CS.copy(cov);
707 // add mass constraint chi2 term to vertex fit term
708 v_chi2 += mc_chi2;
709
710 kal_xvs.copy(alphac,0);
711 i=3;
712 for(iterator it = begin(); it != last; ++it,i+=3) {
713 it->kalman.qvs_nc().copy(alphac,i);
714 }
715
716 return v_Mvalid = true;
717 } // end of VtMass()
const VtMatrix T(void) const
return transpose
Definition: VtMatrix.C:349
void copy(const VtVector &rhs, const unsigned int offset)
to be used if vector dimensions differ
Definition: VtVector.C:290
unsigned int nMassConstr() const
number of mass constraints
const MATRIX::VtVector & xvs() const
vector of vertex-positions
void use_momentum(const bool use)
set for all tracks whether momentum should be used or not
Definition: VtVertex.C:279
double chi2n() const
$\chi^2$ after last filter step
Definition: VtVertex.C:858
bool valid() const
is vertex valid?
const bool findVertexVt()
Vt Kalman-filter.
Definition: VtVertex.C:1174

◆ VtRemoveTrack()

const bool Vertex::VtRemoveTrack ( Relation track)

remove track using inverse Kalman filter

1443 {
1444 if(ntracks() <= 2 || valid() == false) return false; // exclude weird cases
1445
1446 if(VtInverseFilter() == false) return false;
1447
1448 // get last track (in Vt: x_n)
1449 const Kalman& trackn = back()->kalman;
1450
1451 // compute chi2_n -> chi2_n - chi2_k,S (eq. 22)
1452 double dchi2 = trackn.chi2() - trackk.kalman.chi2s();
1453
1454 // new smoothed vertex position
1455 kal_xvs = trackk.kalman.xnk();
1456
1457 const RelationList::iterator last = end();
1458 for(RelationList::iterator tit = begin(); tit != last; ++tit) {
1459 // calculate qvs
1460 tit->kalman.calc_qvs(kal_xvs);
1461 }
1462
1463 remove(&trackk);
1464
1465 v_chi2 = back()->kalman.set_chi2(dchi2);
1466
1467 // refit the vertex
1468 return v_valid = VtFit();
1469 }
double set_chi2(const double chi2)
const bool VtInverseFilter() const
Definition: VtVertex.C:1419
virtual void remove(Relation *r)
unbook relation
Definition: VtVertex.C:290

◆ VtSmoothQ()

void Vertex::VtSmoothQ ( )

smooth momenta

1506 {
1507
1508#ifdef VtDEBUG
1509 cout << "---> VtSmoothQ called! <---" << endl;
1510#endif
1511
1512 const Kalman& trackn = back()->kalman;
1513 const RelationList::iterator last = end();
1514 for(RelationList::iterator tit = begin(); tit != last; ++tit) {
1515 tit->kalman.smooth(v_bk13, kal_xvs, trackn.C());
1516 }
1517
1518 return;
1519 }

◆ VtSmoothX()

void Vertex::VtSmoothX ( )

smooth vertex position

1474 {
1475 // get last track (in Vt: x_n)
1476 const Kalman& kaln = back()->kalman;
1477
1478#ifdef VtDEBUG
1479 cout << "--> VtSmooth called!" << endl;
1480#endif
1481
1482 // update vertex position saved in xvs!!
1483 kal_xvs = kaln.xv();
1484
1485#ifdef VtDEBUG
1486 cout << "kal_xvs: " << kal_xvs << endl;
1487 cout << "track->C(): " << kaln.C() << endl;
1488#endif
1489
1490 // save smoothed covariance matrix of vertex
1491 v_CS = kaln.C();
1492
1493 // save chi2
1494 v_chi2 = kaln.chi2();
1495
1496#ifdef VtDEBUG
1497 cout << "v_CS: " << v_CS << endl;
1498#endif
1499
1500 return;
1501 }

◆ vtx_cov_x()

float Vertex::vtx_cov_x ( ) const

$\sigma_x^2$ of vertex

254{ return v_CS(0,0); }

◆ vtx_cov_y()

float Vertex::vtx_cov_y ( ) const

$\sigma_y^2$ of vertex

255{ return v_CS(1,1); }

◆ vtx_cov_z()

float Vertex::vtx_cov_z ( ) const

$\sigma_z^2$ of vertex

256{ return v_CS(2,2); }

◆ vx()

float Vertex::vx ( ) const

$x$ of vertex

233{ return kal_xvs[0]; }

◆ vxerr()

double VERTEX::Vertex::vxerr ( ) const

$\sqrt{\sigma_{vx}^2}$ vertex $x$-error

◆ vy()

float Vertex::vy ( ) const

$y$ of vertex

234{ return kal_xvs[1]; }

◆ vyerr()

double VERTEX::Vertex::vyerr ( ) const

$\sqrt{\sigma_{vy}^2}$ vertex $y$-error

◆ vz()

float Vertex::vz ( ) const

$z$ of vertex

235{ return kal_xvs[2]; }

◆ vzerr()

double VERTEX::Vertex::vzerr ( ) const

$\sqrt{\sigma_{vz}^2}$ vertex $z$-error

◆ xv()

const MATRIX::VtVector & VERTEX::Vertex::xv ( ) const

◆ xvs()

const MATRIX::VtVector & VERTEX::Vertex::xvs ( ) const

vector of vertex-positions

Member Data Documentation

◆ kal_xv

MATRIX::VtVector VERTEX::Vertex::kal_xv
private

◆ kal_xvs

MATRIX::VtVector VERTEX::Vertex::kal_xvs
private

◆ tracks

Track_v VERTEX::Vertex::tracks
private

◆ v_angdist

bool VERTEX::Vertex::v_angdist
mutableprivate

◆ v_angle

double VERTEX::Vertex::v_angle
mutableprivate

◆ v_bk13

double VERTEX::Vertex::v_bk13
private

◆ v_chi2

double VERTEX::Vertex::v_chi2
private

◆ v_CINV

MATRIX::VtSymMatrix VERTEX::Vertex::v_CINV
private

◆ v_covn

MATRIX::VtSymMatrix* VERTEX::Vertex::v_covn
private

◆ v_CS

MATRIX::VtSymMatrix VERTEX::Vertex::v_CS
private

◆ v_dist

double VERTEX::Vertex::v_dist
mutableprivate

◆ v_mother

bool VERTEX::Vertex::v_mother
private

◆ v_Mvalid

bool VERTEX::Vertex::v_Mvalid
private

◆ v_use_kalman

bool VERTEX::Vertex::v_use_kalman
private

◆ v_valid

bool VERTEX::Vertex::v_valid
private

◆ xmass

MassC_v VERTEX::Vertex::xmass
private

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