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 **************************************************************************/
10 //////////////////////////////////////////////////////////////////////////
12 // The main AliEVE drawing module for the T0 detector //
14 //////////////////////////////////////////////////////////////////////////
16 #include "AliEveT0Module.h"
18 #include <EveBase/AliEveEventManager.h>
20 #include <AliT0digit.h>
21 #include <AliRawReader.h>
22 #include <AliRawReaderRoot.h>
23 #include <AliT0RawReader.h>
24 #include <AliCDBStorage.h>
26 #include <TEveTrans.h>
27 #include <TEveManager.h>
35 ClassImp(AliEveT0Module)
37 /******************************************************************************/
38 AliEveT0Module::AliEveT0Module(const Text_t* n, Int_t sigType,
39 AliT0digit *digits, AliT0RawReader *start,
41 TEveQuadSet(n), fSigType(sigType),
42 fDigits(digits), fStart(start),
46 // Default constructor
50 void AliEveT0Module::PrintEventInfo()
52 printf("Z-vertex = %f\n", fZVertex);
55 /******************************************************************************/
57 void AliEveT0Module::LoadRaw(AliRawReader* reader)
59 // Load raw-data from file.
61 AliT0digit *digits = 0;
63 // ??? How / when is this called during reco from raw?
64 reader->LoadEquipmentIdsMap("T0map.txt");
65 reader->RequireHeader(kTRUE);
67 AliT0RawReader *start = new AliT0RawReader(reader);
68 Int_t allData[110][5];
70 Float_t angle = 2 * TMath::Pi() / 12;
72 for (Int_t i=0; i<110; i++)
74 for (Int_t iHit=0; iHit<5; iHit++)
76 allData[i][iHit]= start->GetData(i,iHit);
79 Double_t zvertex = (allData[51][0] - allData[52][0])/2*25*2.99752/100;
80 //std::cout<<"zvertex= "<< zvertex <<endl;
82 TEveRGBAPalette *rawPalette = new TEveRGBAPalette(0, 3000);
83 TEveRGBAPalette *vertexPalette = new TEveRGBAPalette(-100, 100);
85 TEveFrameBox *box = new TEveFrameBox();
89 for (Int_t i = 0; i < 36; ++i, p += 3) {
90 p[0] = 8.0f * TMath::Cos(TMath::TwoPi()*i/36);
91 p[1] = 8.0f * TMath::Sin(TMath::TwoPi()*i/36);
94 box->SetQuadByPoints(frame, 36);
96 box->SetFrameColor(kGray);
99 rawPalette->SetLimits(1, 3000); // Set proper raw time range.
100 TEveQuadSet* rawA = new AliEveT0Module("T0_RAW_A", 2, digits, start, zvertex);
101 rawA->SetPalette(rawPalette);
102 rawA->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
104 TEveQuadSet* rawC = new AliEveT0Module("T0_RAW_C", 3, digits, start, zvertex);
105 rawC->SetPalette(rawPalette);
106 rawC->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
109 TEveQuadSet* vertexT0 = new AliEveT0Module("T0_Vertex", 5, digits, start, zvertex);
110 vertexT0->SetPalette(vertexPalette);
111 vertexT0->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
113 for (Int_t i=0; i<12; i++)
115 Float_t x = 6.5 * TMath::Sin(i * angle);
116 Float_t y = 6.5 * TMath::Cos(i * angle);
117 rawA->AddHexagon(x, y, 0, 1.0);
118 rawA->QuadValue(start->GetData(i+37,0)-start->GetData(0,0));
119 rawC->AddHexagon(x, y, 0, 1.0);
120 rawC->QuadValue(start->GetData(i+25,0)-start->GetData(0,0));
122 vertexT0->AddHexagon(0, 0, 0, 1);
123 vertexT0->QuadValue(TMath::Nint(zvertex));
127 vertexT0->RefitPlex();
129 TEveTrans& taA = rawA->RefMainTrans();
130 taA.SetPos(0, 0, 373);
131 TEveTrans& tcC = rawC->RefMainTrans();
132 tcC.SetPos(0, 0, -69.7);
134 TEveTrans& tver = vertexT0->RefMainTrans();
135 tver.SetPos(0, 0, zvertex);
137 gEve->AddElement(rawA);
138 gEve->AddElement(rawC);
139 gEve->AddElement(vertexT0);
143 /******************************************************************************/
145 void AliEveT0Module::MakeModules(AliT0digit *digits)
147 // Make modules for digits.
153 digits->GetTimeCFD(tdc);
154 // printf("%3d\n",besttimeright);
155 // for (Int_t i=0;i<24; i++) {
156 // printf("%3d %3d\n ",adc[i], tdc[i]);
159 TEveRGBAPalette* adcPalette = new TEveRGBAPalette(5, 1024);
160 adcPalette->SetLimits(1, 1024); // Set proper ADC range.
161 TEveRGBAPalette* tdcPalette = new TEveRGBAPalette(0, 9999);
162 tdcPalette->SetLimits(1, 9999); // Set proper TDC range.
164 TEveQuadSet* qa = new AliEveT0Module("T0A_ADC", 0, digits); qa->SetPalette(adcPalette);
165 TEveQuadSet* qc = new AliEveT0Module("T0C_ADC", 0, digits); qc->SetPalette(adcPalette);
166 TEveQuadSet* qat = new AliEveT0Module("T0A_TDC", 1, digits); qat->SetPalette(tdcPalette);
167 TEveQuadSet* qct = new AliEveT0Module("T0C_TDC", 1, digits); qct->SetPalette(tdcPalette);
169 Float_t angle = 2 * TMath::Pi() / 12;
171 qa->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
172 qc->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
173 qat->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
174 qct->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
176 for (Int_t i=0; i<12; i++) {
177 Float_t x = 6.5 * TMath::Sin(i * angle);
178 Float_t y = 6.5 * TMath::Cos(i * angle);
180 qa->AddHexagon(x, y, 0, 1.0);
181 qa->QuadValue(adc[i+12]);
182 // qa->QuadId(new TNamed(Form("PMT with idx=%d", i), "PMT's aplitude in side A."));
184 qat->AddHexagon(x, y, 0, 1.0);
185 qat->QuadValue(tdc[i+12]);
186 // qat->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side A."));
188 qc->AddHexagon(x, y, 0, 1.0);
189 qc->QuadValue(adc[i]);
190 // qc->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's amplitude in side C."));
192 qct->AddHexagon(x, y, 0, 1.0);
193 qct->QuadValue(tdc[i]);
194 // qct->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side C."));
202 TEveTrans& ta = qa->RefMainTrans();
203 ta.SetPos(0, 0, 373);
204 TEveTrans& tc = qc->RefMainTrans();
205 tc.SetPos(0, 0, -69.7);
207 TEveTrans& tat = qat->RefMainTrans();
208 tat.SetPos(0, 0, 373);
209 TEveTrans& tct = qct->RefMainTrans();
210 tct.SetPos(0, 0, -69.7);
212 gEve->AddElement(qa);
213 gEve->AddElement(qc);
214 gEve->AddElement(qat);
215 gEve->AddElement(qct);
220 /******************************************************************************/
222 void AliEveT0Module::DigitSelected(Int_t idx)
224 // Override control-click from TEveQuadSet
226 DigitBase_t* qb = GetDigit(idx);
227 if (fSigType == 0) { //ADC
228 printf("adc====================\n");
229 Int_t besttimeright = fDigits->BestTimeA();
230 Int_t besttimeleft = fDigits->BestTimeC();
231 Int_t meantime = fDigits->MeanTime();
232 Int_t timediff = fDigits->TimeDiff();
233 Int_t summult = fDigits->SumMult();
235 printf("besttimeA = %3d\n", besttimeright);
236 printf("besttimeC = %3d\n", besttimeleft);
237 printf("meantime = %3d\n", meantime);
238 printf("timediff = %3d\n", timediff);
239 printf("summult = %3d\n", summult);
241 printf(" idx=%d, amplitude=%d\n", idx, qb->fValue);
245 printf("tdc====================\n");
247 Int_t besttimeright = fDigits->BestTimeA();
248 Int_t besttimeleft = fDigits->BestTimeC();
249 Int_t meantime = fDigits->MeanTime();
250 Int_t timediff = fDigits->TimeDiff();
251 Int_t summult = fDigits->SumMult();
253 printf("besttimeA = %3d\n",besttimeright);
254 printf("besttimeC = %3d\n",besttimeleft);
255 printf("meantime = %3d\n",meantime);
256 printf("timediff = %3d\n",timediff);
257 printf("summult = %3d\n",summult);
259 printf(" idx=%d, amplitude=%d\n", idx, qb->fValue);
262 printf("raw====================\n");
263 printf("besttimeA = %3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
264 printf("besttimeC = %3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
265 printf("meantime = %3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
266 printf("amplitude = %3d\n",fStart->GetData(idx+1,0));
268 printf(" idx=%d, time %d\n", idx, qb->fValue);
271 printf("raw====================\n");
272 printf("besttimeA = %3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
273 printf("besttimeC = %3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
274 printf("meantime = %3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
275 printf("amplitude = %3d\n",fStart->GetData(idx+13,0));
277 printf(" idx=%d, time %d\n", idx, qb->fValue);
281 printf("vertex====================\n");
282 printf(" idx=%d, zvertex pozition %d\n", idx, qb->fValue);