FEDRA emulsion software from the OPERA Collaboration
EdbVertex Class Reference

#include <EdbVertex.h>

Inheritance diagram for EdbVertex:
Collaboration diagram for EdbVertex:

Public Member Functions

void AddVTA (EdbVTA *vta)
 
Int_t CheckDiscardedTracks ()
 
float CheckImp (const EdbTrackP *tr)
 
EdbVTACheckImp (const EdbTrackP *tr, float ImpMax, int zpos, float dist)
 
float CheckImpGeom (const EdbTrackP *tr)
 
Float_t Chi2Track (EdbTrackP *tr, int zpos, float X0=0.)
 
void Clear ()
 
void ClearNeighborhood ()
 
void ClearV ()
 
Int_t Compare (const TObject *o) const
 
Float_t DistSeg (EdbSegP *seg, float X0=0.)
 
Float_t DistTrack (EdbTrackP *tr, int zpos, float X0=0.)
 
void Edb2Vt (const EdbSegP &s, VERTEX::Track &t, float X0=0., float m=0.139)
 
void Edb2Vt (const EdbTrackP &tr, VERTEX::Track &t, float X0=0., float m=0.139)
 
 EdbVertex ()
 
Int_t EstimateVertexFlag ()
 
Bool_t EstimateVertexMath (float &xv, float &yv, float &zv, float &d)
 
Int_t Flag () const
 
EdbVertexGetConnectedVertex (int nv)
 
EdbVertexGetConnectedVertexForTrack (int it)
 
EdbVTAGetMaxImpVTA ()
 
EdbTrackPGetTrack (int i)
 
EdbTrackPGetTrackN (int i)
 
EdbSegPGetTrackV (int i, bool usesegpar=false)
 
EdbVTAGetVTa (int i)
 
EdbVTAGetVTn (int i)
 
ULong_t Hash () const
 
Int_t ID () const
 
Float_t Impact (int i)
 
Float_t ImpTrack (int i)
 
Bool_t IsEqual (const TObject *o) const
 
Bool_t IsSortable () const
 
Float_t MaxAperture ()
 
Float_t MaxImpact ()
 
Int_t MCEvt () const
 
EdbTrackPMeanTrack ()
 
Float_t MinDist ()
 
Int_t N () const
 
Int_t Nn () const
 
Int_t Nv ()
 
void Print ()
 
void PrintGeom ()
 
Float_t Quality ()
 
void RemoveVTA (EdbVTA *vta)
 
void ResetTracks ()
 
void SetFlag (int flag=0)
 
void SetID (int ID=0)
 
void SetMC (int mEvt=0)
 
void SetQuality (float q=0)
 
void SetV (VERTEX::Vertex *v)
 
void SetXYZ (float x, float y, float z)
 
Bool_t TrackInVertex (EdbTrackP *t)
 
VERTEX::VertexV () const
 
Float_t Volume ()
 
TList * VTa ()
 
TList * VTn ()
 
Float_t VX () const
 
Float_t VY () const
 
Float_t VZ () const
 
Float_t X () const
 
Float_t Y () const
 
Float_t Z () const
 
Int_t Zpos (int i)
 
virtual ~EdbVertex ()
 

Private Attributes

Int_t eFlag
 
Int_t eID
 
Int_t eMCEvt
 
Float_t eQuality
 
VERTEX::VertexeV
 
TList eVTa
 
TList eVTn
 
Float_t eX
 
Float_t eY
 
Float_t eZ
 

Constructor & Destructor Documentation

◆ EdbVertex()

EdbVertex::EdbVertex ( )
97 {
98  eID= 0;
99  eV = 0;
100  eX = 0.;
101  eY = 0.;
102  eZ = 0.;
103  eFlag = 0;
104  eQuality=0.;
105  eMCEvt=-999;
106 }
Float_t eY
Definition: EdbVertex.h:76
Int_t eID
Definition: EdbVertex.h:87
Float_t eX
Definition: EdbVertex.h:75
VERTEX::Vertex * eV
Definition: EdbVertex.h:90
Float_t eQuality
Definition: EdbVertex.h:88
Float_t eZ
Definition: EdbVertex.h:77
Int_t eFlag
Definition: EdbVertex.h:80
Int_t eMCEvt
Definition: EdbVertex.h:86

◆ ~EdbVertex()

EdbVertex::~EdbVertex ( )
virtual
110 {
111  Clear();
112 }
void Clear()
Definition: EdbVertex.cxx:125

Member Function Documentation

◆ AddVTA()

