+ AliITSRecPoint *GetCluster(Int_t l, Int_t c) const {
+ return fgLayers[l].GetCluster(c);
+ }
+ Int_t GetNumberOfClustersLayer(Int_t n) const {
+ return fgLayers[n].GetNumberOfClusters();
+ }
+ Int_t LoadClusters(TTree *cf);
+ void UnloadClusters();
+ 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, Bool_t extra=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;
+
+ class AliITSdetector {
+ public:
+ AliITSdetector():fR(0.),fPhi(0.){}
+ AliITSdetector(Double_t r,Double_t phi):fR(r),fPhi(phi){}
+ Double_t GetR() const {return fR;}
+ Double_t GetPhi() const {return fPhi;}
+ private:
+ Double_t fR; // polar coordinates
+ Double_t fPhi; // of this detector
+ };
+
+ class AliITSlayer {
+ public:
+ enum {kNsector=5, kMaxClusterPerSector=kMaxClusterPerLayer/kNsector};
+ AliITSlayer();
+ AliITSlayer(Double_t r, Double_t p, Double_t z, Int_t nl, Int_t nd);
+ ~AliITSlayer();
+ Int_t InsertCluster(AliITSRecPoint *c);
+ void ResetClusters();
+ Int_t SelectClusters(Float_t zmi, Float_t zma, Float_t ymi, Float_t yma);
+ const AliITSRecPoint *GetNextCluster(Int_t &ci);
+ void ResetRoad();
+ Double_t GetRoad() const {return fRoad;}
+ Double_t GetR() const {return fR;}
+ AliITSRecPoint *GetCluster(Int_t i) const { return fClusters[i]; }
+ 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;
+ Int_t GetNladders() const {return fNladders;}
+ Int_t GetNdetectors() const {return fNdetectors;}
+ Int_t GetNumberOfClusters() const;
+ protected:
+ AliITSlayer(const AliITSlayer&);
+ AliITSlayer &operator=(const AliITSlayer &tr);
+ Double_t fR; // mean radius of this layer
+ Double_t fPhiOffset; // offset of the first detector in Phi
+ Int_t fNladders; // number of ladders
+ Double_t fZOffset; // offset of the first detector in Z
+ Int_t fNdetectors; // detectors/ladder
+ AliITSdetector *fDetectors; // array of detectors
+
+ AliITSRecPoint *fClusters[kMaxClusterPerLayer]; // pointers to clusters
+ Int_t fN[kNsector]; // numbers of clusters sector by sector
+
+ Int_t fIndex[kMaxClusterPerLayer]; // indexes of selected clusters
+ Int_t fNsel; // number of selected clusters
+
+ Double_t fRoad; // road defined by the cluster density
+ Int_t FindClusterIndex(Float_t z, Int_t s) const;
+ };
+
+protected:
+ AliITStrackerV2(const AliITStrackerV2&);
+ void CookLabel(AliKalmanTrack *t,Float_t wrong) const;
+ Double_t GetEffectiveThickness(Double_t y, Double_t z) const;