]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveT0Module.cxx
Merge changes from branches/dev/EVE. This branch was following development in ROOT...
[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   rawPalette->SetLimits(1, 3000); // Set proper raw time range.
62   TEveQuadSet* rawA = new AliEveT0Module("T0_RAW_A", 2, digits, start);
63   rawA->SetPalette(rawPalette);
64   rawA->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
65   TEveQuadSet* rawC = new AliEveT0Module("T0_RAW_C", 3, digits, start);
66   rawC->SetPalette(rawPalette);
67   rawC->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
68   Float_t angle  = 2 * TMath::Pi() / 12;
69   start->Next();
70   for (Int_t i=0; i<110; i++)
71   {
72     for (Int_t iHit=0; iHit<5; iHit++)
73     {
74       allData[i][iHit]= start->GetData(i,iHit);
75       if (allData[i][iHit] != 0) {
76         using namespace std;
77         cout <<"event"<< ievt <<" i "<< i <<" "<< allData[i][iHit] - allData[0][0] <<endl;
78       }
79     }
80   }
81   for (Int_t i=0; i<12; i++)
82   {
83     Float_t x = 6.5 * TMath::Sin(i * angle);
84     Float_t y = 6.5 * TMath::Cos(i * angle);
85     rawA->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
86     rawA->QuadValue(start->GetData(i+37,0)-start->GetData(0,0));
87     rawC->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
88     rawC->QuadValue(start->GetData(i+25,0)-start->GetData(0,0));
89   }
90
91   rawA->RefitPlex();
92   rawC->RefitPlex();
93
94   TEveTrans& taA = rawA->RefMainTrans();
95   taA.SetPos(0, 0, 373);
96   TEveTrans& tcC = rawC->RefMainTrans();
97   tcC.SetPos(0, 0, -69.7);
98
99   gEve->AddElement(rawA);
100   gEve->AddElement(rawC);
101   gEve->Redraw3D();
102 }
103
104 /******************************************************************************/
105
106 void AliEveT0Module::MakeModules(AliT0digit *digits)
107 {
108   // Make modules for digits.
109
110   TRandom r(0);
111   TArrayI adc(24);
112   TArrayI tdc(24);
113
114   digits->GetQT1(adc);
115   digits->GetTimeCFD(tdc);
116   //    printf("%3d\n",besttimeright);
117   for (Int_t i=0;i<24; i++){
118     printf("%3d %3d\n  ",adc[i], tdc[i]);
119   }
120
121   TEveRGBAPalette* adcPalette  = new TEveRGBAPalette(5, 1024);
122   adcPalette->SetLimits(1, 1024); // Set proper ADC range.
123   TEveRGBAPalette* tdcPalette  = new TEveRGBAPalette(0, 9999);
124   tdcPalette->SetLimits(1, 9999); // Set proper TDC range.
125
126   TEveQuadSet* qa = new AliEveT0Module("T0A_ADC", 0, digits); qa->SetPalette(adcPalette);
127   TEveQuadSet* qc = new AliEveT0Module("T0C_ADC", 0, digits); qc->SetPalette(adcPalette);
128   TEveQuadSet* qat = new AliEveT0Module("T0A_TDC", 1, digits); qat->SetPalette(tdcPalette);
129   TEveQuadSet* qct = new AliEveT0Module("T0C_TDC", 1, digits); qct->SetPalette(tdcPalette);
130
131   Float_t angle  = 2 * TMath::Pi() / 12;
132
133   qa->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
134   qc->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
135   qat->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
136   qct->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
137
138   for (Int_t i=0; i<12; i++) {
139     Float_t x = 6.5 * TMath::Sin(i * angle);
140     Float_t y = 6.5 * TMath::Cos(i * angle);
141
142     qa->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
143     qa->QuadValue(adc[i+12]);
144     //    qa->QuadId(new TNamed(Form("PMT   with idx=%d", i), "PMT's aplitude in side A."));
145
146     qat->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
147     qat->QuadValue(tdc[i+12]);
148     //    qat->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side A."));
149
150     qc->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
151     qc->QuadValue(adc[i]);
152     // qc->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's amplitude in side C."));
153
154     qct->AddHexagon(x, y, r.Uniform(-0.1, 0.1), 1.0);
155     qct->QuadValue(tdc[i]);
156     // qct->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side C."));
157   }
158
159   qa->RefitPlex();
160   qc->RefitPlex();
161   qat->RefitPlex();
162   qct->RefitPlex();
163
164   TEveTrans& ta = qa->RefMainTrans();
165   ta.SetPos(0, 0, 373);
166   TEveTrans& tc = qc->RefMainTrans();
167   tc.SetPos(0, 0, -69.7);
168
169   TEveTrans& tat = qat->RefMainTrans();
170   tat.SetPos(0, 0, 373);
171   TEveTrans& tct = qct->RefMainTrans();
172   tct.SetPos(0, 0, -69.7);
173
174   gEve->AddElement(qa);
175   gEve->AddElement(qc);
176   gEve->AddElement(qat);
177   gEve->AddElement(qct);
178
179   gEve->Redraw3D();
180 }
181
182 /******************************************************************************/
183
184 void AliEveT0Module::DigitSelected(Int_t idx)
185 {
186   // Override control-click from TEveQuadSet
187
188   DigitBase_t* qb   = GetDigit(idx);
189   if (fSigType == 0) { //ADC
190     printf("adc====================\n");
191     Int_t   besttimeright = fDigits->BestTimeA();
192     Int_t   besttimeleft = fDigits->BestTimeC();
193     Int_t   meantime = fDigits->MeanTime();
194     Int_t   timediff = fDigits->TimeDiff();
195     Int_t   summult = fDigits->SumMult();
196
197     printf("besttimeA=%3d\n",besttimeright);
198     printf("besttimeC=%3d\n",besttimeleft);
199     printf("meantime=%3d\n",meantime);
200     printf("timediff=%3d\n",timediff);
201     printf("summult=%3d\n",summult);
202
203     printf("  idx=%d, amplitude=%d\n",  idx, qb->fValue);
204
205   }
206   if (fSigType == 1) {
207     printf("tdc====================\n");
208
209     Int_t   besttimeright = fDigits->BestTimeA();
210     Int_t   besttimeleft = fDigits->BestTimeC();
211     Int_t   meantime = fDigits->MeanTime();
212     Int_t   timediff = fDigits->TimeDiff();
213     Int_t   summult = fDigits->SumMult();
214
215     printf("besttimeA=%3d\n",besttimeright);
216     printf("besttimeC=%3d\n",besttimeleft);
217     printf("meantime=%3d\n",meantime);
218     printf("timediff=%3d\n",timediff);
219     printf("summult=%3d\n",summult);
220
221     printf("  idx=%d, amplitude=%d\n",  idx, qb->fValue);
222   }
223   if (fSigType == 2) {
224     printf("raw====================\n");
225     printf("besttimeA=%3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
226     printf("besttimeC=%3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
227     printf("meantime=%3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
228     printf("amplitude= %3d\n",fStart->GetData(idx+1,0));
229
230     printf("  idx=%d, time %d\n",  idx, qb->fValue);
231   }
232   if (fSigType == 3) {
233     printf("raw====================\n");
234     printf("besttimeA=%3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
235     printf("besttimeC=%3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
236     printf("meantime=%3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
237     printf("amplitude= %3d\n",fStart->GetData(idx+13,0));
238
239     printf("  idx=%d, time %d\n",  idx, qb->fValue);
240   }
241
242 }