An additional function for the default initialization of the fit.
authorbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 3 May 2007 07:14:59 +0000 (07:14 +0000)
committerbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 3 May 2007 07:14:59 +0000 (07:14 +0000)
STEER/AliTrackFitter.cxx
STEER/AliTrackFitter.h
STEER/AliTrackFitterKalman.cxx
STEER/AliTrackFitterKalman.h
STEER/AliTrackFitterRieman.h
STEER/AliTrackFitterStraight.h

index 788eb8f..7efcf62 100644 (file)
@@ -199,10 +199,17 @@ AliAlignObj::ELayerID layerRangeMax)
   // Fast counting the points
   Int_t countFit=0;
   Int_t countPnt=0;
+
+  Int_t fst=-1;
+  Int_t lst=-1;
   if (volIdsFit != 0x0) {
      for (Int_t i=0; i<npoints; i++) {
          if (FindVolId(volIds,   fPoints->GetVolumeID()[i])) countPnt++;
-         if (FindVolId(volIdsFit,fPoints->GetVolumeID()[i])) countFit++;
+         if (FindVolId(volIdsFit,fPoints->GetVolumeID()[i])) {
+            countFit++;
+            if (fst<0) fst=i;
+            lst=i;
+         }
      }
   } else {
      for (Int_t i=0; i<npoints; i++) {
@@ -212,6 +219,8 @@ AliAlignObj::ELayerID layerRangeMax)
         if (id > AliAlignObj::LayerToVolUID(layerRangeMax,
                  AliAlignObj::LayerSize(layerRangeMax))) continue;
          countFit++;
+         if (fst<0) fst=i;
+         lst=i;
      }
   }
   if (countPnt==0) return kFALSE;
@@ -221,7 +230,7 @@ AliAlignObj::ELayerID layerRangeMax)
 
   //************* Fit the selected track points
 
