]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITStrackerMI.h
Eff C++ warning removal (Marian)
[u/mrichter/AliRoot.git] / ITS / AliITStrackerMI.h
index fc790f714fa990572bf519cc254dbd348ceed86c..db9e904f4b36ef9b949235f00abd569a7be0e76a 100644 (file)
@@ -1,87 +1,66 @@
 #ifndef ALIITSTRACKERMI_H
 #define ALIITSTRACKERMI_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
+/* $Id$ */
+
 //-------------------------------------------------------------------------
 //                          ITS tracker
-//     reads AliITSclusterMI clusters and creates AliITStrackV2 tracks
-//           Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch 
-//                   Marian Ivanov, CERN, Marian.Ivanov@cern.ch
+//     reads AliITSclusterMI clusters and creates AliITStrackMI tracks
+//           Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch
 //-------------------------------------------------------------------------
 
-#include <TObjArray.h>
-
-#include "AliTracker.h"
-#include "AliITStrackV2.h"
-#include "AliITSclusterV2.h"
-
-class AliITSclusterV2;
-class AliESD;
-class AliITSgeom;
 class TTree;
-class AliHelix;
-class AliV0vertex;
-
-
-
-class AliITSRecV0Info: public TObject {
-  friend class AliITStrackerMI;
-protected:
-  void Update(Float_t vertex[3], Float_t mass1, Float_t mass2);
-  Double_t       fDist1;    //info about closest distance according closest MC - linear DCA
-  Double_t       fDist2;    //info about closest distance parabolic DCA
-  Double_t       fInvMass;  //reconstructed invariant mass -
-  //
-  Double_t       fPdr[3];    //momentum at vertex daughter  - according approx at DCA
-  Double_t       fXr[3];     //rec. position according helix
-  //
-  Double_t       fPm[3];    //momentum at the vertex mother
-  Double_t       fAngle[3]; //three angles
-  Double_t       fRr;       // rec position of the vertex 
-  Int_t          fLab[2];   //MC label of the partecle 
-  Float_t        fPointAngleFi; //point angle fi
-  Float_t        fPointAngleTh; //point angle theta
-  Float_t        fPointAngle;   //point angle full
-  ClassDef(AliITSRecV0Info,1)  // container for  
-};
-
-
+class TTreeSRedirector;
+class AliESDEvent;
 
+#include <TObjArray.h>
+#include "AliITSRecPoint.h"
+#include "AliITStrackMI.h"
+#include "AliITSPlaneEff.h"
+#include "AliPlaneEff.h"
+#include "AliTracker.h"
 
 //-------------------------------------------------------------------------
 class AliITStrackerMI : public AliTracker {
 public:
-  AliITStrackerMI():AliTracker(){}
-  AliITStrackerMI(const AliITSgeom *geom);
+  AliITStrackerMI();
+  AliITStrackerMI(const Char_t *geom);
+  virtual ~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;
+  virtual Bool_t GetTrackPointTrackingError(Int_t index, 
+                       AliTrackPoint& p, const AliESDtrack *t);
+  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();}
   Int_t LoadClusters(TTree *cf);
   void UnloadClusters();
-  Int_t Clusters2Tracks(TTree *in, TTree *out);
-  Int_t Clusters2Tracks(AliESD *event);
-  Int_t PropagateBack(AliESD *event);
-  Int_t RefitInward(AliESD *event);
-  Bool_t RefitAt(Double_t x, AliITStrackV2 *seed, const AliITStrackV2 *t);
+  Int_t Clusters2Tracks(AliESDEvent *event);
+  Int_t PropagateBack(AliESDEvent *event);
+  Int_t RefitInward(AliESDEvent *event);
+  Bool_t RefitAt(Double_t x, AliITStrackMI *track, 
+                const AliITStrackMI *clusters, Bool_t extra=kFALSE, Bool_t planeeff=kFALSE);
+  Bool_t RefitAt(Double_t x, AliITStrackMI *track, 
+                const Int_t *clusters, Bool_t extra=kFALSE, Bool_t planeeff=kFALSE);
   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(AliITStrackV2* track, const AliITSclusterV2 *cluster,Int_t layer);
