FEDRA emulsion software from the OPERA Collaboration
EdbTrackP Class Reference

#include <EdbPattern.h>

Inheritance diagram for EdbTrackP:
Collaboration diagram for EdbTrackP:

Public Member Functions

void AddSegment (EdbSegP *s)
 
void AddSegmentF (EdbSegP *s)
 
void AddTrack (const EdbTrackP &tr)
 
void AddVTA (EdbVTA *vta)
 
int CheckAliasSegments ()
 
int CheckMaxGap ()
 
float CHI2 ()
 
float CHI2F ()
 
void Clear ()
 
void ClearF ()
 
void ClearVTA ()
 
void ClearVTA (EdbVTA *vta)
 
void Copy (const EdbTrackP &tr)
 
Float_t DE () const
 
Int_t Dir () const
 
 EdbTrackP (EdbSegP &seg)
 
 EdbTrackP (EdbSegP *seg, float m=0.12)
 
 EdbTrackP (EdbTrackP &track)
 
 EdbTrackP (int nseg=0)
 vertex track end is attached to More...
 
int EstimatePositionAt (Float_t z, EdbSegP &ss)
 
void FitTrack ()
 
int FitTrackKFS (bool zmax=false, float X0=5810., int design=0)
 
Double_t GetBTEfficiency ()
 
EdbSegPGetSegment (int i) const
 
EdbSegPGetSegmentF (int i) const
 
EdbSegPGetSegmentFFirst () const
 
EdbSegPGetSegmentFirst () const
 
EdbSegPGetSegmentFLast () const
 
EdbSegPGetSegmentLast () const
 
Int_t GetSegmentsAid (int &nseg) const
 
Int_t GetSegmentsFlag (int &nseg) const
 
Int_t GetSegmentsMCTrack (int &nseg) const
 
EdbSegPGetSegmentWithClosestZ (float z, float dz)
 
Float_t M () const
 
float MakePredictionTo (Float_t z, EdbSegP &ss)
 
int MakeSelector (EdbSegP &ss, bool followZ=true)
 
Int_t N () const
 
Int_t N0 () const
 
Int_t NF () const
 
Int_t Npl () const
 
Int_t PDG () const
 
Float_t PerrDown () const
 
Float_t PerrUp () const
 
void Print ()
 
void PrintNice ()
 
int RemoveAliasSegments ()
 
void RemoveSegment (EdbSegP *s)
 
void Set0 ()
 
void SetCounters ()
 
void SetDE (float de)
 
void SetM (float m)
 
void SetN0 ()
 
void SetN0 (int n0)
 
void SetNpl ()
 
void SetNpl (int npl)
 
void SetOwner ()
 
void SetPDG (int pdg)
 
void SetPerr (Float_t perrDown, Float_t perrUp)
 
void SetPerrDown (Float_t perrDown)
 
void SetPerrUp (Float_t perrUp)
 
int SetSegmentsP (float p)
 
int SetSegmentsTrack ()
 
int SetSegmentsTrack (int id)
 
void SubstituteSegment (EdbSegP *sold, EdbSegP *snew)
 
const EdbSegPTrackEnd () const
 
EdbSegPTrackExtremity (bool zpos, bool usesegpar=false) const
 
const EdbSegPTrackStart () const
 
EdbSegPTrackZmax (bool usesegpar=false) const
 
EdbSegPTrackZmin (bool usesegpar=false) const
 
void Transform (const EdbAffine2D &tr)
 
EdbVertexVertex (int zpos)
 
EdbVertexVertexE ()
 
EdbVertexVertexS ()
 
EdbVTAVTAE () const
 
EdbVTAVTAS () const
 
Float_t Wgrains () const
 
Float_t Wmean () const
 
Float_t Zend () const
 
Float_t Zmax () const
 
Float_t Zmin () const
 
Float_t Zstart () const
 
virtual ~EdbTrackP ()
 
- Public Member Functions inherited from EdbSegP
void addEMULDigit (TObject *a)
 
Int_t Aid (int i) const
 
bool CheckCOV () const
 
Float_t Chi2 () const
 
void Clear ()
 
Int_t Compare (const TObject *obj) const
 
void Copy (const EdbSegP &s)
 
TMatrixD & COV () const
 
Float_t DeltaR (EdbSegP *seg1) const
 
Float_t DeltaTheta (EdbSegP *seg1) const
 
Float_t DZ () const
 
Float_t DZem () const
 
 EdbSegP ()
 
 EdbSegP (const EdbSegP &s)
 
 EdbSegP (int id, float x, float y, float tx, float ty, float w=0, int flag=0)
 
TRefArray * EMULDigitArray () const
 
Int_t Flag () const
 
void ForceCOV (TMatrixD &cov)
 
Int_t ID () const
 
bool IsCompatible (EdbSegP &s, float nsigx, float nsigt) const
 
Bool_t IsEqual (const TObject *obj) const
 
bool IsInside (float xmin, float xmax, float ymin, float ymax) const
 
bool IsInside (float xmin, float xmax, float ymin, float ymax, float zmin, float zmax) const
 
Bool_t IsSortable () const
 
Int_t MCEvt () const
 
Int_t MCTrack () const
 
void MergeTo (EdbSegP &s)
 
Float_t P () const
 
Float_t Phi () const
 
Int_t PID () const
 
Int_t Plate () const
 
void Print (Option_t *opt="") const
 
void PrintNice () const
 
Float_t Prob () const
 
Float_t ProbLink (EdbSegP &s1, EdbSegP &s2)
 
void PropagateTo (float z)
 
void PropagateToCOV (float z)
 
void PropagateToDZ (float dz)
 
EdbID ScanID () const
 
void Set (int id, float x, float y, float tx, float ty, float w, int flag)
 
void Set0 ()
 
void SetAid (int a, int v, int side=0)
 
void SetChi2 (float chi2)
 
void SetCOV (double *array, int dim=5)
 
void SetCOV (TMatrixD &cov)
 
void SetDZ (float dz)
 
void SetDZem (float dz)
 
void SetErrorP (float sp2)
 
void SetErrors ()
 
void SetErrors (float sx2, float sy2, float sz2, float stx2, float sty2, float sp2=1.)
 
void SetErrors0 ()
 
void SetErrorsCOV (float sx2, float sy2, float sz2, float stx2, float sty2, float sp2=1.)
 
void SetFlag (int flag)
 
void SetID (int id)
 
void SetMC (int mEvt, int mTrack)
 
void SetP (float p)
 
void SetPID (int pid)
 
void SetPlate (int plateid)
 
void SetProb (float prob)
 
void SetProbability (float p)
 
void SetScanID (EdbID id)
 
void SetSide (int side=0)
 
void SetSZ (float sz)
 
void SetTrack (int trid)
 
void SetTX (Float_t tx)
 
void SetTY (Float_t ty)
 
void SetVid (int vid, int sid)
 
void SetVolume (float w)
 
void SetW (float w)
 
void SetX (Float_t x)
 
void SetY (Float_t y)
 
void SetZ (float z)
 
Int_t Side () const
 
Float_t SP () const
 
Float_t STX () const
 
Float_t STY () const
 
Float_t SX () const
 
Float_t SY () const
 
Float_t SZ () const
 
Float_t Theta () const
 
Int_t Track () const
 
