]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITStrackerMI.h
EffC++ warnings corrected.
[u/mrichter/AliRoot.git] / ITS / AliITStrackerMI.h
index 8039ebc3add808ccf876c4a161d41505c215e114..4fcaa07cfb75e65e5954bbe958d9dadd7cd50fc1 100644 (file)
@@ -3,40 +3,34 @@
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
+/* $Id$ */
+
 //-------------------------------------------------------------------------
 //                          ITS tracker
 //     reads AliITSclusterMI clusters and creates AliITStrackMI tracks
 //           Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch
 //-------------------------------------------------------------------------
 
-#include <TObjArray.h>
-
-#include "AliTracker.h"
-#include "AliITStrackMI.h"
-#include "AliITSclusterV2.h"
-#include "AliV0vertex.h"
-
-class AliESD;
-class AliITSgeom;
 class TTree;
+class TTreeSRedirector;
+class AliESD;
 class AliHelix;
-class AliV0vertex;
-class AliESDV0MI;
-
-
+class AliITSgeom;
 
+#include <TObjArray.h>
+#include "AliITSRecPoint.h"
+#include "AliITStrackMI.h"
+#include "AliTracker.h"
 
 //-------------------------------------------------------------------------
 class AliITStrackerMI : public AliTracker {
 public:
   AliITStrackerMI():AliTracker(){}
-  virtual ~AliITStrackerMI() {
-    delete[] fCoeficients;
-  }
-
   AliITStrackerMI(const AliITSgeom *geom);
+  ~AliITStrackerMI();
   AliCluster *GetCluster(Int_t index) const;
-  AliITSclusterV2 *GetClusterLayer(Int_t layn, Int_t ncl) const
+  virtual Bool_t GetTrackPoint(Int_t index, AliTrackPoint& p) const;
+  AliITSRecPoint *GetClusterLayer(Int_t layn, Int_t ncl) const
                         {return fgLayers[layn].GetCluster(ncl);}
   Int_t GetNumberOfClustersLayer(Int_t layn) const 
                         {return fgLayers[layn].GetNumberOfClusters();}
@@ -45,23 +39,27 @@ public:
   Int_t Clusters2Tracks(AliESD *event);
   Int_t PropagateBack(AliESD *event);
   Int_t RefitInward(AliESD *event);
-  Bool_t RefitAt(Double_t x, AliITStrackMI *seed, const AliITStrackMI *t);
+  Bool_t RefitAt(Double_t x, AliITStrackMI *seed, 
+                const AliITStrackMI *t, Bool_t extra=kFALSE);
+  Bool_t RefitAt(Double_t x, AliITStrackMI *seed, const Int_t *clindex);
   void SetupFirstPass(Int_t *flags, Double_t *cuts=0);
   void SetupSecondPass(Int_t *flags, Double_t *cuts=0);
 
   void SetLastLayerToTrackTo(Int_t l=0) {fLastLayerToTrackTo=l;} 
   void SetLayersNotToSkip(Int_t *l);
   void UseClusters(const AliKalmanTrack *t, Int_t from=0) const;
-  void GetNTeor(Int_t layer, const AliITSclusterV2* cl, Float_t theta, Float_t phi, Float_t &ny, Float_t &nz);
-  Int_t  GetError(Int_t layer, const AliITSclusterV2*cl, Float_t theta, Float_t phi, Float_t expQ, Float_t &erry, Float_t &errz);
-  Double_t GetPredictedChi2MI(AliITStrackMI* track, const AliITSclusterV2 *cluster,Int_t layer);
-  Int_t UpdateMI(AliITStrackMI* track, const AliITSclusterV2* cl,Double_t chi2,Int_t layer) const;
+  void GetNTeor(Int_t layer, const AliITSRecPoint* cl, Float_t theta, Float_t phi, Float_t &ny, Float_t &nz);
+  Int_t  GetError(Int_t layer, const AliITSRecPoint*cl, Float_t theta, Float_t phi, Float_t expQ, Float_t &erry, Float_t &errz);
+
+  void  GetDCASigma(AliITStrackMI* track, Float_t & sigmarfi, Float_t &sigmaz);
+  Double_t GetPredictedChi2MI(AliITStrackMI* track, const AliITSRecPoint *cluster,Int_t layer);
+  Int_t UpdateMI(AliITStrackMI* track, const AliITSRecPoint* cl,Double_t chi2,Int_t layer) const;
   class AliITSdetector { 
   public:
     AliITSdetector(){}
     AliITSdetector(Double_t r,Double_t phi) {fR=r; fPhi=phi; fSinPhi = TMath::Sin(phi); fCosPhi = TMath::Cos(phi);
     fYmin=10000;fYmax=-1000; fZmin=10000;fZmax=-1000;}
-    inline void GetGlobalXYZ( const AliITSclusterV2 *cl, Double_t xyz[3]) const;
+    inline void GetGlobalXYZ( const AliITSRecPoint *cl, Double_t xyz[3]) const;
     Double_t GetR()   const {return fR;}
     Double_t GetPhi() const {return fPhi;}
     Double_t GetYmin() const {return fYmin;}
@@ -89,18 +87,18 @@ public:
     AliITSlayer();
     AliITSlayer(Double_t r, Double_t p, Double_t z, Int_t nl, Int_t nd);
    ~AliITSlayer();
-    Int_t InsertCluster(AliITSclusterV2 *c);
+    Int_t InsertCluster(AliITSRecPoint *c);
     void  SortClusters();
     void ResetClusters();
     void ResetWeights();
     void SelectClusters(Double_t zmi,Double_t zma,Double_t ymi,Double_t yma);
-    const AliITSclusterV2 *GetNextCluster(Int_t &ci);
+    const AliITSRecPoint *GetNextCluster(Int_t &ci);
     void ResetRoad();
     Double_t GetRoad() const {return fRoad;}
     Double_t GetR() const {return fR;}
     Int_t FindClusterIndex(Float_t z) const;
-    AliITSclusterV2 *GetCluster(Int_t i) const {return i<fN? fClusters[i]:0;} 
-    Float_t         *GetWeight(Int_t i)   {return i<fN ?&fClusterWeight[i]:0;}
+    AliITSRecPoint *GetCluster(Int_t i) const {return i<fN? fClusters[i]:0;} 
+    Float_t         *GetWeight(Int_t i)  {return i<fN ?&fClusterWeight[i]:0;}
     AliITSdetector &GetDetector(Int_t n) const { return fDetectors[n]; }
     Int_t FindDetectorIndex(Double_t phi, Double_t z) const;
     Double_t GetThickness(Double_t y, Double_t z, Double_t &x0) const;
@@ -111,9 +109,10 @@ public:
     Int_t GetSkip() const {return fSkip;}
     void  SetSkip(Int_t skip){fSkip=skip;}
     void IncAccepted(){fAccepted++;}
-    Int_t GetAccepted() const {return fAccepted;}
+    Int_t GetAccepted() const {return fAccepted;}    
   protected:
-    AliITSlayer(const AliITSlayer& layer){;}
+    AliITSlayer(const AliITSlayer& /*layer*/);
+    AliITSlayer & operator=(const AliITSlayer& /*layer*/);
     Double_t fR;                // mean radius of this layer
     Double_t fPhiOffset;        // offset of the first detector in Phi
     Int_t fNladders;            // number of ladders
@@ -121,13 +120,13 @@ public:
     Int_t fNdetectors;          // detectors/ladder
     AliITSdetector *fDetectors; // array of detectors
     Int_t fN;                   // number of clusters
-    AliITSclusterV2 *fClusters[kMaxClusterPerLayer]; // pointers to clusters
+    AliITSRecPoint *fClusters[kMaxClusterPerLayer]; // pointers to clusters
     Int_t        fClusterIndex[kMaxClusterPerLayer]; // pointers to clusters
     Float_t fY[kMaxClusterPerLayer];                // y position of the clusters      
     Float_t fZ[kMaxClusterPerLayer];                // z position of the clusters      
     Float_t fYB[2];                                       // ymin and ymax
     //
-    AliITSclusterV2 *fClusters5[6][kMaxClusterPerLayer5]; // pointers to clusters -     slice in y
+    AliITSRecPoint *fClusters5[6][kMaxClusterPerLayer5]; // pointers to clusters -     slice in y
     Int_t        fClusterIndex5[6][kMaxClusterPerLayer5]; // pointers to clusters -     slice in y    
     Float_t fY5[6][kMaxClusterPerLayer5];                // y position of the clusters  slice in y    
     Float_t fZ5[6][kMaxClusterPerLayer5];                // z position of the clusters  slice in y 
@@ -135,7 +134,7 @@ public:
     Float_t fDy5;                                       //delta y
     Float_t fBy5[6][2];                                    //slice borders
     //
-    AliITSclusterV2 *fClusters10[11][kMaxClusterPerLayer10]; // pointers to clusters -     slice in y
+    AliITSRecPoint *fClusters10[11][kMaxClusterPerLayer10]; // pointers to clusters -     slice in y
     Int_t        fClusterIndex10[11][kMaxClusterPerLayer10]; // pointers to clusters -     slice in y    
     Float_t fY10[11][kMaxClusterPerLayer10];                // y position of the clusters  slice in y    
     Float_t fZ10[11][kMaxClusterPerLayer10];                // z position of the clusters  slice in y 
@@ -143,7 +142,7 @@ public:
     Float_t fDy10;                                        // delta y
     Float_t fBy10[11][2];                                 // slice borders
     //
-    AliITSclusterV2 *fClusters20[21][kMaxClusterPerLayer20]; // pointers to clusters -     slice in y
+    AliITSRecPoint *fClusters20[21][kMaxClusterPerLayer20]; // pointers to clusters -     slice in y
     Int_t        fClusterIndex20[21][kMaxClusterPerLayer20]; // pointers to clusters -     slice in y    
     Float_t fY20[21][kMaxClusterPerLayer20];                // y position of the clusters  slice in y    
     Float_t fZ20[21][kMaxClusterPerLayer20];                // z position of the clusters  slice in y 
@@ -151,7 +150,7 @@ public:
     Float_t fDy20;                                        //delta y 
     Float_t fBy20[21][2];                                 //slice borders
     //
-    AliITSclusterV2** fClustersCs;                         //clusters table in current slice
+    AliITSRecPoint** fClustersCs;                         //clusters table in current slice
     Int_t   *fClusterIndexCs;                             //cluster index in current slice 
     Float_t *fYcs;                                        //y position in current slice
     Float_t *fZcs;                                        //z position in current slice
@@ -173,13 +172,14 @@ public:
   AliITStrackerMI::AliITSdetector & GetDetector(Int_t layer, Int_t n) const {return GetLayer(layer).GetDetector(n); }
 
 protected:
-  void FindV0(AliESD *event);  //try to find V0
-  Double_t  TestV0(AliHelix *h1, AliHelix *h2, AliESDV0MI *vertex);  //try to find V0 - return DCA
-  Double_t  FindBestPair(Int_t esdtrack0, Int_t esdtrack1,AliESDV0MI *vertex);  // try to find best pair from the tree of track hyp.
+  Int_t GetNearestLayer(const Double_t *xr) const;  //get nearest upper layer close to the point xr
+  void FindV02(AliESD *event);  //try to find V0
+  void RefitV02(AliESD *event);  //try to refit  V0's
+  void UpdateTPCV0(AliESD *event);  //try to update, or reject TPC  V0s
   void CookLabel(AliKalmanTrack *t,Float_t wrong) const;
   void CookLabel(AliITStrackMI *t,Float_t wrong) const;
   Double_t GetEffectiveThickness(Double_t y, Double_t z) const;
-  void FollowProlongationTree(AliITStrackMI * otrack, Int_t esdindex);
+  void FollowProlongationTree(AliITStrackMI * otrack, Int_t esdindex, Bool_t constrain);
   void ResetBestTrack() {
      fBestTrack.~AliITStrackMI();
      new(&fBestTrack) AliITStrackMI(fTrackToFollow);
@@ -203,7 +203,7 @@ protected:
   void  GetBestHypothesysMIP(TObjArray &itsTracks); 
   void RegisterClusterTracks(AliITStrackMI* track, Int_t id);
   void UnRegisterClusterTracks(AliITStrackMI* track, Int_t id);
-  Float_t GetNumberOfSharedClusters(AliITStrackMI* track,Int_t id, Int_t list[6], AliITSclusterV2 *clist[6]);
+  Float_t GetNumberOfSharedClusters(AliITStrackMI* track,Int_t id, Int_t list[6], AliITSRecPoint *clist[6]);
   Int_t GetOverlapTrack(AliITStrackMI *track, Int_t trackID, Int_t &shared, Int_t clusterlist[6], Int_t overlist[6]);
   AliITStrackMI * GetBest2Tracks(Int_t trackID1, Int_t treackID2, Float_t th0, Float_t th1);
   Float_t  * GetErrY(Int_t trackindex) const {return &fCoeficients[trackindex*48];}
@@ -219,17 +219,21 @@ protected:
   AliITStrackMI fBestTrack;              // "best" track 
   AliITStrackMI fTrackToFollow;          // followed track
   TObjArray     fTrackHypothesys;        // ! array with track hypothesys- ARRAY is the owner of tracks- MI
-  TObjArray     fV0Array;                // ! array of V0
+  TObjArray     fBestHypothesys;         // ! array with track hypothesys- ARRAY is the owner of tracks- MI
+  TObjArray     fOriginal;               // ! array with seeds from the TPC
   Int_t         fBestTrackIndex[100000]; // ! index of the best track
   Int_t         fCurrentEsdTrack;        // ! current esd track           - MI
   Int_t fPass;                           // current pass through the data 
   Int_t fConstraint[2];                  // constraint flags
-
+  Bool_t fAfterV0;                       //indicates V0 founded
   Int_t fLayersNotToSkip[kMaxLayer];     // layer masks
   Int_t fLastLayerToTrackTo;             // the innermost layer to track to
   Float_t * fCoeficients;                //! working array with errors and mean cluser shape
- private:
-  AliITStrackerMI(const AliITStrackerMI * tracker){;}
+  AliESD  * fEsd;                        //! pointer to the ESD event
+  TTreeSRedirector *fDebugStreamer;     //!debug streamer
+private:
+  AliITStrackerMI(const AliITStrackerMI &);
+  AliITStrackerMI & operator=(const AliITStrackerMI &);
   ClassDef(AliITStrackerMI,2)   //ITS tracker MI
 };
 
@@ -294,7 +298,7 @@ inline Double_t AliITStrackerMI::NormalizedChi2(AliITStrackMI * track, Int_t lay
               1./(1.+track->fNSkipped));
   return track->fNormChi2[layer];
 }
-inline void  AliITStrackerMI::AliITSdetector::GetGlobalXYZ(const AliITSclusterV2 *cl, Double_t xyz[3]) const
+inline void  AliITStrackerMI::AliITSdetector::GetGlobalXYZ(const AliITSRecPoint *cl, Double_t xyz[3]) const
 {
   //
   // get cluster coordinates in global cooordinate