-  Int_t UpdateMI(AliITStrackV2* track, const AliITSclusterV2* cl,Double_t chi2,Int_t layer) const;
+
+  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;
+  AliPlaneEff *GetPlaneEff() {return (AliPlaneEff*)fPlaneEff;}   // return the pointer to AliPlaneEff
   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;
+    AliITSdetector():fR(0),fPhi(0),fSinPhi(0),fCosPhi(0),fYmin(0),fYmax(0),fZmin(0),fZmax(0){}
+    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 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;}
@@ -104,23 +83,22 @@ public:
   };
 
   class AliITSlayer {
-    friend class AliITStrackerMI;
   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);
+    void SelectClusters(Double_t zmin,Double_t zmax,Double_t ymin,Double_t ymax);
+    const AliITSRecPoint *GetNextCluster(Int_t &ci,Bool_t test=kFALSE);
     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;
@@ -131,9 +109,14 @@ 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;}    
+    Int_t GetClusterTracks(Int_t i, Int_t j) const {return fClusterTracks[i][j];}
+    void SetClusterTracks(Int_t i, Int_t j, Int_t c) {fClusterTracks[i][j]=c;}
   protected:
-    AliITSlayer(const AliITSlayer& layer){;}
+    AliITSlayer(const AliITSlayer& layer);
+    AliITSlayer & operator=(const AliITSlayer& layer){
+      this->~AliITSlayer();new(this) AliITSlayer(layer);
+      return *this;}
     Double_t fR;                // mean radius of this layer
     Double_t fPhiOffset;        // offset of the first detector in Phi
     Int_t fNladders;            // number of ladders
@@ -141,45 +124,45 @@ public:
     Int_t fNdetectors;          // detectors/ladder
     AliITSdetector *fDetectors; // array of detectors
     Int_t fN;                   // number of clusters
-    AliITSclusterV2 *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      
+    AliITSRecPoint *fClusters[AliITSRecoParam::fgkMaxClusterPerLayer]; // pointers to clusters
+    Int_t        fClusterIndex[AliITSRecoParam::fgkMaxClusterPerLayer]; // pointers to clusters
+    Float_t fY[AliITSRecoParam::fgkMaxClusterPerLayer];                // y position of the clusters      
+    Float_t fZ[AliITSRecoParam::fgkMaxClusterPerLayer];                // z position of the clusters      
     Float_t fYB[2];                                       // ymin and ymax
     //
-    AliITSclusterV2 *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 
+    AliITSRecPoint *fClusters5[6][AliITSRecoParam::fgkMaxClusterPerLayer5]; // pointers to clusters -     slice in y
+    Int_t        fClusterIndex5[6][AliITSRecoParam::fgkMaxClusterPerLayer5]; // pointers to clusters -     slice in y    
+    Float_t fY5[6][AliITSRecoParam::fgkMaxClusterPerLayer5];                // y position of the clusters  slice in y    
+    Float_t fZ5[6][AliITSRecoParam::fgkMaxClusterPerLayer5];                // z position of the clusters  slice in y 
     Int_t fN5[6];                                       // number of cluster in slice
     Float_t fDy5;                                       //delta y
     Float_t fBy5[6][2];                                    //slice borders
     //
-    AliITSclusterV2 *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 
+    AliITSRecPoint *fClusters10[11][AliITSRecoParam::fgkMaxClusterPerLayer10]; // pointers to clusters -     slice in y
+    Int_t        fClusterIndex10[11][AliITSRecoParam::fgkMaxClusterPerLayer10]; // pointers to clusters -     slice in y    
+    Float_t fY10[11][AliITSRecoParam::fgkMaxClusterPerLayer10];                // y position of the clusters  slice in y    
+    Float_t fZ10[11][AliITSRecoParam::fgkMaxClusterPerLayer10];                // z position of the clusters  slice in y 
     Int_t fN10[11];                                       // number of cluster in slice
     Float_t fDy10;                                        // delta y
     Float_t fBy10[11][2];                                 // slice borders
     //
