1 #include "AliHLTPHOSOnlineDisplayEventTab.h"
4 #include "AliHLTPHOSGetEventButton.h"
5 #include "AliHLTPHOSCommonDefs.h"
6 #include "AliHLTDataTypes.h"
7 #include "AliHLTHOMERData.h"
8 #include "AliHLTHOMERReader.h"
9 #include "AliHLTHOMERWriter.h"
10 #include "AliHLTPHOSRcuCellEnergyDataStruct.h"
11 //#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
12 #include "AliHLTPHOSRcuCellEnergyDataStruct.h"
13 #include "AliHLTPHOSOnlineDisplay.h"
14 #include "AliHLTPHOSSharedMemoryInterface.h"
19 AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab()
21 cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
25 AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay *onlineDisplayPtr, TGTab *tabPtr,
26 HOMERReader *homerSyncPtr, HOMERReader *homerPtrs[MAX_HOSTS], int nHosts) : AliHLTPHOSOnlineDisplayTab()
28 fShmPtr = new AliHLTPHOSSharedMemoryInterface();
30 fOnlineDisplayPtr = onlineDisplayPtr;
32 for(int mod =0; mod <N_MODULES; mod ++)
34 // for(int rcu = 0; rcu < N_RCUS_PER_MODULE; rcu ++)
35 for(int rcu_x_coord = 0; rcu_x_coord < N_ZRCU_COORD; rcu_x_coord ++)
37 for(int rcu_z_coord = 0; rcu_z_coord < N_XRCU_COORD; rcu_z_coord ++)
39 for(int z = 0; z < N_ZROWS_RCU; z ++)
41 for(int x = 0; x < N_XCOLUMNS_RCU; x ++)
43 for(int gain = 0; gain < N_GAINS; gain ++ )
45 fChannelData[mod][rcu_z_coord][rcu_x_coord][x][z][gain] = new int[fNTotalSamples];
55 for(int i=0; i<MAX_HOSTS; i++)
57 fgHomerReadersPtr[i] = 0;
60 fgHomerReaderPtr = homerSyncPtr;
62 for(int i=0; i<nHosts; i++)
64 fgHomerReadersPtr[i] = homerPtrs[i] ;
78 AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab()
85 AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int mod, int rcuX, int rcuZ, int x, int z, int gain)
87 for(int i=0; i < fNTotalSamples ; i++)
89 histPtr->SetBinContent(i, fChannelData[mod][rcuX][rcuZ][x][z][gain][i]);
95 AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
99 int tmpRcuX = (x%64)/32;
103 for(int i=0; i < fNTotalSamples ; i++)
105 histPtr->SetBinContent(i, fChannelData[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain][i]);
111 AliHLTPHOSOnlineDisplayEventTab::GetNextEvent()
122 AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(HOMERReader *homeReaderPtr)
124 AliHLTPHOSValidCellDataStruct *currentChannel =0;
127 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data" << endl;
129 unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
131 while ( blk != ~(unsigned long)0 )
134 // const AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (const AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk );
135 AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk );
138 moduleID = cellEnergiesPtr->fModuleID ;
139 cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData, fModuleID =" <<moduleID << endl;
140 // Int_t offset = ((Int_t)cellEnergiesPtr->fShmAddress - (Int_t)cellEnergiesPtr)/sizeof(Int_t);
141 // Int_t tmpCount = cellEnergiesPtr->fCnt;
147 cout << "the sizeof AliHLTPHOSRcuCellEnergyDataStruc=" << sizeof(AliHLTPHOSRcuCellEnergyDataStruct) << endl;
149 fShmPtr->SetMemory(cellEnergiesPtr);
150 currentChannel = fShmPtr->NextChannel();
152 while(currentChannel != 0)
155 tmpZ = currentChannel->fZ;
156 tmpX = currentChannel->fX;
157 tmpGain = currentChannel->fGain;
161 cout << "the addresss of fData is " << (void *)currentChannel->fData << endl;
165 tmpGain == HIGH_GAIN)
167 fgLegoPlotHGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,
168 tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
171 for(int j= 0; j< fNTotalSamples; j++)
173 // printf("%d\t", currentChannel->fData[j]);
174 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][HIGH_GAIN][j] = currentChannel->fData[j];
178 else if(tmpGain == LOW_GAIN)
180 fgLegoPlotLGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,
181 tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
182 for(int j= 0; j< fNTotalSamples; j++)
185 // printf("%d\t", currentChannel->fData[j]);
186 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][LOW_GAIN][j] = currentChannel->fData[j];
192 currentChannel = fShmPtr->NextChannel();
197 for(int i= 0; i <= tmpCount; i++)
199 tmpZ = cellEnergiesPtr->fValidData[i].fZ;
200 tmpX = cellEnergiesPtr->fValidData[i].fX;
201 tmpGain = cellEnergiesPtr->fValidData[i].fGain;
203 if(tmpGain == HIGH_GAIN)
205 fgLegoPlotHGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,
206 tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, cellEnergiesPtr->fValidData[i].fEnergy);
208 for(int j= 0; j< fNTotalSamples; j++)
210 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][HIGH_GAIN][j] = cellEnergiesPtr->fValidData[i].fData[j-offset];
214 else if(tmpGain == LOW_GAIN)
216 fgLegoPlotLGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,
217 tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, cellEnergiesPtr->fValidData[i].fEnergy);
218 for(int j= 0; j< fNTotalSamples; j++)
220 fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][LOW_GAIN][j] = cellEnergiesPtr->fValidData[i].fData[j -offset];
227 blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
233 AliHLTPHOSOnlineDisplayEventTab::ResetDisplay()
235 if(fgAccumulate == kFALSE)
237 if(fgLegoPlotHGPtr !=0)
239 fgLegoPlotHGPtr->Reset();
242 if(fgLegoPlotLGPtr !=0)
244 fgLegoPlotLGPtr->Reset();
251 AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab *tabPtr)
253 // fgLegoPlotHGPtr = new TH2D("Cosmics, High gain", "PHOS HLT: Cosmics",
254 // N_XCOLUMNS_MOD*N_MODULES , 0, N_XCOLUMNS_MOD*N_MODULES,
255 // N_ZROWS_MOD, 0, N_ZROWS_MOD);
256 fgLegoPlotHGPtr = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, "Cosmics, High gain", "PHOS HLT: Cosmics",
257 N_XCOLUMNS_MOD*N_MODULES , 0, N_XCOLUMNS_MOD*N_MODULES,
258 N_ZROWS_MOD, 0, N_ZROWS_MOD);
259 fgLegoPlotHGPtr->SetGain(HIGH_GAIN);
262 fgLegoPlotHGPtr->SetMaximum(1023);
263 fgLegoPlotHGPtr->Reset();
264 fgLegoPlotHGPtr->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END);
266 // fgLegoPlotLGPtr = new TH2D("Cosmics, Low gain", "PHOS HLT: Cosmics",
267 // N_XCOLUMNS_MOD* N_MODULES , 0, N_XCOLUMNS_MOD* N_MODULES,
268 // N_ZROWS_MOD, 0, N_ZROWS_MOD);
269 fgLegoPlotLGPtr = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, "Cosmics, Low gain", "PHOS HLT: Cosmics",
270 N_XCOLUMNS_MOD* N_MODULES , 0, N_XCOLUMNS_MOD* N_MODULES,
271 N_ZROWS_MOD, 0, N_ZROWS_MOD);
272 fgLegoPlotLGPtr->SetGain(LOW_GAIN);
274 fgLegoPlotLGPtr->SetMaximum(1023);
276 fgLegoPlotLGPtr->Reset();
277 fgLegoPlotLGPtr->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END);
280 TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
281 kLHintsExpandY, 2, 2, 15, 1);
283 TGCompositeFrame *tf = tabPtr->AddTab("Event display");
284 fSubTab1 = new TGTab(tf, 100, 100);
285 TGCompositeFrame *tf2 = fSubTab1->AddTab("LEGO");
286 fSubF1 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
287 fEc1 = new TRootEmbeddedCanvas("ec1", fSubF1, 100, 100);
288 fSubF1->AddFrame(fEc1, fL1);
289 fEc2 = new TRootEmbeddedCanvas("ec2", fSubF1, 100, 100);
290 fSubF1->AddFrame(fEc2, fL1);
291 tf2->AddFrame(fSubF1, fL1);
293 tf2 = fSubTab1->AddTab("SCAT");
294 fSubF2 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
295 tf2->AddFrame(fSubF2, fL1);
296 fEc3 = new TRootEmbeddedCanvas("ec3", fSubF2, 100, 100);
297 fSubF2->AddFrame(fEc3, fL1);
298 fEc4 = new TRootEmbeddedCanvas("ec4", fSubF2, 100, 100);
299 fSubF2->AddFrame(fEc4, fL1);
301 tf2 = fSubTab1->AddTab("SURF");
302 fSubF3 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
303 tf2->AddFrame(fSubF3, fL1);
304 fEc5 = new TRootEmbeddedCanvas("ec5", fSubF3, 100, 100);
305 fSubF3->AddFrame(fEc5, fL1);
306 fEc6 = new TRootEmbeddedCanvas("ec6", fSubF3, 100, 100);
307 fSubF3->AddFrame(fEc6, fL1);
309 tf->AddFrame(fSubTab1, fL1);
311 fgEventButtPtr = new AliHLTPHOSGetEventButton(fSubF1, "get event", 'e');
316 AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay()
318 fgCanvasHGPtr = fEc1->GetCanvas();
320 fgLegoPlotHGPtr->Draw("LEGO2Z");
321 fgCanvasHGPtr->Update();
322 fgCanvasLGPtr = fEc2->GetCanvas();
324 fgLegoPlotLGPtr->Draw("LEGO2Z");
325 fgCanvasLGPtr->Update();
327 fgCanvasHGPtr = fEc3->GetCanvas();
329 fgLegoPlotHGPtr->Draw("SCAT");
330 fgCanvasHGPtr->Update();
331 fgCanvasLGPtr = fEc4->GetCanvas();
333 fgLegoPlotLGPtr->Draw("SCAT");
334 fgCanvasLGPtr->Update();
336 fgCanvasHGPtr = fEc5->GetCanvas();
338 fgLegoPlotHGPtr->Draw("CONTZ");
339 fgCanvasHGPtr->Update();
340 fgCanvasLGPtr = fEc6->GetCanvas();
342 fgLegoPlotLGPtr->Draw("CONTZ");
343 fgCanvasLGPtr->Update();