-  //Reset();
+  if (!Begin(fst,lst)) return kFALSE;
 
   AliTrackPoint p;
   if (volIdsFit != 0x0) {
index 0b0ef81..952f0a6 100644 (file)
@@ -31,8 +31,11 @@ class AliTrackFitter : public TObject {
   virtual Bool_t Fit(const TArrayI *volIds,const TArrayI *volIdsFit = 0x0,
                     AliAlignObj::ELayerID layerRangeMin = AliAlignObj::kFirstLayer,
                     AliAlignObj::ELayerID layerRangeMax = AliAlignObj::kLastLayer);
+
+  virtual Bool_t Begin(Int_t, Int_t) = 0;
   virtual Bool_t AddPoint(const AliTrackPoint *p) = 0;
   virtual Bool_t Update() = 0;
+
   virtual Bool_t GetPCA(const AliTrackPoint &pIn, AliTrackPoint &pOut) const = 0;
 
   Bool_t         FindVolId(const TArrayI *array, UShort_t volid) const;
index e20063a..eff5c04 100755 (executable)
@@ -42,14 +42,27 @@ const Double_t AliTrackFitterKalman::fgkMaxChi2=33.;
 AliTrackFitterKalman::
 AliTrackFitterKalman(AliTrackPointArray *array, Bool_t owner):
   AliTrackFitter(array,owner),
-  fMaxChi2(fgkMaxChi2)
+  fMaxChi2(fgkMaxChi2),
+  fSeed(kFALSE)
 {
   //
   // Constructor
   //
 }
 
-void AliTrackFitterKalman::
+Bool_t AliTrackFitterKalman::Begin(Int_t first, Int_t last) {
+  //
+  // Make a seed out of the track points with the indices "first" and "last". 
+  // This is the "default" seed.
+  //
+  if (fSeed) return kTRUE;
+  AliTrackPoint fp,lp;
+  fPoints->GetPoint(fp,first); fPoints->GetPoint(lp,last);
+  return MakeSeed(&fp,&lp);
+}
+
+
+Bool_t AliTrackFitterKalman::
 MakeSeed(const AliTrackPoint *p0, const AliTrackPoint *p1) {
   //
   // Make a seed out of the two track points 
@@ -76,6 +89,8 @@ MakeSeed(const AliTrackPoint *p0, const AliTrackPoint *p1) {
   };
 
   SetSeed(par,cov);
+
+  return kTRUE;
 }
 
 Bool_t AliTrackFitterKalman::AddPoint(const AliTrackPoint *p)
@@ -301,4 +316,5 @@ AliTrackFitterKalman::SetSeed(const Double_t par[5], const Double_t cov[15]) {
   cv(0,3)=cv(3,0); cv(1,3)=cv(3,1); cv(2,3)=cv(3,2);
   cv(0,4)=cv(4,0); cv(1,4)=cv(4,1); cv(2,4)=cv(4,2); cv(3,4)=cv(4,3);
 
+  fSeed=kTRUE;
 }
index d5c4192..ae39197 100755 (executable)
 
 class AliTrackFitterKalman : public AliTrackFitter {
 public:
-  AliTrackFitterKalman() : AliTrackFitter(), fMaxChi2(fgkMaxChi2) {}
+  AliTrackFitterKalman() : 
+     AliTrackFitter(), 
+     fMaxChi2(fgkMaxChi2),
+     fSeed(kFALSE) {}
 
   AliTrackFitterKalman(AliTrackPointArray *array, Bool_t owner = kTRUE);
   virtual ~AliTrackFitterKalman() {}
 
   void SetMaxChi2(Double_t chi2) {fMaxChi2=chi2;}
 
-  void SetSeed(const Double_t par[6], const Double_t cov[15]);
-  void MakeSeed(const AliTrackPoint *p, const AliTrackPoint *p2);
+  void   SetSeed(const Double_t par[6], const Double_t cov[15]);
+  Bool_t MakeSeed(const AliTrackPoint *p, const AliTrackPoint *p2);
 
   Bool_t GetPCA(const AliTrackPoint &p, AliTrackPoint &p2) const;
 
+  Bool_t Begin(Int_t first, Int_t last);
   Bool_t AddPoint(const AliTrackPoint *p);
+  Bool_t Update() {fSeed=kFALSE; return kTRUE;}
 
 private:
   AliTrackFitterKalman(const AliTrackFitterKalman &kalman);
@@ -38,13 +43,14 @@ private:
   Bool_t Propagate(const AliTrackPoint *p);
   Double_t GetPredictedChi2(const AliTrackPoint *p) const;
   Bool_t Update(const AliTrackPoint *p,Double_t chi2);
-  Bool_t Update() {return kTRUE;}
+
 
   static const Double_t fgkMaxChi2;  // Default maximal allowed chi2 
 
   Double_t fMaxChi2;                 // A point is added if chi2 < fMaxChi2 
+  Bool_t   fSeed;                    // True, if the fitter is already "seeded" 
 
-  ClassDef(AliTrackFitterKalman,1)   // Kalman-Filter fit to a straight line
+  ClassDef(AliTrackFitterKalman,2)   // Kalman-Filter fit to a straight line
 
 };
 
index 898f269..d3bbc94 100644 (file)
@@ -59,6 +59,7 @@ class AliTrackFitterRieman : public AliTrackFitter{
   Double_t      fCorrY[4];  // correction polynom coef
   Double_t      fCorrZ[4];  // correction polynom coef
  private:
+  Bool_t Begin(Int_t, Int_t) {Reset(); return kTRUE;}
   Bool_t AddPoint(const AliTrackPoint *) {return kTRUE;}
   TTreeSRedirector *fDebugStream;   //!debug streamer
   ClassDef(AliTrackFitterRieman,2)  // Fast fit of helices on ITS RecPoints
index 0f3bcf6..574ab6e 100644 (file)
@@ -38,6 +38,7 @@ class AliTrackFitterStraight : public AliTrackFitter{
   Bool_t        fConv;      // indicates convergation
 
  private:
+  Bool_t Begin(Int_t, Int_t) {Reset(); return kTRUE;}
   Bool_t AddPoint(const AliTrackPoint *) {return kTRUE;}
 
   ClassDef(AliTrackFitterStraight,1)  // Fast fit of straight tracks