]>
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 | |
16 | using namespace std; | |
17 | ||
997330b5 | 18 | // MT Crap |
19 | #include <TMath.h> | |
20 | #include <TEveManager.h> | |
21 | #include <TEveBoxSet.h> | |
22 | ||
23 | TEveBoxSet* gAliEveBoxSet = 0; | |
59b4cd9a | 24 | |
25 | AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab() | |
26 | { | |
27 | cout << "ERROR: You cannot create a onlinedisplay Tab without arguments" << endl; | |
28 | } | |
29 | ||
30 | ||
b3abda11 | 31 | AliHLTPHOSOnlineDisplayEventTab::AliHLTPHOSOnlineDisplayEventTab(AliHLTPHOSOnlineDisplay *onlineDisplayPtr, TGTab *tabPtr, |
6af3dade | 32 | AliHLTHOMERReader *homerSyncPtr, AliHLTHOMERReader *homerPtrs[MAX_HOSTS], int nHosts) : AliHLTPHOSOnlineDisplayTab() |
59b4cd9a | 33 | { |
14ff16ed | 34 | fShmPtr = new AliHLTPHOSSharedMemoryInterface(); |
b3abda11 | 35 | fOnlineDisplayPtr = onlineDisplayPtr; |
36 | ||
3f98e623 | 37 | for(int mod =0; mod <N_MODULES; mod ++) |
38 | { | |
3f98e623 | 39 | for(int rcu_x_coord = 0; rcu_x_coord < N_ZRCU_COORD; rcu_x_coord ++) |
40 | { | |
41 | for(int rcu_z_coord = 0; rcu_z_coord < N_XRCU_COORD; rcu_z_coord ++) | |
42 | { | |
43 | for(int z = 0; z < N_ZROWS_RCU; z ++) | |
44 | { | |
45 | for(int x = 0; x < N_XCOLUMNS_RCU; x ++) | |
46 | { | |
47 | for(int gain = 0; gain < N_GAINS; gain ++ ) | |
48 | { | |
b3abda11 | 49 | fChannelData[mod][rcu_z_coord][rcu_x_coord][x][z][gain] = new int[fNTotalSamples]; |
3f98e623 | 50 | } |
51 | } | |
52 | } | |
53 | } | |
54 | } | |
55 | } | |
56 | ||
59b4cd9a | 57 | for(int i=0; i<MAX_HOSTS; i++) |
58 | { | |
59 | fgHomerReadersPtr[i] = 0; | |
60 | } | |
61 | ||
62 | fgHomerReaderPtr = homerSyncPtr; | |
63 | ||
64 | for(int i=0; i<nHosts; i++) | |
65 | { | |
66 | fgHomerReadersPtr[i] = homerPtrs[i] ; | |
14ff16ed | 67 | |
59b4cd9a | 68 | } |
69 | ||
70 | fgCanvasHGPtr = 0; | |
71 | fgCanvasLGPtr = 0; | |
72 | fgLegoPlotLGPtr = 0; | |
73 | fgLegoPlotHGPtr = 0; | |
74 | ||
75 | fgNHosts = nHosts; | |
76 | InitDisplay(tabPtr); | |
77 | } | |
78 | ||
79 | ||
80 | AliHLTPHOSOnlineDisplayEventTab::~AliHLTPHOSOnlineDisplayEventTab() | |
81 | { | |
82 | ||
83 | } | |
84 | ||
85 | ||
3f98e623 | 86 | void |
87 | AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int mod, int rcuX, int rcuZ, int x, int z, int gain) | |
88 | { | |
b3abda11 | 89 | for(int i=0; i < fNTotalSamples ; i++) |
3f98e623 | 90 | { |
6a89fa2b | 91 | histPtr->SetBinContent(i, fChannelData[mod][rcuX][rcuZ][x][z][gain][i]); |
3f98e623 | 92 | } |
93 | } | |
94 | ||
95 | ||
b3abda11 | 96 | void |
97 | AliHLTPHOSOnlineDisplayEventTab::GetRawData(TH1D *histPtr, int x, int z, int gain) | |
98 | { | |
99 | int tmpModID = x/64; | |
100 | int tmpRcuZ = z/32; | |
101 | int tmpRcuX = (x%64)/32; | |
102 | int tmpZ = z%28; | |
103 | int tmpX = x%32; | |
104 | ||
105 | for(int i=0; i < fNTotalSamples ; i++) | |
106 | { | |
107 | histPtr->SetBinContent(i, fChannelData[tmpModID][tmpRcuX][tmpRcuZ][tmpX][tmpZ][gain][i]); | |
108 | } | |
109 | } | |
110 | ||
111 | ||
59b4cd9a | 112 | int |
113 | AliHLTPHOSOnlineDisplayEventTab::GetNextEvent() | |
114 | { | |
115 | ResetDisplay(); | |
997330b5 | 116 | // MT crap |
117 | Bool_t is_first = false; | |
118 | if (gAliEveBoxSet == 0) | |
119 | { | |
120 | is_first = true; | |
121 | gAliEveBoxSet = new TEveBoxSet("PHOS module"); | |
122 | // gAliEveBoxSet->SetSecSelectCommand("Draw()"); | |
123 | // gAliEveBoxSet->SetSecSelectCommand("phos_histo_draw"); | |
124 | gEve->AddElement(gAliEveBoxSet); | |
125 | } | |
126 | gAliEveBoxSet->Reset(TEveBoxSet::kBT_AABox, kFALSE, 128); | |
127 | ||
59b4cd9a | 128 | DoGetNextEvent(); |
129 | UpdateDisplay(); | |
997330b5 | 130 | |
131 | gAliEveBoxSet->ElementChanged(); | |
132 | gEve->Redraw3D(is_first); | |
133 | ||
59b4cd9a | 134 | fgEvntCnt ++; |
135 | } | |
136 | ||
137 | ||
138 | ||
139 | void | |
6af3dade | 140 | AliHLTPHOSOnlineDisplayEventTab::ReadBlockData(AliHLTHOMERReader *homeReaderPtr) |
14ff16ed | 141 | { |
142 | AliHLTPHOSValidCellDataStruct *currentChannel =0; | |
14ff16ed | 143 | cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockDat, Reading block data" << endl; |
59b4cd9a | 144 | |
145 | unsigned long blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF ); | |
997330b5 | 146 | |
59b4cd9a | 147 | while ( blk != ~(unsigned long)0 ) |
148 | { | |
149 | Int_t moduleID; | |
14ff16ed | 150 | AliHLTPHOSRcuCellEnergyDataStruct* cellEnergiesPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)homeReaderPtr->GetBlockData( blk ); |
47f7b25e | 151 | |
152 | cout <<The size of << | |
153 | ||
154 | ||
155 | unsigned int *t = (unsigned int*)cellEnergiesPtr; | |
156 | ||
157 | for(int i = 0; i < 10000; i++) | |
158 | { | |
159 | printf("%f\t", (float)*t); | |
160 | if(i%30 == 0) | |
161 | { | |
162 | printf("\ni = %d", i); | |
163 | } | |
164 | t ++; | |
165 | } | |
166 | ||
167 | for(int gain = 1; gain < N_GAINS; gain ++) | |
168 | { | |
169 | for(int x=0; x <N_XCOLUMNS_RCU; x ++ ) | |
170 | { | |
171 | printf("\nnewline"); | |
172 | for(int z=0; z <N_ZROWS_RCU; z ++ ) | |
173 | { | |
174 | printf("%f\t",cellEnergiesPtr->fValidData[x][z][gain].fEnergy); | |
175 | ||
176 | } | |
177 | } | |
178 | } | |
179 | ||
59b4cd9a | 180 | moduleID = cellEnergiesPtr->fModuleID ; |
14ff16ed | 181 | cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData, fModuleID =" <<moduleID << endl; |
04751caa | 182 | |
59b4cd9a | 183 | Int_t tmpZ; |
184 | Int_t tmpX; | |
185 | Int_t tmpGain; | |
14ff16ed | 186 | int cnt = 0; |
187 | ||
14ff16ed | 188 | fShmPtr->SetMemory(cellEnergiesPtr); |
189 | currentChannel = fShmPtr->NextChannel(); | |
190 | ||
191 | while(currentChannel != 0) | |
192 | { | |
193 | cnt ++; | |
194 | tmpZ = currentChannel->fZ; | |
195 | tmpX = currentChannel->fX; | |
196 | tmpGain = currentChannel->fGain; | |
197 | ||
04751caa | 198 | // cout << "AliHLTPHOSOnlineDisplayEventTab::ReadBlockData gain = " << tmpGain << endl; |
199 | ||
14ff16ed | 200 | if(cnt < 20) |
201 | { | |
202 | cout << "the addresss of fData is " << (void *)currentChannel->fData << endl; | |
203 | } | |
04751caa | 204 | // We have to unroll the gain for loop because of the hack by MT to display the raw data in AliEve |
205 | // This is crap !! but it is the dirty one hour solution (and it works) | |
14ff16ed | 206 | |
04751caa | 207 | |
14ff16ed | 208 | if( |
209 | tmpGain == HIGH_GAIN) | |
210 | { | |
211 | fgLegoPlotHGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX, | |
212 | tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy); | |
213 | ||
04751caa | 214 | // cout << << endl; |
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 | |
6a89fa2b | 224 | for(int j= 0; j< currentChannel->fNSamples; j++) |
14ff16ed | 225 | { |
6a89fa2b | 226 | if(j == fNTotalSamples) |
227 | { | |
228 | break; | |
229 | } | |
04751caa | 230 | |
14ff16ed | 231 | fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][HIGH_GAIN][j] = currentChannel->fData[j]; |
04751caa | 232 | // prinf(""); |
233 | ||
234 | ||
14ff16ed | 235 | } |
236 | } | |
237 | ||
238 | else if(tmpGain == LOW_GAIN) | |
239 | { | |
240 | fgLegoPlotLGPtr->Fill(moduleID*N_XCOLUMNS_MOD + tmpX + N_XCOLUMNS_RCU*cellEnergiesPtr->fRcuX, | |
241 | tmpZ + N_ZROWS_RCU*cellEnergiesPtr->fRcuZ, currentChannel->fEnergy); | |
6a89fa2b | 242 | for(int j= 0; j< currentChannel->fNSamples; j++) |
14ff16ed | 243 | { |
6a89fa2b | 244 | |
245 | if(j == fNTotalSamples) | |
246 | { | |
247 | break; | |
248 | } | |
14ff16ed | 249 | fChannelData[moduleID][cellEnergiesPtr->fRcuX][cellEnergiesPtr->fRcuZ][tmpX][tmpZ][LOW_GAIN][j] = currentChannel->fData[j]; |
250 | } | |
251 | } | |
252 | ||
14ff16ed | 253 | currentChannel = fShmPtr->NextChannel(); |
254 | } | |
6a89fa2b | 255 | |
14ff16ed | 256 | |
59b4cd9a | 257 | blk = homeReaderPtr->FindBlockNdx("RENELLEC","SOHP", 0xFFFFFFFF, blk+1); |
258 | } | |
259 | } | |
260 | ||
261 | ||
262 | void | |
263 | AliHLTPHOSOnlineDisplayEventTab::ResetDisplay() | |
264 | { | |
265 | if(fgAccumulate == kFALSE) | |
266 | { | |
267 | if(fgLegoPlotHGPtr !=0) | |
268 | { | |
269 | fgLegoPlotHGPtr->Reset(); | |
270 | } | |
271 | ||
272 | if(fgLegoPlotLGPtr !=0) | |
273 | { | |
274 | fgLegoPlotLGPtr->Reset(); | |
275 | } | |
276 | } | |
277 | } | |
278 | ||
279 | ||
280 | void | |
281 | AliHLTPHOSOnlineDisplayEventTab::InitDisplay(TGTab *tabPtr) | |
282 | { | |
04751caa | 283 | fgLegoPlotHGPtr = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, "Cosmics, High gain", "PHOS HLT: Cosmics", |
284 | N_XCOLUMNS_MOD*N_MODULES , 0, N_XCOLUMNS_MOD*N_MODULES, | |
285 | N_ZROWS_MOD, 0, N_ZROWS_MOD); | |
286 | fgLegoPlotHGPtr->SetGain(HIGH_GAIN); | |
287 | fgLegoPlotHGPtr->SetMaximum(1023); | |
288 | fgLegoPlotHGPtr->Reset(); | |
289 | fgLegoPlotHGPtr->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END); | |
b3abda11 | 290 | fgLegoPlotLGPtr = new AliHLTPHOSOnlineDisplayTH2D(fOnlineDisplayPtr, "Cosmics, Low gain", "PHOS HLT: Cosmics", |
04751caa | 291 | N_XCOLUMNS_MOD* N_MODULES , 0, N_XCOLUMNS_MOD* N_MODULES, |
292 | N_ZROWS_MOD, 0, N_ZROWS_MOD); | |
b3abda11 | 293 | fgLegoPlotLGPtr->SetGain(LOW_GAIN); |
3f98e623 | 294 | fgLegoPlotLGPtr->SetMaximum(1023); |
59b4cd9a | 295 | fgLegoPlotLGPtr->Reset(); |
b3abda11 | 296 | fgLegoPlotLGPtr->GetXaxis()->SetRange(X_RANGE_START, X_RANGE_END); |
59b4cd9a | 297 | |
298 | TGLayoutHints *fL1 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX | | |
299 | kLHintsExpandY, 2, 2, 15, 1); | |
300 | ||
3f98e623 | 301 | TGCompositeFrame *tf = tabPtr->AddTab("Event display"); |
59b4cd9a | 302 | fSubTab1 = new TGTab(tf, 100, 100); |
303 | TGCompositeFrame *tf2 = fSubTab1->AddTab("LEGO"); | |
304 | fSubF1 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame); | |
305 | fEc1 = new TRootEmbeddedCanvas("ec1", fSubF1, 100, 100); | |
306 | fSubF1->AddFrame(fEc1, fL1); | |
307 | fEc2 = new TRootEmbeddedCanvas("ec2", fSubF1, 100, 100); | |
308 | fSubF1->AddFrame(fEc2, fL1); | |
309 | tf2->AddFrame(fSubF1, fL1); | |
310 | ||
311 | tf2 = fSubTab1->AddTab("SCAT"); | |
312 | fSubF2 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame); | |
313 | tf2->AddFrame(fSubF2, fL1); | |
314 | fEc3 = new TRootEmbeddedCanvas("ec3", fSubF2, 100, 100); | |
315 | fSubF2->AddFrame(fEc3, fL1); | |
316 | fEc4 = new TRootEmbeddedCanvas("ec4", fSubF2, 100, 100); | |
317 | fSubF2->AddFrame(fEc4, fL1); | |
318 | ||
319 | tf2 = fSubTab1->AddTab("SURF"); | |
320 | fSubF3 = new TGCompositeFrame(tf2, 60, 20, kVerticalFrame); | |
321 | tf2->AddFrame(fSubF3, fL1); | |
322 | fEc5 = new TRootEmbeddedCanvas("ec5", fSubF3, 100, 100); | |
323 | fSubF3->AddFrame(fEc5, fL1); | |
324 | fEc6 = new TRootEmbeddedCanvas("ec6", fSubF3, 100, 100); | |
325 | fSubF3->AddFrame(fEc6, fL1); | |
326 | fSubTab1->Resize(); | |
327 | tf->AddFrame(fSubTab1, fL1); | |
328 | ||
329 | fgEventButtPtr = new AliHLTPHOSGetEventButton(fSubF1, "get event", 'e'); | |
330 | } | |
331 | ||
332 | ||
04751caa | 333 | |
59b4cd9a | 334 | void |
335 | AliHLTPHOSOnlineDisplayEventTab::UpdateDisplay() | |
336 | { | |
337 | fgCanvasHGPtr = fEc1->GetCanvas(); | |
338 | fgCanvasHGPtr->cd(); | |
339 | fgLegoPlotHGPtr->Draw("LEGO2Z"); | |
340 | fgCanvasHGPtr->Update(); | |
341 | fgCanvasLGPtr = fEc2->GetCanvas(); | |
342 | fgCanvasLGPtr->cd(); | |
343 | fgLegoPlotLGPtr->Draw("LEGO2Z"); | |
344 | fgCanvasLGPtr->Update(); | |
345 | ||
346 | fgCanvasHGPtr = fEc3->GetCanvas(); | |
347 | fgCanvasHGPtr->cd(); | |
348 | fgLegoPlotHGPtr->Draw("SCAT"); | |
349 | fgCanvasHGPtr->Update(); | |
350 | fgCanvasLGPtr = fEc4->GetCanvas(); | |
351 | fgCanvasLGPtr->cd(); | |
352 | fgLegoPlotLGPtr->Draw("SCAT"); | |
353 | fgCanvasLGPtr->Update(); | |
354 | ||
355 | fgCanvasHGPtr = fEc5->GetCanvas(); | |
356 | fgCanvasHGPtr->cd(); | |
357 | fgLegoPlotHGPtr->Draw("CONTZ"); | |
358 | fgCanvasHGPtr->Update(); | |
359 | fgCanvasLGPtr = fEc6->GetCanvas(); | |
360 | fgCanvasLGPtr->cd(); | |
361 | fgLegoPlotLGPtr->Draw("CONTZ"); | |
362 | fgCanvasLGPtr->Update(); | |
59b4cd9a | 363 | } |