1 // $Id: AliHLTEMCALOnlineDisplayEventTab.cxx 35108 2009-09-30 01:58:37Z phille $
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 "AliHLTEMCALOnlineDisplayEventTab.h"
22 #include "AliHLTEMCALGetEventButton.h"
23 #include "AliHLTDataTypes.h"
24 #include "AliHLTHOMERData.h"
25 #include "AliHLTHOMERReader.h"
26 #include "AliHLTHOMERWriter.h"
27 #include "TRootEmbeddedCanvas.h"
28 #include "AliHLTEMCALOnlineDisplay.h"
29 #include "AliHLTCaloChannelDataStruct.h"
30 #include "AliHLTCaloChannelDataHeaderStruct.h"
31 //#include "AliHLTCaloSharedMemoryInterfacev2.h"
32 #include "AliHLTEMCALSharedMemoryInterface.h"
33 #include "AliHLTCaloCoordinate.h"
34 //#include "AliHLTCaloChannelRawDataStruct.h"
41 #include "AliHLTEMCALOnlineDisplayTH2D.h"
43 #include <TEveManager.h>
44 #include <TEveBoxSet.h>
46 TEveBoxSet* gAliEveBoxSet = 0;
48 //gEve = new TEveManager(300, 300);
50 AliHLTEMCALOnlineDisplayEventTab::AliHLTEMCALOnlineDisplayEventTab()
52 cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
56 AliHLTEMCALOnlineDisplayEventTab::AliHLTEMCALOnlineDisplayEventTab(AliHLTEMCALOnlineDisplay * onlineDisplayPtr, TGTab *tabPtr,
57 AliHLTHOMERReader * homerSyncPtr, AliHLTHOMERReader * homerPtrs[MAXHOSTS],
58 int nHosts, int runnumber) : AliHLTEMCALOnlineDisplayTab()
61 // gEve = new TEveManager(300, 300, kFALSE);
66 if(fIsSetRunNumber == true)
68 for(int i=0; i < NGAINS; i++)
76 // fShmPtr = new AliHLTEMCALSharedMemoryInterface();
78 // fShmPtr = new AliHLTEMCALSharedMemoryInterfacev2();
80 fShmPtr = new AliHLTEMCALSharedMemoryInterface();
84 fOnlineDisplayPtr = onlineDisplayPtr;
87 for(int gain = 0; gain < NGAINS; gain ++ )
89 fgCanvasPtr[gain] = 0;
90 fgLegoPlotPtr[gain] = 0;
93 for(int mod =0; mod <NMODULES; mod ++)
95 for(int z = 0; z < NZROWSMOD ; z ++)
97 for(int x = 0; x < NXCOLUMNSMOD; x ++)
99 fChannelData[mod][z][x][gain] = new int[ALTROMAXSAMPLES];
100 fNChannelSamples[mod][z][x][gain] = 0;
101 fChannelEnergy[mod][z][x][gain] = 0;
107 for(int i=0; i<MAXHOSTS; i++)
109 fgHomerReadersPtr[i] = 0;
112 fgHomerReaderPtr = const_cast<AliHLTHOMERReader*>(homerSyncPtr);
114 for(int i=0; i<nHosts; i++)
116 fgHomerReadersPtr[i] = homerPtrs[i] ;
121 InitDisplay(tabPtr, runnumber);
125 AliHLTEMCALOnlineDisplayEventTab::~AliHLTEMCALOnlineDisplayEventTab()
133 AliHLTEMCALOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
140 int tmpRcuX = (x%64)/32;
145 for( int i=0; i < fNChannelSamples[tmpModID][z][x][gain] ; i++)
147 histPtr->SetBinContent(i, fChannelData[tmpModID][z][x][gain][i]);
149 return fNChannelSamples [tmpModID][z][x][gain];
155 AliHLTEMCALOnlineDisplayEventTab::GetNextEvent()
165 AliHLTEMCALOnlineDisplayEventTab::FindFourierBlocks(AliHLTHOMERReader * const homerReaderPtr) const
168 cout << "AliHLTEMCALOnlineDisplayEventTab::FindFourierBlocks" << endl;
169 // unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
170 unsigned long blk = homerReaderPtr->FindBlockNdx(" TREIRUOF","SOHP", 0xFFFFFFFF );
172 while ( blk != ~(unsigned long)0 )
174 cout << "AliHLTEMCALOnlineDisplayEventTab::FindFourierBlocks(homerReaderPtr) FOUND FOURIER DATA !!!!!!!!!!!!!!" << endl;
175 blk = homerReaderPtr->FindBlockNdx("TREIRUOF","SOHP", 0xFFFFFFFF );
181 AliHLTEMCALOnlineDisplayEventTab::ReadBlockData(AliHLTHOMERReader *homeReaderPtr)
183 // AliHLTEMCALChannelDataStruct *currentChannel =0;
184 AliHLTCaloChannelDataStruct *currentChannel =0;
186 cout << "AliHLTEMCALOnlineDisplayEventTab::ReadBlockDat, Reading block data, therere are " << homeReaderPtr->GetBlockCnt() << " blocks " <<endl;
187 FindFourierBlocks(homeReaderPtr);
188 // unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
189 unsigned long blk = homeReaderPtr->FindBlockNdx("TLENNAHC","SOHP", 0xFFFFFFFF );
190 cout << __FILE__ << ":" << __LINE__ << "blk" << blk << endl ;
193 // AliHLTEMCALCoordinate tmpCoord;
194 AliHLTCaloCoordinate tmpCoord;
197 while ( blk != ~(unsigned long)0 )
200 // AliHLTEMCALChannelDataHeaderStruct* cellEnergiesPtr = (AliHLTEMCALChannelDataHeaderStruct*)homeReaderPtr->GetBlockData( blk );
201 AliHLTCaloChannelDataHeaderStruct* cellEnergiesPtr = (AliHLTCaloChannelDataHeaderStruct*)homeReaderPtr->GetBlockData( blk );
204 fShmPtr->SetMemory(cellEnergiesPtr);
205 currentChannel = fShmPtr->NextChannel();
207 while(currentChannel != 0)
210 AliHLTEMCALMapper::ChannelId2Coordinate( currentChannel->fChannelID, tmpCoord );
211 fgLegoPlotPtr[ tmpCoord.fGain ]->Fill( tmpCoord.fModuleId*NXCOLUMNSMOD + tmpCoord.fX, tmpCoord.fZ, currentChannel->fEnergy );
212 fChannelEnergy[tmpCoord.fModuleId][tmpCoord.fZ][ tmpCoord.fX][tmpCoord.fGain] = currentChannel->fEnergy;
214 if(cellEnergiesPtr->fHasRawData == true)
216 FillRawData(fShmPtr->GetRawData());
218 currentChannel = fShmPtr->NextChannel();
220 // blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
221 blk = homeReaderPtr->FindBlockNdx("TLENNAHC","SOHP", 0xFFFFFFFF, blk+1 );
227 ///AliHLTEMCALOnlineDisplayEventTab::FillRawData(const AliHLTEMCALChannelRawDataStruct &rawStr)
228 AliHLTEMCALOnlineDisplayEventTab::FillRawData(const AliHLTCaloChannelRawDataStruct &rawStr)
231 fNChannelSamples[ rawStr.fCoordinate.fModuleId ][ rawStr.fCoordinate.fZ ] [ rawStr.fCoordinate.fX ][ rawStr.fCoordinate.fGain ] = rawStr.nSamplesUsed;
232 fChannelEnergy[ rawStr.fCoordinate.fModuleId ][ rawStr.fCoordinate.fZ ] [ rawStr.fCoordinate.fX ][ rawStr.fCoordinate.fGain ] = rawStr.fEnergy;
236 cout << __FILE__ << __LINE__<< "module ID = " << rawStr.fCoordinate.fModuleId << endl;
237 cout << __FILE__ << __LINE__<< "fZ = " << rawStr.fCoordinate.fZ << endl;
238 cout << __FILE__ << __LINE__<< "fX = " << rawStr.fCoordinate.fX << endl;
239 cout << __FILE__ << __LINE__<< "fGain = " << rawStr.fCoordinate.fGain << endl;
240 cout << __FILE__ << __LINE__<< "nSamples = " << rawStr.nSamplesUsed << endl;
243 for(int i=0; i < rawStr.nSamplesUsed; i++ )
245 // cout << "i = " << i << endl;
246 // fChannelData[ rawStr.fCoordinate.fModuleId ][ rawStr.fCoordinate.fZ ] [ rawStr.fCoordinate.fX ][ rawStr.fCoordinate.fGain ][i] = rawStr.fDataPtr[i];
247 fChannelData[ rawStr.fCoordinate.fModuleId ][ rawStr.fCoordinate.fX ] [ rawStr.fCoordinate.fZ ][ rawStr.fCoordinate.fGain ][i] = rawStr.fDataPtr[i];
256 AliHLTEMCALOnlineDisplayEventTab::ResetDisplay()
259 if(fgAccumulate == kFALSE)
261 for(int gain=0; gain < NGAINS; gain++)
263 if(fgLegoPlotPtr[gain] !=0)
265 fgLegoPlotPtr[gain]->Reset();
273 AliHLTEMCALOnlineDisplayEventTab::InitDisplay(TGTab * tabPtr, int runnumber)
275 // gStyle->SetOptLogy();
276 /// gStyle->SetOptStat(true);
278 for(int gain=0; gain < NGAINS; gain++)
284 fOnlineDisplayPtr->Gain2Text(gain,gainLabel);
285 sprintf(label, "EMCAL HLT Online Display %s", gainLabel);
286 fgLegoPlotPtr[gain] = new AliHLTEMCALOnlineDisplayTH2D(fOnlineDisplayPtr, label, label,
287 NXCOLUMNSMOD*NMODULES , 0, NXCOLUMNSMOD*NMODULES,
288 NZROWSMOD, 0, NZROWSMOD);
290 // cout << __FILE__ << ":" << __LINE__ << " Runnumber = " << runnumber <<endl;
292 fgLegoPlotPtr[gain]->SetRunNumber(runnumber);
293 fgLegoPlotPtr[gain]->SetMaximum(1023);
294 fgLegoPlotPtr[gain]->Reset();
295 // fgLegoPlotPtr[gain]->GetXaxis()->SetRange(XRANGESTART, XRANGEEND);
299 TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
300 kLHintsExpandY, 2, 2, 15, 1);
302 TGCompositeFrame * tf = tabPtr->AddTab("Event display");
303 fSubTab1 = new TGTab(tf, 100, 100);
304 TGCompositeFrame *tf2 = fSubTab1->AddTab("LEGO");
305 fSubF1 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
306 fEc1 = new TRootEmbeddedCanvas("ec1", fSubF1, 100, 100);
307 fSubF1->AddFrame(fEc1, fL1);
308 fEc2 = new TRootEmbeddedCanvas("ec2", fSubF1, 100, 100);
309 fSubF1->AddFrame(fEc2, fL1);
310 tf2->AddFrame(fSubF1, fL1);
312 tf2 = fSubTab1->AddTab("SCAT");
313 fSubF2 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
314 tf2->AddFrame(fSubF2, fL1);
315 fEc3 = new TRootEmbeddedCanvas("ec3", fSubF2, 100, 100);
316 fSubF2->AddFrame(fEc3, fL1);
317 fEc4 = new TRootEmbeddedCanvas("ec4", fSubF2, 100, 100);
318 fSubF2->AddFrame(fEc4, fL1);
320 tf2 = fSubTab1->AddTab("SURF");
321 fSubF3 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
322 tf2->AddFrame(fSubF3, fL1);
323 fEc5 = new TRootEmbeddedCanvas("ec5", fSubF3, 100, 100);
324 fSubF3->AddFrame(fEc5, fL1);
325 fEc6 = new TRootEmbeddedCanvas("ec6", fSubF3, 100, 100);
326 fSubF3->AddFrame(fEc6, fL1);
328 tf->AddFrame(fSubTab1, fL1);
330 fgEventButtPtr = new AliHLTEMCALGetEventButton(fSubF1, "get event", 'e');
336 AliHLTEMCALOnlineDisplayEventTab::UpdateDisplay()
338 // gStyle->SetOptLogy();
339 // gStyle->SetOptStat(true);
341 fgCanvasPtr[HIGHGAIN] = fEc1->GetCanvas();
342 fgCanvasPtr[HIGHGAIN]->cd();
343 fgLegoPlotPtr[HIGHGAIN]->Draw("LEGO2Z");
344 fgCanvasPtr[HIGHGAIN]->Update();
345 fgCanvasPtr[LOWGAIN] = fEc2->GetCanvas();
346 fgCanvasPtr[LOWGAIN]->cd();
347 fgLegoPlotPtr[LOWGAIN]->Draw("LEGO2Z");
348 fgCanvasPtr[LOWGAIN]->Update();
350 fgCanvasPtr[HIGHGAIN] = fEc3->GetCanvas();
351 fgCanvasPtr[HIGHGAIN]->cd();
352 fgLegoPlotPtr[HIGHGAIN]->Draw("SCAT");
353 fgCanvasPtr[HIGHGAIN]->Update();
354 fgCanvasPtr[LOWGAIN] = fEc4->GetCanvas();
355 fgCanvasPtr[LOWGAIN]->cd();
356 fgLegoPlotPtr[LOWGAIN]->Draw("SCAT");
357 fgCanvasPtr[LOWGAIN]->Update();
360 fgCanvasPtr[HIGHGAIN] = fEc5->GetCanvas();
361 fgCanvasPtr[HIGHGAIN]->cd();
362 fgLegoPlotPtr[HIGHGAIN]->Draw("CONTZ");
363 fgCanvasPtr[HIGHGAIN]->Update();
364 fgCanvasPtr[LOWGAIN] = fEc6->GetCanvas();
365 fgCanvasPtr[LOWGAIN]->cd();
366 fgLegoPlotPtr[LOWGAIN]->Draw("CONTZ");
367 fgCanvasPtr[LOWGAIN]->Update();
370 fgCanvasPtr[HIGHGAIN] = fEc5->GetCanvas();
371 fgCanvasPtr[HIGHGAIN]->cd();
372 fgLegoPlotPtr[HIGHGAIN]->Draw("COLZ");
373 fgCanvasPtr[HIGHGAIN]->Update();
374 fgCanvasPtr[LOWGAIN] = fEc6->GetCanvas();
375 fgCanvasPtr[LOWGAIN]->cd();
376 fgLegoPlotPtr[LOWGAIN]->Draw("COLZ");
377 fgCanvasPtr[LOWGAIN]->Update();