]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveDet/AliEveTOFSector.cxx
Merge changes from branches/dev/EVE. This branch was following development in ROOT...
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTOFSector.cxx
CommitLineData
d810d0de 1// $Id$
2// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
51346b82 7 * full copyright notice. *
d810d0de 8 **************************************************************************/
9#include "AliEveTOFSector.h"
8616d353 10
8616d353 11#include <AliTOFdigit.h>
28a21457 12#include <AliTOFGeometry.h>
8616d353 13
a15e6d7d 14#include <TEveTrans.h>
15#include <TEveManager.h>
8616d353 16#include <TStyle.h>
d810d0de 17
fd31e9de 18Bool_t AliEveTOFSector::fgStaticInitDone = kFALSE;
d810d0de 19TEveFrameBox* AliEveTOFSector::fgTOFsectorFrameBox = 0;
20TEveRGBAPalette* AliEveTOFSector::fgTOFsectorPalette = 0;
8616d353 21
22//_______________________________________________________
d810d0de 23ClassImp(AliEveTOFSector)
8616d353 24
25/* ************************************************************************ */
26
d810d0de 27AliEveTOFSector::AliEveTOFSector(const Text_t* n, const Text_t* t) :
84aff7a4 28 TEveQuadSet(n, t),
28a21457 29 fTOFgeometry(new AliTOFGeometry()),
8616d353 30 fTOFarray(0x0),
31 fTOFtree(0x0),
32 fSector(-1),
33 fDx(0), fDy(0), fDz(0),
34 fAutoTrans (kTRUE),
ee9d8eca 35 //fMinTime (0), fMaxTime (0),
36 fThreshold (5), fMaxVal (80),
8616d353 37 fSectorID (0),
ee9d8eca 38 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
39 fPlateFlag (0x0),
40 //fFrameColor(4),
41 //fRnrFrame (kFALSE),
8616d353 42 fGeoManager(0)
43{
44
45 fPlateFlag = new Bool_t[5];
46 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
47
ee9d8eca 48
49 //fGeoManager = (TGeoManager*)gEve->GetGeometry("$REVESYS/alice-data/alice_fullgeo.root");
8616d353 50 if (!fGeoManager) {
51 printf("ERROR: no TGeo\n");
52 }
fd31e9de 53
ee9d8eca 54}
8616d353 55/* ************************************************************************ */
56
ee9d8eca 57AliEveTOFSector::AliEveTOFSector(TGeoManager *localGeoManager,
58 Int_t nSector)
59 :
60 TEveQuadSet(Form("Sector%i",nSector)),
28a21457 61 fTOFgeometry(new AliTOFGeometry()),
8616d353 62 fTOFarray(0x0),
63 fTOFtree(0x0),
64 fSector(nSector),
65 fDx(0), fDy(0), fDz(0),
66 fAutoTrans (kTRUE),
ee9d8eca 67 //fMinTime (0), fMaxTime (0),
fd31e9de 68 fThreshold (5), fMaxVal (80),
8616d353 69 fSectorID (nSector),
ee9d8eca 70 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
71 fPlateFlag (0x0),
72 //fFrameColor(4),
73 //fRnrFrame (kFALSE),
8616d353 74 fGeoManager(localGeoManager)
75{
76
77 fPlateFlag = new Bool_t[5];
78 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
79
80 /*
81 if (!fGeoManager) {
82 printf("ERROR: no TGeo\n");
83 }
84 */
85
86 InitModule();
fd31e9de 87
ee9d8eca 88}
8616d353 89/* ************************************************************************ */
90
d810d0de 91AliEveTOFSector::AliEveTOFSector(TGeoManager *localGeoManager,
8616d353 92 Int_t nSector,
93 TClonesArray *tofArray)
94 :
84aff7a4 95 TEveQuadSet(Form("Sector%i",nSector)),
28a21457 96 fTOFgeometry(new AliTOFGeometry()),
8616d353 97 fTOFarray(tofArray),
98 fTOFtree(0x0),
99 fSector(nSector),
100 fDx(0), fDy(0), fDz(0),
101 fAutoTrans (kTRUE),
ee9d8eca 102 //fMinTime (0), fMaxTime (0),
103 fThreshold (5), fMaxVal (80),
8616d353 104 fSectorID (nSector),
ee9d8eca 105 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
106 fPlateFlag (0x0),
107 //fFrameColor(4),
108 //fRnrFrame (kFALSE),
8616d353 109 fGeoManager(localGeoManager)
110{
111
112 fPlateFlag = new Bool_t[5];
113 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
114
115 InitModule();
116
117}
118/* ************************************************************************ */
119
ee9d8eca 120AliEveTOFSector::AliEveTOFSector(TGeoManager *localGeoManager,
121 Int_t nSector,
122 TTree *tofTree)
123 :
124 TEveQuadSet(Form("Sector%i",nSector)),
28a21457 125 fTOFgeometry(new AliTOFGeometry()),
8616d353 126 fTOFarray(0x0),
127 fTOFtree(tofTree),
128 fSector(nSector),
129 fDx(0), fDy(0), fDz(0),
130 fAutoTrans (kTRUE),
ee9d8eca 131 //fMinTime (0), fMaxTime (0),
132 fThreshold (5), fMaxVal (80),
8616d353 133 fSectorID (nSector),
ee9d8eca 134 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
135 fPlateFlag (0x0),
136 //fFrameColor(4),
137 //fRnrFrame (kFALSE),
8616d353 138 fGeoManager(localGeoManager)
139{
140
141 fPlateFlag = new Bool_t[5];
142 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
143
144 InitModule();
145
146}
147/* ************************************************************************ */
148
d810d0de 149AliEveTOFSector::~AliEveTOFSector()
8616d353 150{
151 /*
152 fGeoManager = 0x0;
153 delete fGeoManager;
154
155 delete fTOFarray;
156 fTOFarray = 0x0;
157 */
158 delete fPlateFlag;
159
160}
161
162/* ************************************************************************ */
163/*
d810d0de 164void AliEveTOFSector::SetDigitsInfo(AliEveTOFDigitsInfo* info)
8616d353 165{
166 if(fInfo) fInfo->DecRefCount();
167 fInfo = info;
168 if(fInfo) fInfo->IncRefCount();
169
170}
171*/
172/* ************************************************************************ */
d810d0de 173void AliEveTOFSector::InitStatics()
8616d353 174{
175 if (fgStaticInitDone) return;
176
177 Float_t dx = 124.5;
178 Float_t dz = 29.;
179 Float_t dy = 370.6*2.;
84aff7a4 180 fgTOFsectorFrameBox = new TEveFrameBox();
8616d353 181
182 fgTOFsectorFrameBox->SetAABox(-dx*0.5, -dy*0.5, -dz*0.5, dx, dy, dz);
183 fgTOFsectorFrameBox->SetFrameColor((Color_t) 32);//31);
184
84aff7a4 185 //fgTOFsectorPalette = new TEveRGBAPalette(0, 2048); // TOT
ee9d8eca 186 //fgTOFsectorPalette->SetLimits(0, 2048);
187 fgTOFsectorPalette = new TEveRGBAPalette(0, 8192); // TDC
188 //fgTOFsectorPalette->SetLimits(0, 8192);
a8256688 189 fgTOFsectorPalette->SetOverflowAction(0);
8616d353 190
191 fgStaticInitDone = kTRUE;
192}
193
194/* ************************************************************************ */
d810d0de 195void AliEveTOFSector::InitModule()
8616d353 196{
197
198 fDx = fTOFgeometry->XPad()*fTOFgeometry->NpadX();
199 //fDy = fTOFgeometry->XPad()*fTOFgeometry->NpadX();
200 fDz = fTOFgeometry->ZPad()*fTOFgeometry->NpadZ();
201
202 if (!fgStaticInitDone) InitStatics();
203
204 SetFrame(fgTOFsectorFrameBox);
205 SetPalette(fgTOFsectorPalette);
206 //fFrame = fgTOFsectorFrameBox;
207 //fPalette = fgTOFsectorPalette;
208
51346b82 209 LoadQuads();
8616d353 210 ComputeBBox();
211 SetTrans();
212
213}
214
215/* ************************************************************************ */
d810d0de 216void AliEveTOFSector::LoadQuads()
8616d353 217{
218
8616d353 219 //Int_t n_col = gStyle->GetNumberOfColors();
220
221 Int_t vol[5] = {fSectorID, -1, -1, -1, -1};
222 Int_t informations[4] = {-1, -1, -1, -1};
223 Int_t dummy[3] = {-1, -1, -1};
224 Int_t tdc = -1;
225 Int_t tot = -1;
226
227 Double_t **coord = new Double_t*[4];
228 for (Int_t ii=0; ii<4; ii++) coord[ii] = new Double_t[3];
229
ee9d8eca 230 Reset(kQT_FreeQuad, kFALSE, 32);
231
8616d353 232 //printf(" fTOFarray->GetEntries() = %4i \n",fTOFarray->GetEntries());
233
234 if (fTOFtree && !fTOFarray) {
235 //printf("Hello world\n");
236 TClonesArray* digitsTOFnew = new TClonesArray("AliTOFdigit", 300);
237
238 fTOFarray = new TClonesArray("AliTOFdigit", 300);
239 TClonesArray &ldigits = *fTOFarray;
240 Int_t newCounter = 0;
241
242 AliTOFdigit *digs;
243
244 fTOFtree->SetBranchAddress("TOF",&digitsTOFnew);
245 fTOFtree->GetEntry(0);
246 for (Int_t digitNumber=0; digitNumber<digitsTOFnew->GetEntries(); digitNumber++) {
247
248 //if (digitNumber==digitsTOF->GetEntries()-1) printf(" Hello 4 -> %3i digit of %i \n", digitNumber+1, digitsTOF->GetEntries());
51346b82 249
8616d353 250 digs = (AliTOFdigit*)digitsTOFnew->UncheckedAt(digitNumber);
251
252 if (digs->GetSector()!=fSectorID) continue;
253
254 vol[1] = digs->GetPlate(); // Plate Number (0-4)
255 vol[2] = digs->GetStrip(); // Strip Number (0-14/18)
ee9d8eca 256 vol[3] = digs->GetPadx(); // Pad Number in x direction (0-47)
257 vol[4] = digs->GetPadz(); // Pad Number in z direction (0-1)
8616d353 258
259 informations[0] = digs->GetTdc();
260 informations[1] = digs->GetAdc();
261 informations[2] = digs->GetToT();
262 informations[3] = digs->GetTdcND();
263 new (ldigits[newCounter++]) AliTOFdigit(dummy, vol, informations);
264 }
265 }
266
267 AliTOFdigit *tofDigit;
268 //printf(" 0x%lx\n",fTOFarray);
269 for (Int_t ii=0; ii<fTOFarray->GetEntries(); ii++) {
270
271 tofDigit = (AliTOFdigit*)fTOFarray->UncheckedAt(ii);
51346b82 272
8616d353 273 if (fPlateFlag[tofDigit->GetPlate()]) {
274
275 vol[1] = tofDigit->GetPlate();
276 vol[2] = tofDigit->GetStrip();
277 vol[3] = tofDigit->GetPadz();
278 vol[4] = tofDigit->GetPadx();
279
280 tot = tofDigit->GetToT();
281 tdc = tofDigit->GetTdc();
282
283 //if (fSector==4 && fPlate==2 && fStrip==0) printf(" %2i %1i\n", iPadX, iPadZ);
284 //if (iPadX==23 || iPadX==24) printf(" %2i %1i %2i \n", fSector, fPlate, fStrip);
285 //if (vol[0]==4 && vol[1]==2 && vol[2]==7) {
286
287 for (Int_t kk=0; kk<4; kk++) for (Int_t jj=0; jj<3; jj++) coord[kk][jj]=0.;
288
289 fTOFgeometry->DetToSectorRF(vol, coord);
290 /*
291 printf("\n");
292 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[0][0], coord[0][1], coord[0][2]);
293 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[1][0], coord[1][1], coord[1][2]);
294 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[2][0], coord[2][1], coord[2][2]);
295 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[3][0], coord[3][1], coord[3][2]);
296 */
297 Float_t vertices[12]={(Float_t)coord[0][0], (Float_t)coord[0][1], (Float_t)coord[0][2],
298 (Float_t)coord[1][0], (Float_t)coord[1][1], (Float_t)coord[1][2],
299 (Float_t)coord[2][0], (Float_t)coord[2][1], (Float_t)coord[2][2],
300 (Float_t)coord[3][0], (Float_t)coord[3][1], (Float_t)coord[3][2]};
51346b82 301
8616d353 302 AddQuad(vertices);
303 //AddQuad((Float_t*)coord);
304 //AddQuad(coord[0], coord[1], coord[2], 2.5, 3.5);
305 //AddQuad(-2.5*0.5, -3.5*0.5, 2.5, 3.5);
306
307 // In principle could have color based on number of neigbours. We
308 // can insert the time-of-flight value for each pad
ee9d8eca 309
8616d353 310 //QuadValue((Int_t)tot);
311 QuadValue((Int_t)tdc);
312 QuadId(tofDigit);
51346b82 313
8616d353 314 //}
315 } // closed if control on plates switched on
316 } // closed loop on TOF sector digits
317
318 RefitPlex();
319
320 fTOFarray = 0x0;
51346b82 321
8616d353 322}
323
324/* ************************************************************ */
d810d0de 325void AliEveTOFSector::SetTrans()
8616d353 326{
a15e6d7d 327 InitMainTrans();
328 TEveTrans& t = RefMainTrans();
8616d353 329
330 //Int_t det[5] = {fSector, -1, -1, -1, -1};
331 Char_t path[100];
332
333 Int_t localSector = fSector;
334 if (!fAutoTrans) localSector = 4;
335
336 //fTOFgeometry->GetVolumePath(det,path);
337 fTOFgeometry->GetVolumePath(localSector,path);
338 fGeoManager->cd(path);
339 TGeoHMatrix global = *fGeoManager->GetCurrentMatrix();
340 Double_t *rotMat = global.GetRotationMatrix();
341 Double_t *tr = global.GetTranslation();
342
a15e6d7d 343 t.SetBaseVec(1, rotMat[0], rotMat[3], rotMat[6]);
344 t.SetBaseVec(2, rotMat[1], rotMat[4], rotMat[7]);
345 t.SetBaseVec(3, rotMat[2], rotMat[5], rotMat[8]);
346 t.SetBaseVec(4, tr);
8616d353 347}
348
349//-----------------------------------------------------
350
d810d0de 351void AliEveTOFSector::SetSectorID(Int_t id)
8616d353 352{
353 fSectorID = id;
354 fSector = id;
355 if (fAutoTrans)
356 SetTrans(); // Force repositioning.
357
358 LoadQuads();
359}
360
361//-----------------------------------------------------
362
d810d0de 363void AliEveTOFSector::SetPlate(Int_t nPlate, Bool_t r)
8616d353 364{
365
366 fPlateFlag[nPlate] = r;
367
368 //printf(" HELLO World ! %i %i %i \n", nPlate, r, fPlateFlag[nPlate]);
369}
370
57ffa5fb 371/******************************************************************************/
8616d353 372
d810d0de 373void AliEveTOFSector::SetThreshold(Short_t t)
8616d353 374{
375 fThreshold = TMath::Min(t, (Short_t)(fMaxVal - 1));
376 // ClearColorArray();
377}
378
57ffa5fb 379/******************************************************************************/
8616d353 380
d810d0de 381void AliEveTOFSector::SetMaxVal(Int_t mv)
8616d353 382{
383 fMaxVal = TMath::Max(mv, (Int_t)(fThreshold + 1));
384 //ClearColorArray();
385}
386
57ffa5fb 387/******************************************************************************/
8616d353 388
d810d0de 389void AliEveTOFSector::DigitSelected(Int_t idx)
8616d353 390{
ee9d8eca 391 // Override control-click from TEveQuadSet
8616d353 392
84aff7a4 393 DigitBase_t* qb = GetDigit(idx);
8616d353 394 TObject* obj = qb->fId.GetObject();
395 AliTOFdigit* digs = dynamic_cast<AliTOFdigit*>(obj);
d810d0de 396 // printf("AliEveTOFSector::QuadSelected "); Print();
ee9d8eca 397 /*
8616d353 398 printf(" idx = %5i, value = %5d, obj = 0x%lx, digit = 0x%lx ",
399 idx, qb->fValue, (ULong_t)obj, (ULong_t)digs);
ee9d8eca 400 */
8616d353 401 if (digs)
ee9d8eca 402 printf("\n Sector = %2i Plate = %1i Strip = %2i PadZ = %1i PadX = %2i ToT = %3i Tof = %5i\n",
403 fSector , digs->GetPlate(), digs->GetStrip(), digs->GetPadz(), digs->GetPadx(), digs->GetToT(), digs->GetTdc());
8616d353 404 else printf("\n");
405
406}
407
57ffa5fb 408/******************************************************************************/