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