-    AliITSclusterV2 *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 
+    AliITSRecPoint *fClusters20[21][AliITSRecoParam::fgkMaxClusterPerLayer20]; // pointers to clusters -     slice in y
+    Int_t        fClusterIndex20[21][AliITSRecoParam::fgkMaxClusterPerLayer20]; // pointers to clusters -     slice in y    
+    Float_t fY20[21][AliITSRecoParam::fgkMaxClusterPerLayer20];                // y position of the clusters  slice in y    
+    Float_t fZ20[21][AliITSRecoParam::fgkMaxClusterPerLayer20];                // z position of the clusters  slice in y 
     Int_t fN20[21];                                       // number of cluster in slice
     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
     Int_t    fNcs;                                        //number of clusters in current slice    
     Int_t fCurrentSlice;                                  //current slice
     //
-    Float_t  fClusterWeight[kMaxClusterPerLayer]; // probabilistic weight of the cluster
-    Int_t    fClusterTracks[4][kMaxClusterPerLayer]; //tracks registered to given cluster
+    Float_t  fClusterWeight[AliITSRecoParam::fgkMaxClusterPerLayer]; // probabilistic weight of the cluster
+    Int_t    fClusterTracks[4][AliITSRecoParam::fgkMaxClusterPerLayer]; //tracks registered to given cluster
     Float_t fZmax;      //    edges
     Float_t fYmin;      //   of  the
     Float_t fYmax;      //   "window"
@@ -193,63 +176,101 @@ 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, AliITSRecV0Info *vertex);  //try to find V0 - return DCA
-  Double_t  FindBestPair(Int_t esdtrack0, Int_t esdtrack1,AliITSRecV0Info *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(AliESDEvent *event);  //try to find V0
+  void RefitV02(AliESDEvent *event);  //try to refit  V0's
+  void UpdateTPCV0(AliESDEvent *event);  //try to update, or reject TPC  V0s
   void CookLabel(AliKalmanTrack *t,Float_t wrong) const;
-  void CookLabel(AliITStrackV2 *t,Float_t wrong) const;
-  Double_t GetEffectiveThickness(Double_t y, Double_t z) const;
-  void FollowProlongationTree(AliITStrackV2 * otrack, Int_t esdindex);
+  void CookLabel(AliITStrackMI *t,Float_t wrong) const;
+  Double_t GetEffectiveThickness();
+  void FollowProlongationTree(AliITStrackMI * otrack, Int_t esdindex, Bool_t constrain);
   void ResetBestTrack() {
-     fBestTrack.~AliITStrackV2();
-     new(&fBestTrack) AliITStrackV2(fTrackToFollow);
+     fBestTrack.~AliITStrackMI();
+     new(&fBestTrack) AliITStrackMI(fTrackToFollow);
   }
-  void ResetTrackToFollow(const AliITStrackV2 &t) {
-     fTrackToFollow.~AliITStrackV2();
-     new(&fTrackToFollow) AliITStrackV2(t);
+  void ResetTrackToFollow(const AliITStrackMI &t) {
+     fTrackToFollow.~AliITStrackMI();
+     new(&fTrackToFollow) AliITStrackMI(t);
   }
-  void CookdEdx(AliITStrackV2* track);
-  Double_t GetNormalizedChi2(AliITStrackV2 * track, Int_t mode);
-  Double_t GetTruncatedChi2(AliITStrackV2 * track, Float_t fac);
-  Double_t NormalizedChi2(AliITStrackV2 * track, Int_t layer);
-  Double_t GetInterpolatedChi2(AliITStrackV2 * forwardtrack, AliITStrackV2 * backtrack);  
-  Double_t GetMatchingChi2(AliITStrackV2 * track1, AliITStrackV2 * track2);
-  Double_t GetDeadZoneProbability(Double_t zpos, Double_t zerr);
+  void CookdEdx(AliITStrackMI* track);
+  Double_t GetNormalizedChi2(AliITStrackMI * track, Int_t mode);
+  Double_t GetTruncatedChi2(AliITStrackMI * track, Float_t fac);
+  Double_t NormalizedChi2(AliITStrackMI * track, Int_t layer);
+  Double_t GetInterpolatedChi2(AliITStrackMI * forwardtrack, AliITStrackMI * backtrack);  
+  Double_t GetMatchingChi2(AliITStrackMI * track1, AliITStrackMI * track2);
+  Double_t GetSPDDeadZoneProbability(Double_t zpos, Double_t zerr);
 
   Float_t    *GetWeight(Int_t index);
-  void AddTrackHypothesys(AliITStrackV2 * track, Int_t esdindex);
+  void AddTrackHypothesys(AliITStrackMI * track, Int_t esdindex);
   void SortTrackHypothesys(Int_t esdindex, Int_t maxcut, Int_t mode);
-  AliITStrackV2 * GetBestHypothesys(Int_t esdindex, AliITStrackV2 * original, Int_t checkmax); 
+  AliITStrackMI * GetBestHypothesys(Int_t esdindex, AliITStrackMI * original, Int_t checkmax); 
   void  GetBestHypothesysMIP(TObjArray &itsTracks); 
-  void RegisterClusterTracks(AliITStrackV2* track, Int_t id);
-  void UnRegisterClusterTracks(AliITStrackV2* track, Int_t id);
-  Float_t GetNumberOfSharedClusters(AliITStrackV2* track,Int_t id, Int_t list[6], AliITSclusterV2 *clist[6]);
-  Int_t GetOverlapTrack(AliITStrackV2 *track, Int_t trackID, Int_t &shared, Int_t clusterlist[6], Int_t overlist[6]);
-  AliITStrackV2 * GetBest2Tracks(Int_t trackID1, Int_t treackID2, Float_t th0, Float_t th1);
-  Float_t  * GetErrY(Int_t trackindex) const {return &fCoeficients[trackindex*48];}
-  Float_t  * GetErrZ(Int_t trackindex) const {return &fCoeficients[trackindex*48+12];}
-  Float_t  * GetNy(Int_t trackindex) const {return &fCoeficients[trackindex*48+24];}
-  Float_t  * GetNz(Int_t trackindex) const {return &fCoeficients[trackindex*48+36];}
+  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], 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 &fCoefficients[trackindex*48];}
+  Float_t  * GetErrZ(Int_t trackindex) const {return &fCoefficients[trackindex*48+12];}
+  Float_t  * GetNy(Int_t trackindex) const {return &fCoefficients[trackindex*48+24];}
+  Float_t  * GetNz(Int_t trackindex) const {return &fCoefficients[trackindex*48+36];}
   void       SignDeltas( TObjArray *ClusterArray, Float_t zv);
