]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Alieve/ITSModule.cxx
Add getter for fValueIsColor.
[u/mrichter/AliRoot.git] / EVE / Alieve / ITSModule.cxx
CommitLineData
5a5a1232 1#include "ITSModule.h"
2
3#include <AliITSdigitSPD.h>
4#include <AliITSdigitSDD.h>
5#include <AliITSdigitSSD.h>
6
7#include <TStyle.h>
8
9using namespace Reve;
10using namespace Alieve;
5a5a1232 11
9efc978d 12
13Bool_t ITSModule::fgStaticInitDone = kFALSE;
14
15FrameBox* ITSModule::fgSPDFrameBox = 0;
16FrameBox* ITSModule::fgSDDFrameBox = 0;
17FrameBox* ITSModule::fgSSDFrameBox = 0;
18
19RGBAPalette* ITSModule::fgSPDPalette = 0;
20RGBAPalette* ITSModule::fgSDDPalette = 0;
21RGBAPalette* ITSModule::fgSSDPalette = 0;
22
23//__________________________________________________________________________
24// ITSModule
25//
26//
5a5a1232 27
28ClassImp(ITSModule)
29
30/**************************************************************************/
31
9efc978d 32ITSModule::ITSModule(const Text_t* n, const Text_t* t) :
33 QuadSet(n, t),
265ecb21 34 fInfo(0),
35 fID(-1), fDetID(-1),
36 fLayer(-1), fLadder(-1), fDet(-1),
9efc978d 37 fDx(0), fDz(0), fDy(0)
27db2029 38{}
5a5a1232 39
9c8221e9 40ITSModule::ITSModule(Int_t gid, ITSDigitsInfo* info) :
41 QuadSet(Form("ITS module %d", gid)),
27db2029 42 fInfo (0),
265ecb21 43 fID(-1), fDetID(-1),
44 fLayer(-1), fLadder(-1), fDet(-1),
9efc978d 45 fDx(0), fDz(0), fDy(0)
5a5a1232 46{
27db2029 47 SetDigitsInfo(info);
9c8221e9 48 SetID(gid);
5a5a1232 49}
50
51ITSModule::~ITSModule()
52{
53 if(fInfo) fInfo->DecRefCount();
54}
55
56/**************************************************************************/
57
9efc978d 58void ITSModule::InitStatics(ITSDigitsInfo* info)
59{
60 if (fgStaticInitDone) return;
9c8221e9 61 fgStaticInitDone = kTRUE;
9efc978d 62
63 {
64 Float_t dx = info->fSegSPD->Dx()*0.00005;
65 Float_t dz = 3.48;
66
67 fgSPDFrameBox = new FrameBox();
68 fgSPDFrameBox->SetAAQuadXZ(-dx, 0, -dz, 2*dx, 2*dz);
69 fgSPDFrameBox->SetFrameColor((Color_t) 31);
5bdbb9ca 70 fgSPDPalette = new RGBAPalette(0, 1);
9efc978d 71 }
72
73 {
74 Float_t dx = info->fSegSDD->Dx()*0.0001;
75 Float_t dz = info->fSegSDD->Dz()*0.00005;
76
77 fgSDDFrameBox = new FrameBox();
78 fgSDDFrameBox->SetAAQuadXZ(-dx, 0, -dz, 2*dx, 2*dz);
79 fgSDDFrameBox->SetFrameColor((Color_t) 32);
5bdbb9ca 80 fgSDDPalette = new RGBAPalette(5, 80);
81 fgSDDPalette->SetLimits(0, 512); // Set proper ADC range.
9efc978d 82 }
83
84 {
85 Float_t dx = info->fSegSSD->Dx()*0.00005;
86 Float_t dz = info->fSegSSD->Dz()*0.00005;
87
88 fgSSDFrameBox = new FrameBox();
89 fgSSDFrameBox->SetAAQuadXZ(-dx, 0, -dz, 2*dx, 2*dz);
90 fgSSDFrameBox->SetFrameColor((Color_t) 33);
5bdbb9ca 91 fgSSDPalette = new RGBAPalette(2, 100);
92 fgSSDPalette->SetLimits(0, 1024); // Set proper ADC range.
9efc978d 93 }
94
95}
96
97/**************************************************************************/
98
9c8221e9 99void ITSModule::SetDigitsInfo(ITSDigitsInfo* info)
5a5a1232 100{
9c8221e9 101 if (fInfo == info) return;
102 if (fInfo) fInfo->DecRefCount();
103 fInfo = info;
104 if (fInfo) fInfo->IncRefCount();
105}
106
107/**************************************************************************/
108
109void ITSModule::SetID(Int_t gid)
110{
111 static const Exc_t eH("ITSModule::SetID ");
9efc978d 112
9c8221e9 113 if(fInfo == 0)
114 throw(eH + "ITSDigitsInfo not set.");
115
116 if (gid < fInfo->fGeom->GetStartSPD() || gid > fInfo->fGeom->GetLastSSD())
117 throw(eH + Form("%d is not valid. ID range from %d to %d", gid,
1d3c2b09 118 fInfo->fGeom->GetStartSPD(), fInfo->fGeom->GetLastSSD()));
9c8221e9 119
120 fID = gid;
121
1d3c2b09 122 if (!fgStaticInitDone) {
123 InitStatics(fInfo);
124
125 fgSPDFrameBox->IncRefCount(this);
126 fgSPDPalette->IncRefCount();
127
128 fgSDDFrameBox->IncRefCount(this);
129 fgSDDPalette->IncRefCount();
130
131 fgSSDFrameBox->IncRefCount(this);
132 fgSSDPalette->IncRefCount();
133 }
9c8221e9 134
135 fInfo->fGeom->GetModuleId(fID, fLayer, fLadder, fDet);
ba6cfb13 136 TString strLadder = "Ladder";
137 TString strSensor = "Sensor";
138 TString symname;
9c8221e9 139 Int_t id, nsector, nstave, nladder, rest;
ba6cfb13 140
9efc978d 141 if (fID <= fInfo->fGeom->GetLastSPD())
142 {
143 // SPD
144
9c8221e9 145 SetFrame(fgSPDFrameBox);
146 SetPalette(fgSPDPalette);
147
9efc978d 148 symname += strLadder;
149 if (fID < 80)
150 {
ba6cfb13 151 nsector = fID/8;
9efc978d 152 rest = fID - 8*nsector;
153 nstave = 1;
154 }
155 else
156 {
157 id = fID - 80;
ba6cfb13 158 nsector = id/8;
9efc978d 159 rest = id - 8*nsector;
160 nstave = 1;
ba6cfb13 161 }
9efc978d 162 if (rest < 4) nstave = 0;
163 rest -= 4*nstave;
164 symname += rest;
165 SetName(symname);
166 fDetID = 0;
167 fDx = fInfo->fSegSPD->Dx()*0.00005;
168 fDz = 3.48;
169 fDy = fInfo->fSegSPD->Dy()*0.00005;
170
5a5a1232 171 }
9efc978d 172 else if (fID <= fInfo->fGeom->GetLastSDD())
173 {
174 // SDD
175
9c8221e9 176 SetFrame(fgSDDFrameBox);
177 SetPalette(fgSDDPalette);
178
9efc978d 179 symname += strSensor;
180 if (fID < 324)
181 {
182 id = fID - 240;
ba6cfb13 183 nladder = id/6;
9efc978d 184 rest = id - 6*nladder;
185 }
186 else
187 {
188 id = fID - 324;
ba6cfb13 189 nladder = id/8;
9efc978d 190 rest = id - 8*nladder;
ba6cfb13 191 }
9efc978d 192 symname += rest;
193 SetName(symname);
194 fDetID = 1;
195 fDx = fInfo->fSegSDD->Dx()*0.0001;
196 fDz = fInfo->fSegSDD->Dz()*0.00005;
197 fDy = fInfo->fSegSDD->Dy()*0.00005;
198
5a5a1232 199 }
9efc978d 200 else
201 {
202 // SSD
203
9c8221e9 204 SetFrame(fgSSDFrameBox);
205 SetPalette(fgSSDPalette);
206
9efc978d 207 symname += strSensor;
208 if (fID < 1248)
209 {
210 id = fID - 500;
ba6cfb13 211 nladder = id/22;
9efc978d 212 rest = id - nladder*22;
213 }
214 else
215 {
216 id = fID - 1248;
ba6cfb13 217 nladder = id/25;
9efc978d 218 rest = id - nladder*25;
ba6cfb13 219 }
9efc978d 220 symname += rest;
221 SetName(symname);
222 fDetID = 2;
223 fInfo->fSegSSD->SetLayer(fLayer);
224 fDx = fInfo->fSegSSD->Dx()*0.00005;
225 fDz = fInfo->fSegSSD->Dz()*0.00005;
226 fDy = fInfo->fSegSSD->Dy()*0.00005;
227
5a5a1232 228 }
229
230 LoadQuads();
231 ComputeBBox();
232 SetTrans();
233}
234
235void ITSModule::LoadQuads()
236{
9efc978d 237 // Here we still use 'z' for the name of axial coordinates.
238 // The transforamtion matrix aplied rotates y -> z.
239 // We need this as QuadSet offers optimized treatment for
240 // quads in the x-y plane.
241
5a5a1232 242 // printf("its module load quads \n");
9efc978d 243
5a5a1232 244 TClonesArray *digits;
9efc978d 245 Float_t x, z, dpx, dpz;
246 Int_t i, j, ndigits;
247 digits = fInfo->GetDigits(fID, fDetID);
5a5a1232 248 ndigits = digits->GetEntriesFast();
5a5a1232 249
9efc978d 250 switch(fDetID)
251 {
252
253 case 0: { // SPD
254 AliITSsegmentationSPD* seg = fInfo->fSegSPD;
255
697c88e6 256 Reset(QT_RectangleXZFixedY, kFALSE, 32);
5a5a1232 257
9efc978d 258 for (Int_t k=0; k<ndigits; ++k)
259 {
260 AliITSdigitSPD *d = (AliITSdigitSPD*) digits->UncheckedAt(k);
5a5a1232 261 j = d->GetCoord1();
262 i = d->GetCoord2();
9efc978d 263 x = -0.5*seg->Dx() + i*seg->Dpx(0);
264 x *= 0.0001;
265 fInfo->GetSPDLocalZ(j, z);
5a5a1232 266 dpx = seg->Dpx(i)*0.0001;
267 dpz = seg->Dpz(j)*0.0001;
268
9efc978d 269 AddQuad(x, z, dpx, dpz);
270 QuadValue(1); // In principle could have color based on number of neigbours
ffa36681 271 QuadId(d);
5a5a1232 272 }
9efc978d 273 break;
5a5a1232 274 }
5a5a1232 275
9efc978d 276 case 1: { // SDD
277 AliITSsegmentationSDD *seg = fInfo->fSegSDD;
5a5a1232 278
697c88e6 279 Reset(QT_RectangleXZFixedY, kFALSE, 32);
9efc978d 280
281 for (Int_t k=0; k<ndigits; ++k)
282 {
283 AliITSdigitSDD* d = (AliITSdigitSDD*) digits->UncheckedAt(k);
284
285 // if (d->GetSignal() > fgSDDThreshold)
286 {
287 j = d->GetCoord1();
288 i = d->GetCoord2();
289 seg->DetToLocal(i, j, x, z);
290 dpx = seg->Dpx(i)*0.0001;
291 dpz = seg->Dpz(j)*0.0001;
292
697c88e6 293 AddQuad(x-2*dpx, z, 4*dpx, dpz);
9efc978d 294 QuadValue(d->GetSignal());
ffa36681 295 QuadId(d);
5a5a1232 296 }
9efc978d 297 }
298 break;
299 }
300
301 case 2: { // SSD
302 AliITSsegmentationSSD* seg = fInfo->fSegSSD;
303
697c88e6 304 Reset(QT_LineXZFixedY, kFALSE, 32);
9efc978d 305
306 Float_t ap, an; // positive/negative angles -> offsets
307 seg->Angles(ap, an);
308 ap = TMath::Tan(ap) * fDz;
309 an = - TMath::Tan(an) * fDz;
310
311 for (Int_t k=0; k<ndigits; ++k)
312 {
313 AliITSdigitSSD *d = (AliITSdigitSSD*) digits->UncheckedAt(k);
314 // if(d->GetSignal() > fgSSDThreshold)
315 {
316 j = d->GetCoord1();
317 i = d->GetCoord2();
318 seg->DetToLocal(i,j,x,z);
319
320 Float_t a = ( d->GetCoord1() == 1) ? ap : an;
321
e974c097 322 AddLine(x-a, -fDz, 2*a, 2*fDz);
9efc978d 323 QuadValue(d->GetSignal());
ffa36681 324 QuadId(d);
9efc978d 325 // printf("%3d -> %3d -> %8x\n", d->GetSignal(), ci, fQuads.back().color);
5a5a1232 326 }
5a5a1232 327 }
9efc978d 328 break;
5a5a1232 329 }
5a5a1232 330
9efc978d 331 } // end switch
332
333 RefitPlex();
5a5a1232 334}
335
336/**************************************************************************/
337
338void ITSModule::SetTrans()
339{
9efc978d 340 Double_t x[9];
341 fHMTrans.UnitTrans();
342
343 // column major
344 fInfo->fGeom->GetRotMatrix(fID, x);
345 fHMTrans.SetBaseVec(1, x[0], x[3], x[6]);
346 fHMTrans.SetBaseVec(2, x[1], x[4], x[7]);
347 fHMTrans.SetBaseVec(3, x[2], x[5], x[8]);
348 // translation
349 fInfo->fGeom->GetTrans(fID, x);
350 fHMTrans.SetBaseVec(4, x);
5a5a1232 351}
352
353/**************************************************************************/
354
ffa36681 355void ITSModule::QuadSelected(Int_t idx)
356{
357 // Override control-click from QuadSet
358
359 QuadBase* qb = GetQuad(idx);
360 TObject* obj = qb->fId.GetObject();
361 AliITSdigit* d = dynamic_cast<AliITSdigit*>(obj);
362 printf("ITSModule::QuadSelected "); Print();
363 printf(" idx=%d, value=%d, obj=0x%lx, digit=0x%lx\n",
364 idx, qb->fValue, (ULong_t)obj, (ULong_t)d);
365 if (d)
366 printf(" coord1=%3d coord2=%3d signal=%d\n",
367 d->GetCoord1(), d->GetCoord2(), d->GetSignal());
368
369}
370
371/**************************************************************************/
372
5a5a1232 373void ITSModule::Print(Option_t* ) const
374{
375 printf("ID %d, layer %d, ladder %d, det %d \n", fID, fLayer, fLadder, fDetID);
376}