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 /******************************************************************************/
48 void AliEveT0Module::LoadRaw(TString fileName, Int_t ievt)
50 // Load raw-data from file.
52 AliT0digit *digits = 0;
53 AliRawReader *reader = new AliRawReaderRoot(fileName,ievt);
54 reader->LoadEquipmentIdsMap("T0map.txt");
55 reader->RequireHeader(kTRUE);
56 AliT0RawReader *start = new AliT0RawReader(reader);
57 Int_t allData[110][5];
60 TEveRGBAPalette* rawPalette = new TEveRGBAPalette(0, 3000);
61 TEveRGBAPalette* vertexPalette = new TEveRGBAPalette(-100, 100);
63 rawPalette->SetLimits(1, 3000); // Set proper raw time range.
64 TEveQuadSet* rawA = new AliEveT0Module("T0_RAW_A", 2, digits, start);
65 rawA->SetPalette(rawPalette);
66 rawA->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
67 TEveQuadSet* rawC = new AliEveT0Module("T0_RAW_C", 3, digits, start);
68 rawC->SetPalette(rawPalette);
69 rawC->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
71 TEveQuadSet* vertexT0 = new AliEveT0Module("T0_Vertex", 5, digits, start);
72 vertexT0->SetPalette(vertexPalette);
73 vertexT0->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
75 Float_t angle = 2 * TMath::Pi() / 12;
77 for (Int_t i=0; i<110; i++)
79 for (Int_t iHit=0; iHit<5; iHit++)
81 allData[i][iHit]= start->GetData(i,iHit);
82 if (allData[i][iHit] != 0) {
84 cout <<"event"<< ievt <<" i "<< i <<" "<< allData[i][iHit] - allData[0][0] <<endl;
88 Float_t zvertex= (allData[51][0] - allData[52][0])/2*25*2.99752/100;
90 cout<<"zvertex= "<< zvertex <<endl;
91 for (Int_t i=0; i<12; i++)
93 Float_t x = 6.5 * TMath::Sin(i * angle);
94 Float_t y = 6.5 * TMath::Cos(i * angle);
95 rawA->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
96 rawA->QuadValue(start->GetData(i+37,0)-start->GetData(0,0));
97 rawC->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
98 rawC->QuadValue(start->GetData(i+25,0)-start->GetData(0,0));
100 vertexT0->AddHexagon(0, 0, 0, 1);
101 vertexT0->QuadValue(TMath::Nint(zvertex));
105 vertexT0->RefitPlex();
107 TEveTrans& taA = rawA->RefMainTrans();
108 taA.SetPos(0, 0, 373);
109 TEveTrans& tcC = rawC->RefMainTrans();
110 tcC.SetPos(0, 0, -69.7);
112 TEveTrans& tver = vertexT0->RefMainTrans();
113 tver.SetPos(0, 0, zvertex);
115 gEve->AddElement(rawA);
116 gEve->AddElement(rawC);
117 gEve->AddElement(vertexT0);
121 /******************************************************************************/
123 void AliEveT0Module::MakeModules(AliT0digit *digits)
125 // Make modules for digits.
132 digits->GetTimeCFD(tdc);
133 // printf("%3d\n",besttimeright);
134 for (Int_t i=0;i<24; i++){
135 printf("%3d %3d\n ",adc[i], tdc[i]);
138 TEveRGBAPalette* adcPalette = new TEveRGBAPalette(5, 1024);
139 adcPalette->SetLimits(1, 1024); // Set proper ADC range.
140 TEveRGBAPalette* tdcPalette = new TEveRGBAPalette(0, 9999);
141 tdcPalette->SetLimits(1, 9999); // Set proper TDC range.
143 TEveQuadSet* qa = new AliEveT0Module("T0A_ADC", 0, digits); qa->SetPalette(adcPalette);
144 TEveQuadSet* qc = new AliEveT0Module("T0C_ADC", 0, digits); qc->SetPalette(adcPalette);
145 TEveQuadSet* qat = new AliEveT0Module("T0A_TDC", 1, digits); qat->SetPalette(tdcPalette);
146 TEveQuadSet* qct = new AliEveT0Module("T0C_TDC", 1, digits); qct->SetPalette(tdcPalette);
148 Float_t angle = 2 * TMath::Pi() / 12;
150 qa->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
151 qc->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
152 qat->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
153 qct->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
155 for (Int_t i=0; i<12; i++) {
156 Float_t x = 6.5 * TMath::Sin(i * angle);
157 Float_t y = 6.5 * TMath::Cos(i * angle);
159 qa->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
160 qa->QuadValue(adc[i+12]);
161 // qa->QuadId(new TNamed(Form("PMT with idx=%d", i), "PMT's aplitude in side A."));
163 qat->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
164 qat->QuadValue(tdc[i+12]);
165 // qat->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side A."));
167 qc->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
168 qc->QuadValue(adc[i]);
169 // qc->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's amplitude in side C."));
171 qct->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
172 qct->QuadValue(tdc[i]);
173 // qct->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side C."));
181 TEveTrans& ta = qa->RefMainTrans();
182 ta.SetPos(0, 0, 373);
183 TEveTrans& tc = qc->RefMainTrans();
184 tc.SetPos(0, 0, -69.7);
186 TEveTrans& tat = qat->RefMainTrans();
187 tat.SetPos(0, 0, 373);
188 TEveTrans& tct = qct->RefMainTrans();
189 tct.SetPos(0, 0, -69.7);
191 gEve->AddElement(qa);
192 gEve->AddElement(qc);
193 gEve->AddElement(qat);
194 gEve->AddElement(qct);
199 /******************************************************************************/
201 void AliEveT0Module::DigitSelected(Int_t idx)
203 // Override control-click from TEveQuadSet
205 DigitBase_t* qb = GetDigit(idx);
206 if (fSigType == 0) { //ADC
207 printf("adc====================\n");
208 Int_t besttimeright = fDigits->BestTimeA();
209 Int_t besttimeleft = fDigits->BestTimeC();
210 Int_t meantime = fDigits->MeanTime();
211 Int_t timediff = fDigits->TimeDiff();
212 Int_t summult = fDigits->SumMult();
214 printf("besttimeA=%3d\n",besttimeright);
215 printf("besttimeC=%3d\n",besttimeleft);
216 printf("meantime=%3d\n",meantime);
217 printf("timediff=%3d\n",timediff);
218 printf("summult=%3d\n",summult);
220 printf(" idx=%d, amplitude=%d\n", idx, qb->fValue);
224 printf("tdc====================\n");
226 Int_t besttimeright = fDigits->BestTimeA();
227 Int_t besttimeleft = fDigits->BestTimeC();
228 Int_t meantime = fDigits->MeanTime();
229 Int_t timediff = fDigits->TimeDiff();
230 Int_t summult = fDigits->SumMult();
232 printf("besttimeA=%3d\n",besttimeright);
233 printf("besttimeC=%3d\n",besttimeleft);
234 printf("meantime=%3d\n",meantime);
235 printf("timediff=%3d\n",timediff);
236 printf("summult=%3d\n",summult);
238 printf(" idx=%d, amplitude=%d\n", idx, qb->fValue);
241 printf("raw====================\n");
242 printf("besttimeA=%3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
243 printf("besttimeC=%3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
244 printf("meantime=%3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
245 printf("amplitude= %3d\n",fStart->GetData(idx+1,0));
247 printf(" idx=%d, time %d\n", idx, qb->fValue);
250 printf("raw====================\n");
251 printf("besttimeA=%3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
252 printf("besttimeC=%3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
253 printf("meantime=%3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
254 printf("amplitude= %3d\n",fStart->GetData(idx+13,0));
256 printf(" idx=%d, time %d\n", idx, qb->fValue);
260 printf("vertex====================\n");
261 printf(" idx=%d, zvertex pozition %d\n", idx, qb->fValue);