-  void MakeCoeficients(Int_t ntracks);
-  void UpdateESDtrack(AliITStrackV2* track, ULong_t flags) const;
+  void MakeCoefficients(Int_t ntracks);
+  void BuildMaterialLUT(TString material);
+  void MakeTrksMaterialLUT(Int_t ntracks);
+  void DeleteTrksMaterialLUT();
+  Int_t CorrectForPipeMaterial(AliITStrackMI *t, TString direction="inward");
+  Int_t CorrectForShieldMaterial(AliITStrackMI *t, TString shield, TString direction="inward");
+  Int_t CorrectForLayerMaterial(AliITStrackMI *t, Int_t layerindex, Double_t oldGlobXYZ[3], TString direction="inward");
+  void UpdateESDtrack(AliITStrackMI* track, ULong_t flags) const;
+  Int_t CheckSkipLayer(AliITStrackMI *track,Int_t ilayer,Int_t idet) const;
+  Int_t CheckDeadZone(/*AliITStrackMI *track,*/Int_t ilayer,Int_t idet,Double_t zmin,Double_t zmax/*,Double_t ymin,Double_t ymax*/) const;
+  Bool_t LocalModuleCoord(Int_t ilayer,Int_t idet,AliITStrackMI *track,
+                         Float_t &xloc,Float_t &zloc) const;
+// method to be used for Plane Efficiency evaluation
+  Bool_t IsOKForPlaneEff(AliITStrackMI* track, Int_t ilayer) const; // Check if a track is usable 
+                                                                    // for Plane Eff evaluation
+  void UseTrackForPlaneEff(AliITStrackMI* track, Int_t ilayer);     // Use this track for Plane Eff 
+// 
   Int_t fI;                              // index of the current layer
