Possibility to sort AliTrackPointArray
authorbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 25 Jan 2008 09:34:25 +0000 (09:34 +0000)
committerbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 25 Jan 2008 09:34:25 +0000 (09:34 +0000)
STEER/AliTrackFitterKalman.cxx
STEER/AliTrackPointArray.cxx
STEER/AliTrackPointArray.h

index 6285409..c9b2d58 100755 (executable)
@@ -56,6 +56,7 @@ Bool_t AliTrackFitterKalman::Begin(Int_t first, Int_t last) {
   // This is the "default" seed.
   //
   if (fSeed) return kTRUE;
+  fPoints->Sort();
   AliTrackPoint fp,lp;
   fPoints->GetPoint(fp,first); fPoints->GetPoint(lp,last);
   return MakeSeed(&fp,&lp);
index 72f73ce..3f7d7b6 100644 (file)
@@ -33,6 +33,7 @@ ClassImp(AliTrackPointArray)
 //______________________________________________________________________________
 AliTrackPointArray::AliTrackPointArray() :
   TObject(),
+  fSorted(kFALSE),
   fNPoints(0),
   fX(0),
   fY(0),
@@ -46,6 +47,7 @@ AliTrackPointArray::AliTrackPointArray() :
 //______________________________________________________________________________
 AliTrackPointArray::AliTrackPointArray(Int_t npoints):
   TObject(),
+  fSorted(kFALSE),
   fNPoints(npoints),
   fX(new Float_t[npoints]),
   fY(new Float_t[npoints]),
@@ -61,6 +63,7 @@ AliTrackPointArray::AliTrackPointArray(Int_t npoints):
 //______________________________________________________________________________
 AliTrackPointArray::AliTrackPointArray(const AliTrackPointArray &array):
   TObject(array),
+  fSorted(array.fSorted),
   fNPoints(array.fNPoints),
   fX(new Float_t[fNPoints]),
   fY(new Float_t[fNPoints]),
@@ -86,6 +89,7 @@ AliTrackPointArray &AliTrackPointArray::operator =(const AliTrackPointArray& arr
   if(this==&array) return *this;
   ((TObject *)this)->operator=(array);
 
+  fSorted = array.fSorted;
   fNPoints = array.fNPoints;
   fSize = array.fSize;
   delete [] fX;
@@ -159,6 +163,29 @@ Bool_t AliTrackPointArray::HasVolumeID(UShort_t volid) const
   return check;
 }
 
+//______________________________________________________________________________
+void AliTrackPointArray::Sort(Bool_t down)
+{
+  // Sort the array by the values of Y-coordinate of the track points.
+  // The order is given by "down".
+  // Optimized more for maintenance rather than for speed.
+  if (fSorted) return;
+
+  Int_t *index=new Int_t[fNPoints];
+  AliTrackPointArray a(*this);
+  TMath::Sort(fNPoints,a.GetY(),index,down);
+  AliTrackPoint p;
+  for (Int_t i = 0; i < fNPoints; i++) {
+    a.GetPoint(p,index[i]);
+    AddPoint(i,&p);
+  }
+
+  delete[] index;
+  fSorted=kTRUE;
+}
+
 ClassImp(AliTrackPoint)
 
 //______________________________________________________________________________
@@ -492,3 +519,4 @@ void AliTrackPoint::SetAlignCovMatrix(const TMatrixDSym alignparmtrx){
   SetXYZ(fX,fY,fZ,newcov);
 
 }
+
index 7688144..1ae9144 100644 (file)
@@ -94,7 +94,10 @@ class AliTrackPointArray : public TObject {
 
   Bool_t    HasVolumeID(UShort_t volid) const;
 
+  void Sort(Bool_t down=kTRUE);
+
  private:
+  Bool_t fSorted;        // Sorted flag
 
   Int_t     fNPoints;    // Number of space points
   Float_t   *fX;         //[fNPoints] Array with space point X coordinates
@@ -104,7 +107,7 @@ class AliTrackPointArray : public TObject {
   Float_t   *fCov;       //[fSize] Array with space point coordinates cov matrix
   UShort_t  *fVolumeID;  //[fNPoints] Array of space point volume IDs
 
-  ClassDef(AliTrackPointArray,1)
+  ClassDef(AliTrackPointArray,2)
 };
 
 #endif