void EdbVertex::AddVTA ( EdbVTA vta)
378 {
379  if(vta->Flag()!=2) eVTn.Add(vta);
380  else eVTa.Add(vta);
381 }
Int_t Flag() const
Definition: EdbVertex.h:47
TList eVTa
Definition: EdbVertex.h:73
TList eVTn
Definition: EdbVertex.h:72

◆ CheckDiscardedTracks()

Int_t EdbVertex::CheckDiscardedTracks ( )
169 {
170  int ndsc = 0;
171  EdbVTA *vta = 0;
172  for (int i=0; i<N(); i++)
173  {
174  vta = GetVTa(i);
175  if (vta) {
176  if( GetTrack(i)->Vertex(vta->Zpos()) != this ) ndsc++;
177  }
178  else ndsc++;
179  }
180  return ndsc;
181 }
Definition: EdbVertex.h:25
Int_t Zpos() const
Definition: EdbVertex.h:46
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t N() const
Definition: EdbVertex.h:121
EdbVTA * GetVTa(int i)
Definition: EdbVertex.h:139
Definition: VtVertex.hh:88

◆ CheckImp() [1/2]

float EdbVertex::CheckImp ( const EdbTrackP tr)
464 {
465  Track *t = new Track();
466  Vertex *v = this->V();
467  Edb2Vt(*tr, *t);
468  return distance(*t,*v);
469 }
TTree * t
Definition: check_shower.C:4
VERTEX::Vertex * V() const
Definition: EdbVertex.h:154
void Edb2Vt(const EdbTrackP &tr, VERTEX::Track &t, float X0=0., float m=0.139)
Definition: EdbVertex.cxx:590
Definition: VtTrack.hh:64
@ Track
Definition: tlg2pattern.C:53
double distance(const Track &t, const Vertex &v)
spatial distance track - vertex
Definition: VtDistance.C:49

◆ CheckImp() [2/2]

EdbVTA * EdbVertex::CheckImp ( const EdbTrackP tr,
float  ImpMax,
int  zpos,
float  dist 
)
473 {
474  EdbVTA *vta = 0;
475  EdbTrackP *tr1 = (EdbTrackP *)tr;
476  if (!tr) return vta;
477  Track *t = new Track();
478  Vertex *v = this->V();
479  Edb2Vt(*tr, *t);
480  float imp = distance(*t,*v);
481  if (imp > ImpMax) { delete t; return vta;}
482  vta = new EdbVTA(tr1, this);
483  vta->SetZpos(zpos);
484  vta->SetFlag(0);
485  vta->SetImp(imp);
486  vta->SetDist(dist);
487  AddVTA(vta);
488  delete t;
489  return vta;
490 }
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
Definition: EdbPattern.h:118
void SetImp(float imp)
Definition: EdbVertex.h:56
void SetDist(float dist)
Definition: EdbVertex.h:57
void SetZpos(int zpos)
Definition: EdbVertex.h:54
void SetFlag(int flag)
Definition: EdbVertex.h:55
void AddVTA(EdbVTA *vta)
Definition: EdbVertex.cxx:377
float ImpMax
Definition: check_vertex.C:30

◆ CheckImpGeom()

float EdbVertex::CheckImpGeom ( const EdbTrackP tr)
453 {
454  float pv[3] = {VX(), VY(), VZ()};
455  float p1[3] = { tr->X(), tr->Y(), tr->Z() };
456  float p2[3] = { tr->X() + tr->TX()*1000., tr->Y() + tr->TY()*1000., tr->Z()+1000. };
457  bool inside=0;
458  float imp = EdbMath::DistancePointLine3(pv, p1,p2, &inside);
459  return imp;
460 }
static double DistancePointLine3(float Point[3], float LineStart[3], float LineEnd[3], bool inside)
Definition: EdbMath.cxx:61
Float_t VX() const
Definition: EdbVertex.h:133
Float_t VY() const
Definition: EdbVertex.h:134
Float_t VZ() const
Definition: EdbVertex.h:135

◆ Chi2Track()

float EdbVertex::Chi2Track ( EdbTrackP tr,
int  zpos,
float  X0 = 0. 
)
658 {
659  // Chi2-distance from track to already existing vertex
660 
661  if (!track) return 0.;
662  double distchi2 = -2.;
663  EdbSegP *seg = track->TrackExtremity( zpos); // usesegpar??
664  if (eV)
665  {
666  if (track->NF() <= 0) return -1.;
667  if (track->P() <= 0.) track->SetP(1.);
668  if (track->M() <= 0.) track->SetM(.1395);
669  if (track->SP() <= 0.) track->SetErrorP(1.);
670  Track *t=new Track();
671  Edb2Vt( *seg, *t, X0, track->M() );
672  distchi2 = -3.;
673  if (eV->valid())
674  {
675  t->rm(track->M());
676  distchi2 = eV->distance(*t);
677  }
678  SafeDelete(t);
679  }
680  return (float)distchi2;
681 }
Definition: EdbSegP.h:18
double distance(double x, double y, double z) const
$\chi^2$ distance to space point, $ndf = 3$
Definition: VtVertex.C:803
bool valid() const
is vertex valid?
Definition: bitview.h:14
float X0
Definition: emthickness.cpp:69

