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, AliT0digit *digits, AliT0RawReader *start)
39 : TEveQuadSet(n), fSigType(sigType), fDigits(digits), fStart(start)
42 // Default constructor
46 void AliEveT0Module::PrintEventInfo()
51 /******************************************************************************/
53 void AliEveT0Module::LoadRaw(AliRawReader* reader)
55 // Load raw-data from file.
57 AliT0digit *digits = 0;
59 // ??? How / when is this called during reco from raw?
60 reader->LoadEquipmentIdsMap("T0map.txt");
61 reader->RequireHeader(kTRUE);
63 AliT0RawReader *start = new AliT0RawReader(reader);
64 Int_t allData[110][5];
67 TEveRGBAPalette *rawPalette = new TEveRGBAPalette(0, 3000);
68 TEveRGBAPalette *vertexPalette = new TEveRGBAPalette(-100, 100);
70 TEveFrameBox *box = new TEveFrameBox();
74 for (Int_t i = 0; i < 36; ++i, p += 3) {
75 p[0] = 8.0f * TMath::Cos(TMath::TwoPi()*i/36);
76 p[1] = 8.0f * TMath::Sin(TMath::TwoPi()*i/36);
79 box->SetQuadByPoints(frame, 36);
81 box->SetFrameColor(kGray);
84 rawPalette->SetLimits(1, 3000); // Set proper raw time range.
85 TEveQuadSet* rawA = new AliEveT0Module("T0_RAW_A", 2, digits, start);
86 rawA->SetPalette(rawPalette);
87 rawA->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
89 TEveQuadSet* rawC = new AliEveT0Module("T0_RAW_C", 3, digits, start);
90 rawC->SetPalette(rawPalette);
91 rawC->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
94 TEveQuadSet* vertexT0 = new AliEveT0Module("T0_Vertex", 5, digits, start);
95 vertexT0->SetPalette(vertexPalette);
96 vertexT0->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
98 Float_t angle = 2 * TMath::Pi() / 12;
100 for (Int_t i=0; i<110; i++)
102 for (Int_t iHit=0; iHit<5; iHit++)
104 allData[i][iHit]= start->GetData(i,iHit);
105 if (allData[i][iHit] != 0) {
107 cout <<"event "<< AliEveEventManager::GetCurrent()->GetEventId()
108 <<" i "<< i <<" "<< allData[i][iHit] - allData[0][0] <<endl;
112 Float_t zvertex= (allData[51][0] - allData[52][0])/2*25*2.99752/100;
114 cout<<"zvertex= "<< zvertex <<endl;
115 for (Int_t i=0; i<12; i++)
117 Float_t x = 6.5 * TMath::Sin(i * angle);
118 Float_t y = 6.5 * TMath::Cos(i * angle);
119 rawA->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
120 rawA->QuadValue(start->GetData(i+37,0)-start->GetData(0,0));
121 rawC->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
122 rawC->QuadValue(start->GetData(i+25,0)-start->GetData(0,0));
124 vertexT0->AddHexagon(0, 0, 0, 1);
125 vertexT0->QuadValue(TMath::Nint(zvertex));
129 vertexT0->RefitPlex();
131 TEveTrans& taA = rawA->RefMainTrans();
132 taA.SetPos(0, 0, 373);
133 TEveTrans& tcC = rawC->RefMainTrans();
134 tcC.SetPos(0, 0, -69.7);
136 TEveTrans& tver = vertexT0->RefMainTrans();
137 tver.SetPos(0, 0, zvertex);
139 gEve->AddElement(rawA);
140 gEve->AddElement(rawC);
141 gEve->AddElement(vertexT0);
145 /******************************************************************************/
147 void AliEveT0Module::MakeModules(AliT0digit *digits)
149 // Make modules for digits.
156 digits->GetTimeCFD(tdc);
157 // printf("%3d\n",besttimeright);
158 for (Int_t i=0;i<24; i++){
159 printf("%3d %3d\n ",adc[i], tdc[i]);
162 TEveRGBAPalette* adcPalette = new TEveRGBAPalette(5, 1024);
163 adcPalette->SetLimits(1, 1024); // Set proper ADC range.
164 TEveRGBAPalette* tdcPalette = new TEveRGBAPalette(0, 9999);
165 tdcPalette->SetLimits(1, 9999); // Set proper TDC range.
167 TEveQuadSet* qa = new AliEveT0Module("T0A_ADC", 0, digits); qa->SetPalette(adcPalette);
168 TEveQuadSet* qc = new AliEveT0Module("T0C_ADC", 0, digits); qc->SetPalette(adcPalette);
169 TEveQuadSet* qat = new AliEveT0Module("T0A_TDC", 1, digits); qat->SetPalette(tdcPalette);
170 TEveQuadSet* qct = new AliEveT0Module("T0C_TDC", 1, digits); qct->SetPalette(tdcPalette);
172 Float_t angle = 2 * TMath::Pi() / 12;
174 qa->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
175 qc->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
176 qat->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
177 qct->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
179 for (Int_t i=0; i<12; i++) {
180 Float_t x = 6.5 * TMath::Sin(i * angle);
181 Float_t y = 6.5 * TMath::Cos(i * angle);
183 qa->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
184 qa->QuadValue(adc[i+12]);
185 // qa->QuadId(new TNamed(Form("PMT with idx=%d", i), "PMT's aplitude in side A."));
187 qat->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
188 qat->QuadValue(tdc[i+12]);
189 // qat->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side A."));
191 qc->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
192 qc->QuadValue(adc[i]);
193 // qc->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's amplitude in side C."));
195 qct->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
196 qct->QuadValue(tdc[i]);
197 // qct->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side C."));
205 TEveTrans& ta = qa->RefMainTrans();
206 ta.SetPos(0, 0, 373);
207 TEveTrans& tc = qc->RefMainTrans();
208 tc.SetPos(0, 0, -69.7);
210 TEveTrans& tat = qat->RefMainTrans();
211 tat.SetPos(0, 0, 373);
212 TEveTrans& tct = qct->RefMainTrans();
213 tct.SetPos(0, 0, -69.7);
215 gEve->AddElement(qa);
216 gEve->AddElement(qc);
217 gEve->AddElement(qat);
218 gEve->AddElement(qct);
223 /******************************************************************************/
225 void AliEveT0Module::DigitSelected(Int_t idx)
227 // Override control-click from TEveQuadSet
229 DigitBase_t* qb = GetDigit(idx);
230 if (fSigType == 0) { //ADC
231 printf("adc====================\n");
232 Int_t besttimeright = fDigits->BestTimeA();
233 Int_t besttimeleft = fDigits->BestTimeC();
234 Int_t meantime = fDigits->MeanTime();
235 Int_t timediff = fDigits->TimeDiff();
236 Int_t summult = fDigits->SumMult();
238 printf("besttimeA=%3d\n",besttimeright);
239 printf("besttimeC=%3d\n",besttimeleft);
240 printf("meantime=%3d\n",meantime);
241 printf("timediff=%3d\n",timediff);
242 printf("summult=%3d\n",summult);
244 printf(" idx=%d, amplitude=%d\n", idx, qb->fValue);
248 printf("tdc====================\n");
250 Int_t besttimeright = fDigits->BestTimeA();
251 Int_t besttimeleft = fDigits->BestTimeC();
252 Int_t meantime = fDigits->MeanTime();
253 Int_t timediff = fDigits->TimeDiff();
254 Int_t summult = fDigits->SumMult();
256 printf("besttimeA=%3d\n",besttimeright);
257 printf("besttimeC=%3d\n",besttimeleft);
258 printf("meantime=%3d\n",meantime);
259 printf("timediff=%3d\n",timediff);
260 printf("summult=%3d\n",summult);
262 printf(" idx=%d, amplitude=%d\n", idx, qb->fValue);
265 printf("raw====================\n");
266 printf("besttimeA=%3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
267 printf("besttimeC=%3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
268 printf("meantime=%3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
269 printf("amplitude= %3d\n",fStart->GetData(idx+1,0));
271 printf(" idx=%d, time %d\n", idx, qb->fValue);
274 printf("raw====================\n");
275 printf("besttimeA=%3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
276 printf("besttimeC=%3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
277 printf("meantime=%3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
278 printf("amplitude= %3d\n",fStart->GetData(idx+13,0));
280 printf(" idx=%d, time %d\n", idx, qb->fValue);
284 printf("vertex====================\n");
285 printf(" idx=%d, zvertex pozition %d\n", idx, qb->fValue);