2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
9 #include "AliEveTOFSector.h"
11 #include <TEveManager.h>
13 #include <AliTOFdigit.h>
14 #include <AliTOFGeometry.h>
20 Bool_t AliEveTOFSector::fgStaticInitDone = kFALSE;
21 TEveFrameBox* AliEveTOFSector::fgTOFsectorFrameBox = 0;
22 TEveRGBAPalette* AliEveTOFSector::fgTOFsectorPalette = 0;
24 //_______________________________________________________
25 ClassImp(AliEveTOFSector)
27 /* ************************************************************************ */
29 AliEveTOFSector::AliEveTOFSector(const Text_t* n, const Text_t* t) :
31 fTOFgeometry(new AliTOFGeometry()),
35 fDx(0), fDy(0), fDz(0),
37 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
38 fThreshold (5), fMaxVal (80),
43 fPlateFlag = new Bool_t[5];
44 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
47 fGeoManager = (TGeoManager*)gEve->GetGeometry("$REVESYS/alice-data/alice_fullgeo.root");
49 printf("ERROR: no TGeo\n");
53 /* ************************************************************************ */
55 AliEveTOFSector::AliEveTOFSector(TGeoManager *localGeoManager,
58 TEveQuadSet(Form("Sector%i",nSector)),
59 fTOFgeometry(new AliTOFGeometry()),
63 fDx(0), fDy(0), fDz(0),
65 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
66 fThreshold (5), fMaxVal (80),
68 fGeoManager(localGeoManager)
71 fPlateFlag = new Bool_t[5];
72 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
76 printf("ERROR: no TGeo\n");
83 /* ************************************************************************ */
85 AliEveTOFSector::AliEveTOFSector(TGeoManager *localGeoManager,
87 TClonesArray *tofArray)
89 TEveQuadSet(Form("Sector%i",nSector)),
90 fTOFgeometry(new AliTOFGeometry()),
94 fDx(0), fDy(0), fDz(0),
96 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
97 fThreshold (5), fMaxVal (80),
99 fGeoManager(localGeoManager)
102 fPlateFlag = new Bool_t[5];
103 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
108 /* ************************************************************************ */
110 AliEveTOFSector::AliEveTOFSector(TGeoManager *localGeoManager,
114 TEveQuadSet(Form("Sector%i",nSector)),
115 fTOFgeometry(new AliTOFGeometry()),
119 fDx(0), fDy(0), fDz(0),
121 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
122 fThreshold (5), fMaxVal (80),
124 fGeoManager(localGeoManager)
127 fPlateFlag = new Bool_t[5];
128 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
133 /* ************************************************************************ */
135 AliEveTOFSector::~AliEveTOFSector()
148 /* ************************************************************************ */
150 void AliEveTOFSector::SetDigitsInfo(AliEveTOFDigitsInfo* info)
152 if(fInfo) fInfo->DecRefCount();
154 if(fInfo) fInfo->IncRefCount();
158 /* ************************************************************************ */
159 void AliEveTOFSector::InitStatics()
161 if (fgStaticInitDone) return;
165 Float_t dy = 370.6*2.;
166 fgTOFsectorFrameBox = new TEveFrameBox();
168 fgTOFsectorFrameBox->SetAABox(-dx*0.5, -dy*0.5, -dz*0.5, dx, dy, dz);
169 fgTOFsectorFrameBox->SetFrameColor((Color_t) 32);//31);
171 //fgTOFsectorPalette = new TEveRGBAPalette(0, 2048); // TOT
172 fgTOFsectorPalette = new TEveRGBAPalette(0, 8192/*1024*/); // TDC
173 fgTOFsectorPalette->SetLimits(0, 8192);
175 fgStaticInitDone = kTRUE;
178 /* ************************************************************************ */
179 void AliEveTOFSector::InitModule()
182 fDx = fTOFgeometry->XPad()*fTOFgeometry->NpadX();
183 //fDy = fTOFgeometry->XPad()*fTOFgeometry->NpadX();
184 fDz = fTOFgeometry->ZPad()*fTOFgeometry->NpadZ();
186 if (!fgStaticInitDone) InitStatics();
188 SetFrame(fgTOFsectorFrameBox);
189 SetPalette(fgTOFsectorPalette);
190 //fFrame = fgTOFsectorFrameBox;
191 //fPalette = fgTOFsectorPalette;
199 /* ************************************************************************ */
200 void AliEveTOFSector::LoadQuads()
203 Reset(kQT_FreeQuad, kFALSE, 32);
205 //Int_t n_col = gStyle->GetNumberOfColors();
207 Int_t vol[5] = {fSectorID, -1, -1, -1, -1};
208 Int_t informations[4] = {-1, -1, -1, -1};
209 Int_t dummy[3] = {-1, -1, -1};
213 Double_t **coord = new Double_t*[4];
214 for (Int_t ii=0; ii<4; ii++) coord[ii] = new Double_t[3];
216 //printf(" fTOFarray->GetEntries() = %4i \n",fTOFarray->GetEntries());
218 if (fTOFtree && !fTOFarray) {
219 //printf("Hello world\n");
220 TClonesArray* digitsTOFnew = new TClonesArray("AliTOFdigit", 300);
222 fTOFarray = new TClonesArray("AliTOFdigit", 300);
223 TClonesArray &ldigits = *fTOFarray;
224 Int_t newCounter = 0;
228 fTOFtree->SetBranchAddress("TOF",&digitsTOFnew);
229 fTOFtree->GetEntry(0);
230 for (Int_t digitNumber=0; digitNumber<digitsTOFnew->GetEntries(); digitNumber++) {
232 //if (digitNumber==digitsTOF->GetEntries()-1) printf(" Hello 4 -> %3i digit of %i \n", digitNumber+1, digitsTOF->GetEntries());
234 digs = (AliTOFdigit*)digitsTOFnew->UncheckedAt(digitNumber);
236 if (digs->GetSector()!=fSectorID) continue;
238 vol[1] = digs->GetPlate(); // Plate Number (0-4)
239 vol[2] = digs->GetStrip(); // Strip Number (0-14/18)
240 vol[3] = digs->GetPadx(); // TEvePad Number in x direction (0-47)
241 vol[4] = digs->GetPadz(); // TEvePad Number in z direction (0-1)
243 informations[0] = digs->GetTdc();
244 informations[1] = digs->GetAdc();
245 informations[2] = digs->GetToT();
246 informations[3] = digs->GetTdcND();
247 new (ldigits[newCounter++]) AliTOFdigit(dummy, vol, informations);
251 AliTOFdigit *tofDigit;
252 //printf(" 0x%lx\n",fTOFarray);
253 for (Int_t ii=0; ii<fTOFarray->GetEntries(); ii++) {
255 tofDigit = (AliTOFdigit*)fTOFarray->UncheckedAt(ii);
257 if (fPlateFlag[tofDigit->GetPlate()]) {
259 vol[1] = tofDigit->GetPlate();
260 vol[2] = tofDigit->GetStrip();
261 vol[3] = tofDigit->GetPadz();
262 vol[4] = tofDigit->GetPadx();
264 tot = tofDigit->GetToT();
265 tdc = tofDigit->GetTdc();
267 //if (fSector==4 && fPlate==2 && fStrip==0) printf(" %2i %1i\n", iPadX, iPadZ);
268 //if (iPadX==23 || iPadX==24) printf(" %2i %1i %2i \n", fSector, fPlate, fStrip);
269 //if (vol[0]==4 && vol[1]==2 && vol[2]==7) {
271 for (Int_t kk=0; kk<4; kk++) for (Int_t jj=0; jj<3; jj++) coord[kk][jj]=0.;
273 fTOFgeometry->DetToSectorRF(vol, coord);
276 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[0][0], coord[0][1], coord[0][2]);
277 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[1][0], coord[1][1], coord[1][2]);
278 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[2][0], coord[2][1], coord[2][2]);
279 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[3][0], coord[3][1], coord[3][2]);
281 Float_t vertices[12]={(Float_t)coord[0][0], (Float_t)coord[0][1], (Float_t)coord[0][2],
282 (Float_t)coord[1][0], (Float_t)coord[1][1], (Float_t)coord[1][2],
283 (Float_t)coord[2][0], (Float_t)coord[2][1], (Float_t)coord[2][2],
284 (Float_t)coord[3][0], (Float_t)coord[3][1], (Float_t)coord[3][2]};
287 //AddQuad((Float_t*)coord);
288 //AddQuad(coord[0], coord[1], coord[2], 2.5, 3.5);
289 //AddQuad(-2.5*0.5, -3.5*0.5, 2.5, 3.5);
291 // In principle could have color based on number of neigbours. We
292 // can insert the time-of-flight value for each pad
293 //QuadValue((Int_t)tot);
294 QuadValue((Int_t)tdc);
298 } // closed if control on plates switched on
299 } // closed loop on TOF sector digits
307 /* ************************************************************ */
308 void AliEveTOFSector::SetTrans()
310 fHMTrans.UnitTrans();
312 //Int_t det[5] = {fSector, -1, -1, -1, -1};
315 Int_t localSector = fSector;
316 if (!fAutoTrans) localSector = 4;
318 //fTOFgeometry->GetVolumePath(det,path);
319 fTOFgeometry->GetVolumePath(localSector,path);
320 fGeoManager->cd(path);
321 TGeoHMatrix global = *fGeoManager->GetCurrentMatrix();
322 Double_t *rotMat = global.GetRotationMatrix();
323 Double_t *tr = global.GetTranslation();
325 fHMTrans.SetBaseVec(1, rotMat[0], rotMat[3], rotMat[6]);
326 fHMTrans.SetBaseVec(2, rotMat[1], rotMat[4], rotMat[7]);
327 fHMTrans.SetBaseVec(3, rotMat[2], rotMat[5], rotMat[8]);
329 fHMTrans.SetBaseVec(4, tr);
332 //-----------------------------------------------------
334 void AliEveTOFSector::SetSectorID(Int_t id)
339 SetTrans(); // Force repositioning.
344 //-----------------------------------------------------
346 void AliEveTOFSector::SetPlate(Int_t nPlate, Bool_t r)
349 fPlateFlag[nPlate] = r;
351 //printf(" HELLO World ! %i %i %i \n", nPlate, r, fPlateFlag[nPlate]);
354 /******************************************************************************/
356 void AliEveTOFSector::SetThreshold(Short_t t)
358 fThreshold = TMath::Min(t, (Short_t)(fMaxVal - 1));
359 // ClearColorArray();
362 /******************************************************************************/
364 void AliEveTOFSector::SetMaxVal(Int_t mv)
366 fMaxVal = TMath::Max(mv, (Int_t)(fThreshold + 1));
370 /******************************************************************************/
372 void AliEveTOFSector::DigitSelected(Int_t idx)
374 // Override control-click from TEveQuadSet
376 DigitBase_t* qb = GetDigit(idx);
377 TObject* obj = qb->fId.GetObject();
378 AliTOFdigit* digs = dynamic_cast<AliTOFdigit*>(obj);
379 // printf("AliEveTOFSector::QuadSelected "); Print();
380 printf(" idx = %5i, value = %5d, obj = 0x%lx, digit = 0x%lx ",
381 idx, qb->fValue, (ULong_t)obj, (ULong_t)digs);
383 printf("-> Sector = %2i Plate = %1i Strip = %2i ToT = %3i Tof = %5i\n",
384 fSector , digs->GetPlate(), digs->GetStrip(), digs->GetToT(), digs->GetTdc());
389 /******************************************************************************/