◆ Clear()

void EdbVertex::Clear ( )
126 {
127  eVTa.Delete("slow");
128  eVTn.Delete("slow");
129  ClearV();
130  eX = 0.;
131  eY = 0.;
132  eZ = 0.;
133  eID = 0;
134  eFlag = 0;
135  eQuality = 0.;
136  eMCEvt=-999;
137 }
void ClearV()
Definition: EdbVertex.cxx:115

◆ ClearNeighborhood()

void EdbVertex::ClearNeighborhood ( )
276 {
277  int nn = Nn();
278  if (nn>0) eVTn.Clear("nodelete");
279  for(int i=0; i<nn; i++) delete GetVTn(i);
280 }
EdbVTA * GetVTn(int i)
Definition: EdbVertex.h:140
Int_t Nn() const
Definition: EdbVertex.h:122

◆ ClearV()

void EdbVertex::ClearV ( )
116 {
117  //clear VtVertex object
118  if (eV) {
119  eV->clear(); // should delete also tracks ownered by vertex
120  SafeDelete(eV);
121  }
122 }
void clear()
clear all track-vertex relations, makes vertex invalid
Definition: VtVertex.C:196

◆ Compare()

int EdbVertex::Compare ( const TObject *  o) const
283 {
284  /*printf("Inside compare\n");*/
285  if ( eQuality > ((EdbVertex *)o)->eQuality ) return -1;
286  else if ( eQuality == ((EdbVertex *)o)->eQuality ) return 0;
287  else return 1;
288 }
Definition: EdbVertex.h:68
AcqOdyssey * o
Definition: hwinit.C:2

◆ DistSeg()

float EdbVertex::DistSeg ( EdbSegP seg,
float  X0 = 0. 
)
695 {
696  // distance from segment to already fitted vertex
697  if(seg)
698  if(eV)
699  if(eV->valid()) {
700  Track t;
701  Edb2Vt( *seg, t, X0, 0. );
702  return (float)distance(t, *eV);
703  }
704  return 100000.;
705 }

◆ DistTrack()

float EdbVertex::DistTrack ( EdbTrackP tr,
int  zpos,
float  X0 = 0. 
)
685 {
686  // distance from track to already fitted vertex
687  if (!track) return 0.;
688  EdbSegP *seg = track->TrackExtremity( zpos); // usesegpar??
689  if (!seg) return 0.;
690  return DistSeg(seg,X0);
691 }
Float_t DistSeg(EdbSegP *seg, float X0=0.)
Definition: EdbVertex.cxx:694

◆ Edb2Vt() [1/2]

