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