Float_t TX () const
 
Float_t TY () const
 
Int_t Vid (int i) const
 
Float_t Volume () const
 
Float_t W () const
 
Float_t X () const
 
Float_t Y () const
 
Float_t Z () const
 
virtual ~EdbSegP ()
 
- Public Member Functions inherited from EdbTrack2D
virtual void Substruct (EdbTrack2D *t)
 
virtual void Test () const
 
virtual void Transform (const EdbAffine2D *a)
 
virtual ~EdbTrack2D ()
 
- Public Member Functions inherited from EdbPoint2D
virtual void SetX (float x)=0
 
virtual void SetY (float y)=0
 
virtual void Substruct (EdbPoint *p)
 
virtual void TestPoint2D () const
 
virtual ~EdbPoint2D ()
 
- Public Member Functions inherited from EdbPoint
virtual void Transform (const EdbAffine3D *a)
 
virtual ~EdbPoint ()
 
- Public Member Functions inherited from EdbAngle2D
virtual void SetTX (float x)=0
 
virtual void SetTY (float y)=0
 
virtual void Substruct (const EdbAngle2D *a)
 
virtual ~EdbAngle2D ()
 

Private Attributes

Float_t eDE
 
Float_t eM
 
Int_t eN0
 
Int_t eNpl
 
Int_t ePDG
 
Float_t ePerrDown
 
Float_t ePerrUp
 
TSortedList * eS
 
TSortedList * eSF
 
EdbVTAeVTAE
 vertex track start is attached to More...
 
EdbVTAeVTAS
 

Additional Inherited Members

- Static Public Member Functions inherited from EdbSegP
static Float_t Angle (const EdbSegP &s1, const EdbSegP &s2)
 
static Float_t Distance (const EdbSegP &s1, const EdbSegP &s2)
 
static void LinkMT (const EdbSegP *s1, const EdbSegP *s2, EdbSegP *s)
 
- Public Attributes inherited from EdbSegP
Float_t eTX
 
Float_t eTY
 
Float_t eX
 
Float_t eY
 
Float_t eZ
 
- Protected Attributes inherited from EdbSegP
TMatrixD * eCOV
 

Constructor & Destructor Documentation

◆ EdbTrackP() [1/4]

EdbTrackP::EdbTrackP ( int  nseg = 0)

vertex track end is attached to

430 {
431  Set0();
432  if(nseg>0) eS = new TSortedList();
433  if(nseg>0) { eSF = new TSortedList(); eSF->SetOwner(); }
434 }
TSortedList * eS
Definition: EdbPattern.h:122
TSortedList * eSF
Definition: EdbPattern.h:123
void Set0()
Definition: EdbPattern.cxx:475

◆ EdbTrackP() [2/4]

EdbTrackP::EdbTrackP ( EdbSegP seg)
437  : EdbSegP(seg)
438 {
439  //create empty track with segment parameters
440  eS=0;
441  eSF=0;
442  eM=0;
443  eDE=0;
444  ePDG=-999;
445  eVTAS = 0;
446  eVTAE = 0;
447  eNpl=0;
448  eN0=0;
449 }
EdbSegP()
Definition: EdbSegP.h:50
Int_t ePDG
Definition: EdbPattern.h:128
Int_t eNpl
Definition: EdbPattern.h:124
EdbVTA * eVTAE
vertex track start is attached to
Definition: EdbPattern.h:132
Float_t eM
Definition: EdbPattern.h:126
Int_t eN0
Definition: EdbPattern.h:125
Float_t eDE
Definition: EdbPattern.h:127
EdbVTA * eVTAS
Definition: EdbPattern.h:131

◆ EdbTrackP() [3/4]

EdbTrackP::EdbTrackP ( EdbSegP seg,
float  m = 0.12 
)
452  : EdbSegP( *seg )
453 {
454  eS=0;
455  eSF=0;
456  eM=0;
457  eDE=0;
458  ePDG=-999;
459  eVTAS = 0;
460  eVTAE = 0;
461  eNpl=0;
462  eN0=0;
463  AddSegment(seg);
464  SetM(m);
465 }
void AddSegment(EdbSegP *s)
Definition: EdbPattern.h:219
void SetM(float m)
Definition: EdbPattern.h:159

◆ EdbTrackP() [4/4]

EdbTrackP::EdbTrackP ( EdbTrackP track)
inline
139 { Set0(); Copy(track); }
void Copy(const EdbTrackP &tr)
Definition: EdbPattern.cxx:516
Definition: bitview.h:14

◆ ~EdbTrackP()

EdbTrackP::~EdbTrackP ( )
virtual
469 {
470  if(eS) { eS->Clear(); delete eS; eS=0; }
471  if(eSF) { eSF->Clear(); delete eSF; eSF=0; }
472 }

Member Function Documentation

◆ AddSegment()

void EdbTrackP::AddSegment ( EdbSegP s)
inline
220  {
221  if(!eS) eS = new TSortedList();
222  eS->Add(s);
223  }
EdbSegP * s
Definition: tlg2pattern.C:32

◆ AddSegmentF()

void EdbTrackP::AddSegmentF ( EdbSegP s)
inline
239  {
240  if(!eSF)
241  {
242  eSF = new TSortedList();
243  eSF->SetOwner();
244  }
245  eSF->Add(s);
246  }

◆ AddTrack()

void EdbTrackP::AddTrack ( const EdbTrackP tr)
712 {
713  int nseg=tr.N();
714  int nsegf=tr.NF();
715  for(int i=0; i<nseg; i++)
716  AddSegment(tr.GetSegment(i));
717  for(int i=0; i<nsegf; i++)
718  AddSegmentF(new EdbSegP(*(tr.GetSegmentF(i))));
719 }
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
void AddSegmentF(EdbSegP *s)
Definition: EdbPattern.h:238

◆ AddVTA()

void EdbTrackP::AddVTA ( EdbVTA vta)
494 {
495  if(vta) {
496  if(vta->Zpos()==0) eVTAE=vta;
497  else if(vta->Zpos()==1) eVTAS=vta;
498  }
499 }
Int_t Zpos() const
Definition: EdbVertex.h:46

◆ CheckAliasSegments()

int EdbTrackP::CheckAliasSegments ( )
550 {
551  int nalias=0;
552  for(int i=0; i<N(); i++)
553  if( GetSegment(i)->Track() != ID()) nalias++;
554  return nalias;
555 }
Int_t Track() const
Definition: EdbSegP.h:147
Int_t ID() const
Definition: EdbSegP.h:144
Int_t N() const
Definition: EdbPattern.h:182
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:200

◆ CheckMaxGap()

int EdbTrackP::CheckMaxGap ( )
574 {
575  int ngap=0;
576  if(N()<2) return 0;
577  EdbSegP *s1=0, *s2=0;
578  int gap = 0;
579  for(int i=0; i<N()-1; i++) {
580  s1 = GetSegment(i);
581  s2 = GetSegment(i+1);
582  gap = TMath::Abs(s2->PID()-s1->PID());
583  if( gap > ngap) ngap = gap;
584  }
585  return ngap;
586 }
Definition: EdbSegP.h:18
Int_t PID() const
Definition: EdbSegP.h:145
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31

◆ CHI2()

