new SDD preprocessor + removal of eff C++ warning (base) - E. Crescio
[u/mrichter/AliRoot.git] / ITS / AliITSclustererV2.h
CommitLineData
7f4044f0 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//--------------------------------------------------------------
c630aafd 12#include <TObject.h>
7f4044f0 13
14class TFile;
c630aafd 15class TTree;
7f4044f0 16class TClonesArray;
17
18class AliITSgeom;
19class AliITSclusterV2;
7941072e 20class AliRawReader;
c391f9d9 21class AliITSRawStream;
7f4044f0 22
c630aafd 23class AliITSclustererV2 : public TObject {
7f4044f0 24public:
e56160b8 25 AliITSclustererV2();
7f4044f0 26 AliITSclustererV2(const AliITSgeom *geom);
27
28 void SetEvent(Int_t event) { fEvent=event; }
c630aafd 29 Int_t Digits2Clusters(TTree *in, TTree *out);
7941072e 30 void Digits2Clusters(AliRawReader* rawReader);
7f4044f0 31 void FindClustersSPD(const TClonesArray *dig, TClonesArray *cls);
c391f9d9 32 void FindClustersSPD(AliITSRawStream* input, TClonesArray** clusters);
7f4044f0 33 void FindClustersSDD(const TClonesArray *dig, TClonesArray *cls);
c391f9d9 34 void FindClustersSDD(AliITSRawStream* input, TClonesArray** clusters);
7f4044f0 35 void FindClustersSSD(const TClonesArray *dig, TClonesArray *cls);
c391f9d9 36 void FindClustersSSD(AliITSRawStream* input, TClonesArray** clusters);
7f4044f0 37
1cca57bf 38 void RecPoints2Clusters(const TClonesArray *p, Int_t idx, TClonesArray *c);
7f4044f0 39
40private:
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:
e56160b8 59 AliBin():fIndex(0),fMask(0xFFFFFFFE),fQ(0) {}
7f4044f0 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);
c391f9d9 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
7f4044f0 87
88 static void FindCluster(Int_t k,Int_t maxz,AliBin *bins,Int_t &n,Int_t *idx);
89
0e986ef9 90protected:
91 Int_t fNModules; // total number of modules
92
7f4044f0 93private:
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
e43c066c 100 Int_t fNlayer[2200]; //detector layer
7f4044f0 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