1 // $Id: AliHLTPHOSOnlineDisplayEventTab.cxx 31683 2009-03-24 21:17:03Z odjuvsla $
3 /**************************************************************************
4 * Copyright(c) 2006, ALICE Experiment at CERN, All rights reserved. *
6 * Authors: Per Thomas Hille for the ALICE *
7 * offline/HLT Project. Contributors are mentioned in the code where *
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 **************************************************************************/
19 #include "AliHLTPHOSOnlineDisplayEventTab.h"
22 #include "AliHLTPHOSGetEventButton.h"
23 #include "AliHLTPHOSCommonDefs.h"
24 #include "AliHLTDataTypes.h"
25 #include "AliHLTHOMERData.h"
26 #include "AliHLTHOMERReader.h"
27 #include "AliHLTHOMERWriter.h"
28 #include "AliHLTPHOSRcuCellEnergyDataStruct.h"
29 #include "TRootEmbeddedCanvas.h"
30 //#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
31 #include "AliHLTPHOSRcuCellEnergyDataStruct.h"
32 #include "AliHLTPHOSOnlineDisplay.h"
33 #include "AliHLTPHOSSharedMemoryInterface.h"
41 #include "AliHLTPHOSOnlineDisplayTH2D.h"
43 //#include <TEveManager.h>
44 //#include <TEveBoxSet.h>
46 //TEveBoxSet* gAliEveBoxSet = 0;
48 AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab()
50 cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
54 AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay * onlineDisplayPtr, TGTab *tabPtr,
55 AliHLTHOMERReader * homerSyncPtr, AliHLTHOMERReader * homerPtrs[MAXHOSTS],
56 int nHosts, int runnumber) : AliHLTPHOSOnlineDisplayTab()
60 if(fIsSetRunNumber == true)
62 for(int i=0; i < NGAINS; i++)
70 fShmPtr = new AliHLTPHOSSharedMemoryInterface();
71 fOnlineDisplayPtr = onlineDisplayPtr;
74 for(int gain = 0; gain < NGAINS; gain ++ )
76 fgCanvasPtr[gain] = 0;
77 fgLegoPlotPtr[gain] = 0;
79 for(int mod =0; mod <NMODULES; mod ++)
81 for(int rcuxcoord = 0; rcuxcoord < NZRCUCOORD; rcuxcoord ++)
83 for(int rcuzcoord = 0; rcuzcoord < NXRCUCOORD; rcuzcoord ++)
85 for(int z = 0; z < NZROWSRCU; z ++)
87 for(int x = 0; x < NXCOLUMNSRCU; x ++)
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;
99 for(int i=0; i<MAXHOSTS; i++)
101 fgHomerReadersPtr[i] = 0;
104 fgHomerReaderPtr = const_cast<AliHLTHOMERReader*>(homerSyncPtr);
106 for(int i=0; i<nHosts; i++)
108 fgHomerReadersPtr[i] = homerPtrs[i] ;
113 InitDisplay(tabPtr, runnumber);
117 AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab()
124 AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
128 int tmpRcuX = (x%64)/32;
132 for(int i=0; i < fNChannelSamples[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain] ; i++)
134 histPtr->SetBinContent(i, fChannelData[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain][i]);
136 return fNChannelSamples[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain];
141 AliHLTPHOSOnlineDisplayEventTab::GetNextEvent()
146 Bool_t is_first = false;
147 // if (gAliEveBoxSet == 0)
150 // gAliEveBoxSet = new TEveBoxSet("PHOS module");
151 // // gAliEveBoxSet->SetSecSelectCommand("Draw()");
152 // // gAliEveBoxSet->SetSecSelectCommand("phos_histo_draw");
153 // gEve->AddElement(gAliEveBoxSet);
155 // gAliEveBoxSet->Reset(TEveBoxSet::kBT_AABox, kFALSE, 128);
160 // gAliEveBoxSet->ElementChanged();
161 // gEve->Redraw3D(is_first);
168 AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(AliHLTHOMERReader * const homerReaderPtr) const
171 cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks" << endl;
172 // unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
173 unsigned long blk = homerReaderPtr->FindBlockNdx(" TREIRUOF","SOHP", 0xFFFFFFFF );
175 while ( blk != ~(unsigned long)0 )
177 cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(homerReaderPtr) FOUND FOURIER DATA !!!!!!!!!!!!!!" << endl;
180 blk = homerReaderPtr->FindBlockNdx("TREIRUOF","SOHP", 0xFFFFFFFF );
187 AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(AliHLTHOMERReader *homeReaderPtr)
190 AliHLTPHOSValidCellDataStruct *currentChannel =0;
191 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data, therere are " << homeReaderPtr->GetBlockCnt() << " blocks " <<endl;
193 FindFourierBlocks(homeReaderPtr);
195 unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
200 // FindFourierBlocks(homeReaderPtr);
202 while ( blk != ~(unsigned long)0 )
207 AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk );
209 unsigned int *t = (unsigned int*)cellEnergiesPtr;
211 moduleID = cellEnergiesPtr->fModuleID ;
212 rcuX = cellEnergiesPtr->fRcuX;
213 rcuZ = cellEnergiesPtr->fRcuZ;
215 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData, fModuleID =" <<moduleID << endl;
223 fShmPtr->SetMemory(cellEnergiesPtr);
224 currentChannel = fShmPtr->NextChannel();
226 while(currentChannel != 0)
229 tmpZ = currentChannel->fZ;
230 tmpX = currentChannel->fX;
231 tmpGain = currentChannel->fGain;
233 // cout << "Channel: x: " << moduleID*NXCOLUMNSMOD + tmpX + NXCOLUMNSRCU*cellEnergiesPtr->fRcuX
234 // << " z: " << tmpZ + NZROWSRCU*cellEnergiesPtr->fRcuZ
235 // << " E: " << currentChannel->fEnergy << endl;
237 fgLegoPlotPtr[tmpGain]->Fill(moduleID*NXCOLUMNSMOD + tmpX + NXCOLUMNSRCU*cellEnergiesPtr->fRcuX,
238 tmpZ + NZROWSRCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
242 if(tmpGain == HIGHGAIN)
244 // gAliEveBoxSet->AddBox(2.2*(tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX) - 1.1,
246 // 2.2*(tmpZ + N_ZROWSRCU*cellEnergiesPtr->fRcuZ) - 1.1,
248 // 0.4*140*currentChannel->fEnergy/1024,
250 // gAliEveBoxSet->DigitValue(TMath::Nint(currentChannel->fEnergy));
253 if(cellEnergiesPtr->fHasRawData == true)
258 rawPtr = fShmPtr->GetRawData(nSamples);
259 fNChannelSamples[moduleID][rcuX][rcuZ][tmpX][tmpZ][tmpGain] = nSamples;
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;
266 if(nSamples > ALTROMAXSAMPLES || nSamples < 0 )
268 cout << __FILE__<< ":" <<__LINE__ <<"ERROR, nsamples = "<< nSamples <<" exeeds allowd range, max number of samples is "<< ALTROMAXSAMPLES << endl;
272 for(int j= 0; j< nSamples; j++)
274 // cout << __FILE__ << ":" << __LINE__ << " nsamples = " << nSamples << " j =" << j << endl;
275 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][tmpGain][j] = rawPtr[j];
281 currentChannel = fShmPtr->NextChannel();
284 blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
293 AliHLTPHOSOnlineDisplayEventTab::ResetDisplay()
296 if(fgAccumulate == kFALSE)
298 for(int gain=0; gain < NGAINS; gain++)
300 if(fgLegoPlotPtr[gain] !=0)
302 fgLegoPlotPtr[gain]->Reset();
310 AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab * tabPtr, int runnumber)
312 // gStyle->SetOptLogy();
313 /// gStyle->SetOptStat(true);
315 for(int gain=0; gain < NGAINS; gain++)
321 fOnlineDisplayPtr->Gain2Text(gain,gainLabel);
322 sprintf(label, "PHOS HLT Online Display %s", gainLabel);
323 fgLegoPlotPtr[gain] = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, label, label,
324 NXCOLUMNSMOD*NMODULES , 0, NXCOLUMNSMOD*NMODULES,
325 NZROWSMOD, 0, NZROWSMOD);
327 // cout << __FILE__ << ":" << __LINE__ << " Runnumber = " << runnumber <<endl;
329 fgLegoPlotPtr[gain]->SetRunNumber(runnumber);
330 fgLegoPlotPtr[gain]->SetMaximum(1023);
331 fgLegoPlotPtr[gain]->Reset();
332 fgLegoPlotPtr[gain]->GetXaxis()->SetRange(XRANGESTART, XRANGEEND);
336 TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
337 kLHintsExpandY, 2, 2, 15, 1);
339 TGCompositeFrame * tf = tabPtr->AddTab("Event display");
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);
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);
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);
365 tf->AddFrame(fSubTab1, fL1);
367 fgEventButtPtr = new AliHLTPHOSGetEventButton(fSubF1, "get event", 'e');
373 AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay()
375 // gStyle->SetOptLogy();
376 // gStyle->SetOptStat(true);
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();
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();
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();
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();