float EdbTrackP::CHI2 ( )
1193 {
1194  double dtx=0,dty=0,chi2=0;
1195  EdbSegP *seg=0;
1196  int nseg=N();
1197  for(int i=0; i<nseg; i++) {
1198  seg = GetSegment(i);
1199  dtx = seg->TX()-TX();
1200  dty = seg->TY()-TY();
1201  chi2 += TMath::Sqrt( dtx*dtx/seg->STX() +
1202  dty*dty/seg->STY() );
1203  }
1204  chi2 /= nseg;
1205  return chi2;
1206 }
Float_t STX() const
Definition: EdbSegP.h:161
Float_t TX() const
Definition: EdbSegP.h:172
Float_t TY() const
Definition: EdbSegP.h:173
Float_t STY() const
Definition: EdbSegP.h:162
Float_t chi2
Definition: testBGReduction_By_ANN.C:14

◆ CHI2F()

float EdbTrackP::CHI2F ( )
1210 {
1211  double dtx=0,dty=0,chi2=0;
1212  EdbSegP *s=0, *sf=0;
1213  int nseg=N();
1214  for(int i=0; i<nseg; i++) {
1215  s = GetSegment(i);
1216  sf = GetSegmentF(i);
1217  dtx = s->TX() - sf->TX();
1218  dty = s->TY() - sf->TY();
1219  chi2 += TMath::Sqrt( dtx*dtx/s->STX() +
1220  dty*dty/s->STY() );
1221  }
1222  chi2 /= nseg;
1223  return chi2;
1224 }
EdbSegP * GetSegmentF(int i) const
Definition: EdbPattern.h:201

◆ Clear()

void EdbTrackP::Clear ( )
inline
271 { if(eS) eS->Clear(); if(eSF) eSF->Clear(); }

◆ ClearF()

void EdbTrackP::ClearF ( )
inline
272 { if(eSF) eSF->Clear(); }

◆ ClearVTA() [1/2]

void EdbTrackP::ClearVTA ( )
503 {
504  eVTAE=0;
505  eVTAS=0;
506 }

◆ ClearVTA() [2/2]

void EdbTrackP::ClearVTA ( EdbVTA vta)
510 {
511  if(vta->Zpos()==0) eVTAE=0;
512  else if(vta->Zpos()==1) eVTAS=0;
513 }

◆ Copy()

void EdbTrackP::Copy ( const EdbTrackP tr)
517 {
518  // do the physical copy of segments
519  Clear();
520  ((EdbSegP*)(this))->Copy( *((EdbSegP*)(&tr)) );
521  SetM(tr.M());
522  SetPDG(tr.PDG());
523  SetNpl(tr.Npl());
524  SetN0(tr.N0());
525  SetDE(tr.DE());
526  AddVTA(tr.VTAS());
527  AddVTA(tr.VTAE());
528 
529  int nseg=tr.N();
530  for(int i=0; i<nseg; i++)
531  AddSegment(new EdbSegP(*tr.GetSegment(i)));
532  nseg=tr.NF();
533  for(int i=0; i<nseg; i++)
534  AddSegmentF(new EdbSegP(*tr.GetSegmentF(i)));
535  if (eS) eS->SetOwner();
536  if (eSF) eSF->SetOwner();
537 }
void AddVTA(EdbVTA *vta)
Definition: EdbPattern.cxx:493
void Clear()
Definition: EdbPattern.h:271
void SetNpl()
Definition: EdbPattern.h:174
void SetN0()
Definition: EdbPattern.h:167
void SetDE(float de)
Definition: EdbPattern.h:170
void SetPDG(int pdg)
Definition: EdbPattern.h:154

◆ DE()

Float_t EdbTrackP::DE ( ) const
inline
171 {return eDE;}

◆ Dir()

Int_t EdbTrackP::Dir ( ) const
inline
212 {return (DZ()<0) ? -1 : 1;}
Float_t DZ() const
Definition: EdbSegP.h:151

◆ EstimatePositionAt()

int EdbTrackP::EstimatePositionAt ( Float_t  z,
EdbSegP ss 
)

1094 {
1095  // use coordinates of 2 nearest to z points for track extrapolation or interpolation
1096  // TODO: dz=0: mean?
1097 
1098  float x1,y1,tx,ty,dz;
1099  if( N()<2 )
1100  {
1101  x1=X();
1102  y1=Y();
1103  tx=TX();
1104  ty=TY();
1105  dz=z-GetSegment(0)->Z();
1106  }
1107  else
1108  {
1109  EdbSegP *s1=0,*s2=0;
1110  float dz1,dz2; dz1=dz2=kMaxInt;
1111  for(int i=0; i<N(); i++)
1112  {
1113  EdbSegP *s = GetSegment(i);
1114  float dz = Abs(s->Z()-z);
1115  if( dz < dz1 ) { dz1 = dz; s1=s; }
1116  }
1117  for(int i=0; i<N(); i++)
1118  {
1119  EdbSegP *s = GetSegment(i);
1120  float dz = Abs(s->Z()-z);
1121  if( dz < dz2 && s != s1 ) { dz2 = dz; s2=s; }
1122  }
1123  float dz0 = s2->Z()-s1->Z();
1124  if(abs(dz0)<0.000000001) {printf("dz0==0\n"); return 0;}
1125  float dx0 = s2->X()-s1->X();
1126  float dy0 = s2->Y()-s1->Y();
1127  tx = dx0/dz0;
1128  ty = dy0/dz0;
1129  dz = z-s1->Z();
1130  x1 = s1->X();
1131  y1 = s1->Y();
1132  }
1133  ss.SetX( x1 + dz*tx );
1134  ss.SetY( y1 + dz*ty );
1135  ss.SetZ( z );
1136  ss.SetDZ( dz ); // keep dz distance
1137  ss.SetTX( tx );
1138  ss.SetTY( ty );
1139  return 1;
1140 }
brick dz
Definition: RecDispMC.C:107
Float_t X() const
Definition: EdbSegP.h:170
Float_t Z() const
Definition: EdbSegP.h:150
Float_t Y() const
Definition: EdbSegP.h:171
ss
Definition: energy.C:62

◆ FitTrack()

void EdbTrackP::FitTrack ( )
740 {
741  // track fit by averaging of segments parameters
742 
743  int nseg=N();
744  float x=0,y=0,z=0,tx=0,ty=0,w=0;
745  EdbSegP *seg=0;
746  for(int i=0; i<nseg; i++) {
747  seg = GetSegment(i);
748  x += seg->X();
749  y += seg->Y();
750  z += seg->Z();
751  tx += seg->TX();
752  ty += seg->TY();
753  w += seg->W();
754  }
755  x /= nseg;
756  y /= nseg;
757  z /= nseg;
758  tx /= nseg;
759  ty /= nseg;
760  Set(ID(),x,y,tx,ty,w,Flag());
761  SetZ(z);
762 }
void SetZ(float z)
Definition: EdbSegP.h:122
Float_t W() const
Definition: EdbSegP.h:148
Int_t Flag() const
Definition: EdbSegP.h:146
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:86
void w(int rid=2, int nviews=2)
Definition: test.C:27

◆ FitTrackKFS()