-  static AliITSlayer fgLayers[kMaxLayer];// ITS layers
-  AliITStrackV2 fTracks[kMaxLayer];      // track estimations at the ITS layers
-  AliITStrackV2 fBestTrack;              // "best" track 
-  AliITStrackV2 fTrackToFollow;          // followed track
+  static AliITSlayer fgLayers[AliITSgeomTGeo::kNLayers];// ITS layers
+  AliITStrackMI fTracks[AliITSgeomTGeo::kNLayers];      // track estimations at the ITS layers
+  AliITStrackMI fBestTrack;              // "best" track 
+  AliITStrackMI fTrackToFollow;          // followed track
   TObjArray     fTrackHypothesys;        // ! array with track hypothesys- ARRAY is the owner of tracks- MI
+  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
-
-  Int_t fLayersNotToSkip[kMaxLayer];     // layer masks
+  Bool_t fAfterV0;                       //indicates V0 founded
+  Int_t fLayersNotToSkip[AliITSgeomTGeo::kNLayers];     // 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){;}
-  ClassDef(AliITStrackerMI,1)   //ITS tracker V2
+  Float_t * fCoefficients;               //! working array with errors and mean cluster shape
+  AliESDEvent  * fEsd;                   //! pointer to the ESD event
+  Double_t fSPDdetzcentre[4];            // centres of SPD modules in z
+  TString fTrackingPhase;                // current tracking phase
+  Int_t fUseTGeo;                        // use TGeo to get material budget
+  Int_t   fNtracks;                      // number of tracks to prolong
+  Float_t fxOverX0Pipe;                  // material budget
+  Float_t fxTimesRhoPipe;                // material budget
+  Float_t fxOverX0Shield[2];             // material budget
+  Float_t fxTimesRhoShield[2];           // material budget
+  Float_t fxOverX0Layer[6];              // material budget
+  Float_t fxTimesRhoLayer[6];            // material budget
+  Float_t *fxOverX0PipeTrks;             //! material budget
+  Float_t *fxTimesRhoPipeTrks;           //! material budget
+  Float_t *fxOverX0ShieldTrks;           //! material budget
+  Float_t *fxTimesRhoShieldTrks;         //! material budget
+  Float_t *fxOverX0LayerTrks;            //! material budget
+  Float_t *fxTimesRhoLayerTrks;          //! material budget
+  TTreeSRedirector *fDebugStreamer;      //!debug streamer
+  AliITSPlaneEff *fPlaneEff;             //! Pointer to the ITS plane efficicency
+private:
+  AliITStrackerMI(const AliITStrackerMI &tracker);
+  AliITStrackerMI & operator=(const AliITStrackerMI &tracker);
+  ClassDef(AliITStrackerMI,4)   //ITS tracker MI
 };
 
 
@@ -302,18 +323,18 @@ inline void AliITStrackerMI::CookLabel(AliKalmanTrack *t,Float_t wrong) const {
    }
 }
 
-inline Double_t AliITStrackerMI::NormalizedChi2(AliITStrackV2 * track, Int_t layer)
+inline Double_t AliITStrackerMI::NormalizedChi2(AliITStrackMI * track, Int_t layer)
 {
   //--------------------------------------------------------------------
   //get normalize chi2
   //--------------------------------------------------------------------
-  track->fNormChi2[layer] = 2.*track->fNSkipped+0.25*track->fNDeadZone+track->fdEdxMismatch+track->GetChi2()/
+  track->SetNormChi2(layer,2.*track->GetNSkipped()+0.25*track->GetNDeadZone()+track->GetdEdxMismatch()+track->GetChi2()/
   //track->fNormChi2[layer] = 2.*track->fNSkipped+0.25*track->fNDeadZone+track->fdEdxMismatch+track->fChi22/
-    TMath::Max(double(track->GetNumberOfClusters()-track->fNSkipped),
-              1./(1.+track->fNSkipped));
-  return track->fNormChi2[layer];
+    TMath::Max(double(track->GetNumberOfClusters()-track->GetNSkipped()),
+              1./(1.+track->GetNSkipped())));
+  return track->GetNormChi2(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