ROOT logo
#ifndef ALITPCTRACKERSECTOR_H
#define ALITPCTRACKERSECTOR_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */


/* $Id: AliTPCtrackerSector.h 25837 2008-05-16 16:39:00Z marian $ */

//-------------------------------------------------------
//   TPC tracker - helper classes for cluster storing
//                 and navigation                   
//   
//
//   Origin: 
//-------------------------------------------------------


//class TFile;
class AliTPCParam;
class TTreeSRedirector;



class AliTPCtrackerRow : public TObject{
public:
  AliTPCtrackerRow();
  ~AliTPCtrackerRow();
  void InsertCluster(const AliTPCclusterMI *c, UInt_t index);
  void ResetClusters();
  operator int() const {return fN;}
  Int_t GetN() const {return fN;}
  const AliTPCclusterMI* operator[](Int_t i) const {return fClusters[i];}
  UInt_t GetIndex(Int_t i) const {return fIndex[i];}
  Int_t Find(Double_t z) const; 
  AliTPCclusterMI *  FindNearest(Double_t y, Double_t z, Double_t roady, Double_t roadz) const;
  AliTPCclusterMI *  FindNearest2(Double_t y, Double_t z, Double_t roady, Double_t roadz, UInt_t & index) const;
  
  void SetX(Double_t x) {fX=x;}
  Double_t GetX() const {return fX;}
  Float_t GetDeadZone() const {return fDeadZone;}
  void SetDeadZone(Float_t d) {fDeadZone=d;}
  Int_t GetN1() const {return fN1;}
  void SetN1(Int_t n) {fN1=n;}
  Int_t GetN2() const {return fN2;}
  void SetN2(Int_t n) {fN2=n;}
  TClonesArray* GetClusters1() const {return fClusters1;}
  TClonesArray* GetClusters2() const {return fClusters2;}
  void SetCluster1(Int_t i, const AliTPCclusterMI &cl);
  void SetCluster2(Int_t i, const AliTPCclusterMI &cl);

  AliTPCclusterMI* GetCluster1(Int_t i) const {return (fClusters1)?(AliTPCclusterMI*) fClusters1->At(i):NULL;}
  AliTPCclusterMI* GetCluster2(Int_t i) const {return (fClusters2)?(AliTPCclusterMI*) fClusters2->At(i):NULL;}  
  
  Short_t GetFastCluster(Int_t i) const {return fFastCluster[i];}
  void SetFastCluster(Int_t i, Short_t cl);
  Int_t IncrementN1() { return ++fN1;}
  Int_t IncrementN2() { return ++fN2;}
  
private:  
  AliTPCtrackerRow & operator=(const AliTPCtrackerRow & );
  AliTPCtrackerRow(const AliTPCtrackerRow& /*r*/);           //dummy copy constructor
  Float_t fDeadZone;  // the width of the dead zone
  TClonesArray *fClusters1; //array with clusters 1
  Int_t fN1;  //number of clusters on left side
  TClonesArray *fClusters2; //array with clusters 2
  Int_t fN2; // number of clusters on right side of the TPC
  Short_t fFastCluster[510];   //index of the nearest cluster at given position
  Int_t fN;                                          //number of clusters 
  const AliTPCclusterMI *fClusters[kMaxClusterPerRow]; //pointers to clusters
  // indexes for cluster at given position z  
  // AliTPCclusterMI *fClustersArray;                     // 
  UInt_t fIndex[kMaxClusterPerRow];                  //indeces of clusters
  Double_t fX;                                 //X-coordinate of this row  
  ClassDef(AliTPCtrackerRow,0)
};