int EdbTrackP::FitTrackKFS ( bool  zmax = false,
float  X0 = 5810.,
int  design = 0 
)
766 {
767  // if (zmax==true) track parameters are calculated at segment with max Z
768  // if (zmax==false) track parameters are calculated at segment with min Z
769  // TODO: track parameters??
770  //
771  // Note: momentum for track must be defined with SetP() prior to call this routine!
772  // Note: momentum dispersion for track should be defined with SetErrorP()
773  // prior to call this routine - it is necessary for vertex fit
774  //
775  // on the output: Chi2: the full chi-square (not divided by NDF); NDF = 4
776  // Prob: is Chi2 probability (area of the tail of Chi2-distribution)
777  // If we accept events with Prob >= ProbMin then ProbMin is the
778  // probability to reject the good event
779 
780 
781  int nseg=N();
782  if(nseg<=0) return 0;
783  if(NF()) {
784  eSF->Delete();
785  }
786 
787  if(SP()<0.000001) SetErrorP(1.); // TODO: razobratsia s etimi impul'sami!
788  //printf("%d segments to fit\n",N());
789 
790  //TODO - eliminate constants!!!
791 
792  float dPb = 0., p = 0., m = 0.13957, e = 0.13957, de = 0., pa = 0., pn = 0.;
793  float e0 = e;
794  float eTPb = 1000./1300.;
795  float pcut = 0.050;
796  double teta0sq;
797  double dz, ptx, pty;
798  int step;
799  int istart, iend;
800 
801  VtVector *par[260], *parpred[260], *pars[260], *meas[260];
802  VtSqMatrix *pred[260];
803  VtSymMatrix *cov[260], *covpred[260], *covpredinv[260], *covs[260], *dmeas[260];
804 
805  int i=0;
806  if(nseg == 1) {
807  EdbSegP *s = GetSegment(0);
808  EdbSegP segf(*s);
809 
810  segf.Set(s->ID(),s->X(),s->Y(),s->TX(),s->TY(),1.,s->Flag());
811  segf.SetZ(s->Z());
812  segf.SetErrorP ( SP() );
813  segf.SetChi2(0.);
814  segf.SetProb(1.);
815  segf.SetP( P() );
816  segf.SetPID( s->PID() );
817  segf.SetDZ(s->DZ());
818 
819  AddSegmentF(new EdbSegP(segf));
820  return 0;
821  }
822 
823  if(nseg>259) return -1;
824 
825  EdbSegP *seg0=0;
826  EdbSegP *seg=0;
827 
828  if( GetSegment(N()-1)->Z() < GetSegment(0)->Z() )
829  {
830  if (zmax)
831  {
832  step=-1;
833  istart=nseg-1;
834  iend=0;
835  }
836  else
837  {
838  step=1;
839  istart=0;
840  iend=nseg-1;
841  }
842  }
843  else
844  {
845  if (!zmax)
846  {
847  step=-1;
848  istart=nseg-1;
849  iend=0;
850  }
851  else
852  {
853  step=1;
854  istart=0;
855  iend=nseg-1;
856  }
857 
858  }
859 
860  seg0 = GetSegment(istart);
861 
862  par[istart] = new VtVector( (double)(seg0->X()),
863  (double)(seg0->Y()),
864  (double)(seg0->TX()),
865  (double)(seg0->TY()) );
866  meas[istart] = new VtVector(*par[istart]);
867  pred[iend] = new VtSqMatrix(4);
868 // (*pred[istart]).clear();
869 // (*pred[istart])(0,0) = 1.;
870 // (*pred[istart])(1,1) = 1.;
871 // (*pred[istart])(2,2) = 1.;
872 // (*pred[istart])(3,3) = 1.;
873  cov[istart] = new VtSymMatrix(4); // covariance matrix for seg0
874  for(int k=0; k<4; k++)
875  for(int l=0; l<4; l++) (*cov[istart])(k,l) = (seg0->COV())(k,l);
876  dmeas[istart] = new VtSymMatrix(*cov[istart]); // covariance matrix for seg0
877 
878  Double_t chi2=0.;
879 
880  i = istart;
881  p = P();
882  m = M();
883  if (p < pcut) p = pcut;
884  e = TMath::Sqrt((double)p*(double)p + (double)m*(double)m);
885  e0 = e;
886  while( (i+=step) != iend+step ) {
887 
888  seg = GetSegment(i);
889 
890  VtSymMatrix dms(4); // multiple scattering matrix
891  dms.clear();
892 
893  dz = seg->Z()-seg0->Z();
894  ptx = (*par[i-step])(2); // previous tx
895  pty = (*par[i-step])(3); // previous ty
896  dPb = dz*TMath::Sqrt(1.+ptx*ptx+pty*pty); // thickness of the Pb+emulsion cell in microns
897  if ((design != 0) && (p > pcut))
898  {
899  de = EdbPhysics::DeAveragePb(p, m, TMath::Abs(eTPb*dPb));
900  if (de < 0.) de = 0.;
901  if (design < 0) de = -de;
902  if (dz >= 0.)
903  e = e - de;
904  else
905  e = e + de;
906  if (e < m) e = m;
907  pn = TMath::Sqrt((double)e*(double)e - (double)m*(double)m);
908  if (pn <= pcut) pn = pcut;
909  pa = 0.5*(p + pn);
910  p = pn;
911  }
912  else
913  {
914  pa = p;
915  }
916  teta0sq = EdbPhysics::ThetaMS2( pa, m, dPb, X0 );
917  dms(0,0) = teta0sq*dz*dz/3.;
918  dms(1,1) = dms(0,0);
919  dms(2,2) = teta0sq;
920  dms(3,3) = dms(2,2);
921 // dms(2,0) = teta0sq*TMath::Abs(dz)/2.;
922  dms(2,0) = teta0sq*dz/2.;
923  dms(3,1) = dms(2,0);
924  dms(0,2) = dms(2,0);
925  dms(1,3) = dms(2,0);
926 
927  pred[i-step] = new VtSqMatrix(4); //propagation matrix for track parameters (x,y,tx,ty)
928  pred[i-step]->clear();
929 
930  (*pred[i-step])(0,0) = 1.;
931  (*pred[i-step])(1,1) = 1.;
932  (*pred[i-step])(2,2) = 1.;
933  (*pred[i-step])(3,3) = 1.;
934  (*pred[i-step])(0,2) = dz;
935  (*pred[i-step])(1,3) = dz;
936 
937  parpred[i] = new VtVector(4); // prediction from seg0 to seg
938  *parpred[i] = (*pred[i-step])*(*par[i-step]);
939 
940  covpred[i] = new VtSymMatrix(4); // covariation matrix for prediction
941  *covpred[i] = (*pred[i-step])*((*cov[i-step])*((*pred[i-step]).T()))+dms;
942 
943  dmeas[i] = new VtSymMatrix(4); // original covariation matrix for seg
944  for(int k=0; k<4; k++)
945  for(int l=0; l<4; l++) (*dmeas[i])(k,l) = (seg->COV())(k,l);
946 
947  covpredinv[i] = new VtSymMatrix(4);
948  (*covpredinv[i]) = (*covpred[i]).dsinv();
949  VtSymMatrix dmeasinv(4);
950  dmeasinv = (*dmeas[i]).dsinv();
951  cov[i] = new VtSymMatrix(4);
952  (*cov[i]) = (*covpredinv[i]) + dmeasinv;
953  (*cov[i]) = (*cov[i]).dsinv();
954 
955  meas[i] = new VtVector( (double)(seg->X()),
956  (double)(seg->Y()),
957  (double)(seg->TX()),
958  (double)(seg->TY()) );
959 
960  par[i] = new VtVector(4);
961  (*par[i]) = (*cov[i])*((*covpredinv[i])*(*parpred[i]) + dmeasinv*(*meas[i])); // new parameters for seg
962 
963 // chi2 += ((*par[i])-(*parpred[i]))*((*covpredinv[i])*((*par[i])-(*parpred[i]))) +
964 // ((*par[i])-(*meas[i]))*(dmeasinv*((*par[i])-(*meas[i])));
965 
966  VtSymMatrix dresid(4);
967  dresid = (*dmeas[i]) - (*cov[i]);
968  dresid = dresid.dsinv();
969 
970  chi2 += ((*par[i])-(*meas[i]))*(dresid*((*par[i])-(*meas[i])));
971 
972  seg0 = seg;
973  }
974 
975  Set(ID(),(float)(*par[iend])(0),(float)(*par[iend])(1),
976  (float)(*par[iend])(2),(float)(*par[iend])(3),1.,Flag());
977  SetZ(GetSegment(iend)->Z());
978  SetPID(GetSegment(iend)->PID());
979  SetCOV( (*cov[iend]).array(), 4 );
980 
981  //SetChi2((float)chi2);
982  //SetProb( (float)TMath::Prob(chi2,nseg*4));
983 
984 // Smoothing
985 
986  double chi2p=0;
987 
988  pars[iend] = new VtVector(*par[iend]);
989  covs[iend] = new VtSymMatrix(*cov[iend]);
990  VtSymMatrix dresid(4);
991  dresid = (*dmeas[iend]) - (*covs[iend]);
992  dresid = dresid.dsinv();
993  chi2p = ((*pars[iend])-(*meas[iend]))*(dresid*((*pars[iend])-(*meas[iend])));
994 
995  EdbSegP segf;
996  segf.Set(ID(),(float)(*pars[iend])(0),(float)(*pars[iend])(1),
997  (float)(*pars[iend])(2),(float)(*pars[iend])(3),1.,Flag());
998  segf.SetZ(GetSegment(iend)->Z());
999  segf.SetCOV( (*covs[iend]).array(), 4 );
1000  segf.SetErrorP ( SP() );
1001  segf.SetChi2((float)chi2p);
1002  segf.SetProb( (float)TMath::Prob(chi2p,4));
1003  segf.SetW( (float)nseg );
1004  segf.SetP( P() );
1005  segf.SetPID( GetSegment(iend)->PID() );
1006  segf.SetDZ(seg->DZ());
1007 
1008  AddSegmentF(new EdbSegP(segf));
1009 
1010  i=iend;
1011  double DE=0.;
1013 
1014  while( (i-=step) != istart-step ) {
1015  VtSqMatrix BackTr(4);
1016  BackTr = (*cov[i])*(((*pred[i]).T())*(*covpredinv[i+step]));
1017  pars[i] = new VtVector(4);
1018  covs[i] = new VtSymMatrix(4);
1019  (*pars[i]) = (*par[i]) + BackTr*((*pars[i+step])-(*parpred[i+step]));
1020  (*covs[i]) = (*cov[i]) + BackTr*(((*covs[i+step])-(*covpred[i+step]))*BackTr.T());
1021  dresid = (*dmeas[i]) - (*covs[i]);
1022  dresid = dresid.dsinv();
1023  chi2p = ((*pars[i])-(*meas[i]))*(dresid*((*pars[i])-(*meas[i])));
1024 // chi2 += chi2p;
1025 
1026  segf.Set(ID(),(float)(*pars[i])(0),(float)(*pars[i])(1),
1027  (float)(*pars[i])(2),(float)(*pars[i])(3),1.,Flag());
1028  segf.SetZ(GetSegment(i)->Z());
1029  segf.SetCOV( (*covs[i]).array(), 4 );
1030  segf.SetErrorP ( SP() );
1031  segf.SetChi2((float)chi2p);
1032  segf.SetProb( (float)TMath::Prob(chi2p,4));
1033  segf.SetW( (float)nseg );
1034  segf.SetP( P() );
1035  segf.SetPID( GetSegment(i)->PID() );
1036  segf.SetDZ(seg->DZ());
1037  AddSegmentF(new EdbSegP(segf));
1038  dz = eTPb*TMath::Abs(GetSegment(i)->Z() - GetSegment(i+step)->Z());
1039  dPb = dz*TMath::Sqrt(1.+(*pars[i])(2)*(*pars[i])(2)+(*pars[i])(3)*(*pars[i])(3)); // thickness of the Pb+emulsion cell in microns
1040  DE += EdbPhysics::DeAveragePbFast(P(),M(),TMath::Abs(dPb));
1041  }
1042  SetChi2((float)chi2);
1043  SetProb((float)TMath::Prob(chi2,4*(nseg-1)));
1044  SetW( (float)nseg );
1045  SetDE( (float)DE );
1046 
1047 // DEBUG
1048 // printf(" e0 - e = %f, de = %f\n", e0-e, DE);
1049 
1050 // Delete matrixes and vectors
1051 
1052  delete par[istart];
1053  par[istart] = 0;
1054  delete cov[istart];
1055  cov[istart] = 0;
1056  delete meas[istart];
1057  meas[istart] = 0;
1058  delete dmeas[istart];
1059  dmeas[istart] = 0;
1060  delete pred[istart];
1061  pred[istart] = 0;
1062  delete pars[istart];
1063  pars[istart] = 0;
1064  delete covs[istart];
1065  covs[istart] = 0;
1066  i=istart;
1067  while( (i+=step) != iend+step ) {
1068  delete pred[i];
1069  pred[i] = 0;
1070  delete parpred[i];
1071  parpred[i] = 0;
1072  delete covpred[i];
1073  covpred[i] = 0;
1074  delete covpredinv[i];
1075  covpredinv[i] = 0;
1076  delete par[i];
1077  par[i] = 0;
1078  delete cov[i];
1079  cov[i] = 0;
1080  delete meas[i];
1081  meas[i] = 0;
1082  delete dmeas[i];
1083  dmeas[i] = 0;
1084  delete pars[i];
1085  pars[i] = 0;
1086  delete covs[i];
1087  covs[i] = 0;
1088  }
1089  return 0;
1090 }
T Prob(const T &rhs, int n)
Definition: Prob.hh:37
int design
Definition: RecDispMC.C:90
static double DeAveragePb(float p, float mass, float dx)
Definition: EdbPhys.cxx:131
static double DeAveragePbFast(float p, float mass, float dx)
Definition: EdbPhys.cxx:217
static double ThetaMS2(float p, float mass, float dx, float X0)
Definition: EdbPhys.cxx:50
static void DeAveragePbFastSet(float p, float mass)
Definition: EdbPhys.cxx:185
void SetPID(int pid)
Definition: EdbSegP.h:126
void SetProb(float prob)
Definition: EdbSegP.h:131
TMatrixD & COV() const
Definition: EdbSegP.h:120
Float_t P() const
Definition: EdbSegP.h:149
Float_t SP() const
Definition: EdbSegP.h:163
void SetW(float w)
Definition: EdbSegP.h:129
void SetCOV(TMatrixD &cov)
Definition: EdbSegP.h:98
void SetChi2(float chi2)
Definition: EdbSegP.h:132
void SetP(float p)
Definition: EdbSegP.h:130
void SetDZ(float dz)
Definition: EdbSegP.h:123
void SetErrorP(float sp2)
Definition: EdbSegP.h:93
Int_t NF() const
Definition: EdbPattern.h:183
Float_t M() const
Definition: EdbPattern.h:160
Float_t DE() const
Definition: EdbPattern.h:171
float X0
Definition: emthickness.cpp:69
p
Definition: testBGReduction_AllMethods.C:8

