Adding new classes for numerical debugging
[u/mrichter/AliRoot.git] / TPC / macros / TPCMonitor.C
CommitLineData
48265b32 1////////////////////////////////////////////////////////////////////////////////
2//
3// Macro to launch Monitoring program for TPC raw data
4//
5// Author: Stefan Kniege, IKF, Frankfurt
6//
7////////////////////////////////////////////////////////////////////////////////
8
9
10static AliTPCMonitor* fMon = 0;
11static AliTPCMonitorMappingHandler* fMapHand = 0;
12
13static TGMainFrame* fFrameMain = 0;
14static TGCheckButton* fFrameChDisFit = 0;
15static TGCheckButton* fFrameCh10bit = 0;
16static TGCheckButton* fFrameCheckVerb = 0;
17static TGCheckButton* fFrameCheckProcOne = 0;
18static TGCheckButton* fFrameCheckPed = 0;
19static TGCheckButton* fFrameCalcBSL = 0;
20
21static Int_t fVerb = 0;
22static TGTextEntry* fTextEvId = 0;
23
24void WriteChannel();
25void WriteHistos();
26void SetConfig();
27void DisableFit();
28void ProcessSector(char* fdata,char* ffil, Int_t side, Int_t sector);
29Int_t DrawFit();
30Int_t DrawRMS();
31void ShowSelected();
32void SetSize() ;
33void ResizeCanv();
34void ReadMe();
35void OpenDir();
36void SetWrite10Bit();
37void SetCheckVerb();
38void SetProcOne();
39void SetPedstalRun(Int_t val);
40void InitDialog(Int_t id);
41void Resize(Int_t update,Int_t doit , Int_t side);
42void MonitorGui(AliTPCMonitor* fMon);
43
44
45
46//_________________________________________________________________________
47void TPCMonitor()
48{
49 // Initialize the monitor
50 SetStyle();
51
52 // MappingHandler
53 Char_t fglobalmap[256] ; sprintf(fglobalmap,"%s/TPC/mapping/MappingGlobal.txt", gSystem->Getenv("ALICE_ROOT"));
54 Char_t frowmap[256] ; sprintf(frowmap, "%s/TPC/mapping/MappingRow.txt", gSystem->Getenv("ALICE_ROOT"));
55 Char_t ffecmap[256] ; sprintf(ffecmap, "%s/TPC/mapping/MappingCards.txt", gSystem->Getenv("ALICE_ROOT"));
56 Char_t fnameconf[256] ; sprintf(fnameconf, "%s/TPC/AliTPCMonitorConfig.txt", gSystem->Getenv("ALICE_ROOT"));
57
58 cout << " ALICE_ROOT : " << gSystem->Getenv("ALICE_ROOT") << endl;
59 cout << " DATE_ROOT : " << gSystem->Getenv("DATE_ROOT") << endl;
60
61 fMapHand = new AliTPCMonitorMappingHandler("maphand","maphand");
62 fMapHand->ReadMapping(fglobalmap);
63 fMapHand->ReadRowMappingGlob(frowmap);
64 fMapHand->ReadFECMapping( ffecmap);
65 if (gDirectory) { gDirectory->Append(fMapHand); }
66
67 // Monitor
68 fMon = new AliTPCMonitor("monitor","monitor");
69 fMon->ReadConfig(fnameconf);
70 fMon->SetMappingHandler(fMapHand);
71 MonitorGui(fMon);
72
73}
74
75//_________________________________________________________________________
76void MonitorGui(fMon)
77{
78 // Display the main Window
79
80 Float_t xsize = fMon->GetButtonXSize();
81 Float_t ysize = fMon->GetButtonYSize();
82 Float_t xfirst1 = fMon->GetButtonXFirst1();
83 Float_t xfirst2 = fMon->GetButtonXFirst2();
84 Float_t yfirst = fMon->GetButtonYFirst();
85 Float_t mainx = fMon->GetMainXSize();
86 Float_t mainy = fMon->GetMainYSize();
87
88 // main frame
89 fFrameMain = new TGMainFrame(gClient->GetRoot(),10,10,kMainFrame | kVerticalFrame);
90 fFrameMain->SetLayoutBroken(kTRUE);
91
92 TGTextButton* fFrameSelForm = new TGTextButton(fFrameMain, "Sel. Format " );
93 TGTextButton* fFrameSelFil = new TGTextButton(fFrameMain, "Sel. File/Stream" );
94 TGTextButton* fFrameFFT = new TGTextButton(fFrameMain, "FFT" );
95 TGTextButton* fFrameWRITE = new TGTextButton(fFrameMain, "Write Channel" );
96 fFrameChDisFit = new TGCheckButton(fFrameMain, "Disable G4-fit" );
97 TGTextButton* fFrameRMS = new TGTextButton(fFrameMain, "Show RMS map" );
98 TGTextButton* fFrameSetConf = new TGTextButton(fFrameMain, "Conf. Ranges" );
99 fFrameCh10bit = new TGCheckButton(fFrameMain, "Write 10bit " );
100 fFrameCheckVerb = new TGCheckButton(fFrameMain, "Set Verbose " );
101 fFrameCheckProcOne = new TGCheckButton(fFrameMain, "Proc one Sector " );
102 fFrameCalcBSL = new TGCheckButton(fFrameMain, "Calc BSL (onl) " );
103 fFrameCheckPed = new TGCheckButton(fFrameMain, "No BSL sub. " );
104 TGTextButton* fFrameSideA = new TGTextButton(fFrameMain, "Side A" );
105 TGTextButton* fFrameSideB = new TGTextButton(fFrameMain, "Side C" );
106 TGTextButton* fFrameNextEvent = new TGTextButton(fFrameMain, "Next Event" );
107 TGTextButton* fFramesel = new TGTextButton(fFrameMain, "Show Component" );
108 TGTextButton* fFrameres = new TGTextButton(fFrameMain, "Resize Canvases" );
109 TGTextButton* fFramewrite = new TGTextButton(fFrameMain, "Write Histos" );
110 TGTextButton* fFrameQuit = new TGTextButton(fFrameMain, "Quit" );
111
112 fFrameSelForm->SetCommand( "InitDialog(1)" );
113 fFrameSelFil->SetCommand( "OpenDir()" );
114 fFrameFFT->SetCommand( "FFT()" );
115 fFrameWRITE->SetCommand( "WriteChannel()" );
116 fFrameCheckPed->SetCommand( "SetPedestalRun(0)" );
117 fFrameCh10bit->SetCommand( "SetWrite10Bit()" );
118 fFrameCalcBSL->SetCommand( "SetPedestalRun(1)" );
119 fFrameChDisFit->SetCommand( "DisableFit()" );
120 fFrameRMS->SetCommand( "DrawRMSMap()" );
121 fFrameSetConf->SetCommand( "SetConfig()" );
122 fFrameCheckVerb->SetCommand( "SetCheckVerb()" );
123 fFrameCheckProcOne->SetCommand("SetProcOne()" );
124 fFrameNextEvent->SetCommand( "NextEvent()" ); fFrameNextEvent->SetTextColor(200);
125 fFramesel->SetCommand( "ShowSelected()" );
126 fFrameres->SetCommand( "ResizeCanv()" );
127 fFramewrite->SetCommand( "WriteHistos()" );
128 fFrameQuit->SetCommand( "Quit()" );
129
130 fFrameCalcBSL->SetDown( 1);
131 fFrameCheckPed->SetDown( 0);
132 fFrameCh10bit->SetDown( 0);
133 fFrameCheckVerb->SetDown(0);
134 fFrameCheckProcOne->SetDown(0);
135
136 TGLayoutHints* fLayout = new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5);
137 fFrameMain->AddFrame(fFrameSideA , fLayout);
138 fFrameMain->AddFrame(fFrameSideB , fLayout);
139 fFrameMain->AddFrame(fFrameQuit , fLayout);
140 fFrameMain->AddFrame(fFrameCh10bit , fLayout);
141 fFrameMain->AddFrame(fFrameRMS , fLayout);
142 fFrameMain->AddFrame(fFrameSetConf , fLayout);
143 fFrameMain->AddFrame(fFrameSelFil , fLayout);
144 fFrameMain->AddFrame(fFrameSelForm , fLayout);
145 fFrameMain->AddFrame(fFrameFFT , fLayout);
146 Int_t step = ysize/2;
147 Int_t start = 5;
148
149 fFrameSelForm->MoveResize( 10, start+ 1.0*ysize ,mainx-20 ,ysize);
150 fFrameSelFil->MoveResize( 10, start+ 2.0*ysize ,mainx-20 ,ysize);
151
152 fFrameSetConf->MoveResize( 10, start+ 4.5*ysize ,mainx-20 ,ysize);
153
154 fFrameCalcBSL->MoveResize( 10, start+ 6*ysize ,mainx-20 ,ysize);
155 fFrameCheckPed->MoveResize( 10, start+ 7*ysize ,mainx-20 ,ysize);
156 fFrameChDisFit->MoveResize( 10, start+ 8*ysize ,mainx-20 ,ysize);
157 fFrameCh10bit->MoveResize( 10, start+ 9*ysize ,mainx-20 ,ysize);
158 fFrameCheckVerb->MoveResize( 10, start+ 10*ysize ,mainx-20 ,ysize);
159
160
161 yfirst = start+ 14*ysize;
162 fFrameSideA->MoveResize( xfirst1, yfirst-30 ,xsize ,ysize);
163 fFrameSideB->MoveResize( xfirst2, yfirst-30 ,xsize ,ysize);
164
165 // sector buttons
166 TObjArray * fFrameArr = new TObjArray();
167 TGTextButton * fTextButton = 0;
168 Int_t side = 0;
169 Int_t sector = 0;
170 for(Int_t i = 0; i<36; i++)
171 {
172 char nameb[256] ;
173 if(i<18)sprintf(nameb,"Sector %i",i);
174 else sprintf(nameb,"Sector %i",i-18);
175 fTextButton = new TGTextButton(fFrameMain,nameb);
176 fFrameMain->AddFrame(fTextButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5));
177 if(i<18)fTextButton->MoveResize(xfirst1,yfirst +i*ysize,xsize,ysize);
178 else fTextButton->MoveResize(xfirst2,yfirst+(i-18)*ysize,xsize,ysize);
179 if(i<18){ side = 0; sector = i; }
180 else { side = 1; sector = i-18;}
181 char bef[50]; sprintf(bef,"ProcessSector(%i,%i)",side,sector);
182 fTextButton->SetCommand(bef);
183 fFrameArr->Add(fTextButton);
184 }
185
186 TGLabel* flab = new TGLabel(fFrameMain, new TGHotString("Next Ev.ID"));
187 TGTextBuffer* ftbuf = new TGTextBuffer(10); ftbuf->AddText(0, "1");
188 fTextEvId = new TGTextEntry(fFrameMain, ftbuf);
189 fTextEvId->SetTextColor(200);
190
191 fFramesel->MoveResize( 10 , mainy- 15.0*ysize ,mainx-20 ,ysize);
192 fFrameRMS->MoveResize( 10 , mainy- 14.0*ysize ,mainx-20 ,ysize);
193
194 fFrameFFT->MoveResize( 10 , mainy- 12.0*ysize ,mainx-20 ,ysize);
195 fFramewrite->MoveResize( 10 , mainy- 11.0*ysize ,mainx-20 ,ysize);
196
197 fFrameWRITE->MoveResize( 10 , mainy- 9.0*ysize ,mainx-20 ,ysize);
198 fFrameres->MoveResize( 10 , mainy- 8.0*ysize ,mainx-20 ,ysize);
199
200
201 fFrameCheckProcOne->MoveResize(10 , mainy- 6.5*ysize ,mainx-20 ,ysize);
202
203 flab->MoveResize( 10 , mainy- 5.0*ysize ,xsize+5 ,ysize);
204 fTextEvId->MoveResize( mainx/2 +10 , mainy- 5.0*ysize ,xsize-10 ,ysize);
205
206 fFrameNextEvent->MoveResize( 10 , mainy- 3.5*ysize ,mainx-20 ,ysize);
207
208 fFrameQuit->MoveResize( 30 , mainy- 1.5*ysize ,mainx-60 ,ysize);
209
210 fFrameMain->MapSubwindows();
211 fFrameMain->MapWindow();
212 fFrameMain->SetWindowName("OM");
213 fFrameMain->MoveResize(0,0,mainx,mainy);
214}
215
216//_________________________________________________________________________
217void WriteHistos()
218{
219 // Write Monitor Histos to file
220 fMon->WriteHistos() ;
221}
222
223//_________________________________________________________________________
224void WriteChannel()
225{
226 // Write 10 bit words to file for current channel
227 fMon->Write10bitChannel();
228}
229
230//_________________________________________________________________________
231void FFT()
232{
233 // Make Fourier Transformation for current channel
234 fMon->ExecTransform();
235}
236
237//_________________________________________________________________________
238void NextEvent()
239{
240 // Process next event
241 fMon->SetProcNextEvent(1);
242 Int_t eventid =0;
243 TString s1 = fTextEvId->GetDisplayText();
244 if(!s1.IsDigit()) { cout << " Invalid EventID " << endl; return ;}
245 else eventid = s1.Atoi();
246 fMon->SetEventID(eventid);
247 fMon->ResizeCanv();
248 fMon->ProcessEvent();
249 fMon->SetProcNextEvent(0);
250 char tenttext[20] ; sprintf(tenttext,"%i",fMon->GetEventID()+1);
251 fTextEvId->SetText(tenttext);
252}
253
254//_________________________________________________________________________
255void SetCheckVerb()
256{
257 // Change verbose mode
258 if(fFrameCheckVerb->IsDown()) { fVerb = 1; fMon->SetVerbose(1); }
259 else { fVerb = 0; fMon->SetVerbose(0); }
260}
261//_________________________________________________________________________
262void SetPedestalRun(Int_t val)
263{
264 // Set Pedestal calculation mode
265 if(val==0)
266 {
267 // check pedestal run button
268 if(fFrameCheckPed->IsDown()) { fMon->SetPedestals(0); fFrameCalcBSL->SetDown(0); }
269 else { fMon->SetPedestals(1); fFrameCalcBSL->SetDown(1); }
270 }
271 else
272 {
273 // check online calc button
274 if(fFrameCalcBSL->IsDown()) { fMon->SetPedestals(1); fFrameCheckPed->SetDown(0); }
275 else { fMon->SetPedestals(2); fFrameCheckPed->SetDown(0); }
276 }
277}
278
279//_________________________________________________________________________
280void SetWrite10Bit()
281{
282 // Set Write 10Bit mode
283 // 10 bit words will be written in AliTPCMonitorAltro for each equipment
284 if(fMon->GetWrite10Bit()==1) fMon->SetWrite10Bit(0);
285 else fMon->SetWrite10Bit(1);
286}
287
288//_________________________________________________________________________
289void DisableFit()
290{
291 // Disable Gamma4 fit to maximum peak
292 if(fMon->GetFitPulse()) fMon->SetFitPulse(0);
293 else fMon->SetFitPulse(1);
294}
295
296//_________________________________________________________________________
297Int_t DrawRMSMap()
298{
299 // Draw RMS map for IROC and OROC
300 if(fMon->GetLastSector()==-1) cout << " no sector written yet " << endl;
301 else fMon->DrawRMSMap();
302}
303
304//_________________________________________________________________________
305void ProcessSector(Int_t sid, Int_t sec)
306{
307 // Process specific sector. Initiated by button
308 if(fMon->GetSectorFilled(sec,sid))
309 {
310 fMon->SetLastSector(sec +sid*18);
311 fMon->SetProcNextEvent(0);
312 fMon->ProcessEvent();
313 }
314 else
315 {
316 cout << " Sector not filled " << endl;
317 }
318}
319
320//_________________________________________________________________________
321void OpenDir()
322{
323 TString dir ;
324 TString lastfile(fMon->GetLastProcFile());
325 dir= "/";
326 TGFileInfo* fi = new TGFileInfo();
327 fi->fIniDir = StrDup(dir);
328 fi->fFilename = StrDup(lastfile);
329 if(fVerb) printf("fIniDir = %s\n", fi->fIniDir);
330
331 new TGFileDialog(gClient->GetRoot(), fFrameMain, kFDOpen, fi);
332 if(!fi->fFilename) break;
333 if(!strcmp(fi->fFilename,"")) return;
334 string fname(fi->fFilename);
335 Int_t ffirst = fname.find_first_not_of("/",0);
336 Int_t fstart = 0;
337 string firsts = fname.substr(ffirst,1);
338 Int_t firstsl = strcmp(firsts.data(),":");
339 Int_t firstcol = strcmp(firsts.data(),"@");
340 if(fname.find("rfio")!=string::npos|| fname.find("http")!=string::npos || !firstsl || !firstcol ) fstart= ffirst ;
341 else fstart= ffirst-1;
342
343 if(fstart <0){ cout << " return : missing slash at beginning of file " << endl ; return ;}
344
345 string fsubname = fname.substr(fstart,fname.length()-fstart);
346 fMon->SetFile(fsubname.data());
347
348 if(fVerb)
349 {
350 cout << "Monitor.C OpenDir:: dir : " << fi->fIniDir << endl;
351 cout << "Monitor.C OpenDir:: file : " << fsubname.data() << endl;
352 cout << "Monitor.C OpenDir:: format : " << fMon->GetFormat() << endl;
353 }
354}
355
356//_________________________________________________________________________
357void InitDialog(Int_t id)
358{
359 if(id>0&&id<4) new AliTPCMonitorDialog(gClient->GetRoot(), fFrameMain, 400, 400,0,id,fMon);
360 else cout << "Error : Invalid Id " << endl;
361 return;
362}
363
364//_________________________________________________________________________
365void ShowSelected()
366{
367 InitDialog(2);
368 return;
369}
370
371//_________________________________________________________________________
372void SetConfig()
373{
374 InitDialog(3);
375}
376
377//_________________________________________________________________________
378void ResizeCanv()
379{
380 fMon->ResizeCanv();
381 return;
382}
383
384//_________________________________________________________________________
385void SetStyle()
386{
387 gStyle->SetScreenFactor(1);
388 gStyle->SetPadTopMargin(0.17);
389 gStyle->SetPadBottomMargin(0.17);
390 gStyle->SetPadLeftMargin(0.17);
391 gStyle->SetPadRightMargin(0.19);
392 gStyle->SetStatColor(kWhite);
393 gStyle->SetPadColor(kWhite);
394 gStyle->SetCanvasColor(kWhite);
395 gStyle->SetPadBorderMode(0);
396 gStyle->SetPadBorderSize(0);
397 gStyle->SetCanvasBorderMode(0);
398 gStyle->SetCanvasBorderSize(0);
399 gStyle->SetFrameBorderMode(0);
400 gStyle->SetFrameBorderSize(1);
401 gStyle->SetOptStat(0);
402 gStyle->SetPalette(1);
403 gStyle->SetTitleFillColor(0);
404 gStyle->SetTitleOffset(1.3,"X");
405 gStyle->SetTitleOffset(1.9,"Y");
406 gStyle->SetTitleOffset(1.7,"Z");
407 gStyle->SetPalette(1);
408
409}
410
411//_________________________________________________________________________
412void ReadMe()
413{
414 AliTPCMonitorEditor *ed = new AliTPCMonitorEditor(fFrameMain, 700, 400);
415 char nameread[256]; sprintf(nameread,"%s/TPC/AliTPCMonitorReadMe.txt",gSystem->Getenv("ALICE_ROOT"));
416 ed->LoadFile(nameread);
417 ed->Popup();
418}
419
420//_________________________________________________________________________
421void SetProcOne()
422{
423 if(fFrameCheckProcOne->IsDown()) { fMon->SetProcOneSector(1); }
424 else { fMon->SetProcOneSector(0); }
425
426}
427//_________________________________________________________________________
428void Quit()
429{
430 gApplication->Terminate(0);
431}
432