void EdbVertex::Edb2Vt ( const EdbSegP s,
VERTEX::Track t,
float  X0 = 0.,
float  m = 0.139 
)
597 {
598  // Input: EdbSegP tr - track parameters near vertex
599  // X0 - rad length for ms estimation
600  // m - mass of the particle
601  // if X0 or m are negative - ignore multiple scattering
602  // Output: VERTEX:Track t - object propagated to the vertex position with the estimated errors matrix
603  // Used: eX,eY,eZ - the reference point of this vertex
604 
605  double dz = eZ - tr.Z();
606  double tx = (double)tr.TX();
607  double ty = (double)tr.TY();
608  double x = (double)tr.X() + tx*dz - eX;
609  double y = (double)tr.Y() + ty*dz - eY;
610  double z = 0.;
611  float p = tr.P();
612 
613  VtSymMatrix dms(4); // multiple scattering matrix
614  dms.clear();
615  if ( X0 > 0. && m > 0.)
616  {
617  double dPb = dz*TMath::Sqrt(1.+tx*tx+ty*ty); // thickness of the Pb+emulsion cell in microns
618  double theta0sq = EdbPhysics::ThetaMS2( p, m, dPb, X0 );
619  //printf("( p, m, dPb, X0 dz) = %f %f %f %f %f theta0 = %g\n", p, m, dPb, X0, dz, TMath::Sqrt(theta0sq));
620  dms(0,0) = theta0sq*dz*dz/3.;
621  dms(1,1) = dms(0,0);
622  dms(2,2) = theta0sq;
623  dms(3,3) = dms(2,2);
624  dms(2,0) = theta0sq*dz/2.;
625  dms(3,1) = dms(2,0);
626  dms(0,2) = dms(2,0);
627  dms(1,3) = dms(2,0);
628  }
629 
630  VtSqMatrix pred(4); //propagation matrix for track parameters (x,y,tx,ty)
631  pred.clear();
632  pred(0,0) = 1.;
633  pred(1,1) = 1.;
634  pred(2,2) = 1.;
635  pred(3,3) = 1.;
636  pred(0,2) = dz;
637  pred(1,3) = dz;
638 
639  VtSymMatrix cov(4); // covariance matrix for seg0
640  for(int k=0; k<4; k++)
641  for(int l=0; l<4; l++) cov(k,l) = (tr.COV())(k,l);
642 
643  VtSymMatrix covpred(4); // covariance matrix for prediction
644  covpred = pred*(cov*(pred.T()))+dms;
645 
646  CMatrix covp; // covariance matrix for the track
647  covp.clear();
648  for(int k=0; k<4; k++)
649  for(int l=0; l<4; l++) covp(k,l) = covpred(k,l);
650  covp(4,4) = (tr.COV())(4,4);
651 
652  t.set(x, y, z, tx, ty, (double)p, covp);
653  t.rm((double)m);
654 }
brick dz
Definition: RecDispMC.C:107
static double ThetaMS2(float p, float mass, float dx, float X0)
Definition: EdbPhys.cxx:50
Definition: CMatrix.hh:63
void clear(void)
set matrix elements to 0
Definition: VtMatrix.C:394
Definition: VtSqMatrix.hh:50
Definition: VtSymMatrix.hh:49
p
Definition: testBGReduction_AllMethods.C:8

◆ Edb2Vt() [2/2]

void EdbVertex::Edb2Vt ( const EdbTrackP tr,
VERTEX::Track t,
float  X0 = 0.,
float  m = 0.139 
)
591 {
592  Edb2Vt( *((EdbSegP*)&tr), t, X0, m);
593 }

◆ EstimateVertexFlag()