◆ GetBTEfficiency()

Double_t EdbTrackP::GetBTEfficiency ( )
1228 {
1229  // Returns Basetrack Scanning efficiency, estimated
1230  // by BT in the Tracks and the number of holes.
1231  // Formula: efficiency_per_BT = ( N()-2 ) / ( Npl()-2 )
1232  // This makes sense when having a track with
1233  // at least 3 plates crossing.
1234  Double_t nseg=(Double_t)N();
1235  Double_t npl=(Double_t)Npl();
1236 
1237  if (nseg==2 && npl==2) return 1;
1238  Double_t BTEfficiency=(nseg-2)/(npl-2);
1239 
1240  return BTEfficiency;
1241 }
Int_t Npl() const
Definition: EdbPattern.h:176

◆ GetSegment()

EdbSegP* EdbTrackP::GetSegment ( int  i) const
inline
200 {return (eS) ? (EdbSegP*)(eS->At(i)) : 0; }

◆ GetSegmentF()

EdbSegP* EdbTrackP::GetSegmentF ( int  i) const
inline
201 {return (eSF) ? (EdbSegP*)(eSF->At(i)) : 0;}

◆ GetSegmentFFirst()

EdbSegP* EdbTrackP::GetSegmentFFirst ( ) const
inline
197 {return (eSF) ? (EdbSegP*)(eSF->First()) : 0;}

