3 #include <AliITSdigitSPD.h>
4 #include <AliITSdigitSDD.h>
5 #include <AliITSdigitSSD.h>
10 using namespace Alieve;
13 Bool_t ITSModule::fgStaticInitDone = kFALSE;
15 FrameBox* ITSModule::fgSPDFrameBox = 0;
16 FrameBox* ITSModule::fgSDDFrameBox = 0;
17 FrameBox* ITSModule::fgSSDFrameBox = 0;
19 RGBAPalette* ITSModule::fgSPDPalette = 0;
20 RGBAPalette* ITSModule::fgSDDPalette = 0;
21 RGBAPalette* ITSModule::fgSSDPalette = 0;
23 //__________________________________________________________________________
30 /**************************************************************************/
32 ITSModule::ITSModule(const Text_t* n, const Text_t* t) :
36 fLayer(-1), fLadder(-1), fDet(-1),
37 fDx(0), fDz(0), fDy(0)
40 ITSModule::ITSModule(Int_t gid, ITSDigitsInfo* info) :
41 QuadSet(Form("ITS module %d", gid)),
44 fLayer(-1), fLadder(-1), fDet(-1),
45 fDx(0), fDz(0), fDy(0)
51 ITSModule::~ITSModule()
53 if(fInfo) fInfo->DecRefCount();
56 /**************************************************************************/
58 void ITSModule::InitStatics(ITSDigitsInfo* info)
60 if (fgStaticInitDone) return;
61 fgStaticInitDone = kTRUE;
64 Float_t dx = info->fSegSPD->Dx()*0.00005;
67 fgSPDFrameBox = new FrameBox();
68 fgSPDFrameBox->SetAAQuadXZ(-dx, 0, -dz, 2*dx, 2*dz);
69 fgSPDFrameBox->SetFrameColor((Color_t) 31);
70 fgSPDPalette = new RGBAPalette(0, 1);
74 Float_t dx = info->fSegSDD->Dx()*0.0001;
75 Float_t dz = info->fSegSDD->Dz()*0.00005;
77 fgSDDFrameBox = new FrameBox();
78 fgSDDFrameBox->SetAAQuadXZ(-dx, 0, -dz, 2*dx, 2*dz);
79 fgSDDFrameBox->SetFrameColor((Color_t) 32);
80 fgSDDPalette = new RGBAPalette(5, 80);
81 fgSDDPalette->SetLimits(0, 512); // Set proper ADC range.
85 Float_t dx = info->fSegSSD->Dx()*0.00005;
86 Float_t dz = info->fSegSSD->Dz()*0.00005;
88 fgSSDFrameBox = new FrameBox();
89 fgSSDFrameBox->SetAAQuadXZ(-dx, 0, -dz, 2*dx, 2*dz);
90 fgSSDFrameBox->SetFrameColor((Color_t) 33);
91 fgSSDPalette = new RGBAPalette(2, 100);
92 fgSSDPalette->SetLimits(0, 1024); // Set proper ADC range.
97 /**************************************************************************/
99 void ITSModule::SetDigitsInfo(ITSDigitsInfo* info)
101 if (fInfo == info) return;
102 if (fInfo) fInfo->DecRefCount();
104 if (fInfo) fInfo->IncRefCount();
107 /**************************************************************************/
109 void ITSModule::SetID(Int_t gid)
111 static const Exc_t eH("ITSModule::SetID ");
114 throw(eH + "ITSDigitsInfo not set.");
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,
118 fInfo->fGeom->GetStartSPD(), fInfo->fGeom->GetLastSSD()));
122 if (!fgStaticInitDone) InitStatics(fInfo);
124 fInfo->fGeom->GetModuleId(fID, fLayer, fLadder, fDet);
125 TString strLadder = "Ladder";
126 TString strSensor = "Sensor";
128 Int_t id, nsector, nstave, nladder, rest;
130 if (fID <= fInfo->fGeom->GetLastSPD())
134 SetFrame(fgSPDFrameBox);
135 SetPalette(fgSPDPalette);
137 symname += strLadder;
141 rest = fID - 8*nsector;
148 rest = id - 8*nsector;
151 if (rest < 4) nstave = 0;
156 fDx = fInfo->fSegSPD->Dx()*0.00005;
158 fDy = fInfo->fSegSPD->Dy()*0.00005;
161 else if (fID <= fInfo->fGeom->GetLastSDD())
165 SetFrame(fgSDDFrameBox);
166 SetPalette(fgSDDPalette);
168 symname += strSensor;
173 rest = id - 6*nladder;
179 rest = id - 8*nladder;
184 fDx = fInfo->fSegSDD->Dx()*0.0001;
185 fDz = fInfo->fSegSDD->Dz()*0.00005;
186 fDy = fInfo->fSegSDD->Dy()*0.00005;
193 SetFrame(fgSSDFrameBox);
194 SetPalette(fgSSDPalette);
196 symname += strSensor;
201 rest = id - nladder*22;
207 rest = id - nladder*25;
212 fInfo->fSegSSD->SetLayer(fLayer);
213 fDx = fInfo->fSegSSD->Dx()*0.00005;
214 fDz = fInfo->fSegSSD->Dz()*0.00005;
215 fDy = fInfo->fSegSSD->Dy()*0.00005;
224 void ITSModule::LoadQuads()
226 // Here we still use 'z' for the name of axial coordinates.
227 // The transforamtion matrix aplied rotates y -> z.
228 // We need this as QuadSet offers optimized treatment for
229 // quads in the x-y plane.
231 // printf("its module load quads \n");
233 TClonesArray *digits;
234 Float_t x, z, dpx, dpz;
236 digits = fInfo->GetDigits(fID, fDetID);
237 ndigits = digits->GetEntriesFast();
243 AliITSsegmentationSPD* seg = fInfo->fSegSPD;
245 Reset(QT_RectangleXZFixedY, kFALSE, 32);
247 for (Int_t k=0; k<ndigits; ++k)
249 AliITSdigitSPD *d = (AliITSdigitSPD*) digits->UncheckedAt(k);
252 x = -0.5*seg->Dx() + i*seg->Dpx(0);
254 fInfo->GetSPDLocalZ(j, z);
255 dpx = seg->Dpx(i)*0.0001;
256 dpz = seg->Dpz(j)*0.0001;
258 AddQuad(x, z, dpx, dpz);
259 QuadValue(1); // In principle could have color based on number of neigbours
265 AliITSsegmentationSDD *seg = fInfo->fSegSDD;
267 Reset(QT_RectangleXZFixedY, kFALSE, 32);
269 for (Int_t k=0; k<ndigits; ++k)
271 AliITSdigitSDD* d = (AliITSdigitSDD*) digits->UncheckedAt(k);
273 // if (d->GetSignal() > fgSDDThreshold)
277 seg->DetToLocal(i, j, x, z);
278 dpx = seg->Dpx(i)*0.0001;
279 dpz = seg->Dpz(j)*0.0001;
281 AddQuad(x-2*dpx, z, 4*dpx, dpz);
282 QuadValue(d->GetSignal());
289 AliITSsegmentationSSD* seg = fInfo->fSegSSD;
291 Reset(QT_LineXZFixedY, kFALSE, 32);
293 Float_t ap, an; // positive/negative angles -> offsets
295 ap = TMath::Tan(ap) * fDz;
296 an = - TMath::Tan(an) * fDz;
298 for (Int_t k=0; k<ndigits; ++k)
300 AliITSdigitSSD *d = (AliITSdigitSSD*) digits->UncheckedAt(k);
301 // if(d->GetSignal() > fgSSDThreshold)
305 seg->DetToLocal(i,j,x,z);
307 Float_t a = ( d->GetCoord1() == 1) ? ap : an;
309 AddLine(x-a, -fDz, 2*a, 2*fDz);
310 QuadValue(d->GetSignal());
311 // printf("%3d -> %3d -> %8x\n", d->GetSignal(), ci, fQuads.back().color);
322 /**************************************************************************/
324 void ITSModule::SetTrans()
327 fHMTrans.UnitTrans();
330 fInfo->fGeom->GetRotMatrix(fID, x);
331 fHMTrans.SetBaseVec(1, x[0], x[3], x[6]);
332 fHMTrans.SetBaseVec(2, x[1], x[4], x[7]);
333 fHMTrans.SetBaseVec(3, x[2], x[5], x[8]);
335 fInfo->fGeom->GetTrans(fID, x);
336 fHMTrans.SetBaseVec(4, x);
339 /**************************************************************************/
341 void ITSModule::Print(Option_t* ) const
343 printf("ID %d, layer %d, ladder %d, det %d \n", fID, fLayer, fLadder, fDetID);