]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/PHOS/OnlineDisplay/AliHLTPHOSOnlineDisplayEventTab.cxx
- changes in online display to handle more than one module
[u/mrichter/AliRoot.git] / HLT / PHOS / OnlineDisplay / AliHLTPHOSOnlineDisplayEventTab.cxx
1 // $Id: AliHLTPHOSOnlineDisplayEventTab.cxx 31683 2009-03-24 21:17:03Z odjuvsla $
2
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
19 #include "AliHLTPHOSOnlineDisplayEventTab.h"
20 #include <iostream>
21 #include "TGFrame.h"
22 #include "AliHLTPHOSGetEventButton.h"
23 #include "AliHLTPHOSCommonDefs.h"
24 #include "AliHLTDataTypes.h"
25 #include "AliHLTHOMERData.h"
26 #include "AliHLTHOMERReader.h"
27 #include "AliHLTHOMERWriter.h"
28 #include "AliHLTPHOSRcuCellEnergyDataStruct.h"
29 #include "TRootEmbeddedCanvas.h"
30 //#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
31 #include "AliHLTPHOSRcuCellEnergyDataStruct.h" 
32 #include "AliHLTPHOSOnlineDisplay.h"
33 #include "AliHLTPHOSSharedMemoryInterface.h"
34
35 //#include "TStyle.h"
36
37 using namespace std;
38
39 // MT Crap
40 #include <TMath.h>
41 #include "AliHLTPHOSOnlineDisplayTH2D.h"
42
43 //#include <TEveManager.h>
44 //#include <TEveBoxSet.h>
45
46 //TEveBoxSet* gAliEveBoxSet = 0;
47
48 AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab()
49 {
50   cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl;
51 }
52
53
54 AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay * onlineDisplayPtr, TGTab  *tabPtr, 
55                                                                  AliHLTHOMERReader * homerSyncPtr, AliHLTHOMERReader * homerPtrs[MAXHOSTS], 
56                                                                  int nHosts,  int runnumber) :  AliHLTPHOSOnlineDisplayTab()
57 {
58   //comment
59   /*
60   if(fIsSetRunNumber == true)
61     {
62       for(int i=0; i < NGAINS; i++)
63         {
64           fgLegoPlotPtr[gain]
65         }
66    }
67   */
68
69
70   fShmPtr = new AliHLTPHOSSharedMemoryInterface();
71   fOnlineDisplayPtr =  onlineDisplayPtr;
72
73
74   for(int gain = 0; gain < NGAINS; gain ++ )
75     {
76       fgCanvasPtr[gain] = 0;
77       fgLegoPlotPtr[gain] = 0;
78  
79       for(int mod =0; mod <NMODULES; mod ++)
80         {
81           for(int rcuxcoord = 0; rcuxcoord < NZRCUCOORD; rcuxcoord ++)
82             {
83               for(int rcuzcoord = 0; rcuzcoord < NXRCUCOORD; rcuzcoord ++) 
84                 {
85                   for(int z = 0; z < NZROWSRCU; z ++)
86                     {
87                       for(int x = 0; x < NXCOLUMNSRCU; x ++)
88                         {
89                           fChannelData[mod][rcuzcoord][rcuxcoord][x][z][gain] = new int[ALTROMAXSAMPLES];
90                           fNChannelSamples[mod][rcuzcoord][rcuxcoord][x][z][gain] = 0;
91                           fChannelEnergy[mod][rcuzcoord][rcuxcoord][x][z][gain] = 0;
92                         }
93                     }      
94                 }
95             }
96         }
97     }
98
99   for(int i=0; i<MAXHOSTS; i++)
100     {
101        fgHomerReadersPtr[i] = 0;
102     }
103
104   fgHomerReaderPtr = const_cast<AliHLTHOMERReader*>(homerSyncPtr);
105   
106   for(int i=0; i<nHosts; i++)
107     {
108       fgHomerReadersPtr[i] = homerPtrs[i] ;
109
110     }
111
112   fgNHosts = nHosts;
113   InitDisplay(tabPtr, runnumber);
114 }
115
116
117 AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab()
118 {
119   //comment
120 }
121
122
123 Int_t
124 AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain)
125 {
126   int tmpModID = x/64;
127   int tmpRcuZ = z/32;
128   int tmpRcuX = (x%64)/32;
129   int tmpZ = z%28;
130   int tmpX = x%32;
131
132   for(int i=0;  i < fNChannelSamples[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain] ; i++)
133     {
134       histPtr->SetBinContent(i, fChannelData[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain][i]);  
135     }
136   return fNChannelSamples[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain];
137 }
138
139
140 int
141 AliHLTPHOSOnlineDisplayEventTab::GetNextEvent()
142 {
143   //comment
144   ResetDisplay();
145   // MT crap
146   Bool_t is_first = false;
147  //  if (gAliEveBoxSet == 0)
148 //   {
149 //     is_first = true;
150 //     gAliEveBoxSet = new TEveBoxSet("PHOS module");
151 //     // gAliEveBoxSet->SetSecSelectCommand("Draw()");
152 //     // gAliEveBoxSet->SetSecSelectCommand("phos_histo_draw"); 
153 //     gEve->AddElement(gAliEveBoxSet);
154 //   }
155 //   gAliEveBoxSet->Reset(TEveBoxSet::kBT_AABox, kFALSE, 128);
156
157   DoGetNextEvent();
158   UpdateDisplay();
159
160   //  gAliEveBoxSet->ElementChanged();
161   // gEve->Redraw3D(is_first);
162
163   fgEvntCnt ++;
164 }
165
166
167 void
168 AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(AliHLTHOMERReader * const homerReaderPtr) const
169 {
170   //comment
171  cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks" << endl; 
172   // unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
173   unsigned long blk = homerReaderPtr->FindBlockNdx(" TREIRUOF","SOHP", 0xFFFFFFFF );
174
175   while ( blk != ~(unsigned long)0 )
176     {
177       cout << "AliHLTPHOSOnlineDisplayEventTab::FindFourierBlocks(homerReaderPtr) FOUND FOURIER DATA !!!!!!!!!!!!!!" << endl;
178
179
180       blk = homerReaderPtr->FindBlockNdx("TREIRUOF","SOHP", 0xFFFFFFFF );
181     }
182
183 }
184
185
186 void 
187 AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(AliHLTHOMERReader *homeReaderPtr)
188 {  
189   //comment
190   AliHLTPHOSValidCellDataStruct *currentChannel =0;
191   cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data, therere are " <<  homeReaderPtr->GetBlockCnt() << " blocks " <<endl;
192
193   FindFourierBlocks(homeReaderPtr);
194
195   unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF );
196
197   int cnt = 0;
198
199   //CRAP PT
200   //  FindFourierBlocks(homeReaderPtr);
201
202   while ( blk != ~(unsigned long)0 ) 
203     {
204       Int_t moduleID;
205       Int_t rcuX = 0;
206       Int_t rcuZ = 0;
207       AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk ); 
208       
209       unsigned int *t = (unsigned int*)cellEnergiesPtr;
210       
211       moduleID = cellEnergiesPtr->fModuleID ;
212       rcuX = cellEnergiesPtr->fRcuX;
213       rcuZ = cellEnergiesPtr->fRcuZ;
214
215       cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData,  fModuleID =" <<moduleID << endl; 
216
217       Int_t tmpZ;
218       Int_t tmpX;
219       Int_t tmpGain;
220       int cnt = 0;
221       Int_t* tmpPtr = 0;
222
223       fShmPtr->SetMemory(cellEnergiesPtr);
224       currentChannel = fShmPtr->NextChannel();
225
226       while(currentChannel != 0)
227         {
228           cnt ++;
229           tmpZ = currentChannel->fZ;
230           tmpX = currentChannel->fX;
231           tmpGain =  currentChannel->fGain;
232
233 //        cout << "Channel: x: " << moduleID*NXCOLUMNSMOD + tmpX + NXCOLUMNSRCU*cellEnergiesPtr->fRcuX 
234 //             << " z: " <<     tmpZ + NZROWSRCU*cellEnergiesPtr->fRcuZ
235 //             << " E: " <<  currentChannel->fEnergy << endl;
236
237           fgLegoPlotPtr[tmpGain]->Fill(moduleID*NXCOLUMNSMOD + tmpX +  NXCOLUMNSRCU*cellEnergiesPtr->fRcuX,  
238                                     tmpZ + NZROWSRCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy);
239           
240               
241           // CRAP PTH
242           if(tmpGain == HIGHGAIN)
243             {
244             //   gAliEveBoxSet->AddBox(2.2*(tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX) - 1.1,
245 //                                  0,
246 //                                  2.2*(tmpZ + N_ZROWSRCU*cellEnergiesPtr->fRcuZ) - 1.1,
247 //                                  2.2,
248 //                                  0.4*140*currentChannel->fEnergy/1024,
249 //                                  2.2);
250 //            gAliEveBoxSet->DigitValue(TMath::Nint(currentChannel->fEnergy));
251             }
252  
253           if(cellEnergiesPtr->fHasRawData == true)
254             //if(0)
255             {
256               Int_t nSamples = 0;
257               Int_t* rawPtr = 0;
258               rawPtr = fShmPtr->GetRawData(nSamples);
259               fNChannelSamples[moduleID][rcuX][rcuZ][tmpX][tmpZ][tmpGain] = nSamples;
260
261               //              cout << __FILE__ << ":" <<  __LINE__  <<" gain = " << tmpGain << " z = "<< tmpZ << " x = " << tmpX;
262               //              cout << " nsamples = " << nSamples;
263               //              cout << __FILE__ << ":" << __LINE__ << " the address of raw ptr = " << rawPtr  << endl;
264               
265               
266               if(nSamples > ALTROMAXSAMPLES || nSamples < 0 )
267                 {
268                   cout << __FILE__<< ":" <<__LINE__ <<"ERROR, nsamples = "<< nSamples <<" exeeds allowd range, max number of samples is  "<< ALTROMAXSAMPLES << endl;
269                 }
270               else
271                 {
272                   for(int j= 0; j< nSamples; j++)
273                     {
274                       //                      cout << __FILE__ << ":" << __LINE__ << " nsamples = " << nSamples << "  j =" << j << endl;
275                       fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][tmpGain][j] = rawPtr[j];  
276                     }
277               
278                 }
279             }
280         
281           currentChannel = fShmPtr->NextChannel();
282         }
283       
284       blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1);
285
286     }
287 }
288
289
290
291
292 void
293 AliHLTPHOSOnlineDisplayEventTab::ResetDisplay()
294 {
295   //comment
296   if(fgAccumulate == kFALSE)
297     {
298       for(int gain=0; gain < NGAINS; gain++)
299         {
300           if(fgLegoPlotPtr[gain] !=0)
301             {
302               fgLegoPlotPtr[gain]->Reset(); 
303             }
304         }
305     } 
306 }
307
308
309 void
310 AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab  * tabPtr, int runnumber)
311 {
312   //  gStyle->SetOptLogy();
313   ///  gStyle->SetOptStat(true);
314
315   for(int gain=0; gain < NGAINS; gain++)
316     {
317       char gainLabel[100];
318       char label[256];
319  
320       //     Gain2Text
321       fOnlineDisplayPtr->Gain2Text(gain,gainLabel);
322       sprintf(label, "PHOS HLT Online Display %s", gainLabel);
323       fgLegoPlotPtr[gain] = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, label, label, 
324                                                             NXCOLUMNSMOD*NMODULES , 0, NXCOLUMNSMOD*NMODULES,  
325                                                             NZROWSMOD,   0, NZROWSMOD);   
326       
327       //      cout << __FILE__ << ":" << __LINE__ << " Runnumber = "  << runnumber <<endl;
328    
329       fgLegoPlotPtr[gain]->SetRunNumber(runnumber);
330       fgLegoPlotPtr[gain]->SetMaximum(1023);
331       fgLegoPlotPtr[gain]->Reset();
332       fgLegoPlotPtr[gain]->GetXaxis()->SetRange(XRANGESTART, XRANGEEND);
333     }
334   
335
336   TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
337                                          kLHintsExpandY, 2, 2, 15, 1);
338
339   TGCompositeFrame * tf = tabPtr->AddTab("Event display");
340   fSubTab1 = new TGTab(tf, 100, 100);
341   TGCompositeFrame *tf2 = fSubTab1->AddTab("LEGO");  
342   fSubF1 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
343   fEc1 = new TRootEmbeddedCanvas("ec1", fSubF1, 100, 100);
344   fSubF1->AddFrame(fEc1, fL1);
345   fEc2 = new TRootEmbeddedCanvas("ec2", fSubF1, 100, 100);
346   fSubF1->AddFrame(fEc2, fL1);
347   tf2->AddFrame(fSubF1, fL1);
348   
349   tf2 = fSubTab1->AddTab("SCAT"); 
350   fSubF2 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
351   tf2->AddFrame(fSubF2, fL1);
352   fEc3 = new TRootEmbeddedCanvas("ec3", fSubF2, 100, 100);
353   fSubF2->AddFrame(fEc3, fL1);
354   fEc4 = new TRootEmbeddedCanvas("ec4", fSubF2, 100, 100);
355   fSubF2->AddFrame(fEc4, fL1);
356   
357   tf2 = fSubTab1->AddTab("SURF"); 
358   fSubF3 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame);
359   tf2->AddFrame(fSubF3, fL1);
360   fEc5 = new TRootEmbeddedCanvas("ec5", fSubF3, 100, 100);
361   fSubF3->AddFrame(fEc5, fL1);
362   fEc6 = new TRootEmbeddedCanvas("ec6", fSubF3, 100, 100);
363   fSubF3->AddFrame(fEc6, fL1);
364   fSubTab1->Resize();
365   tf->AddFrame(fSubTab1, fL1);
366
367   fgEventButtPtr = new  AliHLTPHOSGetEventButton(fSubF1, "get event", 'e');
368 }
369
370
371
372 void
373 AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay()
374 {
375   // gStyle->SetOptLogy();
376   //  gStyle->SetOptStat(true);
377
378   fgCanvasPtr[HIGHGAIN] =  fEc1->GetCanvas();
379   fgCanvasPtr[HIGHGAIN]->cd();
380   fgLegoPlotPtr[HIGHGAIN]->Draw("LEGO2Z");
381   fgCanvasPtr[HIGHGAIN]->Update();
382   fgCanvasPtr[LOWGAIN] = fEc2->GetCanvas();
383   fgCanvasPtr[LOWGAIN]->cd();
384   fgLegoPlotPtr[LOWGAIN]->Draw("LEGO2Z");
385   fgCanvasPtr[LOWGAIN]->Update();
386
387   fgCanvasPtr[HIGHGAIN] =  fEc3->GetCanvas();
388   fgCanvasPtr[HIGHGAIN]->cd();
389   fgLegoPlotPtr[HIGHGAIN]->Draw("SCAT");
390   fgCanvasPtr[HIGHGAIN]->Update();
391   fgCanvasPtr[LOWGAIN] = fEc4->GetCanvas();
392   fgCanvasPtr[LOWGAIN]->cd();
393   fgLegoPlotPtr[LOWGAIN]->Draw("SCAT");
394   fgCanvasPtr[LOWGAIN]->Update();
395
396   /* 
397  fgCanvasPtr[HIGHGAIN] =  fEc5->GetCanvas();
398   fgCanvasPtr[HIGHGAIN]->cd();
399   fgLegoPlotPtr[HIGHGAIN]->Draw("CONTZ");
400   fgCanvasPtr[HIGHGAIN]->Update();
401   fgCanvasPtr[LOWGAIN] = fEc6->GetCanvas();
402   fgCanvasPtr[LOWGAIN]->cd();
403   fgLegoPlotPtr[LOWGAIN]->Draw("CONTZ");
404   fgCanvasPtr[LOWGAIN]->Update();
405   */
406
407   fgCanvasPtr[HIGHGAIN] =  fEc5->GetCanvas();
408   fgCanvasPtr[HIGHGAIN]->cd();
409   fgLegoPlotPtr[HIGHGAIN]->Draw("COLZ");
410   fgCanvasPtr[HIGHGAIN]->Update();
411   fgCanvasPtr[LOWGAIN] = fEc6->GetCanvas();
412   fgCanvasPtr[LOWGAIN]->cd();
413   fgLegoPlotPtr[LOWGAIN]->Draw("COLZ");
414   fgCanvasPtr[LOWGAIN]->Update();
415
416
417 }