◆ GetSegmentFirst()

EdbSegP* EdbTrackP::GetSegmentFirst ( ) const
inline
194 {return (eS) ? (EdbSegP*)(eS->First()) : 0;}

◆ GetSegmentFLast()

EdbSegP* EdbTrackP::GetSegmentFLast ( ) const
inline
198 {return (eSF) ? (EdbSegP*)(eSF->Last()) : 0;}

◆ GetSegmentLast()

EdbSegP* EdbTrackP::GetSegmentLast ( ) const
inline
195 {return (eS) ? (EdbSegP*)(eS->Last()) : 0;}

◆ GetSegmentsAid()

int EdbTrackP::GetSegmentsAid ( int &  nseg) const
668 {
669  int nseg = N();
670  if (nseg < 2) return -1;
671  if (nseg > 300) nseg = 300;
672  int count[300];
673  int aid[300], ai;
674  int i, f = 0;
675  for(i=0; i<nseg; i++)
676  {
677  count[i] = 0;
678  aid[i] = -1;
679  ai = GetSegment(i)->Aid(1);
680  f = ai + (GetSegment(i)->Aid(0))*1000;
681  if (f < 0) continue;
682  aid[i] = ai;
683  for (int j=0; j<nseg; j++)
684  {
685  if ( f == (GetSegment(j)->Aid(1) + (GetSegment(i)->Aid(0))*1000)) count[i]++;
686  }
687  }
688  int cmax = 0;
689  int aidmax = -1;
690  for(i=0; i<nseg; i++)
691  {
692  if (count[i] > cmax)
693  {
694  cmax = count[i];
695  aidmax = aid[i];
696  }
697  }
698  nsegf = cmax;
699  return aidmax;
700 }
FILE * f
Definition: RecDispMC.C:150
Int_t Aid(int i) const
Definition: EdbSegP.h:166

◆ GetSegmentsFlag()

int EdbTrackP::GetSegmentsFlag ( int &  nseg) const
635 {
636  printf(" EdbTrackP::GetSegmentsFlag: obsolete, to be deleted! now replaced by GetSegmentsMCTrack\n");
637 
638  int nseg = N();
639  if (nseg < 2) return -1;
640  if (nseg > 300) nseg = 300;
641  int count[300];
642  int i, f = 0;
643  for(i=0; i<nseg; i++)
644  {
645  count[i] = 0;
646  f = GetSegment(i)->Flag();
647  if (f < 0) continue;
648  for (int j=0; j<nseg; j++)
649  {
650  if ( f == GetSegment(j)->Flag()) count[i]++;
651  }
652  }
653  int cmax = 0;
654  int flagmax = -1;
655  for(i=0; i<nseg; i++)
656  {
657  if (count[i] > cmax)
658  {
659  cmax = count[i];
660  flagmax = GetSegment(i)->Flag();
661  }
662  }
663  nsegf = cmax;
664  return flagmax;
665 }

◆ GetSegmentsMCTrack()

int EdbTrackP::GetSegmentsMCTrack ( int &  nseg) const
589 {
590  // return: ID of the MC track contributed to this reconstructed track
591  // with the maximal number of segments
592  // nsegf - return number of segments originated from the selected MC track
593 
594  int nseg = N();
595  if (nseg < 2) return -1;
596  if (nseg > 300) nseg = 300;
597  int count[300];
598  int i, f = 0;
599  for(i=0; i<nseg; i++)
600  {
601  count[i] = 0;
602  f = GetSegment(i)->MCTrack();
603  if (f < 0) continue;
604  for (int j=0; j<nseg; j++)
605  {
606  if ( f == GetSegment(j)->MCTrack()) count[i]++;
607  }
608  }
609  int cmax = 0;
610  int mctrackmax = -1;
611  for(i=0; i<nseg; i++)
612  {
613  if (count[i] > cmax)
614  {
615  cmax = count[i];
616  mctrackmax = GetSegment(i)->MCTrack();
617  }
618  }
619  nsegf = cmax;
620  return mctrackmax;
621 }
Int_t MCTrack() const
Definition: EdbSegP.h:143

◆ GetSegmentWithClosestZ()

EdbSegP * EdbTrackP::GetSegmentWithClosestZ ( float  z,
float  dz 
)
723 {
724  float dzmin=dzMax;
725  EdbSegP *sbest=0;
726  int nseg=N();
727  for(int i=0; i<nseg; i++) {
728  EdbSegP *s = GetSegment(i);
729  float dz = Abs(s->eZ-z);
730  if( dz < dzmin ) {
731  dzmin=dz;
732  sbest=s;
733  }
734  }
735  return sbest;
736 }
Float_t eZ
Definition: EdbSegP.h:28

◆ M()

Float_t EdbTrackP::M ( ) const
inline
160 {return eM;}

◆ MakePredictionTo()

float EdbTrackP::MakePredictionTo ( Float_t  z,
EdbSegP ss 
)

