]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/PHOS/OnlineDisplay/AliHLTPHOSOnlineDisplayEventTab.cxx
78f43e08151b883da6b54a48566b16972d1b47f9
[u/mrichter/AliRoot.git] / HLT / PHOS / OnlineDisplay / AliHLTPHOSOnlineDisplayEventTab.cxx
1 #include "AliHLTPHOSOnlineDisplayEventTab.h"
2 #include <iostream>
3 #include "TGFrame.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"
15
16 using namespace std;
17
18
19 AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab()
20 {
21   cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
22 }
23
24
25 AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay *onlineDisplayPtr, TGTab  *tabPtr, 
26                                                                  HOMERReader *homerSyncPtr, HOMERReader *homerPtrs[MAX_HOSTS], int nHosts) :  AliHLTPHOSOnlineDisplayTab()
27 {
28   fShmPtr = new AliHLTPHOSSharedMemoryInterface();
29
30   fOnlineDisplayPtr =  onlineDisplayPtr;
31
32   for(int mod =0; mod <N_MODULES; mod ++)
33     {
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 ++)
36         {
37           for(int rcu_z_coord = 0; rcu_z_coord < N_XRCU_COORD; rcu_z_coord ++) 
38             {
39               for(int z = 0; z < N_ZROWS_RCU; z ++)
40                 {
41                   for(int x = 0; x < N_XCOLUMNS_RCU; x ++)
42                     {
43                       for(int gain = 0; gain < N_GAINS; gain ++ )
44                         {
45                           fChannelData[mod][rcu_z_coord][rcu_x_coord][x][z][gain] = new int[fNTotalSamples];
46                         }
47                     }
48                 }          
49             }
50         }
51     }
52
53
54
55   for(int i=0; i<MAX_HOSTS; i++)
56     {
57        fgHomerReadersPtr[i] = 0;
58     }
59
60   fgHomerReaderPtr = homerSyncPtr;
61   
62   for(int i=0; i<nHosts; i++)
63     {
64       fgHomerReadersPtr[i] = homerPtrs[i] ;
65
66     }
67
68   fgCanvasHGPtr = 0;
69   fgCanvasLGPtr = 0;
70   fgLegoPlotLGPtr = 0;
71   fgLegoPlotHGPtr = 0;
72
73   fgNHosts = nHosts;
74   InitDisplay(tabPtr);
75 }
76
77
78 AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab()
79 {
80
81 }
82
83
84 void 
85 AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int mod, int rcuX, int rcuZ, int x, int z, int gain)
86 {
87   for(int i=0;  i < fNTotalSamples ; i++)
88     {
89       histPtr->SetBinContent(i, fChannelData[mod][rcuX][rcuZ][x][z][gain][i]);
90     }
91 }
92
93
94 void 
95 AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
96 {
97   int tmpModID = x/64;
98   int tmpRcuZ = z/32;
99   int tmpRcuX = (x%64)/32;
100   int tmpZ = z%28;
101   int tmpX = x%32;
102
103   for(int i=0;  i < fNTotalSamples ; i++)
104     {
105       histPtr->SetBinContent(i, fChannelData[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain][i]);
106     }
107 }
108
109
110 int
111 AliHLTPHOSOnlineDisplayEventTab::GetNextEvent()
112 {
113   ResetDisplay();
114   DoGetNextEvent();
115   UpdateDisplay();
116   fgEvntCnt ++;
117 }
118
119
120
121 void 
122 AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(HOMERReader *homeReaderPtr)
123 {  
124   AliHLTPHOSValidCellDataStruct *currentChannel =0;
125   
126
127   cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data" << endl;
128
129   unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
130
131   while ( blk != ~(unsigned long)0 ) 
132     {
133       Int_t moduleID;
134       //     const AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (const AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk ); 
135       AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk ); 
136       
137
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;
142       Int_t tmpZ;
143       Int_t tmpX;
144       Int_t tmpGain;
145       int cnt = 0;
146
147       cout << "the sizeof AliHLTPHOSRcuCellEnergyDataStruc=" << sizeof(AliHLTPHOSRcuCellEnergyDataStruct)  << endl;
148
149       fShmPtr->SetMemory(cellEnergiesPtr);
150       currentChannel = fShmPtr->NextChannel();
151
152       while(currentChannel != 0)
153         {
154           cnt ++;
155           tmpZ = currentChannel->fZ;
156           tmpX = currentChannel->fX;
157           tmpGain =  currentChannel->fGain;
158           
159           if(cnt < 20)
160             {
161               cout << "the addresss of fData is " << (void *)currentChannel->fData  << endl;
162             }
163           
164           if(
165              tmpGain == HIGH_GAIN)
166             {
167               fgLegoPlotHGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX +  N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,  
168                                     tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
169             
170
171               for(int j= 0; j< fNTotalSamples; j++)
172                 {
173                   //              printf("%d\t", currentChannel->fData[j]);
174                   fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][HIGH_GAIN][j] = currentChannel->fData[j];  
175                 }
176             }
177           
178           else if(tmpGain == LOW_GAIN)
179             {
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++)
183                 {
184                   
185                   //              printf("%d\t", currentChannel->fData[j]);
186                   fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][LOW_GAIN][j] = currentChannel->fData[j];   
187                 }
188             }
189       
190           //      printf("\n");
191           
192           currentChannel = fShmPtr->NextChannel();
193         }
194
195
196       /*  
197       for(int i= 0; i <= tmpCount; i++)
198         {
199           tmpZ = cellEnergiesPtr->fValidData[i].fZ;
200           tmpX = cellEnergiesPtr->fValidData[i].fX;
201           tmpGain =  cellEnergiesPtr->fValidData[i].fGain;
202
203           if(tmpGain == HIGH_GAIN)
204             {
205               fgLegoPlotHGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX +  N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX,  
206                                     tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, cellEnergiesPtr->fValidData[i].fEnergy);
207
208               for(int j= 0; j< fNTotalSamples; j++)
209                 {
210                   fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][HIGH_GAIN][j] = cellEnergiesPtr->fValidData[i].fData[j-offset];  
211                 }
212             }
213           
214           else if(tmpGain == LOW_GAIN)
215             {
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++)
219                 {
220                   fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][LOW_GAIN][j] = cellEnergiesPtr->fValidData[i].fData[j -offset];   
221                 }
222             }
223         }
224       */
225
226
227       blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
228     }
229 }
230
231
232 void
233 AliHLTPHOSOnlineDisplayEventTab::ResetDisplay()
234 {
235   if(fgAccumulate == kFALSE)
236     {
237       if(fgLegoPlotHGPtr !=0)
238         {
239           fgLegoPlotHGPtr->Reset(); 
240         }
241
242       if(fgLegoPlotLGPtr !=0)
243         {
244           fgLegoPlotLGPtr->Reset();
245         }  
246     }
247  }
248
249
250 void
251 AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab  *tabPtr)
252 {
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);
260  
261
262  fgLegoPlotHGPtr->SetMaximum(1023);
263  fgLegoPlotHGPtr->Reset();
264  fgLegoPlotHGPtr->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END);
265  
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);
273
274   fgLegoPlotLGPtr->SetMaximum(1023); 
275
276   fgLegoPlotLGPtr->Reset();
277   fgLegoPlotLGPtr->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END);
278   
279
280   TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
281                                          kLHintsExpandY, 2, 2, 15, 1);
282
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);
292   
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);
300   
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);
308   fSubTab1->Resize();
309   tf->AddFrame(fSubTab1, fL1);
310
311   fgEventButtPtr = new  AliHLTPHOSGetEventButton(fSubF1, "get event", 'e');
312 }
313
314
315 void
316 AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay()
317 {
318   fgCanvasHGPtr =  fEc1->GetCanvas();
319   fgCanvasHGPtr->cd();
320   fgLegoPlotHGPtr->Draw("LEGO2Z");
321   fgCanvasHGPtr->Update();
322   fgCanvasLGPtr = fEc2->GetCanvas();
323   fgCanvasLGPtr->cd();
324   fgLegoPlotLGPtr->Draw("LEGO2Z");
325   fgCanvasLGPtr->Update();
326
327   fgCanvasHGPtr =  fEc3->GetCanvas();
328   fgCanvasHGPtr->cd();
329   fgLegoPlotHGPtr->Draw("SCAT");
330   fgCanvasHGPtr->Update();
331   fgCanvasLGPtr = fEc4->GetCanvas();
332   fgCanvasLGPtr->cd();
333   fgLegoPlotLGPtr->Draw("SCAT");
334   fgCanvasLGPtr->Update();
335
336   fgCanvasHGPtr =  fEc5->GetCanvas();
337   fgCanvasHGPtr->cd();
338   fgLegoPlotHGPtr->Draw("CONTZ");
339   fgCanvasHGPtr->Update();
340   fgCanvasLGPtr = fEc6->GetCanvas();
341   fgCanvasLGPtr->cd();
342   fgLegoPlotLGPtr->Draw("CONTZ");
343   fgCanvasLGPtr->Update();
344
345 }