]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/PHOS/OnlineDisplay/AliHLTPHOSOnlineDisplayEventTab.cxx
Changes for #64259 Request for including the new class AliTRDresponse in STEER and...
[u/mrichter/AliRoot.git] / HLT / PHOS / OnlineDisplay / AliHLTPHOSOnlineDisplayEventTab.cxx
CommitLineData
79aed8a6 1// $Id$
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"
86fe676f 28#include "TRootEmbeddedCanvas.h"
b3abda11 29#include "AliHLTPHOSOnlineDisplay.h"
3917d385 30#include "AliHLTPHOSChannelDataStruct.h"
3917d385 31#include "AliHLTPHOSChannelDataHeaderStruct.h"
3917d385 32#include "AliHLTPHOSSharedMemoryInterfacev2.h"
37ff2dd6 33#include "AliHLTPHOSCoordinate.h"
37ff2dd6 34#include "AliHLTPHOSChannelRawDataStruct.h"
35
59b4cd9a 36using namespace std;
37
997330b5 38// MT Crap
39#include <TMath.h>
36f19b25 40#include "AliHLTPHOSOnlineDisplayTH2D.h"
41
37ff2dd6 42#include <TEveManager.h>
43#include <TEveBoxSet.h>
997330b5 44
37ff2dd6 45TEveBoxSet* gAliEveBoxSet = 0;
46
47//gEve = new TEveManager(300, 300);
59b4cd9a 48
49AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab()
50{
51 cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
52}
53
54
36f19b25 55AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay * onlineDisplayPtr, TGTab *tabPtr,
56 AliHLTHOMERReader * homerSyncPtr, AliHLTHOMERReader * homerPtrs[MAXHOSTS],
57 int nHosts, int runnumber) : AliHLTPHOSOnlineDisplayTab()
59b4cd9a 58{
37ff2dd6 59
60 // gEve = new TEveManager(300, 300, kFALSE);
61
62
27029341 63 //comment
d456fffb 64 /*
65 if(fIsSetRunNumber == true)
66 {
27029341 67 for(int i=0; i < NGAINS; i++)
d456fffb 68 {
69 fgLegoPlotPtr[gain]
70 }
71 }
72 */
73
74
3917d385 75 // fShmPtr = new AliHLTPHOSSharedMemoryInterface();
76 fShmPtr = new AliHLTPHOSSharedMemoryInterfacev2();
b3abda11 77 fOnlineDisplayPtr = onlineDisplayPtr;
78
54276f07 79
27029341 80 for(int gain = 0; gain < NGAINS; gain ++ )
3f98e623 81 {
54276f07 82 fgCanvasPtr[gain] = 0;
83 fgLegoPlotPtr[gain] = 0;
84
37ff2dd6 85
27029341 86 for(int mod =0; mod <NMODULES; mod ++)
3f98e623 87 {
01df13a8 88 for(int z = 0; z < NZROWSMOD ; z ++)
37ff2dd6 89 {
01df13a8 90 for(int x = 0; x < NXCOLUMNSMOD; x ++)
37ff2dd6 91 {
92 fChannelData[mod][z][x][gain] = new int[ALTROMAXSAMPLES];
93 fNChannelSamples[mod][z][x][gain] = 0;
94 fChannelEnergy[mod][z][x][gain] = 0;
95 }
96 }
3f98e623 97 }
98 }
99
27029341 100 for(int i=0; i<MAXHOSTS; i++)
59b4cd9a 101 {
102 fgHomerReadersPtr[i] = 0;
103 }
104
36f19b25 105 fgHomerReaderPtr = const_cast<AliHLTHOMERReader*>(homerSyncPtr);
59b4cd9a 106
107 for(int i=0; i<nHosts; i++)
108 {
109 fgHomerReadersPtr[i] = homerPtrs[i] ;
14ff16ed 110
59b4cd9a 111 }
112
59b4cd9a 113 fgNHosts = nHosts;
d456fffb 114 InitDisplay(tabPtr, runnumber);
59b4cd9a 115}
116
117
118AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab()
119{
27029341 120 //comment
59b4cd9a 121}
122
123
37ff2dd6 124
c890e0a1 125Int_t
b3abda11 126AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
127{
37ff2dd6 128
b3abda11 129 int tmpModID = x/64;
b3abda11 130
37ff2dd6 131 /*
132 int tmpRcuZ = z/32;
133 int tmpRcuX = (x%64)/32;
134 int tmpZ = z%28;
135 int tmpX = x%32;
136 */
137
138 for( int i=0; i < fNChannelSamples[tmpModID][z][x][gain] ; i++)
b3abda11 139 {
37ff2dd6 140 histPtr->SetBinContent(i, fChannelData[tmpModID][z][x][gain][i]);
b3abda11 141 }
37ff2dd6 142 return fNChannelSamples [tmpModID][z][x][gain];
b3abda11 143}
144
145
37ff2dd6 146
59b4cd9a 147int
148AliHLTPHOSOnlineDisplayEventTab::GetNextEvent()
149{
150 ResetDisplay();
151 DoGetNextEvent();
152 UpdateDisplay();
153 fgEvntCnt ++;
154}
155
156
9d05c97d 157void
27029341 158AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(AliHLTHOMERReader * const homerReaderPtr) const
9d05c97d 159{
27029341 160 //comment
9d05c97d 161 cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks" << endl;
162 // unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
163 unsigned long blk = homerReaderPtr->FindBlockNdx(" TREIRUOF","SOHP", 0xFFFFFFFF );
164
165 while ( blk != ~(unsigned long)0 )
166 {
167 cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(homerReaderPtr) FOUND FOURIER DATA !!!!!!!!!!!!!!" << endl;
9d05c97d 168 blk = homerReaderPtr->FindBlockNdx("TREIRUOF","SOHP", 0xFFFFFFFF );
169 }
9d05c97d 170}
171
59b4cd9a 172
173void
6af3dade 174AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(AliHLTHOMERReader *homeReaderPtr)
14ff16ed 175{
3917d385 176 AliHLTPHOSChannelDataStruct *currentChannel =0;
9d05c97d 177 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data, therere are " << homeReaderPtr->GetBlockCnt() << " blocks " <<endl;
9d05c97d 178 FindFourierBlocks(homeReaderPtr);
79aed8a6 179 // unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
3917d385 180 unsigned long blk = homeReaderPtr->FindBlockNdx("TLENNAHC","SOHP", 0xFFFFFFFF );
79aed8a6 181 cout << __FILE__ << ":" << __LINE__ << "blk" << blk << endl ;
d456fffb 182 int cnt = 0;
37ff2dd6 183 AliHLTPHOSCoordinate tmpCoord;
9d05c97d 184
59b4cd9a 185 while ( blk != ~(unsigned long)0 )
186 {
3917d385 187 AliHLTPHOSChannelDataHeaderStruct* cellEnergiesPtr = (AliHLTPHOSChannelDataHeaderStruct*)homeReaderPtr->GetBlockData( blk );
c890e0a1 188 Int_t* tmpPtr = 0;
14ff16ed 189 fShmPtr->SetMemory(cellEnergiesPtr);
190 currentChannel = fShmPtr->NextChannel();
191
192 while(currentChannel != 0)
193 {
194 cnt ++;
37ff2dd6 195 AliHLTPHOSMapper::ChannelId2Coordinate( currentChannel->fChannelID, tmpCoord );
196 fgLegoPlotPtr[ tmpCoord.fGain ]->Fill( tmpCoord.fModuleId*NXCOLUMNSMOD + tmpCoord.fX, tmpCoord.fZ, currentChannel->fEnergy );
197 fChannelEnergy[tmpCoord.fModuleId][tmpCoord.fZ][ tmpCoord.fX][tmpCoord.fGain] = currentChannel->fEnergy;
3917d385 198
54276f07 199 if(cellEnergiesPtr->fHasRawData == true)
14ff16ed 200 {
37ff2dd6 201 FillRawData(fShmPtr->GetRawData());
14ff16ed 202 }
14ff16ed 203 currentChannel = fShmPtr->NextChannel();
204 }
3917d385 205 // blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
206 blk = homeReaderPtr->FindBlockNdx("TLENNAHC","SOHP", 0xFFFFFFFF, blk+1 );
59b4cd9a 207 }
208}
209
210
3917d385 211void
37ff2dd6 212AliHLTPHOSOnlineDisplayEventTab::FillRawData(const AliHLTPHOSChannelRawDataStruct &rawStr)
3917d385 213{
37ff2dd6 214 fNChannelSamples[ rawStr.fCoordinate.fModuleId ][ rawStr.fCoordinate.fZ ] [ rawStr.fCoordinate.fX ][ rawStr.fCoordinate.fGain ] = rawStr.nSamplesUsed;
215 fChannelEnergy[ rawStr.fCoordinate.fModuleId ][ rawStr.fCoordinate.fZ ] [ rawStr.fCoordinate.fX ][ rawStr.fCoordinate.fGain ] = rawStr.fEnergy;
01df13a8 216
217
218 /*
219 cout << __FILE__ << __LINE__<< "module ID = " << rawStr.fCoordinate.fModuleId << endl;
220 cout << __FILE__ << __LINE__<< "fZ = " << rawStr.fCoordinate.fZ << endl;
221 cout << __FILE__ << __LINE__<< "fX = " << rawStr.fCoordinate.fX << endl;
222 cout << __FILE__ << __LINE__<< "fGain = " << rawStr.fCoordinate.fGain << endl;
223 cout << __FILE__ << __LINE__<< "nSamples = " << rawStr.nSamplesUsed << endl;
224 */
225
37ff2dd6 226 for(int i=0; i < rawStr.nSamplesUsed; i++ )
227 {
01df13a8 228 // cout << "i = " << i << endl;
37ff2dd6 229 fChannelData[ rawStr.fCoordinate.fModuleId ][ rawStr.fCoordinate.fZ ] [ rawStr.fCoordinate.fX ][ rawStr.fCoordinate.fGain ][i] = rawStr.fDataPtr[i];
230 }
231
232
3917d385 233}
9d05c97d 234
235
37ff2dd6 236
59b4cd9a 237void
238AliHLTPHOSOnlineDisplayEventTab::ResetDisplay()
239{
27029341 240 //comment
59b4cd9a 241 if(fgAccumulate == kFALSE)
242 {
27029341 243 for(int gain=0; gain < NGAINS; gain++)
59b4cd9a 244 {
54276f07 245 if(fgLegoPlotPtr[gain] !=0)
246 {
247 fgLegoPlotPtr[gain]->Reset();
248 }
59b4cd9a 249 }
54276f07 250 }
251}
59b4cd9a 252
253
254void
36f19b25 255AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab * tabPtr, int runnumber)
59b4cd9a 256{
f704525c 257 // gStyle->SetOptLogy();
258 /// gStyle->SetOptStat(true);
259
27029341 260 for(int gain=0; gain < NGAINS; gain++)
54276f07 261 {
262 char gainLabel[100];
263 char label[256];
264
265 // Gain2Text
266 fOnlineDisplayPtr->Gain2Text(gain,gainLabel);
267 sprintf(label, "PHOS HLT Online Display %s", gainLabel);
268 fgLegoPlotPtr[gain] = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, label, label,
27029341 269 NXCOLUMNSMOD*NMODULES , 0, NXCOLUMNSMOD*NMODULES,
270 NZROWSMOD, 0, NZROWSMOD);
d456fffb 271
272 // cout << __FILE__ << ":" << __LINE__ << " Runnumber = " << runnumber <<endl;
273
274 fgLegoPlotPtr[gain]->SetRunNumber(runnumber);
54276f07 275 fgLegoPlotPtr[gain]->SetMaximum(1023);
276 fgLegoPlotPtr[gain]->Reset();
b6f9f0f8 277 // fgLegoPlotPtr[gain]->GetXaxis()->SetRange(XRANGESTART, XRANGEEND);
54276f07 278 }
279
59b4cd9a 280
281 TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
282 kLHintsExpandY, 2, 2, 15, 1);
283
36f19b25 284 TGCompositeFrame * tf = tabPtr->AddTab("Event display");
59b4cd9a 285 fSubTab1 = new TGTab(tf, 100, 100);
286 TGCompositeFrame *tf2 = fSubTab1->AddTab("LEGO");
287 fSubF1 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
288 fEc1 = new TRootEmbeddedCanvas("ec1", fSubF1, 100, 100);
289 fSubF1->AddFrame(fEc1, fL1);
290 fEc2 = new TRootEmbeddedCanvas("ec2", fSubF1, 100, 100);
291 fSubF1->AddFrame(fEc2, fL1);
292 tf2->AddFrame(fSubF1, fL1);
293
294 tf2 = fSubTab1->AddTab("SCAT");
295 fSubF2 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
296 tf2->AddFrame(fSubF2, fL1);
297 fEc3 = new TRootEmbeddedCanvas("ec3", fSubF2, 100, 100);
298 fSubF2->AddFrame(fEc3, fL1);
299 fEc4 = new TRootEmbeddedCanvas("ec4", fSubF2, 100, 100);
300 fSubF2->AddFrame(fEc4, fL1);
301
302 tf2 = fSubTab1->AddTab("SURF");
303 fSubF3 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
304 tf2->AddFrame(fSubF3, fL1);
305 fEc5 = new TRootEmbeddedCanvas("ec5", fSubF3, 100, 100);
306 fSubF3->AddFrame(fEc5, fL1);
307 fEc6 = new TRootEmbeddedCanvas("ec6", fSubF3, 100, 100);
308 fSubF3->AddFrame(fEc6, fL1);
309 fSubTab1->Resize();
310 tf->AddFrame(fSubTab1, fL1);
311
312 fgEventButtPtr = new AliHLTPHOSGetEventButton(fSubF1, "get event", 'e');
313}
314
315
04751caa 316
59b4cd9a 317void
318AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay()
319{
f704525c 320 // gStyle->SetOptLogy();
321 // gStyle->SetOptStat(true);
322
27029341 323 fgCanvasPtr[HIGHGAIN] = fEc1->GetCanvas();
324 fgCanvasPtr[HIGHGAIN]->cd();
325 fgLegoPlotPtr[HIGHGAIN]->Draw("LEGO2Z");
326 fgCanvasPtr[HIGHGAIN]->Update();
327 fgCanvasPtr[LOWGAIN] = fEc2->GetCanvas();
328 fgCanvasPtr[LOWGAIN]->cd();
329 fgLegoPlotPtr[LOWGAIN]->Draw("LEGO2Z");
330 fgCanvasPtr[LOWGAIN]->Update();
331
332 fgCanvasPtr[HIGHGAIN] = fEc3->GetCanvas();
333 fgCanvasPtr[HIGHGAIN]->cd();
334 fgLegoPlotPtr[HIGHGAIN]->Draw("SCAT");
335 fgCanvasPtr[HIGHGAIN]->Update();
336 fgCanvasPtr[LOWGAIN] = fEc4->GetCanvas();
337 fgCanvasPtr[LOWGAIN]->cd();
338 fgLegoPlotPtr[LOWGAIN]->Draw("SCAT");
339 fgCanvasPtr[LOWGAIN]->Update();
54276f07 340
d456fffb 341 /*
27029341 342 fgCanvasPtr[HIGHGAIN] = fEc5->GetCanvas();
343 fgCanvasPtr[HIGHGAIN]->cd();
344 fgLegoPlotPtr[HIGHGAIN]->Draw("CONTZ");
345 fgCanvasPtr[HIGHGAIN]->Update();
346 fgCanvasPtr[LOWGAIN] = fEc6->GetCanvas();
347 fgCanvasPtr[LOWGAIN]->cd();
348 fgLegoPlotPtr[LOWGAIN]->Draw("CONTZ");
349 fgCanvasPtr[LOWGAIN]->Update();
d456fffb 350 */
351
27029341 352 fgCanvasPtr[HIGHGAIN] = fEc5->GetCanvas();
353 fgCanvasPtr[HIGHGAIN]->cd();
354 fgLegoPlotPtr[HIGHGAIN]->Draw("COLZ");
355 fgCanvasPtr[HIGHGAIN]->Update();
356 fgCanvasPtr[LOWGAIN] = fEc6->GetCanvas();
357 fgCanvasPtr[LOWGAIN]->cd();
358 fgLegoPlotPtr[LOWGAIN]->Draw("COLZ");
359 fgCanvasPtr[LOWGAIN]->Update();
d456fffb 360
361
59b4cd9a 362}