1144 {
1145  float dz = Zmax()-Zmin();
1146  const EdbSegP *tr=0;
1147  if ( z <= Zmin() ) tr = TrackZmin(); //TODO: fitted - not fitted
1148  else if( z >= Zmax() ) tr = TrackZmax();
1149  else {
1150  for(int i=0; i<N(); i++) {
1151  EdbSegP *s = GetSegment(i);
1152  if( Abs(s->Z()-z) < dz ) { dz = Abs(s->Z()-z); tr=s; } // select nearest segment (TODO: correct interpolation)
1153  }
1154  }
1155  if(!tr) // no segments in this track: use track body
1156  tr = this;
1157  dz = Abs(tr->Z()-z);
1158  ss.Copy(*tr);
1159  ss.PropagateTo(z);
1160  return dz;
1161 }
EdbSegP * TrackZmin(bool usesegpar=false) const
Definition: EdbPattern.h:203
Float_t Zmin() const
Definition: EdbPattern.cxx:1298
Float_t Zmax() const
Definition: EdbPattern.cxx:1306
EdbSegP * TrackZmax(bool usesegpar=false) const
Definition: EdbPattern.h:204

◆ MakeSelector()

int EdbTrackP::MakeSelector ( EdbSegP ss,
bool  followZ = true 
)

1165 {
1166  if(N()<2) return 0;
1167  ss.SetCOV( GetSegment(0)->COV() ); // TODO ?
1168  const EdbSegP *tr;
1169  if (NF())
1170  {
1171  if( followZ ) tr = TrackZmax();
1172  else tr = TrackZmin();
1173  }
1174  else
1175  {
1176  if( followZ ) tr = GetSegmentLast();
1177  else tr = GetSegmentFirst();
1178  }
1179  ss.SetTX(tr->TX());
1180  ss.SetTY(tr->TY());
1181  ss.SetX(tr->X());
1182  ss.SetY(tr->Y());
1183  ss.SetZ(tr->Z());
1184  ss.SetPID(tr->PID());
1185 
1186  if( tr->PID() > GetSegment(0)->PID() ) return 1;
1187  if( tr->PID() > GetSegment(N()-1)->PID() ) return 1;
1188  return -1;
1189 }
EdbSegP * GetSegmentFirst() const
Definition: EdbPattern.h:194
EdbSegP * GetSegmentLast() const
Definition: EdbPattern.h:195

◆ N()

Int_t EdbTrackP::N ( ) const
inline
182 { return (eS) ? eS->GetSize() : 0; }

◆ N0()

Int_t EdbTrackP::N0 ( ) const
inline
168 {return eN0;}

◆ NF()

Int_t EdbTrackP::NF ( ) const
inline
183 { return (eSF)? eSF->GetSize() : 0; }

◆ Npl()

Int_t EdbTrackP::Npl ( ) const
inline
176 {return eNpl;}

◆ PDG()

Int_t EdbTrackP::PDG ( ) const
inline
155 {return ePDG;}

◆ PerrDown()

Float_t EdbTrackP::PerrDown ( ) const
inline
268 {return ePerrDown;}
Float_t ePerrDown
Definition: EdbPattern.h:130

◆ PerrUp()

Float_t EdbTrackP::PerrUp ( ) const
inline
267 {return ePerrUp;}
Float_t ePerrUp
Definition: EdbPattern.h:129

◆ Print()

void EdbTrackP::Print ( )
1246 {
1247  int nseg=0, nsegf=0;
1248  nseg = N();
1249  nsegf = NF();
1250 
1251  printf("EdbTrackP with %d segments and %d fitted segments\n", nseg, nsegf );
1252  printf("particle mass = %f\n", M() );
1253  ((EdbSegP*)this)->Print();
1254 
1255  if(nseg)
1256  for(int i=0; i<nseg; i++)
1257  ((EdbSegP*)(eS->At(i)))->Print();
1258 
1259 }

◆ PrintNice()

void EdbTrackP::PrintNice ( )
1263 {
1264  int nseg=0, nsegf=0;
1265  nseg = N();
1266  nsegf = NF();
1267 
1268  printf("EdbTrackP with %d segments and %d fitted segments. Estimated BT Scanning efficiency = %.02f \n", nseg, nsegf, GetBTEfficiency() );
1269  printf(" N PID ID X Y Z TX TY W P Flag MC Track Chi2 Prob Mass\n");
1270  printf(" %3d %8d %13.2f %13.2f %13.2f %7.4f %7.4f %5.1f %7.2f %7d %7d %7d %7.4f %7.4f %5.3f\n",
1271  PID(), ID(),X(),Y(),Z(), TX(), TY(), W(), P(), Flag(), MCEvt(), Track(), Chi2(), Prob(), M());
1272 
1273  EdbSegP *s=0;
1274  if(nseg)
1275  for(int i=0; i<nseg; i++) {
1276  s = GetSegment(i);
1277  printf("%3d %3d %8d %13.2f %13.2f %13.2f %7.4f %7.4f %5.1f %7.2f %7d %7d %7d %7.4f %7.4f\n",
1278  i, s->PID(), s->ID(),s->X(),s->Y(),s->Z(), s->TX(),s->TY(), s->W(), s->P(), s->Flag(), s->MCEvt(), s->Track(),s->Chi2(),s->Prob());
1279  }
1280 }
Float_t Prob() const
Definition: EdbSegP.h:153
Float_t Chi2() const
Definition: EdbSegP.h:154
Int_t MCEvt() const
Definition: EdbSegP.h:142
Double_t GetBTEfficiency()
Definition: EdbPattern.cxx:1227

◆ RemoveAliasSegments()

int EdbTrackP::RemoveAliasSegments ( )
559 {
560  int nalias=0;
561  EdbSegP *s=0;
562  for(int i=0; i<N(); i++) {
563  s = GetSegment(i);
564  if( s->Track() != ID()) {
565  nalias++;
566  RemoveSegment(s);
567  }
568  }
569  return nalias;
570 }
void RemoveSegment(EdbSegP *s)
Definition: EdbPattern.h:224

◆ RemoveSegment()

void EdbTrackP::RemoveSegment ( EdbSegP s)
inline
225  {
226  if(!eS) return;
227  eS->Remove(s);
228  s->SetTrack(-1);
229  SetCounters();
230  }
void SetTrack(int trid)
Definition: EdbSegP.h:128
void SetCounters()
Definition: EdbPattern.h:164

◆ Set0()

void EdbTrackP::Set0 ( )
476 {
477  ((EdbSegP*)this)->Set0();
478  eS=0;
479  eSF=0;
480  eM=0;
481  eDE=0;
482  ePDG=-999;
483  eVTAS = 0;
484  eVTAE = 0;
485  eNpl=0;
486  eN0=0;
487  ePerrUp=0;
488  ePerrDown=0;
489  return;
490 }

◆ SetCounters()

void EdbTrackP::SetCounters ( )
inline
164 { SetNpl(); SetN0(); }

◆ SetDE()

void EdbTrackP::SetDE ( float  de)
inline
170 { eDE=de; }

◆ SetM()

void EdbTrackP::SetM ( float  m)
inline
159 { eM=m; }

◆ SetN0() [1/2]

void EdbTrackP::SetN0 ( )
inline
167 { eN0 = eNpl-N(); }

◆ SetN0() [2/2]

void EdbTrackP::SetN0 ( int  n0)
inline
166 { eN0 = n0; }

◆ SetNpl() [1/2]

void EdbTrackP::SetNpl ( )
inline
175  { if(eS) eNpl = 1+TMath::Abs(GetSegment(0)->PID() - GetSegment(N()-1)->PID()); }

◆ SetNpl() [2/2]

void EdbTrackP::SetNpl ( int  npl)
inline
173 { eNpl=npl; }

