]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/PHOS/OnlineDisplay/AliHLTPHOSOnlineDisplayEventTab.cxx
GetNumberOfVerices()
[u/mrichter/AliRoot.git] / HLT / PHOS / OnlineDisplay / AliHLTPHOSOnlineDisplayEventTab.cxx
CommitLineData
59b4cd9a 1#include "AliHLTPHOSOnlineDisplayEventTab.h"
2#include <iostream>
3#include "TGFrame.h"
4#include "AliHLTPHOSGetEventButton.h"
5#include "AliHLTPHOSCommonDefs.h"
6#include "AliHLTDataTypes.h"
6af3dade 7#include "AliHLTHOMERData.h"
8#include "AliHLTHOMERReader.h"
9#include "AliHLTHOMERWriter.h"
59b4cd9a 10#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
b3abda11 11//#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
14ff16ed 12#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
b3abda11 13#include "AliHLTPHOSOnlineDisplay.h"
14ff16ed 14#include "AliHLTPHOSSharedMemoryInterface.h"
59b4cd9a 15
16using namespace std;
17
997330b5 18// MT Crap
19#include <TMath.h>
20#include <TEveManager.h>
21#include <TEveBoxSet.h>
22
23TEveBoxSet* gAliEveBoxSet = 0;
59b4cd9a 24
25AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab()
26{
27 cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
28}
29
30
b3abda11 31AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay *onlineDisplayPtr, TGTab *tabPtr,
6af3dade 32 AliHLTHOMERReader *homerSyncPtr, AliHLTHOMERReader *homerPtrs[MAX_HOSTS], int nHosts) : AliHLTPHOSOnlineDisplayTab()
59b4cd9a 33{
14ff16ed 34 fShmPtr = new AliHLTPHOSSharedMemoryInterface();
b3abda11 35 fOnlineDisplayPtr = onlineDisplayPtr;
36
3f98e623 37 for(int mod =0; mod <N_MODULES; mod ++)
38 {
3f98e623 39 for(int rcu_x_coord = 0; rcu_x_coord < N_ZRCU_COORD; rcu_x_coord ++)
40 {
41 for(int rcu_z_coord = 0; rcu_z_coord < N_XRCU_COORD; rcu_z_coord ++)
42 {
43 for(int z = 0; z < N_ZROWS_RCU; z ++)
44 {
45 for(int x = 0; x < N_XCOLUMNS_RCU; x ++)
46 {
47 for(int gain = 0; gain < N_GAINS; gain ++ )
48 {
b3abda11 49 fChannelData[mod][rcu_z_coord][rcu_x_coord][x][z][gain] = new int[fNTotalSamples];
3f98e623 50 }
51 }
52 }
53 }
54 }
55 }
56
59b4cd9a 57 for(int i=0; i<MAX_HOSTS; i++)
58 {
59 fgHomerReadersPtr[i] = 0;
60 }
61
62 fgHomerReaderPtr = homerSyncPtr;
63
64 for(int i=0; i<nHosts; i++)
65 {
66 fgHomerReadersPtr[i] = homerPtrs[i] ;
14ff16ed 67
59b4cd9a 68 }
69
70 fgCanvasHGPtr = 0;
71 fgCanvasLGPtr = 0;
72 fgLegoPlotLGPtr = 0;
73 fgLegoPlotHGPtr = 0;
74
75 fgNHosts = nHosts;
76 InitDisplay(tabPtr);
77}
78
79
80AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab()
81{
82
83}
84
85
3f98e623 86void
87AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int mod, int rcuX, int rcuZ, int x, int z, int gain)
88{
b3abda11 89 for(int i=0; i < fNTotalSamples ; i++)
3f98e623 90 {
6a89fa2b 91 histPtr->SetBinContent(i, fChannelData[mod][rcuX][rcuZ][x][z][gain][i]);
3f98e623 92 }
93}
94
95
b3abda11 96void
97AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
98{
99 int tmpModID = x/64;
100 int tmpRcuZ = z/32;
101 int tmpRcuX = (x%64)/32;
102 int tmpZ = z%28;
103 int tmpX = x%32;
104
105 for(int i=0; i < fNTotalSamples ; i++)
106 {
107 histPtr->SetBinContent(i, fChannelData[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain][i]);
108 }
109}
110
111
59b4cd9a 112int
113AliHLTPHOSOnlineDisplayEventTab::GetNextEvent()
114{
115 ResetDisplay();
997330b5 116 // MT crap
117 Bool_t is_first = false;
118 if (gAliEveBoxSet == 0)
119 {
120 is_first = true;
121 gAliEveBoxSet = new TEveBoxSet("PHOS module");
122 // gAliEveBoxSet->SetSecSelectCommand("Draw()");
123 // gAliEveBoxSet->SetSecSelectCommand("phos_histo_draw");
124 gEve->AddElement(gAliEveBoxSet);
125 }
126 gAliEveBoxSet->Reset(TEveBoxSet::kBT_AABox, kFALSE, 128);
127
59b4cd9a 128 DoGetNextEvent();
129 UpdateDisplay();
997330b5 130
131 gAliEveBoxSet->ElementChanged();
132 gEve->Redraw3D(is_first);
133
59b4cd9a 134 fgEvntCnt ++;
135}
136
137
138
139void
6af3dade 140AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(AliHLTHOMERReader *homeReaderPtr)
14ff16ed 141{
142 AliHLTPHOSValidCellDataStruct *currentChannel =0;
14ff16ed 143 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data" << endl;
59b4cd9a 144
145 unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
997330b5 146
59b4cd9a 147 while ( blk != ~(unsigned long)0 )
148 {
149 Int_t moduleID;
14ff16ed 150 AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk );
47f7b25e 151
152 cout <<The size of <<
153
154
155 unsigned int *t = (unsigned int*)cellEnergiesPtr;
156
157 for(int i = 0; i < 10000; i++)
158 {
159 printf("%f\t", (float)*t);
160 if(i%30 == 0)
161 {
162 printf("\ni = %d", i);
163 }
164 t ++;
165 }
166
167 for(int gain = 1; gain < N_GAINS; gain ++)
168 {
169 for(int x=0; x <N_XCOLUMNS_RCU; x ++ )
170 {
171 printf("\nnewline");
172 for(int z=0; z <N_ZROWS_RCU; z ++ )
173 {
174 printf("%f\t",cellEnergiesPtr->fValidData[x][z][gain].fEnergy);
175
176 }
177 }
178 }
179
59b4cd9a 180 moduleID = cellEnergiesPtr->fModuleID ;
14ff16ed 181 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData, fModuleID =" <<moduleID << endl;
04751caa 182
59b4cd9a 183 Int_t tmpZ;
184 Int_t tmpX;
185 Int_t tmpGain;
14ff16ed 186 int cnt = 0;
187
14ff16ed 188 fShmPtr->SetMemory(cellEnergiesPtr);
189 currentChannel = fShmPtr->NextChannel();
190
191 while(currentChannel != 0)
192 {
193 cnt ++;
194 tmpZ = currentChannel->fZ;
195 tmpX = currentChannel->fX;
196 tmpGain = currentChannel->fGain;
197
04751caa 198 // cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData gain = " << tmpGain << endl;
199
14ff16ed 200 if(cnt < 20)
201 {
202 cout << "the addresss of fData is " << (void *)currentChannel->fData << endl;
203 }
04751caa 204 // We have to unroll the gain for loop because of the hack by MT to display the raw data in AliEve
205 // This is crap !! but it is the dirty one hour solution (and it works)
14ff16ed 206
04751caa 207
14ff16ed 208 if(
209 tmpGain == HIGH_GAIN)
210 {
211 fgLegoPlotHGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,
212 tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
213
04751caa 214 // cout << << endl;
215
997330b5 216 gAliEveBoxSet->AddBox(2.2*(tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX) - 1.1,
217 0,
218 2.2*(tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ) - 1.1,
219 2.2,
220 0.4*140*currentChannel->fEnergy/1024,
221 2.2);
222 gAliEveBoxSet->DigitValue(TMath::Nint(currentChannel->fEnergy));
14ff16ed 223
6a89fa2b 224 for(int j= 0; j< currentChannel->fNSamples; j++)
14ff16ed 225 {
6a89fa2b 226 if(j == fNTotalSamples)
227 {
228 break;
229 }
04751caa 230
14ff16ed 231 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][HIGH_GAIN][j] = currentChannel->fData[j];
04751caa 232 // prinf("");
233
234
14ff16ed 235 }
236 }
237
238 else if(tmpGain == LOW_GAIN)
239 {
240 fgLegoPlotLGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,
241 tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
6a89fa2b 242 for(int j= 0; j< currentChannel->fNSamples; j++)
14ff16ed 243 {
6a89fa2b 244
245 if(j == fNTotalSamples)
246 {
247 break;
248 }
14ff16ed 249 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][LOW_GAIN][j] = currentChannel->fData[j];
250 }
251 }
252
14ff16ed 253 currentChannel = fShmPtr->NextChannel();
254 }
6a89fa2b 255
14ff16ed 256
59b4cd9a 257 blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
258 }
259}
260
261
262void
263AliHLTPHOSOnlineDisplayEventTab::ResetDisplay()
264{
265 if(fgAccumulate == kFALSE)
266 {
267 if(fgLegoPlotHGPtr !=0)
268 {
269 fgLegoPlotHGPtr->Reset();
270 }
271
272 if(fgLegoPlotLGPtr !=0)
273 {
274 fgLegoPlotLGPtr->Reset();
275 }
276 }
277 }
278
279
280void
281AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab *tabPtr)
282{
04751caa 283 fgLegoPlotHGPtr = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, "Cosmics, High gain", "PHOS HLT: Cosmics",
284 N_XCOLUMNS_MOD*N_MODULES , 0, N_XCOLUMNS_MOD*N_MODULES,
285 N_ZROWS_MOD, 0, N_ZROWS_MOD);
286 fgLegoPlotHGPtr->SetGain(HIGH_GAIN);
287 fgLegoPlotHGPtr->SetMaximum(1023);
288 fgLegoPlotHGPtr->Reset();
289 fgLegoPlotHGPtr->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END);
b3abda11 290 fgLegoPlotLGPtr = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, "Cosmics, Low gain", "PHOS HLT: Cosmics",
04751caa 291 N_XCOLUMNS_MOD* N_MODULES , 0, N_XCOLUMNS_MOD* N_MODULES,
292 N_ZROWS_MOD, 0, N_ZROWS_MOD);
b3abda11 293 fgLegoPlotLGPtr->SetGain(LOW_GAIN);
3f98e623 294 fgLegoPlotLGPtr->SetMaximum(1023);
59b4cd9a 295 fgLegoPlotLGPtr->Reset();
b3abda11 296 fgLegoPlotLGPtr->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END);
59b4cd9a 297
298 TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
299 kLHintsExpandY, 2, 2, 15, 1);
300
3f98e623 301 TGCompositeFrame *tf = tabPtr->AddTab("Event display");
59b4cd9a 302 fSubTab1 = new TGTab(tf, 100, 100);
303 TGCompositeFrame *tf2 = fSubTab1->AddTab("LEGO");
304 fSubF1 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
305 fEc1 = new TRootEmbeddedCanvas("ec1", fSubF1, 100, 100);
306 fSubF1->AddFrame(fEc1, fL1);
307 fEc2 = new TRootEmbeddedCanvas("ec2", fSubF1, 100, 100);
308 fSubF1->AddFrame(fEc2, fL1);
309 tf2->AddFrame(fSubF1, fL1);
310
311 tf2 = fSubTab1->AddTab("SCAT");
312 fSubF2 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
313 tf2->AddFrame(fSubF2, fL1);
314 fEc3 = new TRootEmbeddedCanvas("ec3", fSubF2, 100, 100);
315 fSubF2->AddFrame(fEc3, fL1);
316 fEc4 = new TRootEmbeddedCanvas("ec4", fSubF2, 100, 100);
317 fSubF2->AddFrame(fEc4, fL1);
318
319 tf2 = fSubTab1->AddTab("SURF");
320 fSubF3 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
321 tf2->AddFrame(fSubF3, fL1);
322 fEc5 = new TRootEmbeddedCanvas("ec5", fSubF3, 100, 100);
323 fSubF3->AddFrame(fEc5, fL1);
324 fEc6 = new TRootEmbeddedCanvas("ec6", fSubF3, 100, 100);
325 fSubF3->AddFrame(fEc6, fL1);
326 fSubTab1->Resize();
327 tf->AddFrame(fSubTab1, fL1);
328
329 fgEventButtPtr = new AliHLTPHOSGetEventButton(fSubF1, "get event", 'e');
330}
331
332
04751caa 333
59b4cd9a 334void
335AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay()
336{
337 fgCanvasHGPtr = fEc1->GetCanvas();
338 fgCanvasHGPtr->cd();
339 fgLegoPlotHGPtr->Draw("LEGO2Z");
340 fgCanvasHGPtr->Update();
341 fgCanvasLGPtr = fEc2->GetCanvas();
342 fgCanvasLGPtr->cd();
343 fgLegoPlotLGPtr->Draw("LEGO2Z");
344 fgCanvasLGPtr->Update();
345
346 fgCanvasHGPtr = fEc3->GetCanvas();
347 fgCanvasHGPtr->cd();
348 fgLegoPlotHGPtr->Draw("SCAT");
349 fgCanvasHGPtr->Update();
350 fgCanvasLGPtr = fEc4->GetCanvas();
351 fgCanvasLGPtr->cd();
352 fgLegoPlotLGPtr->Draw("SCAT");
353 fgCanvasLGPtr->Update();
354
355 fgCanvasHGPtr = fEc5->GetCanvas();
356 fgCanvasHGPtr->cd();
357 fgLegoPlotHGPtr->Draw("CONTZ");
358 fgCanvasHGPtr->Update();
359 fgCanvasLGPtr = fEc6->GetCanvas();
360 fgCanvasLGPtr->cd();
361 fgLegoPlotLGPtr->Draw("CONTZ");
362 fgCanvasLGPtr->Update();
59b4cd9a 363}