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
180  clearMassConstr();
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  }
TTree * t
Definition: check_shower.C:4
void push_back(Track &track)
Definition: VtVertex.C:271

◆ 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 
359  VtSymMatrix& covn = *v_covn;
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 MATRIX::VtSymMatrix & covn() const
$(3\cdot n+3)\times(3\cdot n+3)$ general covariance matrix
const unsigned int bigdim() const

◆ 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
398  SVector<double,3> psum;
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
201  clearMassConstr();
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
1180  VtEstimateVertex();
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
965  SVector<double,3> psum;
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
double dist() const
available after call to rmsDistAngle()
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237
const MATRIX::VtSymMatrix & CS() const
$3\times3$ Vertex covariance matrix

◆ 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
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
const MATRIX::VtVector & xvs() const
vector of vertex-positions
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: