3 #include <TEveManager.h>
5 #include <AliTOFdigit.h>
6 #include <AliTOFGeometry.h>
9 using namespace Alieve;
12 Bool_t TOFSector::fgStaticInitDone = kFALSE;
13 TEveFrameBox* TOFSector::fgTOFsectorFrameBox = 0;
14 TEveRGBAPalette* TOFSector::fgTOFsectorPalette = 0;
16 //_______________________________________________________
19 /* ************************************************************************ */
21 TOFSector::TOFSector(const Text_t* n, const Text_t* t) :
23 fTOFgeometry(new AliTOFGeometry()),
27 fDx(0), fDy(0), fDz(0),
29 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
30 fThreshold (5), fMaxVal (80),
35 fPlateFlag = new Bool_t[5];
36 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
39 fGeoManager = (TGeoManager*)gEve->GetGeometry("$REVESYS/alice-data/alice_fullgeo.root");
41 printf("ERROR: no TGeo\n");
45 /* ************************************************************************ */
47 TOFSector::TOFSector(TGeoManager *localGeoManager,
50 TEveQuadSet(Form("Sector%i",nSector)),
51 fTOFgeometry(new AliTOFGeometry()),
55 fDx(0), fDy(0), fDz(0),
57 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
58 fThreshold (5), fMaxVal (80),
60 fGeoManager(localGeoManager)
63 fPlateFlag = new Bool_t[5];
64 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
68 printf("ERROR: no TGeo\n");
75 /* ************************************************************************ */
77 TOFSector::TOFSector(TGeoManager *localGeoManager,
79 TClonesArray *tofArray)
81 TEveQuadSet(Form("Sector%i",nSector)),
82 fTOFgeometry(new AliTOFGeometry()),
86 fDx(0), fDy(0), fDz(0),
88 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
89 fThreshold (5), fMaxVal (80),
91 fGeoManager(localGeoManager)
94 fPlateFlag = new Bool_t[5];
95 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
100 /* ************************************************************************ */
102 TOFSector::TOFSector(TGeoManager *localGeoManager,
106 TEveQuadSet(Form("Sector%i",nSector)),
107 fTOFgeometry(new AliTOFGeometry()),
111 fDx(0), fDy(0), fDz(0),
113 //fPlateFlag0(kTRUE), fPlateFlag1(kTRUE), fPlateFlag2(kTRUE), fPlateFlag3(kTRUE), fPlateFlag4(kTRUE),
114 fThreshold (5), fMaxVal (80),
116 fGeoManager(localGeoManager)
119 fPlateFlag = new Bool_t[5];
120 for (Int_t ii=0; ii<5; ii++) fPlateFlag[ii]=kTRUE;
125 /* ************************************************************************ */
127 TOFSector::~TOFSector()
140 /* ************************************************************************ */
142 void TOFSector::SetDigitsInfo(TOFDigitsInfo* info)
144 if(fInfo) fInfo->DecRefCount();
146 if(fInfo) fInfo->IncRefCount();
150 /* ************************************************************************ */
151 void TOFSector::InitStatics()
153 if (fgStaticInitDone) return;
157 Float_t dy = 370.6*2.;
158 fgTOFsectorFrameBox = new TEveFrameBox();
160 fgTOFsectorFrameBox->SetAABox(-dx*0.5, -dy*0.5, -dz*0.5, dx, dy, dz);
161 fgTOFsectorFrameBox->SetFrameColor((Color_t) 32);//31);
163 //fgTOFsectorPalette = new TEveRGBAPalette(0, 2048); // TOT
164 fgTOFsectorPalette = new TEveRGBAPalette(0, 8192/*1024*/); // TDC
165 fgTOFsectorPalette->SetLimits(0, 8192);
167 fgStaticInitDone = kTRUE;
170 /* ************************************************************************ */
171 void TOFSector::InitModule()
174 fDx = fTOFgeometry->XPad()*fTOFgeometry->NpadX();
175 //fDy = fTOFgeometry->XPad()*fTOFgeometry->NpadX();
176 fDz = fTOFgeometry->ZPad()*fTOFgeometry->NpadZ();
178 if (!fgStaticInitDone) InitStatics();
180 SetFrame(fgTOFsectorFrameBox);
181 SetPalette(fgTOFsectorPalette);
182 //fFrame = fgTOFsectorFrameBox;
183 //fPalette = fgTOFsectorPalette;
191 /* ************************************************************************ */
192 void TOFSector::LoadQuads()
195 Reset(kQT_FreeQuad, kFALSE, 32);
197 //Int_t n_col = gStyle->GetNumberOfColors();
199 Int_t vol[5] = {fSectorID, -1, -1, -1, -1};
200 Int_t informations[4] = {-1, -1, -1, -1};
201 Int_t dummy[3] = {-1, -1, -1};
205 Double_t **coord = new Double_t*[4];
206 for (Int_t ii=0; ii<4; ii++) coord[ii] = new Double_t[3];
208 //printf(" fTOFarray->GetEntries() = %4i \n",fTOFarray->GetEntries());
210 if (fTOFtree && !fTOFarray) {
211 //printf("Hello world\n");
212 TClonesArray* digitsTOFnew = new TClonesArray("AliTOFdigit", 300);
214 fTOFarray = new TClonesArray("AliTOFdigit", 300);
215 TClonesArray &ldigits = *fTOFarray;
216 Int_t newCounter = 0;
220 fTOFtree->SetBranchAddress("TOF",&digitsTOFnew);
221 fTOFtree->GetEntry(0);
222 for (Int_t digitNumber=0; digitNumber<digitsTOFnew->GetEntries(); digitNumber++) {
224 //if (digitNumber==digitsTOF->GetEntries()-1) printf(" Hello 4 -> %3i digit of %i \n", digitNumber+1, digitsTOF->GetEntries());
226 digs = (AliTOFdigit*)digitsTOFnew->UncheckedAt(digitNumber);
228 if (digs->GetSector()!=fSectorID) continue;
230 vol[1] = digs->GetPlate(); // Plate Number (0-4)
231 vol[2] = digs->GetStrip(); // Strip Number (0-14/18)
232 vol[3] = digs->GetPadx(); // TEvePad Number in x direction (0-47)
233 vol[4] = digs->GetPadz(); // TEvePad Number in z direction (0-1)
235 informations[0] = digs->GetTdc();
236 informations[1] = digs->GetAdc();
237 informations[2] = digs->GetToT();
238 informations[3] = digs->GetTdcND();
239 new (ldigits[newCounter++]) AliTOFdigit(dummy, vol, informations);
243 AliTOFdigit *tofDigit;
244 //printf(" 0x%lx\n",fTOFarray);
245 for (Int_t ii=0; ii<fTOFarray->GetEntries(); ii++) {
247 tofDigit = (AliTOFdigit*)fTOFarray->UncheckedAt(ii);
249 if (fPlateFlag[tofDigit->GetPlate()]) {
251 vol[1] = tofDigit->GetPlate();
252 vol[2] = tofDigit->GetStrip();
253 vol[3] = tofDigit->GetPadz();
254 vol[4] = tofDigit->GetPadx();
256 tot = tofDigit->GetToT();
257 tdc = tofDigit->GetTdc();
259 //if (fSector==4 && fPlate==2 && fStrip==0) printf(" %2i %1i\n", iPadX, iPadZ);
260 //if (iPadX==23 || iPadX==24) printf(" %2i %1i %2i \n", fSector, fPlate, fStrip);
261 //if (vol[0]==4 && vol[1]==2 && vol[2]==7) {
263 for (Int_t kk=0; kk<4; kk++) for (Int_t jj=0; jj<3; jj++) coord[kk][jj]=0.;
265 fTOFgeometry->DetToSectorRF(vol, coord);
268 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[0][0], coord[0][1], coord[0][2]);
269 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[1][0], coord[1][1], coord[1][2]);
270 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[2][0], coord[2][1], coord[2][2]);
271 printf(" %1i %2i, %f %f %f \n", vol[3], vol[4], coord[3][0], coord[3][1], coord[3][2]);
273 Float_t vertices[12]={(Float_t)coord[0][0], (Float_t)coord[0][1], (Float_t)coord[0][2],
274 (Float_t)coord[1][0], (Float_t)coord[1][1], (Float_t)coord[1][2],
275 (Float_t)coord[2][0], (Float_t)coord[2][1], (Float_t)coord[2][2],
276 (Float_t)coord[3][0], (Float_t)coord[3][1], (Float_t)coord[3][2]};
279 //AddQuad((Float_t*)coord);
280 //AddQuad(coord[0], coord[1], coord[2], 2.5, 3.5);
281 //AddQuad(-2.5*0.5, -3.5*0.5, 2.5, 3.5);
283 // In principle could have color based on number of neigbours. We
284 // can insert the time-of-flight value for each pad
285 //QuadValue((Int_t)tot);
286 QuadValue((Int_t)tdc);
290 } // closed if control on plates switched on
291 } // closed loop on TOF sector digits
299 /* ************************************************************ */
300 void TOFSector::SetTrans()
302 fHMTrans.UnitTrans();
304 //Int_t det[5] = {fSector, -1, -1, -1, -1};
307 Int_t localSector = fSector;
308 if (!fAutoTrans) localSector = 4;
310 //fTOFgeometry->GetVolumePath(det,path);
311 fTOFgeometry->GetVolumePath(localSector,path);
312 fGeoManager->cd(path);
313 TGeoHMatrix global = *fGeoManager->GetCurrentMatrix();
314 Double_t *rotMat = global.GetRotationMatrix();
315 Double_t *tr = global.GetTranslation();
317 fHMTrans.SetBaseVec(1, rotMat[0], rotMat[3], rotMat[6]);
318 fHMTrans.SetBaseVec(2, rotMat[1], rotMat[4], rotMat[7]);
319 fHMTrans.SetBaseVec(3, rotMat[2], rotMat[5], rotMat[8]);
321 fHMTrans.SetBaseVec(4, tr);
324 //-----------------------------------------------------
326 void TOFSector::SetSectorID(Int_t id)
331 SetTrans(); // Force repositioning.
336 //-----------------------------------------------------
338 void TOFSector::SetPlate(Int_t nPlate, Bool_t r)
341 fPlateFlag[nPlate] = r;
343 //printf(" HELLO World ! %i %i %i \n", nPlate, r, fPlateFlag[nPlate]);
346 /**************************************************************************/
348 void TOFSector::SetThreshold(Short_t t)
350 fThreshold = TMath::Min(t, (Short_t)(fMaxVal - 1));
351 // ClearColorArray();
354 /**************************************************************************/
356 void TOFSector::SetMaxVal(Int_t mv)
358 fMaxVal = TMath::Max(mv, (Int_t)(fThreshold + 1));
362 /**************************************************************************/
364 void TOFSector::DigitSelected(Int_t idx)
366 // Override control-click from TEveQuadSet
368 DigitBase_t* qb = GetDigit(idx);
369 TObject* obj = qb->fId.GetObject();
370 AliTOFdigit* digs = dynamic_cast<AliTOFdigit*>(obj);
371 // printf("TOFSector::QuadSelected "); Print();
372 printf(" idx = %5i, value = %5d, obj = 0x%lx, digit = 0x%lx ",
373 idx, qb->fValue, (ULong_t)obj, (ULong_t)digs);
375 printf("-> Sector = %2i Plate = %1i Strip = %2i ToT = %3i Tof = %5i\n",
376 fSector , digs->GetPlate(), digs->GetStrip(), digs->GetToT(), digs->GetTdc());
381 /**************************************************************************/