]>
Commit | Line | Data |
---|---|---|
5a5a1232 | 1 | #include "ITSModule.h" |
2 | ||
3 | #include <AliITSdigitSPD.h> | |
4 | #include <AliITSdigitSDD.h> | |
5 | #include <AliITSdigitSSD.h> | |
6 | ||
7 | #include <TStyle.h> | |
8 | ||
9 | using namespace Reve; | |
10 | using namespace Alieve; | |
11 | using namespace std; | |
12 | ||
13 | Short_t ITSModule::fgSDDThreshold = 5; | |
14 | Short_t ITSModule::fgSDDMaxVal = 80; | |
15 | Short_t ITSModule::fgSSDThreshold = 2; | |
16 | Short_t ITSModule::fgSSDMaxVal = 100; | |
17 | ||
18 | ClassImp(ITSModule) | |
19 | ||
20 | /**************************************************************************/ | |
21 | ||
22 | void ITSModule::Init() | |
23 | { | |
24 | fTrans = false; | |
25 | fID = -1; | |
26 | fInfo = 0; | |
27 | } | |
28 | ||
29 | /**************************************************************************/ | |
30 | ||
31 | ITSModule::ITSModule(Int_t id, ITSDigitsInfo* info, Color_t col) : | |
092578a7 | 32 | QuadSet(Form("ITS module %d", id)), Reve::RenderElement(fFrameColor), |
33 | fFrameColor(col) | |
5a5a1232 | 34 | { |
35 | Init(); | |
36 | ||
37 | fInfo = info; | |
38 | SetID(id); | |
39 | } | |
40 | ||
41 | ITSModule::~ITSModule() | |
42 | { | |
43 | if(fInfo) fInfo->DecRefCount(); | |
44 | } | |
45 | ||
46 | /**************************************************************************/ | |
47 | ||
48 | void ITSModule::SetMainColor(Color_t col) | |
49 | { | |
50 | Reve::RenderElement::SetMainColor(col); | |
51 | if(!fQuads.empty()) { | |
52 | fQuads.front().ColorFromIdx(col); | |
53 | } | |
54 | } | |
55 | ||
56 | /**************************************************************************/ | |
57 | ||
58 | void ITSModule::SetID(Int_t id) | |
59 | { | |
60 | static const Exc_t eH("ITSModule::SetID "); | |
61 | ||
62 | if(fInfo == 0) | |
63 | throw(eH + "ITSDigitsInfo not set."); | |
64 | ||
65 | if (id < fInfo->fGeom->GetStartSPD() || id > fInfo->fGeom->GetLastSSD()) | |
66 | throw(eH + Form("%d is not valid. ID range from %d to %d", id, | |
67 | fInfo->fGeom->GetStartSPD(), fInfo->fGeom->GetLastSSD())); | |
68 | ||
69 | fID = id; | |
70 | InitModule(); | |
71 | } | |
72 | ||
73 | /**************************************************************************/ | |
74 | ||
75 | void ITSModule::InitModule() | |
76 | { | |
77 | fInfo->fGeom->GetModuleId(fID,fLayer,fLadder,fDet); | |
78 | SetName(Form("ITSModule %d", fID)); | |
79 | ||
80 | if (fID <= fInfo->fGeom->GetLastSPD()) { | |
81 | fDetID = 0; | |
82 | fDx = fInfo->fSegSPD->Dx()*0.00005; | |
83 | fDz = 3.48; | |
84 | fDy = fInfo->fSegSPD->Dy()*0.00005; | |
85 | } | |
86 | else if (fID <= fInfo->fGeom->GetLastSDD()) { | |
87 | fDetID = 1; | |
88 | fDx = fInfo->fSegSDD->Dx()*0.0001; | |
89 | fDz = fInfo->fSegSDD->Dz()*0.00005; | |
90 | fDy = fInfo->fSegSDD->Dy()*0.00005; | |
91 | } | |
92 | else { | |
93 | fDetID = 2; | |
94 | fInfo->fSegSSD->SetLayer(fLayer); | |
95 | fDx = fInfo->fSegSSD->Dx()*0.00005; | |
96 | fDz = fInfo->fSegSSD->Dz()*0.00005; | |
97 | fDy = fInfo->fSegSSD->Dy()*0.00005; | |
98 | } | |
99 | ||
100 | LoadQuads(); | |
101 | ComputeBBox(); | |
102 | SetTrans(); | |
103 | } | |
104 | ||
105 | void ITSModule::LoadQuads() | |
106 | { | |
107 | // printf("its module load quads \n"); | |
108 | Float_t x = fDx; | |
109 | Float_t z = fDz; | |
915dabe1 | 110 | Bool_t aboveThreshold = false; |
5a5a1232 | 111 | |
112 | // Module frame in xy plane | |
092578a7 | 113 | fQuads.push_back(Reve::Quad(fFrameColor)); |
5a5a1232 | 114 | Float_t dy = -0.; |
115 | Float_t* p = fQuads.back().vertices; | |
116 | p[0] = -x; p[1] = dy; p[2] = -z; | |
117 | p[3] = -x; p[4] = dy; p[5] = z; | |
118 | p[6] = x; p[7] = dy; p[8] = z; | |
119 | p[9] = x; p[10] = dy; p[11] = -z; | |
120 | ||
121 | // Digits | |
122 | TClonesArray *digits; | |
123 | Int_t ndigits; | |
124 | Float_t dpx,dpz; | |
125 | Int_t i,j; | |
126 | digits = fInfo->GetDigits(fID, fDetID ); | |
127 | ndigits = digits->GetEntriesFast(); | |
128 | Int_t n_col = gStyle->GetNumberOfColors(); | |
129 | ||
130 | switch(fDetID) { | |
131 | ||
132 | case 0: { // SPD | |
915dabe1 | 133 | aboveThreshold = true; |
5a5a1232 | 134 | AliITSsegmentationSPD* seg = fInfo->fSegSPD; |
135 | AliITSdigitSPD *d=0; | |
136 | ||
137 | for (Int_t k=0; k<ndigits; k++) { | |
138 | d=(AliITSdigitSPD*)digits->UncheckedAt(k); | |
139 | j = d->GetCoord1(); | |
140 | i = d->GetCoord2(); | |
141 | x = -seg->Dx()/2 + seg->Dpx(0) *i; | |
142 | x *= 0.0001; | |
143 | fInfo->GetSPDLocalZ(j,z); | |
144 | dpx = seg->Dpx(i)*0.0001; | |
145 | dpz = seg->Dpz(j)*0.0001; | |
146 | ||
147 | fQuads.push_back(Reve::Quad(7)); | |
148 | Float_t* p = fQuads.back().vertices; | |
149 | p[0] = x; p[1] = 0.; p[2] = z; | |
150 | p[3] = x; p[4] = 0.; p[5] = z + dpz; | |
151 | p[6] = x + dpx; p[7] = 0.; p[8] = z + dpz; | |
152 | p[9] = x + dpx; p[10] =0.; p[11] = z; | |
153 | } | |
154 | break; | |
155 | } | |
156 | ||
157 | case 1: { // SDD | |
158 | AliITSsegmentationSDD* seg = fInfo->fSegSDD; | |
159 | AliITSdigitSDD *d=0; | |
160 | x = 2*fDx; | |
161 | z = 2*fDz; | |
162 | for (Int_t k=0; k<ndigits; k++) { | |
163 | d=(AliITSdigitSDD*)digits->UncheckedAt(k); | |
164 | ||
165 | if (d->GetSignal() > fgSDDThreshold) { | |
166 | j = d->GetCoord1(); | |
167 | i = d->GetCoord2(); | |
915dabe1 | 168 | aboveThreshold = true; |
5a5a1232 | 169 | seg->DetToLocal(i,j,x,z); |
170 | dpx = seg->Dpx(i)*0.0001; | |
171 | dpz = seg->Dpz(j)*0.0001; | |
172 | ||
173 | Int_t ci = gStyle->GetColorPalette | |
174 | (TMath::Min(n_col - 1, | |
175 | (n_col*(d->GetSignal() - fgSDDThreshold))/(fgSDDMaxVal - fgSDDThreshold))); | |
176 | fQuads.push_back(Reve::Quad(ci, p)); | |
177 | Float_t* p = fQuads.back().vertices; | |
178 | p[0] = x; p[1] = 0.; p[2] = z; | |
179 | p[3] = x; p[4] = 0.; p[5] = z + dpz; | |
180 | p[6] = x + dpx; p[7] = 0.; p[8] = z + dpz; | |
181 | p[9] = x + dpx; p[10] =0.; p[11] = z; | |
182 | } | |
183 | } | |
184 | break; | |
185 | } | |
186 | ||
187 | case 2: { // SSD | |
188 | AliITSsegmentationSSD* seg = fInfo->fSegSSD; | |
189 | AliITSdigitSSD *d=0; | |
190 | Float_t ap,an,a; | |
191 | seg->Angles(ap,an); | |
192 | for (Int_t k=0; k<ndigits; k++) { | |
193 | d=(AliITSdigitSSD*)digits->UncheckedAt(k); | |
194 | if(d->GetSignal() > fgSSDThreshold){ | |
915dabe1 | 195 | aboveThreshold = true; |
5a5a1232 | 196 | j = d->GetCoord1(); |
197 | i = d->GetCoord2(); | |
198 | seg->DetToLocal(i,j,x,z); | |
199 | ||
200 | if( d->GetCoord1() == 1) { | |
201 | a = ap; | |
202 | } | |
203 | else { | |
204 | a = -an; | |
205 | } | |
206 | fQuads.push_back(Reve::Quad()); | |
207 | Int_t ci = gStyle->GetColorPalette | |
208 | (TMath::Min(n_col - 1, | |
209 | (n_col*(d->GetSignal() - fgSSDThreshold))/(fgSSDMaxVal - fgSSDThreshold))); | |
210 | ||
211 | fQuads.back().ColorFromIdx(ci); | |
212 | Float_t* p = fQuads.back().vertices; | |
213 | ||
214 | p[0] = x-TMath::Tan(a)*fDz; p[1] = 0; p[2] = -fDz; | |
215 | p[3] = x+TMath::Tan(a)*fDz; p[4] = 0; p[5] = fDz ; | |
216 | p[6] = x+TMath::Tan(a)*fDz; p[7] = 0; p[8] = fDz ; | |
217 | p[9] = x-TMath::Tan(a)*fDz; p[10] = 0; p[11] = -fDz; | |
218 | // printf("%3d -> %3d -> %8x\n", d->GetSignal(), ci, fQuads.back().color); | |
219 | } | |
220 | } | |
221 | break; | |
222 | } | |
223 | ||
224 | } | |
225 | } | |
226 | ||
227 | /**************************************************************************/ | |
228 | ||
229 | void ITSModule::SetTrans() | |
230 | { | |
231 | Double_t pos[3]; | |
232 | Double_t rot[9]; | |
233 | fInfo->fGeom->GetTrans(fID,pos); | |
234 | fInfo->fGeom->GetRotMatrix(fID,rot); | |
235 | Double_t *s, *d; | |
236 | ||
237 | // column major ii | |
238 | s = &rot[0]; d = &fMatrix[0]; | |
239 | d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0; | |
240 | s = &rot[1]; d = &fMatrix[4]; | |
241 | d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0; | |
242 | s = &rot[2]; d = &fMatrix[8]; | |
243 | d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0; | |
244 | s = &pos[0]; d = &fMatrix[12]; | |
245 | d[0] = s[0]; d[1] = s[1]; d[2] = s[2]; d[3] = 1; | |
246 | ||
247 | fTrans = true; | |
248 | } | |
249 | ||
250 | /**************************************************************************/ | |
251 | ||
252 | void ITSModule::Print(Option_t* ) const | |
253 | { | |
254 | printf("ID %d, layer %d, ladder %d, det %d \n", fID, fLayer, fLadder, fDetID); | |
255 | } |