//**************** Internal tracker class ********************** 
class AliTPCtrackerSector: public TObject {
 public:
  AliTPCtrackerSector():
    fN(0),
    fRow(0),
    fAlpha(0.),
    fAlphaShift(0.),
    fPadPitchWidth(0.),
    fPadPitchLength(0.),
    f1PadPitchLength(0.),
    f2PadPitchLength(0.) {}
    ~AliTPCtrackerSector() { delete[] fRow; }
    AliTPCtrackerRow& operator[](Int_t i) const { return *(fRow+i); }
    Int_t GetNRows() const { return fN; }
    void Setup(const AliTPCParam *par, Int_t flag);
    Double_t GetX(Int_t l) const {return fRow[l].GetX();}
    Double_t GetMaxY(Int_t l) const {
      return GetX(l)*TMath::Tan(0.5*GetAlpha());
    } 
    Double_t GetAlpha() const {return fAlpha;}
    Double_t GetAlphaShift() const {return fAlphaShift;}     
    //Int_t GetFirst(){return fFirstRow;}
    Int_t GetNClInSector(Int_t side);
    Int_t GetRowNumber(Double_t  x) const;
    Double_t GetPadPitchWidth()  const {return fPadPitchWidth;}
    Double_t GetPadPitchLength() const {return fPadPitchLength;}
    Double_t GetPadPitchLength(Float_t x) const {return (x<200) ? fPadPitchLength:f2PadPitchLength ;}
    
    void InsertCluster(AliTPCclusterMI *cl, Int_t size, const AliTPCParam *par);

    Int_t GetNClInSector(Int_t side) const;
    Int_t GetNClUsedInSector(Int_t side) const;
  
 private:
    AliTPCtrackerSector & operator=(const AliTPCtrackerSector & );
    AliTPCtrackerSector(const AliTPCtrackerSector &/*s*/);           //dummy copy contructor 
    Int_t fN;                           //number of pad rows 
    //Int_t fFirstRow;                  //offset
    AliTPCtrackerRow *fRow;             //array of pad rows
    Double_t fAlpha;                    //opening angle
    Double_t fAlphaShift;               //shift angle;
    Double_t fPadPitchWidth;            //pad pitch width
    Double_t fPadPitchLength;           //pad pitch length
    Double_t f1PadPitchLength;          //pad pitch length
    Double_t f2PadPitchLength;          //pad pitch length  
    ClassDef(AliTPCtrackerSector,1)
};



