]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/PHOS/OnlineDisplay/AliHLTPHOSOnlineDisplayEventTab.cxx
- changes in online display to handle more than one module
[u/mrichter/AliRoot.git] / HLT / PHOS / OnlineDisplay / AliHLTPHOSOnlineDisplayEventTab.cxx
CommitLineData
86fe676f 1// $Id: AliHLTPHOSOnlineDisplayEventTab.cxx 31683 2009-03-24 21:17:03Z odjuvsla $
1b41ab20 2
27029341 3/**************************************************************************
4 * Copyright(c) 2006, ALICE Experiment at CERN, All rights reserved. *
5 * *
6 * Authors: Per Thomas Hille for the ALICE *
7 * offline/HLT Project. Contributors are mentioned in the code where *
8 * appropriate. *
9 * *
10 * Permission to use, copy, modify and distribute this software and its *
11 * documentation strictly for non-commercial purposes is hereby granted *
12 * without fee, provided that the above copyright notice appears in all *
13 * copies and that both the copyright notice and this permission notice *
14 * appear in the supporting documentation. The authors make no claims *
15 * about the suitability of this software for any purpose. It is *
16 * provided "as is" without express or implied warranty. *
17 **************************************************************************/
18
59b4cd9a 19#include "AliHLTPHOSOnlineDisplayEventTab.h"
20#include <iostream>
21#include "TGFrame.h"
22#include "AliHLTPHOSGetEventButton.h"
23#include "AliHLTPHOSCommonDefs.h"
24#include "AliHLTDataTypes.h"
6af3dade 25#include "AliHLTHOMERData.h"
26#include "AliHLTHOMERReader.h"
27#include "AliHLTHOMERWriter.h"
59b4cd9a 28#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
86fe676f 29#include "TRootEmbeddedCanvas.h"
b3abda11 30//#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
14ff16ed 31#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
b3abda11 32#include "AliHLTPHOSOnlineDisplay.h"
14ff16ed 33#include "AliHLTPHOSSharedMemoryInterface.h"
59b4cd9a 34
f704525c 35//#include "TStyle.h"
36
59b4cd9a 37using namespace std;
38
997330b5 39// MT Crap
40#include <TMath.h>
36f19b25 41#include "AliHLTPHOSOnlineDisplayTH2D.h"
42
18af2efc 43//#include <TEveManager.h>
44//#include <TEveBoxSet.h>
997330b5 45
18af2efc 46//TEveBoxSet* gAliEveBoxSet = 0;
59b4cd9a 47
48AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab()
49{
50 cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
51}
52
53
36f19b25 54AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay * onlineDisplayPtr, TGTab *tabPtr,
55 AliHLTHOMERReader * homerSyncPtr, AliHLTHOMERReader * homerPtrs[MAXHOSTS],
56 int nHosts, int runnumber) : AliHLTPHOSOnlineDisplayTab()
59b4cd9a 57{
27029341 58 //comment
d456fffb 59 /*
60 if(fIsSetRunNumber == true)
61 {
27029341 62 for(int i=0; i < NGAINS; i++)
d456fffb 63 {
64 fgLegoPlotPtr[gain]
65 }
66 }
67 */
68
69
14ff16ed 70 fShmPtr = new AliHLTPHOSSharedMemoryInterface();
b3abda11 71 fOnlineDisplayPtr = onlineDisplayPtr;
72
54276f07 73
27029341 74 for(int gain = 0; gain < NGAINS; gain ++ )
3f98e623 75 {
54276f07 76 fgCanvasPtr[gain] = 0;
77 fgLegoPlotPtr[gain] = 0;
78
27029341 79 for(int mod =0; mod <NMODULES; mod ++)
3f98e623 80 {
27029341 81 for(int rcuxcoord = 0; rcuxcoord < NZRCUCOORD; rcuxcoord ++)
3f98e623 82 {
27029341 83 for(int rcuzcoord = 0; rcuzcoord < NXRCUCOORD; rcuzcoord ++)
3f98e623 84 {
27029341 85 for(int z = 0; z < NZROWSRCU; z ++)
3f98e623 86 {
27029341 87 for(int x = 0; x < NXCOLUMNSRCU; x ++)
3f98e623 88 {
27029341 89 fChannelData[mod][rcuzcoord][rcuxcoord][x][z][gain] = new int[ALTROMAXSAMPLES];
90 fNChannelSamples[mod][rcuzcoord][rcuxcoord][x][z][gain] = 0;
91 fChannelEnergy[mod][rcuzcoord][rcuxcoord][x][z][gain] = 0;
3f98e623 92 }
54276f07 93 }
94 }
3f98e623 95 }
96 }
97 }
98
27029341 99 for(int i=0; i<MAXHOSTS; i++)
59b4cd9a 100 {
101 fgHomerReadersPtr[i] = 0;
102 }
103
36f19b25 104 fgHomerReaderPtr = const_cast<AliHLTHOMERReader*>(homerSyncPtr);
59b4cd9a 105
106 for(int i=0; i<nHosts; i++)
107 {
108 fgHomerReadersPtr[i] = homerPtrs[i] ;
14ff16ed 109
59b4cd9a 110 }
111
59b4cd9a 112 fgNHosts = nHosts;
d456fffb 113 InitDisplay(tabPtr, runnumber);
59b4cd9a 114}
115
116
117AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab()
118{
27029341 119 //comment
59b4cd9a 120}
121
122
c890e0a1 123Int_t
b3abda11 124AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
125{
126 int tmpModID = x/64;
127 int tmpRcuZ = z/32;
128 int tmpRcuX = (x%64)/32;
129 int tmpZ = z%28;
130 int tmpX = x%32;
131
c890e0a1 132 for(int i=0; i < fNChannelSamples[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain] ; i++)
b3abda11 133 {
c890e0a1 134 histPtr->SetBinContent(i, fChannelData[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain][i]);
b3abda11 135 }
c890e0a1 136 return fNChannelSamples[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain];
b3abda11 137}
138
139
59b4cd9a 140int
141AliHLTPHOSOnlineDisplayEventTab::GetNextEvent()
142{
27029341 143 //comment
59b4cd9a 144 ResetDisplay();
997330b5 145 // MT crap
146 Bool_t is_first = false;
18af2efc 147 // if (gAliEveBoxSet == 0)
148// {
149// is_first = true;
150// gAliEveBoxSet = new TEveBoxSet("PHOS module");
151// // gAliEveBoxSet->SetSecSelectCommand("Draw()");
152// // gAliEveBoxSet->SetSecSelectCommand("phos_histo_draw");
153// gEve->AddElement(gAliEveBoxSet);
154// }
155// gAliEveBoxSet->Reset(TEveBoxSet::kBT_AABox, kFALSE, 128);
997330b5 156
59b4cd9a 157 DoGetNextEvent();
158 UpdateDisplay();
997330b5 159
18af2efc 160 // gAliEveBoxSet->ElementChanged();
161 // gEve->Redraw3D(is_first);
997330b5 162
59b4cd9a 163 fgEvntCnt ++;
164}
165
166
9d05c97d 167void
27029341 168AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(AliHLTHOMERReader * const homerReaderPtr) const
9d05c97d 169{
27029341 170 //comment
9d05c97d 171 cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks" << endl;
172 // unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
173 unsigned long blk = homerReaderPtr->FindBlockNdx(" TREIRUOF","SOHP", 0xFFFFFFFF );
174
175 while ( blk != ~(unsigned long)0 )
176 {
177 cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(homerReaderPtr) FOUND FOURIER DATA !!!!!!!!!!!!!!" << endl;
178
179
180 blk = homerReaderPtr->FindBlockNdx("TREIRUOF","SOHP", 0xFFFFFFFF );
181 }
182
183}
184
59b4cd9a 185
186void
6af3dade 187AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(AliHLTHOMERReader *homeReaderPtr)
14ff16ed 188{
27029341 189 //comment
14ff16ed 190 AliHLTPHOSValidCellDataStruct *currentChannel =0;
9d05c97d 191 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data, therere are " << homeReaderPtr->GetBlockCnt() << " blocks " <<endl;
192
193 FindFourierBlocks(homeReaderPtr);
59b4cd9a 194
195 unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
997330b5 196
d456fffb 197 int cnt = 0;
198
9d05c97d 199 //CRAP PT
200 // FindFourierBlocks(homeReaderPtr);
201
59b4cd9a 202 while ( blk != ~(unsigned long)0 )
203 {
204 Int_t moduleID;
c890e0a1 205 Int_t rcuX = 0;
206 Int_t rcuZ = 0;
14ff16ed 207 AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk );
47f7b25e 208
47f7b25e 209 unsigned int *t = (unsigned int*)cellEnergiesPtr;
210
59b4cd9a 211 moduleID = cellEnergiesPtr->fModuleID ;
c890e0a1 212 rcuX = cellEnergiesPtr->fRcuX;
213 rcuZ = cellEnergiesPtr->fRcuZ;
214
14ff16ed 215 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData, fModuleID =" <<moduleID << endl;
04751caa 216
59b4cd9a 217 Int_t tmpZ;
218 Int_t tmpX;
219 Int_t tmpGain;
14ff16ed 220 int cnt = 0;
c890e0a1 221 Int_t* tmpPtr = 0;
14ff16ed 222
14ff16ed 223 fShmPtr->SetMemory(cellEnergiesPtr);
224 currentChannel = fShmPtr->NextChannel();
225
226 while(currentChannel != 0)
227 {
228 cnt ++;
229 tmpZ = currentChannel->fZ;
230 tmpX = currentChannel->fX;
231 tmpGain = currentChannel->fGain;
86fe676f 232
233// cout << "Channel: x: " << moduleID*NXCOLUMNSMOD + tmpX + NXCOLUMNSRCU*cellEnergiesPtr->fRcuX
234// << " z: " << tmpZ + NZROWSRCU*cellEnergiesPtr->fRcuZ
235// << " E: " << currentChannel->fEnergy << endl;
236
27029341 237 fgLegoPlotPtr[tmpGain]->Fill(moduleID*NXCOLUMNSMOD + tmpX + NXCOLUMNSRCU*cellEnergiesPtr->fRcuX,
238 tmpZ + NZROWSRCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
86fe676f 239
2589c3a3 240
54276f07 241 // CRAP PTH
27029341 242 if(tmpGain == HIGHGAIN)
54276f07 243 {
18af2efc 244 // gAliEveBoxSet->AddBox(2.2*(tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX) - 1.1,
245// 0,
27029341 246// 2.2*(tmpZ + N_ZROWSRCU*cellEnergiesPtr->fRcuZ) - 1.1,
18af2efc 247// 2.2,
248// 0.4*140*currentChannel->fEnergy/1024,
249// 2.2);
250// gAliEveBoxSet->DigitValue(TMath::Nint(currentChannel->fEnergy));
14ff16ed 251 }
54276f07 252
253 if(cellEnergiesPtr->fHasRawData == true)
d456fffb 254 //if(0)
14ff16ed 255 {
54276f07 256 Int_t nSamples = 0;
257 Int_t* rawPtr = 0;
258 rawPtr = fShmPtr->GetRawData(nSamples);
259 fNChannelSamples[moduleID][rcuX][rcuZ][tmpX][tmpZ][tmpGain] = nSamples;
2589c3a3 260
d456fffb 261 // cout << __FILE__ << ":" << __LINE__ <<" gain = " << tmpGain << " z = "<< tmpZ << " x = " << tmpX;
262 // cout << " nsamples = " << nSamples;
263 // cout << __FILE__ << ":" << __LINE__ << " the address of raw ptr = " << rawPtr << endl;
264
265
27029341 266 if(nSamples > ALTROMAXSAMPLES || nSamples < 0 )
14ff16ed 267 {
27029341 268 cout << __FILE__<< ":" <<__LINE__ <<"ERROR, nsamples = "<< nSamples <<" exeeds allowd range, max number of samples is "<< ALTROMAXSAMPLES << endl;
d456fffb 269 }
270 else
271 {
272 for(int j= 0; j< nSamples; j++)
273 {
274 // cout << __FILE__ << ":" << __LINE__ << " nsamples = " << nSamples << " j =" << j << endl;
275 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][tmpGain][j] = rawPtr[j];
276 }
277
14ff16ed 278 }
279 }
54276f07 280
14ff16ed 281 currentChannel = fShmPtr->NextChannel();
282 }
54276f07 283
59b4cd9a 284 blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
9d05c97d 285
59b4cd9a 286 }
287}
288
289
9d05c97d 290
291
59b4cd9a 292void
293AliHLTPHOSOnlineDisplayEventTab::ResetDisplay()
294{
27029341 295 //comment
59b4cd9a 296 if(fgAccumulate == kFALSE)
297 {
27029341 298 for(int gain=0; gain < NGAINS; gain++)
59b4cd9a 299 {
54276f07 300 if(fgLegoPlotPtr[gain] !=0)
301 {
302 fgLegoPlotPtr[gain]->Reset();
303 }
59b4cd9a 304 }
54276f07 305 }
306}
59b4cd9a 307
308
309void
36f19b25 310AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab * tabPtr, int runnumber)
59b4cd9a 311{
f704525c 312 // gStyle->SetOptLogy();
313 /// gStyle->SetOptStat(true);
314
27029341 315 for(int gain=0; gain < NGAINS; gain++)
54276f07 316 {
317 char gainLabel[100];
318 char label[256];
319
320 // Gain2Text
321 fOnlineDisplayPtr->Gain2Text(gain,gainLabel);
322 sprintf(label, "PHOS HLT Online Display %s", gainLabel);
323 fgLegoPlotPtr[gain] = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, label, label,
27029341 324 NXCOLUMNSMOD*NMODULES , 0, NXCOLUMNSMOD*NMODULES,
325 NZROWSMOD, 0, NZROWSMOD);
d456fffb 326
327 // cout << __FILE__ << ":" << __LINE__ << " Runnumber = " << runnumber <<endl;
328
329 fgLegoPlotPtr[gain]->SetRunNumber(runnumber);
54276f07 330 fgLegoPlotPtr[gain]->SetMaximum(1023);
331 fgLegoPlotPtr[gain]->Reset();
27029341 332 fgLegoPlotPtr[gain]->GetXaxis()->SetRange(XRANGESTART, XRANGEEND);
54276f07 333 }
334
59b4cd9a 335
336 TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
337 kLHintsExpandY, 2, 2, 15, 1);
338
36f19b25 339 TGCompositeFrame * tf = tabPtr->AddTab("Event display");
59b4cd9a 340 fSubTab1 = new TGTab(tf, 100, 100);
341 TGCompositeFrame *tf2 = fSubTab1->AddTab("LEGO");
342 fSubF1 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
343 fEc1 = new TRootEmbeddedCanvas("ec1", fSubF1, 100, 100);
344 fSubF1->AddFrame(fEc1, fL1);
345 fEc2 = new TRootEmbeddedCanvas("ec2", fSubF1, 100, 100);
346 fSubF1->AddFrame(fEc2, fL1);
347 tf2->AddFrame(fSubF1, fL1);
348
349 tf2 = fSubTab1->AddTab("SCAT");
350 fSubF2 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
351 tf2->AddFrame(fSubF2, fL1);
352 fEc3 = new TRootEmbeddedCanvas("ec3", fSubF2, 100, 100);
353 fSubF2->AddFrame(fEc3, fL1);
354 fEc4 = new TRootEmbeddedCanvas("ec4", fSubF2, 100, 100);
355 fSubF2->AddFrame(fEc4, fL1);
356
357 tf2 = fSubTab1->AddTab("SURF");
358 fSubF3 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
359 tf2->AddFrame(fSubF3, fL1);
360 fEc5 = new TRootEmbeddedCanvas("ec5", fSubF3, 100, 100);
361 fSubF3->AddFrame(fEc5, fL1);
362 fEc6 = new TRootEmbeddedCanvas("ec6", fSubF3, 100, 100);
363 fSubF3->AddFrame(fEc6, fL1);
364 fSubTab1->Resize();
365 tf->AddFrame(fSubTab1, fL1);
366
367 fgEventButtPtr = new AliHLTPHOSGetEventButton(fSubF1, "get event", 'e');
368}
369
370
04751caa 371
59b4cd9a 372void
373AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay()
374{
f704525c 375 // gStyle->SetOptLogy();
376 // gStyle->SetOptStat(true);
377
27029341 378 fgCanvasPtr[HIGHGAIN] = fEc1->GetCanvas();
379 fgCanvasPtr[HIGHGAIN]->cd();
380 fgLegoPlotPtr[HIGHGAIN]->Draw("LEGO2Z");
381 fgCanvasPtr[HIGHGAIN]->Update();
382 fgCanvasPtr[LOWGAIN] = fEc2->GetCanvas();
383 fgCanvasPtr[LOWGAIN]->cd();
384 fgLegoPlotPtr[LOWGAIN]->Draw("LEGO2Z");
385 fgCanvasPtr[LOWGAIN]->Update();
386
387 fgCanvasPtr[HIGHGAIN] = fEc3->GetCanvas();
388 fgCanvasPtr[HIGHGAIN]->cd();
389 fgLegoPlotPtr[HIGHGAIN]->Draw("SCAT");
390 fgCanvasPtr[HIGHGAIN]->Update();
391 fgCanvasPtr[LOWGAIN] = fEc4->GetCanvas();
392 fgCanvasPtr[LOWGAIN]->cd();
393 fgLegoPlotPtr[LOWGAIN]->Draw("SCAT");
394 fgCanvasPtr[LOWGAIN]->Update();
54276f07 395
d456fffb 396 /*
27029341 397 fgCanvasPtr[HIGHGAIN] = fEc5->GetCanvas();
398 fgCanvasPtr[HIGHGAIN]->cd();
399 fgLegoPlotPtr[HIGHGAIN]->Draw("CONTZ");
400 fgCanvasPtr[HIGHGAIN]->Update();
401 fgCanvasPtr[LOWGAIN] = fEc6->GetCanvas();
402 fgCanvasPtr[LOWGAIN]->cd();
403 fgLegoPlotPtr[LOWGAIN]->Draw("CONTZ");
404 fgCanvasPtr[LOWGAIN]->Update();
d456fffb 405 */
406
27029341 407 fgCanvasPtr[HIGHGAIN] = fEc5->GetCanvas();
408 fgCanvasPtr[HIGHGAIN]->cd();
409 fgLegoPlotPtr[HIGHGAIN]->Draw("COLZ");
410 fgCanvasPtr[HIGHGAIN]->Update();
411 fgCanvasPtr[LOWGAIN] = fEc6->GetCanvas();
412 fgCanvasPtr[LOWGAIN]->cd();
413 fgLegoPlotPtr[LOWGAIN]->Draw("COLZ");
414 fgCanvasPtr[LOWGAIN]->Update();
d456fffb 415
416
59b4cd9a 417}