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