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