1 #include "AliHLTPHOSOnlineDisplay.h"
2 #include "AliHLTDataTypes.h"
3 #include "AliHLTPHOSRcuCellEnergyDataStruct.h"
11 #include "AliHLTPHOSCommonDefs.h"
13 /**************************************************************************
14 * This file is property of and copyright by the Experimental Nuclear *
15 * Physics Group, Dep. of Physics *
16 * University of Oslo, Norway, 2007 *
18 * Author: Per Thomas Hille <perthi@fys.uio.no> for the ALICE HLT Project.*
19 * Contributors are mentioned in the code where appropriate. *
20 * Please report bugs to perthi@fys.uio.no *
22 * Permission to use, copy, modify and distribute this software and its *
23 * documentation strictly for non-commercial purposes is hereby granted *
24 * without fee, provided that the above copyright notice appears in all *
25 * copies and that both the copyright notice and this permission notice *
26 * appear in the supporting documentation. The authors make no claims *
27 * about the suitability of this software for any purpose. It is *
28 * provided "as is" without express or implied warranty. *
29 **************************************************************************/
34 # include <TApplication.h>
40 #define MAX_BIN_VALUE 1023
43 AliHLTPHOSGetEventButton* AliHLTPHOSOnlineDisplay::fgEventButtPtr = 0; /**<Button to get a new event from the HLT online stream*/
44 AliHLTPHOSOnlineDisplay* AliHLTPHOSOnlineDisplay::fgInstancePtr = 0; /**<The one an only instance of PhosOnlineDisplay*/
45 HOMERReader* AliHLTPHOSOnlineDisplay::fgHomerReaderPtr = 0; /**<Homer reader that fetches events from the HLT online stream*/
46 TH2S* AliHLTPHOSOnlineDisplay::legoPlotLGPtr = 0; /**<2D histogram for low gain channels*/
47 TH2S* AliHLTPHOSOnlineDisplay::legoPlotHGPtr = 0; /**<2D histogram for high gain channels*/
48 char* AliHLTPHOSOnlineDisplay::fgDefaultDet = "SOHP"; /**<PHOS written backwards*/
49 char* AliHLTPHOSOnlineDisplay::fgDefaultDataType = "RENELLEC"; /**<CELLENER (Celle energy) written backwards*/
50 int AliHLTPHOSOnlineDisplay::fgEvntCnt = 0; /**<Event Counter*/
51 TCanvas* AliHLTPHOSOnlineDisplay::fgCanvasHGPtr = 0; /**<Canvas to plot legoplot for High gain channels*/
52 TCanvas* AliHLTPHOSOnlineDisplay::fgCanvasLGPtr = 0; /**<Canvas to plot legoplot for Low gain channels*/
53 Bool_t AliHLTPHOSOnlineDisplay::fgAccumulate = kTRUE ; /**<If set to kFALSE reset legoplot between event, kTRUE adds current energies to previous plot*/
54 Bool_t AliHLTPHOSOnlineDisplay::test[17920][2];
55 TGCompositeFrame* AliHLTPHOSOnlineDisplay::fFrame1 = 0;
56 TGCompositeFrame* AliHLTPHOSOnlineDisplay::fF1 = 0;
57 TGCompositeFrame* AliHLTPHOSOnlineDisplay::fF2 = 0;
58 TGCompositeFrame* AliHLTPHOSOnlineDisplay::fF3 = 0;
59 TGCompositeFrame* AliHLTPHOSOnlineDisplay::fF4 = 0;
60 TGCompositeFrame* AliHLTPHOSOnlineDisplay::fF5 = 0;
61 TGTab* AliHLTPHOSOnlineDisplay::fTab = 0;
62 TRootEmbeddedCanvas* AliHLTPHOSOnlineDisplay::fEc1 = 0;
63 TRootEmbeddedCanvas* AliHLTPHOSOnlineDisplay::fEc2 = 0;
67 AliHLTPHOSOnlineDisplay*
68 AliHLTPHOSOnlineDisplay::Instance(char *hostname, int port)
70 if (!fgInstancePtr) fgInstancePtr = new AliHLTPHOSOnlineDisplay(hostname, port);
75 AliHLTPHOSOnlineDisplay::AliHLTPHOSOnlineDisplay()
77 cout << "ERROR: You canot create Onlinedisplay without parameters" << endl;
78 cout << "Usage: AliHLTPHOSOnlineDisplay(char *hostname, int port)" << endl;
81 AliHLTPHOSOnlineDisplay::AliHLTPHOSOnlineDisplay(char *hostname, int port)
83 cout << "creating new PHOS Onlinedisplay" << endl;
86 fgHomerReaderPtr = new HOMERReader(hostname, port);
89 Bool_t nextSwitch=kTRUE;
93 AliHLTPHOSOnlineDisplay::~AliHLTPHOSOnlineDisplay()
99 AliHLTPHOSOnlineDisplay::InitDisplay()
101 gStyle->SetPalette(1);
103 fTab = new TGTab(this, 100, 100);
104 TGCompositeFrame *tf = fTab->AddTab("Tab 1");
105 fF1 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame);
106 TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
107 kLHintsExpandY, 2, 2, 15, 1);
108 fEc1 = new TRootEmbeddedCanvas("ec1", fF1, 100, 100);
109 fgCanvasHGPtr = fEc1->GetCanvas();
110 fF1->AddFrame(fEc1, fL1);
111 fEc2 = new TRootEmbeddedCanvas("ec2", fF1, 100, 100);
112 fgCanvasLGPtr = fEc2->GetCanvas();
113 fF1->AddFrame(fEc2, fL1);
114 tf->AddFrame(fF1, fL1);
116 tf = fTab->AddTab("Tab 2");
117 fF2 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame);
118 tf->AddFrame(fF2, fL1);
120 tf = fTab->AddTab("Tab 3");
121 fF3 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame);
122 tf->AddFrame(fF3, fL1);
124 tf = fTab->AddTab("Tab 4");
125 fF4 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame);
126 tf->AddFrame(fF4, fL1);
129 fgEventButtPtr = new AliHLTPHOSGetEventButton(fF1, "get event");
132 SetWindowName("online display");
134 MoveResize(100,100,1200,1000);
139 AliHLTPHOSOnlineDisplay::GetNextEvent()
145 legoPlotHGPtr = new TH2S("Homer","HLT:HOMER: #pi^{0} 5 - 30Gev, High gain", N_COLUMNS_MOD* N_MODULES , 0, N_COLUMNS_MOD* N_MODULES , N_ROWS_MOD, 0, N_ROWS_MOD);
146 legoPlotHGPtr->SetMaximum( MAX_BIN_VALUE);
147 legoPlotLGPtr = new TH2S("Homer","HLT:HOMER: #pi^{0} 5 - 30Gev, Low gain", N_COLUMNS_MOD* N_MODULES , 0, N_COLUMNS_MOD* N_MODULES , N_ROWS_MOD, 0, N_ROWS_MOD);
148 legoPlotLGPtr->SetMaximum( MAX_BIN_VALUE);
152 if(fgAccumulate == kFALSE)
154 cout <<"restting legoplot" << endl;
155 if(legoPlotHGPtr !=0)
157 legoPlotHGPtr->Reset();
160 if(legoPlotLGPtr !=0)
162 legoPlotLGPtr->Reset();
169 const AliHLTComponentBlockData* iter = NULL;
170 Bool_t nextSwitch=kTRUE;
171 // cout << "homerreader connectionstatus =" <<fgHomerReaderPtr->GetConnectionStatus() << endl;;
173 ret =fgHomerReaderPtr->ReadNextEvent();
177 int ndx = fgHomerReaderPtr->GetErrorConnectionNdx();
178 printf( "------------ TRY AGAIN --------------->Error reading event from source %d: %s (%d)\n", ndx, strerror(ret), ret );
182 unsigned long blockCnt = fgHomerReaderPtr->GetBlockCnt();
184 for ( unsigned long i = 0; i < blockCnt; i++ )
186 char tmp1[9], tmp2[5];
187 memset( tmp1, 0, 9 );
190 ULong64_t* tmp12 = (ULong64_t*)tmp11;
191 *tmp12 =fgHomerReaderPtr->GetBlockDataType( i );
193 ULong_t* tmp22 = (ULong_t*)tmp21;
194 *tmp22 =fgHomerReaderPtr->GetBlockDataOrigin( i );
196 unsigned long blk = fgHomerReaderPtr->FindBlockNdx( fgDefaultDataType, fgDefaultDet, 0xFFFFFFFF );
199 while ( blk != ~(unsigned long)0 )
201 AliHLTUInt16_t moduleID;
202 const AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (const AliHLTPHOSRcuCellEnergyDataStruct*)fgHomerReaderPtr->GetBlockData( blk );
203 moduleID = cellEnergiesPtr->fModuleID ;
204 int tmpCount = cellEnergiesPtr->fCnt;
210 for(int i= 0; i<tmpCount; i++)
212 tmpRow = cellEnergiesPtr->fValidData[i].fRow;
213 tmpCol = cellEnergiesPtr->fValidData[i].fCol;
214 tmpGain = cellEnergiesPtr->fValidData[i].fGain;
216 if(tmpGain == HIGH_GAIN)
218 legoPlotHGPtr->Fill(moduleID*N_COLUMNS_MOD + tmpCol + N_COLUMNS_RCU*cellEnergiesPtr->fRcuZ, tmpRow + N_ROWS_RCU*cellEnergiesPtr->fRcuX, cellEnergiesPtr->fValidData[i].fEnergy);
221 else if(tmpGain == LOW_GAIN)
223 legoPlotLGPtr->Fill(moduleID*N_COLUMNS_MOD + tmpCol + N_COLUMNS_RCU*cellEnergiesPtr->fRcuZ, tmpRow + N_ROWS_RCU*cellEnergiesPtr->fRcuX, cellEnergiesPtr->fValidData[i].fEnergy);
228 blk = fgHomerReaderPtr->FindBlockNdx( fgDefaultDataType, fgDefaultDet, 0xFFFFFFFF, blk+1);
241 AliHLTPHOSOnlineDisplay::UpdateDisplay()
245 legoPlotHGPtr->Draw("LEGO2");
246 // legoPlotHGPtr->Draw("COLZ");
247 legoPlotHGPtr->SetMarkerColor(4);
248 fgCanvasHGPtr->Update();
250 legoPlotLGPtr->Draw("LEGO2");
252 // legoPlotLGPtr->Draw("COLZ");
253 fgCanvasLGPtr->Update();