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