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