]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveT0Module.cxx
anyscan_init.C
[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 void AliEveT0Module::PrintEventInfo()
47 {
48   printf("Blabla\n");
49 }
50
51 /******************************************************************************/
52
53 void AliEveT0Module::LoadRaw(AliRawReader* reader)
54 {
55   // Load raw-data from file.
56
57   AliT0digit *digits = 0;
58
59   // ??? How / when is this called during reco from raw?
60   reader->LoadEquipmentIdsMap("T0map.txt");
61   reader->RequireHeader(kTRUE);
62
63   AliT0RawReader *start = new AliT0RawReader(reader);
64   Int_t allData[110][5];
65   TRandom r(0);
66
67   TEveRGBAPalette *rawPalette    = new TEveRGBAPalette(0, 3000);
68   TEveRGBAPalette *vertexPalette = new TEveRGBAPalette(-100, 100);
69
70   TEveFrameBox *box = new TEveFrameBox();
71   {
72     Float_t  frame[3*36];
73     Float_t *p = frame;
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);
77       p[2] = 0;
78     }
79     box->SetQuadByPoints(frame, 36);
80   }
81   box->SetFrameColor(kGray);
82
83
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);
88   rawA->SetFrame(box);
89   TEveQuadSet* rawC = new AliEveT0Module("T0_RAW_C", 3, digits, start);
90   rawC->SetPalette(rawPalette);
91   rawC->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32); 
92   rawC->SetFrame(box);
93
94   TEveQuadSet* vertexT0 = new AliEveT0Module("T0_Vertex", 5, digits, start);
95   vertexT0->SetPalette(vertexPalette);
96   vertexT0->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
97  
98   Float_t angle  = 2 * TMath::Pi() / 12;
99   start->Next();
100   for (Int_t i=0; i<110; i++)
101   {
102     for (Int_t iHit=0; iHit<5; iHit++)
103     {
104       allData[i][iHit]= start->GetData(i,iHit);
105       if (allData[i][iHit] != 0) {
106         using namespace std;
107         cout <<"event "<< AliEveEventManager::GetCurrent()->GetEventId()
108              <<" i "<< i <<" "<< allData[i][iHit] - allData[0][0] <<endl;
109       }
110     }
111   }
112   Float_t zvertex= (allData[51][0] - allData[52][0])/2*25*2.99752/100;
113   using namespace std;
114   cout<<"zvertex= "<< zvertex <<endl;
115   for (Int_t i=0; i<12; i++)
116   {
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));
123   }
124     vertexT0->AddHexagon(0, 0, 0, 1);
125     vertexT0->QuadValue(TMath::Nint(zvertex));
126
127   rawA->RefitPlex();
128   rawC->RefitPlex();
129   vertexT0->RefitPlex();
130
131   TEveTrans& taA = rawA->RefMainTrans();
132   taA.SetPos(0, 0, 373);
133   TEveTrans& tcC = rawC->RefMainTrans();
134   tcC.SetPos(0, 0, -69.7);
135
136   TEveTrans& tver = vertexT0->RefMainTrans();
137   tver.SetPos(0, 0, zvertex);
138
139   gEve->AddElement(rawA);
140   gEve->AddElement(rawC);
141   gEve->AddElement(vertexT0);
142   gEve->Redraw3D();
143 }
144
145 /******************************************************************************/
146
147 void AliEveT0Module::MakeModules(AliT0digit *digits)
148 {
149   // Make modules for digits.
150
151   TRandom r(0);
152   TArrayI adc(24);
153   TArrayI tdc(24);
154
155   digits->GetQT1(adc);
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]);
160   }
161
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.
166
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);
171
172   Float_t angle  = 2 * TMath::Pi() / 12;
173
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);
178
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);
182
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."));
186
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."));
190
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."));
194
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."));
198   }
199
200   qa->RefitPlex();
201   qc->RefitPlex();
202   qat->RefitPlex();
203   qct->RefitPlex();
204
205   TEveTrans& ta = qa->RefMainTrans();
206   ta.SetPos(0, 0, 373);
207   TEveTrans& tc = qc->RefMainTrans();
208   tc.SetPos(0, 0, -69.7);
209
210   TEveTrans& tat = qat->RefMainTrans();
211   tat.SetPos(0, 0, 373);
212   TEveTrans& tct = qct->RefMainTrans();
213   tct.SetPos(0, 0, -69.7);
214
215   gEve->AddElement(qa);
216   gEve->AddElement(qc);
217   gEve->AddElement(qat);
218   gEve->AddElement(qct);
219
220   gEve->Redraw3D();
221 }
222
223 /******************************************************************************/
224
225 void AliEveT0Module::DigitSelected(Int_t idx)
226 {
227   // Override control-click from TEveQuadSet
228
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();
237
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);
243
244     printf("  idx=%d, amplitude=%d\n",  idx, qb->fValue);
245
246   }
247   if (fSigType == 1) {
248     printf("tdc====================\n");
249
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();
255
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);
261
262     printf("  idx=%d, amplitude=%d\n",  idx, qb->fValue);
263   }
264   if (fSigType == 2) {
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));
270
271     printf("  idx=%d, time %d\n",  idx, qb->fValue);
272   }
273   if (fSigType == 3) {
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));
279
280     printf("  idx=%d, time %d\n",  idx, qb->fValue);
281   }
282   if (fSigType == 5) {
283
284     printf("vertex====================\n");
285     printf("  idx=%d, zvertex pozition %d\n",  idx, qb->fValue);
286
287   }
288 }