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