+ Bool_t IsClustersOwner() const { return TestBit(kOwner);}
+ Bool_t HasRemoveContainers() const { return TestBit(kRemoveContainers);}
+
+ static void SetBetheBloch(ETRDtrackerV1BetheBloch bb) {fgBB = bb;}
+ void SetClustersOwner(Bool_t own=kTRUE) {SetBit(kOwner, own); if(!own) fClusters = NULL;}
+ void SetRemoveContainers(Bool_t rm=kTRUE) {SetBit(kRemoveContainers, rm);}
+
+ Int_t FollowBackProlongation(AliTRDtrackV1 &t);
+ Int_t FollowProlongation(AliTRDtrackV1 &t);
+ Int_t LoadClusters(TTree *cTree);
+ Int_t LoadClusters(TClonesArray *const clusters);
+ Int_t PropagateBack(AliESDEvent *event);
+ static Int_t PropagateToX(AliTRDtrackV1 &t, Double_t xToGo, Double_t maxStep);
+ Bool_t ReadClusters(TTree *in);
+ Int_t RefitInward(AliESDEvent *event);
+ static void SetNTimeBins(Int_t nTimeBins){fgNTimeBins = nTimeBins; }
+ void SetReconstructor(const AliTRDReconstructor *rec) {fkReconstructor = rec;}
+ void UnloadClusters();
+
+ class AliTRDLeastSquare{
+ public:
+ AliTRDLeastSquare();
+ ~AliTRDLeastSquare(){};
+
+ void AddPoint(const Double_t * const x, Double_t y, Double_t sigmaY);
+ void RemovePoint(const Double_t * const x, Double_t y, Double_t sigmaY);
+ Bool_t Eval();
+ void Reset();
+
+ Double_t GetFunctionParameter(Int_t ParNumber) const {return fParams[ParNumber];}
+ Double_t GetFunctionValue(const Double_t * const xpos) const;
+ void GetCovarianceMatrix(Double_t *storage) const;
+ private:
+ AliTRDLeastSquare(const AliTRDLeastSquare &);
+ AliTRDLeastSquare& operator=(const AliTRDLeastSquare &);
+ Double_t fParams[2]; // Fitparameter
+ Double_t fCovarianceMatrix[3]; // Covariance Matrix
+ Double_t fSums[6]; // Sums
+ };
+
+ class AliTRDtrackFitterRieman{
+ public:
+ AliTRDtrackFitterRieman();
+ ~AliTRDtrackFitterRieman();
+
+ Double_t Eval();
+ void Reset();
+
+ Double_t GetYat(Double_t x) const;
+ Double_t GetDyDxAt(Double_t x) const;
+ Double_t GetZat(Double_t x) const;
+ Double_t GetDzDx() const { return fParameters[4]; };
+ Double_t GetCurvature() const;
+ void GetCovAt(Double_t x, Double_t *cov) const;
+
+ void SetRiemanFitter(TLinearFitter *const fitter) { fTrackFitter = fitter; }
+ void SetTracklet(Int_t il, AliTRDseedV1 * const tracklet);
+ void SetSysClusterError(Double_t err) { fSysClusterError = err; };
+ private:
+ AliTRDtrackFitterRieman(const AliTRDtrackFitterRieman &);
+ AliTRDtrackFitterRieman &operator=(const AliTRDtrackFitterRieman &);
+ void UpdateFitters(const AliTRDseedV1 * const tracklet);
+ Bool_t CheckAcceptable(Double_t offset, Double_t slope);
+ Double_t CalculateReferenceX();
+
+ TLinearFitter *fTrackFitter; // Fitter for linearized track model
+ AliTRDLeastSquare *fZfitter; // Linear fitter in z-Direction
+ AliTRDseedV1 *fTracklets[kNPlanes]; // Tracklet container
+ TMatrixD *fCovarPolY; // Polynomial Covariance Matrix Estimation (y-direction)
+ TMatrixD *fCovarPolZ; // Polynomial Covariance Matrix Estimation (z-direction)
+ Double_t fXref; // Reference x position for fit in z-Direction
+ Double_t fSysClusterError; // Systematic cluster Error
+ Double_t fParameters[5]; // Track Model Parameter
+ Double_t fSumPolY[5]; // Sums for polynomial Covariance Matrix Estimation (y-direction)
+ Double_t fSumPolZ[3]; // Sums for polynomial Covariance Matrix Estimation (z-direction)
+ };
+
+protected:
+ static Bool_t AdjustSector(AliTRDtrackV1 *const track);
+ Double_t BuildSeedingConfigs(AliTRDtrackingChamber **stack, Int_t *configs);
+ Int_t BuildTrackingContainers();
+ static Float_t CalculateChi2Z(const AliTRDseedV1 *tracklets, Double_t offset, Double_t slope, Double_t xref);
+ Int_t Clusters2TracksSM(Int_t sector, AliESDEvent *esd);
+ Int_t Clusters2TracksStack(AliTRDtrackingChamber **stack, TClonesArray * const esdTrackList);
+ AliTRDseedV1* GetTracklet(const AliTRDtrackV1 *const trk, Int_t plane, Int_t &idx);
+ Bool_t GetTrackPoint(Int_t index, AliTrackPoint &p) const;
+ Float_t GetR4Layer(Int_t ly) const { return fR[ly];}
+ Int_t MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 * const sseed, const Int_t * const ipar);
+ AliTRDtrackV1* MakeTrack(AliTRDseedV1 * const tracklet);
+ AliTRDtrackV1* SetTrack(const AliTRDtrackV1 * const track);
+ AliTRDseedV1* SetTracklet(const AliTRDseedV1 * const tracklet);
+ void UnsetTrackletsTrack(const AliTRDtrackV1 * const track);