◆ SetOwner()

void EdbTrackP::SetOwner ( )
inline
144 { if(eS) eS->SetOwner(true); }

◆ SetPDG()

void EdbTrackP::SetPDG ( int  pdg)
inline
154 { ePDG=pdg; }

◆ SetPerr()

void EdbTrackP::SetPerr ( Float_t  perrDown,
Float_t  perrUp 
)
1324 {
1325  ePerrUp=perrUp;
1326  ePerrDown=perrDown;
1327 }

◆ SetPerrDown()

void EdbTrackP::SetPerrDown ( Float_t  perrDown)
1319 {
1320  ePerrDown=perrDown;
1321 }

◆ SetPerrUp()

void EdbTrackP::SetPerrUp ( Float_t  perrUp)
1314 {
1315  ePerrUp=perrUp;
1316 }

◆ SetSegmentsP()

int EdbTrackP::SetSegmentsP ( float  p)
inline
251 {for(int i=0; i<N(); i++) GetSegment(i)->SetP(p); return N();}

◆ SetSegmentsTrack() [1/2]

int EdbTrackP::SetSegmentsTrack ( )
inline
253 {return SetSegmentsTrack(ID());}
int SetSegmentsTrack()
Definition: EdbPattern.h:253

◆ SetSegmentsTrack() [2/2]

int EdbTrackP::SetSegmentsTrack ( int  id)
inline
252 {for(int i=0; i<N(); i++) GetSegment(i)->SetTrack(id); return N();}

◆ SubstituteSegment()

void EdbTrackP::SubstituteSegment ( EdbSegP sold,
EdbSegP snew 
)
inline
232  {
233  if(!eS) return;
234  eS->Remove(sold);
235  eS->Add(snew);
236  sold->SetTrack(-1);
237  }

◆ TrackEnd()

const EdbSegP * EdbTrackP::TrackEnd ( ) const
1340 {
1341  if(!N()) return (EdbSegP*)this;
1342  if(Dir()>0) return GetSegmentLast();
1343  if(Dir()<0) return GetSegmentFirst();
1344  return (EdbSegP*)this;
1345 }
Int_t Dir() const
Definition: EdbPattern.h:212

◆ TrackExtremity()

EdbSegP* EdbTrackP::TrackExtremity ( bool  zpos,
bool  usesegpar = false 
) const
inline
207  { return zpos? TrackZmin(usesegpar) : TrackZmax(usesegpar); } // 0-end, 1-start (as in vertex class)

◆ TrackStart()

const EdbSegP * EdbTrackP::TrackStart ( ) const
1331 {
1332  if(!N()) return (EdbSegP*)this;
1333  if(Dir()<0) return GetSegmentLast();
1334  if(Dir()>0) return GetSegmentFirst();
1335  return (EdbSegP*)this;
1336 }

◆ TrackZmax()

EdbSegP* EdbTrackP::TrackZmax ( bool  usesegpar = false) const
inline
204 { if(usesegpar || (!eSF)) return GetSegmentLast(); else return GetSegmentFLast(); }
EdbSegP * GetSegmentFLast() const
Definition: EdbPattern.h:198

◆ TrackZmin()

EdbSegP* EdbTrackP::TrackZmin ( bool  usesegpar = false) const
inline
203 { if(usesegpar || (!eSF)) return GetSegmentFirst(); else return GetSegmentFFirst(); }
EdbSegP * GetSegmentFFirst() const
Definition: EdbPattern.h:197

◆ Transform()

void EdbTrackP::Transform ( const EdbAffine2D tr)
541 {
542  // apply transformation to all track elements
543  ((EdbSegP*)(this))->Transform(&aff);
544  for(int i=0; i<N(); i++) GetSegment(i)->Transform(&aff);
545  for(int i=0; i<NF(); i++) GetSegmentF(i)->Transform(&aff);
546 }
virtual void Transform(const EdbAffine2D *a)
void Transform(const EdbAffine2D &tr)
Definition: EdbPattern.cxx:540

◆ Vertex()

EdbVertex* EdbTrackP::Vertex ( int  zpos)
inline
152 {return zpos? VertexS(): VertexE();}
EdbVertex * VertexS()
Definition: EdbPattern.cxx:1284
EdbVertex * VertexE()
Definition: EdbPattern.cxx:1291

◆ VertexE()

EdbVertex * EdbTrackP::VertexE ( )
1292 {
1293  if(eVTAE) return eVTAE->GetVertex();
1294  return 0;
1295 }
EdbVertex * GetVertex() const
Definition: EdbVertex.h:51

◆ VertexS()

EdbVertex * EdbTrackP::VertexS ( )
1285 {
1286  if(eVTAS) return eVTAS->GetVertex();
1287  return 0;
1288 }

◆ VTAE()

EdbVTA* EdbTrackP::VTAE ( ) const
inline
149 {return eVTAE;}

◆ VTAS()

EdbVTA* EdbTrackP::VTAS ( ) const
inline
148 {return eVTAS;}

◆ Wgrains()

float EdbTrackP::Wgrains ( ) const
703 {
704  float w=0.;
705  int nseg=N();
706  for(int i=0; i<nseg; i++) w+=GetSegment(i)->W();
707  return w;
708 }

◆ Wmean()

Float_t EdbTrackP::Wmean ( ) const
625 {
626  int n = N();
627  double wtot=0;
628  for(int i=0; i<n; i++) wtot+=GetSegment(i)->W();
629  wtot/=n;
630  return (Float_t)wtot;
631 }

◆ Zend()

Float_t EdbTrackP::Zend ( ) const
inline
216 {return TrackEnd()->Z();}
const EdbSegP * TrackEnd() const
Definition: EdbPattern.cxx:1339

◆ Zmax()

Float_t EdbTrackP::Zmax ( ) const
1307 {
1308  Float_t zmax = Z();
1309  if (N() && GetSegmentLast()->Z() > zmax) zmax = GetSegmentLast()->Z();
1310  return zmax;
1311 }

◆ Zmin()

Float_t EdbTrackP::Zmin ( ) const
1299 {
1300  Float_t zmin = Z();
1301  if (N() && GetSegmentFirst()->Z() < zmin) zmin = GetSegmentFirst()->Z();
1302  return zmin;
1303 }

◆ Zstart()

Float_t EdbTrackP::Zstart ( ) const
inline
215 {return TrackStart()->Z();}
const EdbSegP * TrackStart() const
Definition: EdbPattern.cxx:1330

Member Data Documentation

◆ eDE

Float_t EdbTrackP::eDE
private

◆ eM

Float_t EdbTrackP::eM
private

◆ eN0

Int_t EdbTrackP::eN0
private

◆ eNpl

Int_t EdbTrackP::eNpl
private

◆ ePDG

Int_t EdbTrackP::ePDG
private

◆ ePerrDown

Float_t EdbTrackP::ePerrDown
private

◆ ePerrUp

Float_t EdbTrackP::ePerrUp
private

◆ eS

TSortedList* EdbTrackP::eS
private

◆ eSF

TSortedList* EdbTrackP::eSF
private

◆ eVTAE

EdbVTA* EdbTrackP::eVTAE
private

vertex track start is attached to

◆ eVTAS

EdbVTA* EdbTrackP::eVTAS
private

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