]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSclustererV2.h
Using the recommended way of forward declarations for TVector and TMatrix (see v5...
[u/mrichter/AliRoot.git] / ITS / AliITSclustererV2.h
1 #ifndef ALIITSCLUSTERERV2_H
2 #define ALIITSCLUSTERERV2_H
3 //--------------------------------------------------------------
4 //                       ITS clusterer V2
5 //
6 //   This can be a "wrapping" for the V1 cluster finding classes
7 //   if compiled with uncommented "#define V1" line 
8 //   in the AliITSclustererV2.cxx file.
9 //
10 //   Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch 
11 //--------------------------------------------------------------
12 #include <TObject.h>
13
14 class TFile;
15 class TTree;
16 class TClonesArray;
17
18 class AliITSgeom;
19 class AliITSclusterV2;
20 class AliRawReader;
21 class AliITSRawStream;
22
23 class AliITSclustererV2 : public TObject {
24 public:
25   AliITSclustererV2(){ fEvent=0; fI=0;}
26   AliITSclustererV2(const AliITSgeom *geom);
27
28   void SetEvent(Int_t event) { fEvent=event; }
29   Int_t Digits2Clusters(TTree *in, TTree *out);
30   void Digits2Clusters(AliRawReader* rawReader);
31   void FindClustersSPD(const TClonesArray *dig, TClonesArray *cls);
32   void FindClustersSPD(AliITSRawStream* input, TClonesArray** clusters);
33   void FindClustersSDD(const TClonesArray *dig, TClonesArray *cls);
34   void FindClustersSDD(AliITSRawStream* input, TClonesArray** clusters);
35   void FindClustersSSD(const TClonesArray *dig, TClonesArray *cls);
36   void FindClustersSSD(AliITSRawStream* input, TClonesArray** clusters);
37
38   void RecPoints2Clusters(const TClonesArray *p, Int_t idx, TClonesArray *c);
39
40 private:
41   class Ali1Dcluster {
42   private:
43     Float_t fY; //cluster position
44     Float_t fQ; //cluster charge
45     Int_t fNd;  //number of digits
46     Int_t fLab[3]; //track label
47   public:
48     void SetY(Float_t y) {fY=y;}
49     void SetQ(Float_t q) {fQ=q;}
50     void SetNd(Int_t n)  {fNd=n;}
51     void SetLabels(Int_t *lab) {fLab[0]=lab[0];fLab[1]=lab[1];fLab[2]=lab[2];}
52     Float_t GetY() const {return fY;}
53     Float_t GetQ() const {return fQ;}
54     Int_t GetNd()const {return fNd;}
55     Int_t GetLabel(Int_t lab) const { return fLab[lab]; }
56   };
57   class AliBin {
58   public:
59     AliBin() {fIndex=0; fQ=0; fMask=0xFFFFFFFE;}
60     void SetIndex(UInt_t idx) {fIndex=idx;}
61     void SetQ(UShort_t q)  {fQ=q;}
62     void SetMask(UInt_t m) {fMask=m;}
63
64     void Use() {fMask&=0xFFFFFFFE;}
65     Bool_t IsNotUsed() const {return (fMask&1);}
66     Bool_t IsUsed() const {return !(IsNotUsed());}
67
68     UInt_t   GetIndex() const {return fIndex;}
69     UShort_t GetQ()     const {return fQ;}
70     UInt_t   GetMask()  const {return fMask;}
71   private:
72     UInt_t fIndex; //digit index
73     UInt_t fMask; //peak mask
74     UShort_t fQ;  //signal
75   };
76   static Bool_t IsMaximum(Int_t k, Int_t max, const AliBin *bins);
77   static void FindPeaks(Int_t k,Int_t m,AliBin*b,Int_t*idx,UInt_t*msk,Int_t&n);
78   static void MarkPeak(Int_t k, Int_t max, AliBin *bins, UInt_t m);
79   static void MakeCluster(Int_t k,Int_t max,AliBin *bins,UInt_t m,
80    AliITSclusterV2 &c);
81   void FindClustersSDD(AliBin* bins[2], Int_t nMaxBin, Int_t nMaxZ,
82                        const TClonesArray *dig, TClonesArray *cls);
83   void FindClustersSSD(Ali1Dcluster* neg, Int_t nn, 
84                        Ali1Dcluster* pos, Int_t np,
85                        TClonesArray *clusters);
86
87
88   static void FindCluster(Int_t k,Int_t maxz,AliBin *bins,Int_t &n,Int_t *idx);
89
90 protected:
91   Int_t fNModules;             // total number of modules
92
93 private:
94   Int_t fEvent;           //event number
95
96   Int_t fI;                     //index of the current subdetector
97   Float_t fYshift[2200];       //y-shifts of detector local coor. systems 
98   Float_t fZshift[2200];       //z-shifts of detector local coor. systems 
99   Int_t fNdet[2200];            //detector index  
100   Int_t fNlayer[2200];          //detector layer
101
102   //SPD related values:
103   Int_t fLastSPD1;       //index of the last SPD1 detector
104   Int_t fNySPD;          //number of pixels in Y
105   Int_t fNzSPD;          //number of pixels in Z
106   Float_t fYpitchSPD;    //pixel size in Y
107   Float_t fZ1pitchSPD,fZ2pitchSPD;    //pixel sizes in Z
108   Float_t fHwSPD;        //half width of the SPD detector
109   Float_t fHlSPD;        //half length of the SPD detector
110   Float_t fYSPD[260];    //Y-coordinates of pixel centers
111   Float_t fZSPD[170];    //Z-coordinates of pixel centers
112
113   //SDD related values:
114   Int_t fNySDD;           //number of "pixels" in Y
115   Int_t fNzSDD;           //number of "pixels" in Z
116   Float_t fYpitchSDD;     //"pixel size" in Y (drift direction)
117   Float_t fZpitchSDD;     //"pixel sizes" in Z
118   Float_t fHwSDD;         //half width of the SDD detector
119   Float_t fHlSDD;         //half length of the SDD detector
120   Float_t fYoffSDD;       //some delay in the drift channel   
121
122   //SSD related values:
123   Int_t fLastSSD1;        //index of the last SSD1 detector   
124   Float_t fYpitchSSD;     //strip pitch (cm)
125   Float_t fHwSSD;         //half-width of an SSD detector (cm)
126   Float_t fHlSSD;         //half-length of an SSD detector (cm)
127   Float_t fTanP;          //tangent of the stereo angle on the P side
128   Float_t fTanN;          //tangent of the stereo angle on the N side
129
130   ClassDef(AliITSclustererV2,1)  // ITS cluster finder V2
131 };
132
133 #endif