#endif


 AliTPCtrackerSector.h:1
 AliTPCtrackerSector.h:2
 AliTPCtrackerSector.h:3
 AliTPCtrackerSector.h:4
 AliTPCtrackerSector.h:5
 AliTPCtrackerSector.h:6
 AliTPCtrackerSector.h:7
 AliTPCtrackerSector.h:8
 AliTPCtrackerSector.h:9
 AliTPCtrackerSector.h:10
 AliTPCtrackerSector.h:11
 AliTPCtrackerSector.h:12
 AliTPCtrackerSector.h:13
 AliTPCtrackerSector.h:14
 AliTPCtrackerSector.h:15
 AliTPCtrackerSector.h:16
 AliTPCtrackerSector.h:17
 AliTPCtrackerSector.h:18
 AliTPCtrackerSector.h:19
 AliTPCtrackerSector.h:20
 AliTPCtrackerSector.h:21
 AliTPCtrackerSector.h:22
 AliTPCtrackerSector.h:23
 AliTPCtrackerSector.h:24
 AliTPCtrackerSector.h:25
 AliTPCtrackerSector.h:26
 AliTPCtrackerSector.h:27
 AliTPCtrackerSector.h:28
 AliTPCtrackerSector.h:29
 AliTPCtrackerSector.h:30
 AliTPCtrackerSector.h:31
 AliTPCtrackerSector.h:32
 AliTPCtrackerSector.h:33
 AliTPCtrackerSector.h:34
 AliTPCtrackerSector.h:35
 AliTPCtrackerSector.h:36
 AliTPCtrackerSector.h:37
 AliTPCtrackerSector.h:38
 AliTPCtrackerSector.h:39
 AliTPCtrackerSector.h:40
 AliTPCtrackerSector.h:41
 AliTPCtrackerSector.h:42
 AliTPCtrackerSector.h:43
 AliTPCtrackerSector.h:44
 AliTPCtrackerSector.h:45
 AliTPCtrackerSector.h:46
 AliTPCtrackerSector.h:47
 AliTPCtrackerSector.h:48
 AliTPCtrackerSector.h:49
 AliTPCtrackerSector.h:50
 AliTPCtrackerSector.h:51
 AliTPCtrackerSector.h:52
 AliTPCtrackerSector.h:53
 AliTPCtrackerSector.h:54
 AliTPCtrackerSector.h:55
 AliTPCtrackerSector.h:56
 AliTPCtrackerSector.h:57
 AliTPCtrackerSector.h:58
 AliTPCtrackerSector.h:59
 AliTPCtrackerSector.h:60
 AliTPCtrackerSector.h:61
 AliTPCtrackerSector.h:62
 AliTPCtrackerSector.h:63
 AliTPCtrackerSector.h:64
 AliTPCtrackerSector.h:65
 AliTPCtrackerSector.h:66
 AliTPCtrackerSector.h:67
 AliTPCtrackerSector.h:68
 AliTPCtrackerSector.h:69
 AliTPCtrackerSector.h:70
 AliTPCtrackerSector.h:71
 AliTPCtrackerSector.h:72
 AliTPCtrackerSector.h:73
 AliTPCtrackerSector.h:74
 AliTPCtrackerSector.h:75
 AliTPCtrackerSector.h:76
 AliTPCtrackerSector.h:77
 AliTPCtrackerSector.h:78
 AliTPCtrackerSector.h:79
 AliTPCtrackerSector.h:80
 AliTPCtrackerSector.h:81
 AliTPCtrackerSector.h:82
 AliTPCtrackerSector.h:83
 AliTPCtrackerSector.h:84
 AliTPCtrackerSector.h:85
 AliTPCtrackerSector.h:86
 AliTPCtrackerSector.h:87
 AliTPCtrackerSector.h:88
 AliTPCtrackerSector.h:89
 AliTPCtrackerSector.h:90
 AliTPCtrackerSector.h:91
 AliTPCtrackerSector.h:92
 AliTPCtrackerSector.h:93
 AliTPCtrackerSector.h:94
 AliTPCtrackerSector.h:95
 AliTPCtrackerSector.h:96
 AliTPCtrackerSector.h:97
 AliTPCtrackerSector.h:98
 AliTPCtrackerSector.h:99
 AliTPCtrackerSector.h:100
 AliTPCtrackerSector.h:101
 AliTPCtrackerSector.h:102
 AliTPCtrackerSector.h:103
 AliTPCtrackerSector.h:104
 AliTPCtrackerSector.h:105
 AliTPCtrackerSector.h:106
 AliTPCtrackerSector.h:107
 AliTPCtrackerSector.h:108
 AliTPCtrackerSector.h:109
 AliTPCtrackerSector.h:110
 AliTPCtrackerSector.h:111
 AliTPCtrackerSector.h:112
 AliTPCtrackerSector.h:113
 AliTPCtrackerSector.h:114
 AliTPCtrackerSector.h:115
 AliTPCtrackerSector.h:116
 AliTPCtrackerSector.h:117
 AliTPCtrackerSector.h:118
 AliTPCtrackerSector.h:119
 AliTPCtrackerSector.h:120
 AliTPCtrackerSector.h:121
 AliTPCtrackerSector.h:122
 AliTPCtrackerSector.h:123
 AliTPCtrackerSector.h:124
 AliTPCtrackerSector.h:125
 AliTPCtrackerSector.h:126
 AliTPCtrackerSector.h:127
 AliTPCtrackerSector.h:128
 AliTPCtrackerSector.h:129
 AliTPCtrackerSector.h:130
 AliTPCtrackerSector.h:131