Int_t EdbVertex::EstimateVertexFlag ( )
185 {
186  int flag=-1;
187  int n0 = 0, n1=0, nn=0;
188  EdbVTA *vta = 0;
189  for (int i=0; i<N(); i++)
190  {
191  vta = GetVTa(i);
192  if ( vta->Zpos()==0 ) n0++;
193  else if( vta->Zpos()==1 ) n1++;
194  else nn++;
195  }
196 
197  if ( n0>0 && n1 >0) flag=1; // end & start
198  else if ( n0==0 && n1>0) flag=0; // start & start
199  else if ( n0>0 && n1==0) flag=2; // end & end
200  else flag= -1;
201  if(nn) flag= -1; // flag -1 should newer happened: if so - should be debugged
202 
203  SetFlag(flag);
204  Log(3,"EdbVertex::EstimateVertexFlag","%d with n0=%d n1=%d, nn=%d", flag, n0,n1,nn );
205  return flag;
206 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
void SetFlag(int flag=0)
Definition: EdbVertex.h:158

◆ EstimateVertexMath()

bool EdbVertex::EstimateVertexMath ( float &  xv,
float &  yv,
float &  zv,
float &  d 
)
494 {
495  int nt = N();
496  if(!nt) return false;
497 
498  double tx_sum = 0.;
499  double x_sum = 0.;
500  double xw_sum = 0.;
501  double xtx_sum = 0.;
502  double tx2_sum = 0.;
503  double ty_sum = 0.;
504  double y_sum = 0.;
505  double yw_sum = 0.;
506  double yty_sum = 0.;
507  double ty2_sum = 0.;
508  const EdbTrackP *tr = 0;
509  const EdbSegP *seg = 0;
510 
511  double x,y,tx,ty,xweight,yweight,xweight2,yweight2;
512 
513  // fill cumulants
514  for( int i = 0; i < nt; i++ ) {
515 
516  tr = GetTrack(i);
517 
518  seg = tr->TrackExtremity( Zpos(i)); // usesegpar??
519 
520  x = seg->X();
521  y = seg->Y();
522  tx = seg->TX();
523  ty = seg->TY();
524  xweight = 1./(seg->COV())(0,0);
525  yweight = 1./(seg->COV())(1,1);
526  xweight2 = xweight*xweight;
527  yweight2 = yweight*yweight;
528 
529  tx_sum += tx * xweight;
530  x_sum += x * xweight;
531  xw_sum += xweight;
532  xtx_sum += x * tx * xweight2;
533  tx2_sum += tx * tx * xweight2;
534 
535  ty_sum += ty * yweight;
536  y_sum += y * yweight;
537  yw_sum += yweight;
538  yty_sum += y * ty * yweight2;
539  ty2_sum += ty * ty * yweight2;
540 
541  } // for track
542 
543  double det = -tx2_sum - ty2_sum + tx_sum*tx_sum/xw_sum + ty_sum*ty_sum/yw_sum;
544 
545  if(det == 0.) {
546  return false;
547  }
548 
549  zv = ( xtx_sum + yty_sum - tx_sum*x_sum/xw_sum - ty_sum*y_sum/yw_sum ) / det;
550  xv = ( x_sum + tx_sum * zv ) / xw_sum;
551  yv = ( y_sum + ty_sum * zv ) / yw_sum;
552 
553 
554 // float zTolerance=300.;
555 
556 // for( int i = 0; i < nt; i++ ) {
557 // tr = GetTrack(i);
558 // if (Zpos(i)) seg = tr->TrackZmin();
559 // else seg = tr->TrackZmax();
560 // if( zv > (seg->Z() + zTolerance) ) return false;
561 // if( zv < (seg->Z() - zTolerance) ) return false;
562 // }
563 
564  double drx;
565  double dry;
566  double drz;
567  double drt;
568  double drms = 0.;
569 
570  for( int i = 0; i < nt; i++ ) {
571 
572  tr = GetTrack(i);
573 
574  seg = tr->TrackExtremity( Zpos(i)); // usesegpar??
575 
576  drx = seg->X() - xv;
577  dry = seg->Y() - yv;
578  drz = seg->Z() - zv;
579  drt = (drx*seg->TX() + dry*seg->TY() + drz);
580  drms += drx*drx + dry*dry + drz*drz -
581  (drt*drt)/(1.+seg->TX()*seg->TX()+seg->TY()*seg->TY());
582  }
583 
584  d = TMath::Sqrt(drms/nt);
585 
586  return true;
587 }
void d()
Definition: RecDispEX.C:381
TMatrixD & COV() const
Definition: EdbSegP.h:120
Float_t TX() const
Definition: EdbSegP.h:172
Float_t X() const
Definition: EdbSegP.h:170
Float_t Z() const
Definition: EdbSegP.h:150
Float_t Y() const
Definition: EdbSegP.h:171
Float_t TY() const
Definition: EdbSegP.h:173
Int_t Zpos(int i)
Definition: EdbVertex.h:127

◆ Flag()

Int_t EdbVertex::Flag ( ) const
inline
124 {return eFlag;}

◆ GetConnectedVertex()

EdbVertex * EdbVertex::GetConnectedVertex ( int  nv)
428 {
429  EdbTrackP *tr = 0;
430  EdbVertex *vc = 0;
431  int n = 0;
432  for (int i=0; i<N(); i++)
433  {
434  if ((tr = GetTrack(i)))
435  {
436  if ((Zpos(i) == 1) && (vc = tr->VertexE()))
437  {
438  if (n == nv) return vc;
439  n++;
440  }
441  else if ((Zpos(i) == 0) && (vc = tr->VertexS()))
442  {
443  if (n == nv) return vc;
444  n++;
445  }
446  }
447  }
448  return 0;
449 }

◆ GetConnectedVertexForTrack()

EdbVertex * EdbVertex::GetConnectedVertexForTrack ( int  it)
407 {
408  EdbTrackP *tr = 0;
409  EdbVertex *vc = 0;
410  if (it<N())
411  {
412  if ((tr = GetTrack(it)))
413  {
414  if ((Zpos(it) == 1) && (vc = tr->VertexE()))
415  {
416  return vc;
417  }
418  else if ((Zpos(it) == 0) && (vc = tr->VertexS()))
419  {
420  return vc;
421  }
422  }
423  }
424  return 0;
425 }

◆ GetMaxImpVTA()

EdbVTA * EdbVertex::GetMaxImpVTA ( )
141 {
142 // return vta with a biggest impact par
143  int ntr = N();
144  EdbVTA *maxvta=0;
145  if(ntr<1) maxvta=0;
146  else if(ntr==1) maxvta=GetVTa(0);
147  else {
148  float maximp=0;
149  for(int i=0; i<ntr; i++) {
150  EdbVTA *vta = GetVTa(i);
151  float imp = vta->Imp();
152  if( imp > maximp ) { maximp=imp; maxvta=vta; }
153  }
154  }
155  return maxvta;
156 }
Float_t Imp() const
Definition: EdbVertex.h:48

◆ GetTrack()

EdbTrackP* EdbVertex::GetTrack ( int  i)
inline
141 {return GetVTa(i)->GetTrack();}
EdbTrackP * GetTrack() const
Definition: EdbVertex.h:50

◆ GetTrackN()

EdbTrackP* EdbVertex::GetTrackN ( int  i)
inline
142 {return GetVTn(i)->GetTrack();}

◆ GetTrackV()

EdbSegP * EdbVertex::GetTrackV ( int  i,
bool  usesegpar = false 
)
160 {
161  EdbTrackP *t = GetTrack(i); if(!t) return 0;
162  EdbSegP *s = t->TrackExtremity(Zpos(i), usesegpar);
163  if( s->P()>=0 && (s->P() != t->P()) ) Log(1,"GetTrackV","Warning! segment momentum=%f is not equal to the track momentum=%f",s->P(), t->P() );
164  return s;
165 }
Float_t P() const
Definition: EdbSegP.h:149
EdbSegP * s
Definition: tlg2pattern.C:32

◆ GetVTa()

EdbVTA* EdbVertex::GetVTa ( int  i)
inline
139 {return (EdbVTA*)(eVTa.At(i));}

◆ GetVTn()

EdbVTA* EdbVertex::GetVTn ( int  i)
inline
140 {return (EdbVTA*)(eVTn.At(i));}

◆ Hash()

ULong_t EdbVertex::Hash ( ) const
inline
128 {return eID;}

◆ ID()

Int_t EdbVertex::ID ( ) const
inline
126 {return eID;}

◆ Impact()

Float_t EdbVertex::Impact ( int  i)
inline
149 { return GetVTa(i)? GetVTa(i)->Imp(): 1000000.; }

◆ ImpTrack()

Float_t EdbVertex::ImpTrack ( int  i)
inline
152 { return DistSeg( GetTrackV(i) ); }
EdbSegP * GetTrackV(int i, bool usesegpar=false)
Definition: EdbVertex.cxx:159

◆ IsEqual()

bool EdbVertex::IsEqual ( const TObject *  o) const
291 {
292  /*printf("Inside isequal\n");*/
293  if ( eID != ((EdbVertex *)o)->eID ) return false;
294  if ( eQuality != ((EdbVertex *)o)->eQuality ) return false;
295  else return true;
296 }

◆ IsSortable()

Bool_t EdbVertex::IsSortable ( ) const
inline
129 {return kTRUE;}

◆ MaxAperture()

float EdbVertex::MaxAperture ( )
253 {
254  float aper=0.;
255  int ntr = N();
256  if(ntr<2) return aper;
257  EdbTrackP *t1=0;
258  EdbTrackP *t2=0;
259 
260  float tx=0,ty=0,a=0;
261  for (int i=0; i<ntr-1; i++) {
262  t1 = GetTrack(i);
263  for (int j=i+1; j<ntr; j++) {
264  t2 = GetTrack(j);
265 
266  tx= t1->TX() - t2->TX();
267  ty= t1->TY() - t2->TY();
268  a = TMath::Sqrt( tx*tx+ty*ty );
269  if( a>aper) aper=a;
270  }
271  }
272  return aper;
273 }
void a()
Definition: check_aligned.C:59

◆ MaxImpact()

Float_t EdbVertex::MaxImpact ( )
inline
116 { EdbVTA *vta=GetMaxImpVTA(); return vta? vta->Imp(): 0; }
EdbVTA * GetMaxImpVTA()
Definition: EdbVertex.cxx:140

◆ MCEvt()

Int_t EdbVertex::MCEvt ( ) const
inline
125 {return eMCEvt;}

◆ MeanTrack()

EdbTrackP * EdbVertex::MeanTrack ( )
300 {
301  // calculate mean track trajectory waited with momentum
302  int ntr = N();
303  EdbTrackP *mean = new EdbTrackP();
304  float psum=0;
305  for(int i=0; i<ntr; i++) {
306  EdbTrackP *t = GetTrack(i);
307  mean->Set( 0 , mean->X() + t->X()*t->P()
308  , mean->Y() + t->Y()*t->P()
309  , mean->TX() + t->TX()*t->P()
310  , mean->TY() + t->TY()*t->P()
311  , mean->W() + t->W()*t->P()
312  , 0 );
313  mean->SetZ( mean->Z() + t->Z()*t->P() );
314  psum += t->P();
315  }
316  mean->Set( 0 , mean->X() / psum
317  , mean->Y() / psum
318  , mean->TX() / psum
319  , mean->TY() / psum
320  , mean->W() / psum
321  , 0 );
322  mean->SetZ( mean->Z() / psum );
323  mean->SetP(psum);
324  return mean;
325 }
void SetZ(float z)
Definition: EdbSegP.h:122
void SetP(float p)
Definition: EdbSegP.h:130
Float_t W() const
Definition: EdbSegP.h:148
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:86

◆ MinDist()

Float_t EdbVertex::MinDist ( )
240 {
241  float mind=999999999999.;
242  int ntr = N();
243  if(ntr<2) return mind;
244  for (int i=0; i<ntr; i++) {
245  float d = GetVTa(i)->Dist();
246  if(Abs(d)<mind) mind = Abs(d);
247  }
248  return mind;
249 }
Float_t Dist() const
Definition: EdbVertex.h:49

◆ N()

Int_t EdbVertex::N ( ) const
inline
121 {return eVTa.GetSize();}

◆ Nn()

Int_t EdbVertex::Nn ( ) const
inline
122 {return eVTn.GetSize();}

◆ Nv()

int EdbVertex::Nv ( )
390 {
391  // return the number of linked vertex: tracks attached by the other edge to the different vertex
392  EdbTrackP *tr = 0;
393  EdbVertex *vc = 0;
394  int nv = 0;
395  for (int i=0; i<N(); i++)
396  {
397  if ((tr = GetTrack(i))) {
398  if ((Zpos(i) == 1) && (vc = tr->VertexE())) nv++;
399  else if ((Zpos(i) == 0) && (vc = tr->VertexS())) nv++;
400  }
401  }
402  return nv;
403 }

◆ Print()

void EdbVertex::Print ( )
329 {
330  int ntr = N();
331  printf( "\n********************** Vertex %d with flag %d and %d tracks **************************\n", ID(), Flag(), ntr );
332  printf( "Fit quality : probability = %f Chi2 = %f\n", V()->prob(), V()->chi2() );
333  printf( "Vertex Position : %12.3f %12.3f %12.3f \n", VX(), VY(), VZ() );
334  printf( "Position Errors : %12.3f %12.3f %12.3f\n", V()->vxerr(), V()->vyerr(), V()->vzerr() );
335  //printf("---------------------------------------------------------\n");
336  printf( "Track ID Nseg Mass P Chi2/ndf Prob Chi2Contrib Impact Ztr\n");
337  for(int i=0; i<ntr; i++) {
338  EdbTrackP *tr = GetTrack(i);
339  float ztr = tr->TrackExtremity( Zpos(i) )->Z();
340  printf("%4d %4d %4d %7.4f %7.2f %5.2f %7.4f %7.3f %8.2f %10.2f\n",
341  i, tr->ID(), tr->N(), tr->M(), tr->P(),
342  tr->Chi2()/tr->N(), tr->Prob(), V()->track_chi2(i), Impact(i), ztr );
343  }
344  /*
345  printf("------- mean \"jet\" direction: ---------\n");
346  EdbTrackP *mean = MeanTrack();
347  printf(" X Y Z TX TY P\n");
348  printf("%12.1f %12.1f %12.1f %8.4f %8.4f %10.2f\n",
349  mean->X(), mean->Y(), mean->Z(), mean->TX(), mean->TY(), mean->P() );
350  SafeDelete(mean);
351  */
352  printf("****************************************************************************************\n");
353 }
Int_t ID() const
Definition: EdbVertex.h:126
Float_t Impact(int i)
Definition: EdbVertex.h:149
Int_t Flag() const
Definition: EdbVertex.h:124
Float_t chi2
Definition: testBGReduction_By_ANN.C:14

◆ PrintGeom()

void EdbVertex::PrintGeom ( )
356 {
357  int ntr = N();
358  printf( "\n********************** Vertex %d with flag %d and %d tracks ****************************\n",
359  ID(), Flag(), ntr );
360  printf( "Fit quality : probability = %f Chi2 = %f\n", V()->prob(), V()->chi2() );
361  printf( "Vertex Position : %12.2f %12.2f %12.2f \n", VX(), VY(), VZ() );
362  printf( "Track Nseg TX TY zmin zmax plmin plmax Impact\n");
363  for(int i=0; i<ntr; i++) {
364  EdbTrackP *tr = GetTrack(i);
365  int nseg = tr->N();
366  float zmin=tr->GetSegment(0)->Z();
367  float zmax=tr->GetSegment(nseg-1)->Z();
368  int plmin=tr->GetSegment(0)->ScanID().GetPlate();
369  int plmax=tr->GetSegment(nseg-1)->ScanID().GetPlate();
370  printf("%4d %4d %7.3f %7.3f %12.2f %12.2f %5d %5d %10.3f\n",
371  i, tr->N(), tr->TX(), tr->TY(), zmin, zmax, plmin, plmax, Impact(i) );
372  }
373  printf("********************************************************************************************\n");
374 }

◆ Quality()

Float_t EdbVertex::Quality ( )
inline
136 {return eQuality;}

◆ RemoveVTA()

void EdbVertex::RemoveVTA ( EdbVTA vta)
384 {
385  if(vta->Flag()!=2) eVTn.Remove(vta);
386  else eVTa.Remove(vta);
387 }

◆ ResetTracks()

void EdbVertex::ResetTracks ( )
210 {
211  // Assign the eVTAS or eVTAE of the tracks to the current vertex
212  EdbVTA *vta = 0;
213  for (int i=0; i<N(); i++)
214  {
215  vta = GetVTa(i);
216  if (vta) GetTrack(i)->AddVTA(vta);
217  }
218 }
void AddVTA(EdbVTA *vta)
Definition: EdbPattern.cxx:493

◆ SetFlag()

void EdbVertex::SetFlag ( int  flag = 0)
inline
158 {eFlag = flag;}

◆ SetID()

void EdbVertex::SetID ( int  ID = 0)
inline
156 {eID = ID;}

◆ SetMC()

void EdbVertex::SetMC ( int  mEvt = 0)
inline
159 {eMCEvt=mEvt;}

◆ SetQuality()

void EdbVertex::SetQuality ( float  q = 0)
inline
161 {eQuality = q;}
q
Definition: testBGReduction_AllMethods.C:55

◆ SetV()

void EdbVertex::SetV ( VERTEX::Vertex v)
inline
160 {eV=v;}

◆ SetXYZ()

void EdbVertex::SetXYZ ( float  x,
float  y,
float  z 
)
inline
157 {eX=x; eY=y; eZ=z;}

◆ TrackInVertex()

Bool_t EdbVertex::TrackInVertex ( EdbTrackP t)
222 {
223  int ntr = N();
224  if(!ntr) return 0;
225  for (int i=0; i<ntr; i++) if(t == GetTrack(i)) return 1;
226  return 0;
227 }

◆ V()

VERTEX::Vertex* EdbVertex::V ( ) const
inline
154 {return eV;}

◆ Volume()

Float_t EdbVertex::Volume ( )
inline
114 { if(V()) return V()->vxerr()*V()->vyerr()*V()->vzerr(); else return 0; }
double vyerr() const
$\sqrt{\sigma_{vy}^2}$ vertex $y$-error
double vzerr() const
$\sqrt{\sigma_{vz}^2}$ vertex $z$-error
double vxerr() const
$\sqrt{\sigma_{vx}^2}$ vertex $x$-error

◆ VTa()

TList* EdbVertex::VTa ( )
inline
137 {return &eVTa;}

◆ VTn()

TList* EdbVertex::VTn ( )
inline
138 {return &eVTn;}

◆ VX()

Float_t EdbVertex::VX ( ) const
inline
133 {return eV ? (eV->vx() + eX) : 1000000.;}
float vx() const
$x$ of vertex
Definition: VtVertex.C:233

◆ VY()

Float_t EdbVertex::VY ( ) const
inline
134 {return eV ? (eV->vy() + eY) : 1000000.;}
float vy() const
$y$ of vertex
Definition: VtVertex.C:234

◆ VZ()

Float_t EdbVertex::VZ ( ) const
inline
135 {return eV ? (eV->vz() + eZ) : 1000000.;}
float vz() const
$z$ of vertex
Definition: VtVertex.C:235

◆ X()

Float_t EdbVertex::X ( ) const
inline
130 {return eX;}

◆ Y()

Float_t EdbVertex::Y ( ) const
inline
131 {return eY;}

◆ Z()

Float_t EdbVertex::Z ( ) const
inline
132 {return eZ;}

◆ Zpos()

Int_t EdbVertex::Zpos ( int  i)
inline
127 {return GetVTa(i)->Zpos();}

Member Data Documentation

◆ eFlag

Int_t EdbVertex::eFlag
private

◆ eID

Int_t EdbVertex::eID
private

◆ eMCEvt

Int_t EdbVertex::eMCEvt
private

◆ eQuality

Float_t EdbVertex::eQuality
private

◆ eV

VERTEX::Vertex* EdbVertex::eV
private

◆ eVTa

TList EdbVertex::eVTa
private

◆ eVTn

TList EdbVertex::eVTn
private

◆ eX

Float_t EdbVertex::eX
private

◆ eY

Float_t EdbVertex::eY
private

◆ eZ

Float_t EdbVertex::eZ
private

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