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