]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveT0Module.cxx
Coverity
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveT0Module.cxx
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
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
10 //////////////////////////////////////////////////////////////////////////
11 //                                                                      //
12 // The main AliEVE drawing module for the T0 detector                   //
13 //                                                                      //
14 //////////////////////////////////////////////////////////////////////////
15
16 #include "AliEveT0Module.h"
17
18 #include <EveBase/AliEveEventManager.h>
19
20 #include <AliT0digit.h>
21 #include <AliRawReader.h>
22 #include <AliRawReaderRoot.h>
23 #include <AliT0RawReader.h>
24 #include <AliCDBStorage.h>
25
26 #include <TEveTrans.h>
27 #include <TEveManager.h>
28 #include <TTree.h>
29 #include <TArrayI.h>
30 #include <TStyle.h>
31 #include <TMath.h>
32 #include <TRandom.h>
33
34
35 ClassImp(AliEveT0Module)
36
37 /******************************************************************************/
38 AliEveT0Module::AliEveT0Module(const Text_t* n, Int_t sigType,
39                                AliT0digit *digits, AliT0RawReader *start,
40                                Double_t zvertex) :
41   TEveQuadSet(n),  fSigType(sigType),
42   fDigits(digits), fStart(start),
43   fZVertex(zvertex)
44 {
45   //
46   // Default constructor
47   //
48 }
49
50 void AliEveT0Module::PrintEventInfo()
51 {
52   printf("Z-vertex = %f\n", fZVertex);
53 }
54
55 /******************************************************************************/
56
57 void AliEveT0Module::LoadRaw(AliRawReader* reader)
58 {
59   // Load raw-data from file.
60
61   AliT0digit *digits = 0;
62
63   // ??? How / when is this called during reco from raw?
64   reader->LoadEquipmentIdsMap("T0map.txt");
65   reader->RequireHeader(kTRUE);
66
67   AliT0RawReader *start = new AliT0RawReader(reader);
68   Int_t allData[110][5];
69
70   Float_t angle  = 2 * TMath::Pi() / 12;
71   start->Next();
72   for (Int_t i=0; i<110; i++)
73   {
74     for (Int_t iHit=0; iHit<5; iHit++)
75     {
76       allData[i][iHit]= start->GetData(i,iHit);
77     }
78   }
79   Double_t zvertex = (allData[51][0] - allData[52][0])/2*25*2.99752/100;
80   //std::cout<<"zvertex= "<< zvertex <<endl;
81
82   TEveRGBAPalette *rawPalette    = new TEveRGBAPalette(0, 3000);
83   TEveRGBAPalette *vertexPalette = new TEveRGBAPalette(-100, 100);
84
85   TEveFrameBox *box = new TEveFrameBox();
86   {
87     Float_t  frame[3*36];
88     Float_t *p = frame;
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);
92       p[2] = 0;
93     }
94     box->SetQuadByPoints(frame, 36);
95   }
96   box->SetFrameColor(kGray);
97
98
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);
103   rawA->SetFrame(box);
104   TEveQuadSet* rawC = new AliEveT0Module("T0_RAW_C", 3, digits, start, zvertex);
105   rawC->SetPalette(rawPalette);
106   rawC->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32); 
107   rawC->SetFrame(box);
108
109   TEveQuadSet* vertexT0 = new AliEveT0Module("T0_Vertex", 5, digits, start, zvertex);
110   vertexT0->SetPalette(vertexPalette);
111   vertexT0->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
112  
113   for (Int_t i=0; i<12; i++)
114   {
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));
121   }
122   vertexT0->AddHexagon(0, 0, 0, 1);
123   vertexT0->QuadValue(TMath::Nint(zvertex));
124
125   rawA->RefitPlex();
126   rawC->RefitPlex();
127   vertexT0->RefitPlex();
128
129   TEveTrans& taA = rawA->RefMainTrans();
130   taA.SetPos(0, 0, 373);
131   TEveTrans& tcC = rawC->RefMainTrans();
132   tcC.SetPos(0, 0, -69.7);
133
134   TEveTrans& tver = vertexT0->RefMainTrans();
135   tver.SetPos(0, 0, zvertex);
136
137   gEve->AddElement(rawA);
138   gEve->AddElement(rawC);
139   gEve->AddElement(vertexT0);
140   gEve->Redraw3D();
141 }
142
143 /******************************************************************************/
144
145 void AliEveT0Module::MakeModules(AliT0digit *digits)
146 {
147   // Make modules for digits.
148
149   TArrayI adc(24);
150   TArrayI tdc(24);
151
152   digits->GetQT1(adc);
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]);
157   // }
158
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.
163
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);
168
169   Float_t angle  = 2 * TMath::Pi() / 12;
170
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);
175
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);
179
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."));
183
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."));
187
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."));
191
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."));
195   }
196
197   qa->RefitPlex();
198   qc->RefitPlex();
199   qat->RefitPlex();
200   qct->RefitPlex();
201
202   TEveTrans& ta = qa->RefMainTrans();
203   ta.SetPos(0, 0, 373);
204   TEveTrans& tc = qc->RefMainTrans();
205   tc.SetPos(0, 0, -69.7);
206
207   TEveTrans& tat = qat->RefMainTrans();
208   tat.SetPos(0, 0, 373);
209   TEveTrans& tct = qct->RefMainTrans();
210   tct.SetPos(0, 0, -69.7);
211
212   gEve->AddElement(qa);
213   gEve->AddElement(qc);
214   gEve->AddElement(qat);
215   gEve->AddElement(qct);
216
217   gEve->Redraw3D();
218 }
219
220 /******************************************************************************/
221
222 void AliEveT0Module::DigitSelected(Int_t idx)
223 {
224   // Override control-click from TEveQuadSet
225
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();
234
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);
240
241     printf("  idx=%d, amplitude=%d\n",  idx, qb->fValue);
242
243   }
244   if (fSigType == 1) {
245     printf("tdc====================\n");
246
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();
252
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);
258
259     printf("  idx=%d, amplitude=%d\n",  idx, qb->fValue);
260   }
261   if (fSigType == 2) {
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));
267
268     printf("  idx=%d, time %d\n",  idx, qb->fValue);
269   }
270   if (fSigType == 3) {
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));
276
277     printf("  idx=%d, time %d\n",  idx, qb->fValue);
278   }
279   if (fSigType == 5) {
280
281     printf("vertex====================\n");
282     printf("  idx=%d, zvertex pozition %d\n",  idx, qb->fValue);
283
284   }
285 }