]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/PHOS/OnlineDisplay/AliHLTPHOSOnlineDisplayEventTab.cxx
added missing header files for commit 29821
[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
f704525c 16//#include "TStyle.h"
17
59b4cd9a 18using namespace std;
19
997330b5 20// MT Crap
21#include <TMath.h>
22#include <TEveManager.h>
23#include <TEveBoxSet.h>
24
25TEveBoxSet* gAliEveBoxSet = 0;
59b4cd9a 26
27AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab()
28{
29 cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
30}
31
32
b3abda11 33AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay *onlineDisplayPtr, TGTab *tabPtr,
d456fffb 34 AliHLTHOMERReader *homerSyncPtr, AliHLTHOMERReader *homerPtrs[MAX_HOSTS],
35 int nHosts, const int runnumber) : AliHLTPHOSOnlineDisplayTab()
59b4cd9a 36{
d456fffb 37
38 /*
39 if(fIsSetRunNumber == true)
40 {
41 for(int i=0; i < N_GAINS; i++)
42 {
43 fgLegoPlotPtr[gain]
44 }
45 }
46 */
47
48
14ff16ed 49 fShmPtr = new AliHLTPHOSSharedMemoryInterface();
b3abda11 50 fOnlineDisplayPtr = onlineDisplayPtr;
51
54276f07 52
53 for(int gain = 0; gain < N_GAINS; gain ++ )
3f98e623 54 {
54276f07 55 fgCanvasPtr[gain] = 0;
56 fgLegoPlotPtr[gain] = 0;
57
58 for(int mod =0; mod <N_MODULES; mod ++)
3f98e623 59 {
54276f07 60 for(int rcu_x_coord = 0; rcu_x_coord < N_ZRCU_COORD; rcu_x_coord ++)
3f98e623 61 {
54276f07 62 for(int rcu_z_coord = 0; rcu_z_coord < N_XRCU_COORD; rcu_z_coord ++)
3f98e623 63 {
54276f07 64 for(int z = 0; z < N_ZROWS_RCU; z ++)
3f98e623 65 {
54276f07 66 for(int x = 0; x < N_XCOLUMNS_RCU; x ++)
3f98e623 67 {
c890e0a1 68 fChannelData[mod][rcu_z_coord][rcu_x_coord][x][z][gain] = new int[ALTRO_MAX_SAMPLES];
69 fNChannelSamples[mod][rcu_z_coord][rcu_x_coord][x][z][gain] = 0;
70 fChannelEnergy[mod][rcu_z_coord][rcu_x_coord][x][z][gain] = 0;
3f98e623 71 }
54276f07 72 }
73 }
3f98e623 74 }
75 }
76 }
77
59b4cd9a 78 for(int i=0; i<MAX_HOSTS; i++)
79 {
80 fgHomerReadersPtr[i] = 0;
81 }
82
83 fgHomerReaderPtr = homerSyncPtr;
84
85 for(int i=0; i<nHosts; i++)
86 {
87 fgHomerReadersPtr[i] = homerPtrs[i] ;
14ff16ed 88
59b4cd9a 89 }
90
59b4cd9a 91 fgNHosts = nHosts;
d456fffb 92 InitDisplay(tabPtr, runnumber);
59b4cd9a 93}
94
95
96AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab()
97{
98
99}
100
101
c890e0a1 102Int_t
b3abda11 103AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
104{
105 int tmpModID = x/64;
106 int tmpRcuZ = z/32;
107 int tmpRcuX = (x%64)/32;
108 int tmpZ = z%28;
109 int tmpX = x%32;
110
c890e0a1 111 for(int i=0; i < fNChannelSamples[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain] ; i++)
b3abda11 112 {
c890e0a1 113 histPtr->SetBinContent(i, fChannelData[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain][i]);
b3abda11 114 }
c890e0a1 115 return fNChannelSamples[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain];
b3abda11 116}
117
118
59b4cd9a 119int
120AliHLTPHOSOnlineDisplayEventTab::GetNextEvent()
121{
122 ResetDisplay();
997330b5 123 // MT crap
124 Bool_t is_first = false;
125 if (gAliEveBoxSet == 0)
126 {
127 is_first = true;
128 gAliEveBoxSet = new TEveBoxSet("PHOS module");
129 // gAliEveBoxSet->SetSecSelectCommand("Draw()");
130 // gAliEveBoxSet->SetSecSelectCommand("phos_histo_draw");
131 gEve->AddElement(gAliEveBoxSet);
132 }
133 gAliEveBoxSet->Reset(TEveBoxSet::kBT_AABox, kFALSE, 128);
134
59b4cd9a 135 DoGetNextEvent();
136 UpdateDisplay();
997330b5 137
138 gAliEveBoxSet->ElementChanged();
139 gEve->Redraw3D(is_first);
140
59b4cd9a 141 fgEvntCnt ++;
142}
143
144
9d05c97d 145void
146AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(AliHLTHOMERReader *homerReaderPtr)
147{
148 cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks" << endl;
149 // unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
150 unsigned long blk = homerReaderPtr->FindBlockNdx(" TREIRUOF","SOHP", 0xFFFFFFFF );
151
152 while ( blk != ~(unsigned long)0 )
153 {
154 cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(homerReaderPtr) FOUND FOURIER DATA !!!!!!!!!!!!!!" << endl;
155
156
157 blk = homerReaderPtr->FindBlockNdx("TREIRUOF","SOHP", 0xFFFFFFFF );
158 }
159
160}
161
59b4cd9a 162
163void
6af3dade 164AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(AliHLTHOMERReader *homeReaderPtr)
14ff16ed 165{
166 AliHLTPHOSValidCellDataStruct *currentChannel =0;
9d05c97d 167 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data, therere are " << homeReaderPtr->GetBlockCnt() << " blocks " <<endl;
168
169 FindFourierBlocks(homeReaderPtr);
59b4cd9a 170
171 unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
997330b5 172
d456fffb 173 int cnt = 0;
174
9d05c97d 175 //CRAP PT
176 // FindFourierBlocks(homeReaderPtr);
177
59b4cd9a 178 while ( blk != ~(unsigned long)0 )
179 {
180 Int_t moduleID;
c890e0a1 181 Int_t rcuX = 0;
182 Int_t rcuZ = 0;
14ff16ed 183 AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk );
47f7b25e 184
47f7b25e 185 unsigned int *t = (unsigned int*)cellEnergiesPtr;
186
59b4cd9a 187 moduleID = cellEnergiesPtr->fModuleID ;
c890e0a1 188 rcuX = cellEnergiesPtr->fRcuX;
189 rcuZ = cellEnergiesPtr->fRcuZ;
190
14ff16ed 191 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData, fModuleID =" <<moduleID << endl;
04751caa 192
59b4cd9a 193 Int_t tmpZ;
194 Int_t tmpX;
195 Int_t tmpGain;
14ff16ed 196 int cnt = 0;
c890e0a1 197 Int_t* tmpPtr = 0;
14ff16ed 198
14ff16ed 199 fShmPtr->SetMemory(cellEnergiesPtr);
200 currentChannel = fShmPtr->NextChannel();
201
202 while(currentChannel != 0)
203 {
204 cnt ++;
205 tmpZ = currentChannel->fZ;
206 tmpX = currentChannel->fX;
207 tmpGain = currentChannel->fGain;
54276f07 208 fgLegoPlotPtr[tmpGain]->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,
209 tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
2589c3a3 210
54276f07 211 // CRAP PTH
212 if(tmpGain == HIGH_GAIN)
213 {
997330b5 214 gAliEveBoxSet->AddBox(2.2*(tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX) - 1.1,
215 0,
216 2.2*(tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ) - 1.1,
217 2.2,
218 0.4*140*currentChannel->fEnergy/1024,
219 2.2);
220 gAliEveBoxSet->DigitValue(TMath::Nint(currentChannel->fEnergy));
14ff16ed 221 }
54276f07 222
223 if(cellEnergiesPtr->fHasRawData == true)
d456fffb 224 //if(0)
14ff16ed 225 {
54276f07 226 Int_t nSamples = 0;
227 Int_t* rawPtr = 0;
228 rawPtr = fShmPtr->GetRawData(nSamples);
229 fNChannelSamples[moduleID][rcuX][rcuZ][tmpX][tmpZ][tmpGain] = nSamples;
2589c3a3 230
d456fffb 231 // cout << __FILE__ << ":" << __LINE__ <<" gain = " << tmpGain << " z = "<< tmpZ << " x = " << tmpX;
232 // cout << " nsamples = " << nSamples;
233 // cout << __FILE__ << ":" << __LINE__ << " the address of raw ptr = " << rawPtr << endl;
234
235
236 if(nSamples > ALTRO_MAX_SAMPLES || nSamples < 0 )
14ff16ed 237 {
d456fffb 238 cout << __FILE__<< ":" <<__LINE__ <<"ERROR, nsamples = "<< nSamples <<" exeeds allowd range, max number of samples is "<< ALTRO_MAX_SAMPLES << endl;
239 }
240 else
241 {
242 for(int j= 0; j< nSamples; j++)
243 {
244 // cout << __FILE__ << ":" << __LINE__ << " nsamples = " << nSamples << " j =" << j << endl;
245 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][tmpGain][j] = rawPtr[j];
246 }
247
14ff16ed 248 }
249 }
54276f07 250
14ff16ed 251 currentChannel = fShmPtr->NextChannel();
252 }
54276f07 253
59b4cd9a 254 blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
9d05c97d 255
59b4cd9a 256 }
257}
258
259
9d05c97d 260
261
59b4cd9a 262void
263AliHLTPHOSOnlineDisplayEventTab::ResetDisplay()
264{
265 if(fgAccumulate == kFALSE)
266 {
54276f07 267 for(int gain=0; gain < N_GAINS; gain++)
59b4cd9a 268 {
54276f07 269 if(fgLegoPlotPtr[gain] !=0)
270 {
271 fgLegoPlotPtr[gain]->Reset();
272 }
59b4cd9a 273 }
54276f07 274 }
275}
59b4cd9a 276
277
278void
d456fffb 279AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab *tabPtr, const int runnumber)
59b4cd9a 280{
f704525c 281 // gStyle->SetOptLogy();
282 /// gStyle->SetOptStat(true);
283
54276f07 284 for(int gain=0; gain < N_GAINS; gain++)
285 {
286 char gainLabel[100];
287 char label[256];
288
289 // Gain2Text
290 fOnlineDisplayPtr->Gain2Text(gain,gainLabel);
291 sprintf(label, "PHOS HLT Online Display %s", gainLabel);
292 fgLegoPlotPtr[gain] = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, label, label,
293 N_XCOLUMNS_MOD*N_MODULES , 0, N_XCOLUMNS_MOD*N_MODULES,
294 N_ZROWS_MOD, 0, N_ZROWS_MOD);
d456fffb 295
296 // cout << __FILE__ << ":" << __LINE__ << " Runnumber = " << runnumber <<endl;
297
298 fgLegoPlotPtr[gain]->SetRunNumber(runnumber);
54276f07 299 fgLegoPlotPtr[gain]->SetMaximum(1023);
300 fgLegoPlotPtr[gain]->Reset();
301 fgLegoPlotPtr[gain]->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END);
302 }
303
59b4cd9a 304
305 TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
306 kLHintsExpandY, 2, 2, 15, 1);
307
3f98e623 308 TGCompositeFrame *tf = tabPtr->AddTab("Event display");
59b4cd9a 309 fSubTab1 = new TGTab(tf, 100, 100);
310 TGCompositeFrame *tf2 = fSubTab1->AddTab("LEGO");
311 fSubF1 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
312 fEc1 = new TRootEmbeddedCanvas("ec1", fSubF1, 100, 100);
313 fSubF1->AddFrame(fEc1, fL1);
314 fEc2 = new TRootEmbeddedCanvas("ec2", fSubF1, 100, 100);
315 fSubF1->AddFrame(fEc2, fL1);
316 tf2->AddFrame(fSubF1, fL1);
317
318 tf2 = fSubTab1->AddTab("SCAT");
319 fSubF2 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
320 tf2->AddFrame(fSubF2, fL1);
321 fEc3 = new TRootEmbeddedCanvas("ec3", fSubF2, 100, 100);
322 fSubF2->AddFrame(fEc3, fL1);
323 fEc4 = new TRootEmbeddedCanvas("ec4", fSubF2, 100, 100);
324 fSubF2->AddFrame(fEc4, fL1);
325
326 tf2 = fSubTab1->AddTab("SURF");
327 fSubF3 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
328 tf2->AddFrame(fSubF3, fL1);
329 fEc5 = new TRootEmbeddedCanvas("ec5", fSubF3, 100, 100);
330 fSubF3->AddFrame(fEc5, fL1);
331 fEc6 = new TRootEmbeddedCanvas("ec6", fSubF3, 100, 100);
332 fSubF3->AddFrame(fEc6, fL1);
333 fSubTab1->Resize();
334 tf->AddFrame(fSubTab1, fL1);
335
336 fgEventButtPtr = new AliHLTPHOSGetEventButton(fSubF1, "get event", 'e');
337}
338
339
04751caa 340
59b4cd9a 341void
342AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay()
343{
f704525c 344 // gStyle->SetOptLogy();
345 // gStyle->SetOptStat(true);
346
54276f07 347 fgCanvasPtr[HIGH_GAIN] = fEc1->GetCanvas();
348 fgCanvasPtr[HIGH_GAIN]->cd();
349 fgLegoPlotPtr[HIGH_GAIN]->Draw("LEGO2Z");
350 fgCanvasPtr[HIGH_GAIN]->Update();
351 fgCanvasPtr[LOW_GAIN] = fEc2->GetCanvas();
352 fgCanvasPtr[LOW_GAIN]->cd();
353 fgLegoPlotPtr[LOW_GAIN]->Draw("LEGO2Z");
354 fgCanvasPtr[LOW_GAIN]->Update();
355
356 fgCanvasPtr[HIGH_GAIN] = fEc3->GetCanvas();
357 fgCanvasPtr[HIGH_GAIN]->cd();
358 fgLegoPlotPtr[HIGH_GAIN]->Draw("SCAT");
359 fgCanvasPtr[HIGH_GAIN]->Update();
360 fgCanvasPtr[LOW_GAIN] = fEc4->GetCanvas();
361 fgCanvasPtr[LOW_GAIN]->cd();
362 fgLegoPlotPtr[LOW_GAIN]->Draw("SCAT");
363 fgCanvasPtr[LOW_GAIN]->Update();
364
d456fffb 365 /*
366 fgCanvasPtr[HIGH_GAIN] = fEc5->GetCanvas();
54276f07 367 fgCanvasPtr[HIGH_GAIN]->cd();
368 fgLegoPlotPtr[HIGH_GAIN]->Draw("CONTZ");
369 fgCanvasPtr[HIGH_GAIN]->Update();
370 fgCanvasPtr[LOW_GAIN] = fEc6->GetCanvas();
371 fgCanvasPtr[LOW_GAIN]->cd();
372 fgLegoPlotPtr[LOW_GAIN]->Draw("CONTZ");
373 fgCanvasPtr[LOW_GAIN]->Update();
d456fffb 374 */
375
376 fgCanvasPtr[HIGH_GAIN] = fEc5->GetCanvas();
377 fgCanvasPtr[HIGH_GAIN]->cd();
378 fgLegoPlotPtr[HIGH_GAIN]->Draw("COLZ");
379 fgCanvasPtr[HIGH_GAIN]->Update();
380 fgCanvasPtr[LOW_GAIN] = fEc6->GetCanvas();
381 fgCanvasPtr[LOW_GAIN]->cd();
382 fgLegoPlotPtr[LOW_GAIN]->Draw("COLZ");
383 fgCanvasPtr[LOW_GAIN]->Update();
384
385
59b4cd9a 386}