]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveT0Module.cxx
b4efffed0eed32224cde642b817f02e183726e48
[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, AliT0digit *digits, AliT0RawReader *start)
39   : TEveQuadSet(n), fSigType(sigType), fDigits(digits), fStart(start)
40 {
41   //
42   // Default constructor
43   //
44 }
45
46 /******************************************************************************/
47
48 void AliEveT0Module::LoadRaw(TString fileName, Int_t ievt)
49 {
50   // Load raw-data from file.
51
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];
58   TRandom r(0);
59   //  cout<<ievt<<endl;
60   TEveRGBAPalette* rawPalette  = new TEveRGBAPalette(0, 3000);
61   TEveRGBAPalette* vertexPalette  = new TEveRGBAPalette(-100, 100);
62  
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);
70  
71   TEveQuadSet* vertexT0 = new AliEveT0Module("T0_Vertex", 5, digits, start);
72   vertexT0->SetPalette(vertexPalette);
73   vertexT0->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
74  
75   Float_t angle  = 2 * TMath::Pi() / 12;
76   start->Next();
77   for (Int_t i=0; i<110; i++)
78   {
79     for (Int_t iHit=0; iHit<5; iHit++)
80     {
81       allData[i][iHit]= start->GetData(i,iHit);
82       if (allData[i][iHit] != 0) {
83         using namespace std;
84         cout <<"event"<< ievt <<" i "<< i <<" "<< allData[i][iHit] - allData[0][0] <<endl;
85       }
86     }
87   }
88   Float_t zvertex= (allData[51][0] - allData[52][0])/2*25*2.99752/100;
89   using namespace std;
90   cout<<"zvertex= "<< zvertex <<endl;
91   for (Int_t i=0; i<12; i++)
92   {
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));
99   }
100     vertexT0->AddHexagon(0, 0, 0, 1);
101     vertexT0->QuadValue(TMath::Nint(zvertex));
102
103   rawA->RefitPlex();
104   rawC->RefitPlex();
105   vertexT0->RefitPlex();
106
107   TEveTrans& taA = rawA->RefMainTrans();
108   taA.SetPos(0, 0, 373);
109   TEveTrans& tcC = rawC->RefMainTrans();
110   tcC.SetPos(0, 0, -69.7);
111
112   TEveTrans& tver = vertexT0->RefMainTrans();
113   tver.SetPos(0, 0, zvertex);
114
115   gEve->AddElement(rawA);
116   gEve->AddElement(rawC);
117   gEve->AddElement(vertexT0);
118   gEve->Redraw3D();
119 }
120
121 /******************************************************************************/
122
123 void AliEveT0Module::MakeModules(AliT0digit *digits)
124 {
125   // Make modules for digits.
126
127   TRandom r(0);
128   TArrayI adc(24);
129   TArrayI tdc(24);
130
131   digits->GetQT1(adc);
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]);
136   }
137
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.
142
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);
147
148   Float_t angle  = 2 * TMath::Pi() / 12;
149
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);
154
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);
158
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."));
162
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."));
166
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."));
170
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."));
174   }
175
176   qa->RefitPlex();
177   qc->RefitPlex();
178   qat->RefitPlex();
179   qct->RefitPlex();
180
181   TEveTrans& ta = qa->RefMainTrans();
182   ta.SetPos(0, 0, 373);
183   TEveTrans& tc = qc->RefMainTrans();
184   tc.SetPos(0, 0, -69.7);
185
186   TEveTrans& tat = qat->RefMainTrans();
187   tat.SetPos(0, 0, 373);
188   TEveTrans& tct = qct->RefMainTrans();
189   tct.SetPos(0, 0, -69.7);
190
191   gEve->AddElement(qa);
192   gEve->AddElement(qc);
193   gEve->AddElement(qat);
194   gEve->AddElement(qct);
195
196   gEve->Redraw3D();
197 }
198
199 /******************************************************************************/
200
201 void AliEveT0Module::DigitSelected(Int_t idx)
202 {
203   // Override control-click from TEveQuadSet
204
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();
213
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);
219
220     printf("  idx=%d, amplitude=%d\n",  idx, qb->fValue);
221
222   }
223   if (fSigType == 1) {
224     printf("tdc====================\n");
225
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();
231
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);
237
238     printf("  idx=%d, amplitude=%d\n",  idx, qb->fValue);
239   }
240   if (fSigType == 2) {
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));
246
247     printf("  idx=%d, time %d\n",  idx, qb->fValue);
248   }
249   if (fSigType == 3) {
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));
255
256     printf("  idx=%d, time %d\n",  idx, qb->fValue);
257   }
258 if (fSigType == 5) {
259
260     printf("vertex====================\n");
261     printf("  idx=%d, zvertex pozition %d\n",  idx, qb->fValue);
262
263   }
264
265
266 }