]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/UPGRADE/AliITSURecoLayer.h
3a8bc7e3ff67012b3fdade2751e29f6450b177bb
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSURecoLayer.h
1 #ifndef ALIITSURECOLAYER
2 #define ALIITSURECOLAYER
3
4 #include <TNamed.h>
5 #include <TObjArray.h>
6 #include <TClonesArray.h>
7 #include "AliITSURecoSens.h"
8
9 class AliITSUGeomTGeo;
10 class AliITSsegmentation;
11 class AliCluster;
12
13
14 ///////////////////////////////////////////////////////////////////////
15 //                                                                   //
16 //  Class AliITSURecoLayer                                           //
17 //  Interface between the framework and reconstruction for ITS layer //
18 //                                                                   //
19 ///////////////////////////////////////////////////////////////////////
20
21
22 class AliITSURecoLayer : public TNamed
23 {
24  public:
25   //
26   enum {kMaxSensMatching=9}; // max number of sensors returned by FindSensors
27   //
28   enum {kPassive=BIT(14)                 // layer is passive
29         ,kOwnsClusterArray=BIT(15)       // owner of cluster array, delete in destructor
30   };
31   AliITSURecoLayer(const char* name);
32   AliITSURecoLayer(const char* name, Int_t activeID,AliITSUGeomTGeo* gm);
33   virtual ~AliITSURecoLayer();
34   //
35   void               ProcessClusters(Int_t mode=0);
36   //
37   Int_t              GetID()                       const {return (int)GetUniqueID();}
38   Int_t              GetActiveID()                 const {return fActiveID;}
39   Int_t              GetNSensors()                 const {return fNSensors;}
40   Int_t              GetNSensorRows()              const {return fNSensorRows;}
41   Int_t              GetNSensorsPerRow()           const {return fNSensorsPerRow;}
42   Double_t           GetRMin()                     const {return fRMin;}
43   Double_t           GetRMax()                     const {return fRMax;}
44   Double_t           GetDR()                       const {return fRMax-fRMin;}
45   Double_t           GetR()                        const {return fR;}
46   Double_t           GetR(Int_t dir)               const {return dir==0 ? fR : (dir<0 ? fRMin : fRMax);}
47   Double_t           GetZMin()                     const {return fZMin;}
48   Double_t           GetZMax()                     const {return fZMax;}
49   Double_t           GetMaxStep()                  const {return fMaxStep;}
50   Bool_t             IsActive()                    const {return !TestBit(kPassive);}
51   Bool_t             IsPassive()                   const {return TestBit(kPassive);}
52   Bool_t             GetOwnsClusterArray()         const {return TestBit(kOwnsClusterArray);}
53   //
54   void               SetID(Int_t i)                      {SetUniqueID(i);} 
55   void               SetActiveID(Int_t i)                {fActiveID = i;} 
56   void               SetRMin(Double_t r)                 {fRMin = r;}
57   void               SetRMax(Double_t r)                 {fRMax = r;}
58   void               SetR(Double_t r)                    {fR = r;}
59   void               SetZMin(Double_t z)                 {fZMin = z;}
60   void               SetZMax(Double_t z)                 {fZMax = z;}
61   void               SetPassive(Bool_t v=kTRUE)          {SetBit(kPassive,v);}
62   void               SetOwnsClusterArray(Bool_t v=kTRUE) {SetBit(kOwnsClusterArray,v);}
63   void               SetMaxStep(Double_t st)             {fMaxStep = st>0 ? st : 0.1;}
64   //
65   AliITSURecoSens*   GetSensor(Int_t i)            const {return (AliITSURecoSens*)fSensors->UncheckedAt(i);}
66   AliITSURecoSens*   GetSensor(Int_t row,Int_t sinrow)  const {return GetSensor(sinrow+row*fNSensorsPerRow);}
67   //
68   AliITSURecoSens*   GetSensorFromID(Int_t i)      const;
69   TClonesArray*      GetClusters()                 const {return (TClonesArray*)fClusters;}
70   TClonesArray**     GetClustersAddress()                {return (TClonesArray**)&fClusters;}  
71   Int_t              GetNClusters()                const {return fClusters ? fClusters->GetEntriesFast() : 0;}
72   AliCluster*        GetCluster(Int_t icl)         const {return (AliCluster*)fClusters->UncheckedAt(icl);}
73   void               SetClusters(TClonesArray* cl)       {fClusters = cl;}
74   //
75   //  Int_t              FindSensors(const double* impPar, AliITSURecoSens *sensors[AliITSURecoSens::kNNeighbors], int mcLab=-1);
76   Int_t              FindSensors(const double* impPar, AliITSURecoSens *sensors[kMaxSensMatching]);
77   //
78   virtual void       Print(Option_t* option = "")  const;
79   virtual Bool_t     IsSortable()                  const {return kTRUE;}
80   virtual Bool_t     IsEqual(const TObject* obj)   const;
81   virtual Int_t      Compare(const TObject* obj)   const;
82   //
83  protected:
84   void               Build();
85   Int_t              SensVIDtoMatrixID(Int_t i)    const {return fSensVIDtoMatrixID[i];}
86   //
87  protected:
88   Int_t              fActiveID;  // ID within active layers
89   Int_t              fNSensors;  // N of chips
90   Int_t              fNSensorRows; // N of sensor rows (sensors aligned at same phi and spanning the Z range of the layer)
91   Int_t              fNSensorsPerRow; // number of sensors in a row
92   Int_t*             fSensVIDtoMatrixID; //[fNSensors]
93   Double_t           fR;         // mean R
94   Double_t           fRMax;      // max  R
95   Double_t           fRMin;      // min  R
96   Double_t           fZMax;      // max  Z
97   Double_t           fZMin;      // min  Z
98   Double_t           fPhiOffs;   // offset in phi for 1st stave
99   Double_t           fSensDZInv; // inverse mean sensor Z span
100   Double_t           fSensDPhiInv;// inverse mean sensor dphi
101   Double_t           fMaxStep;   // max step in tracking X allowed within layer
102   TObjArray*         fSensors;   // sensors
103   AliITSUGeomTGeo*   fITSGeom;   // geometry interface
104   TClonesArray*      fClusters;  // clusters of the layer
105   //
106  private:
107   AliITSURecoLayer(const AliITSURecoLayer &source); 
108   AliITSURecoLayer& operator=(const AliITSURecoLayer &source); 
109   //
110
111   ClassDef(AliITSURecoLayer,1); // helper for layer data used in reco
112 };
113
114 #endif