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