]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/AliTPCCalibViewerGUI.cxx
Adding new functionality to the AliTPCCalibViewer
[u/mrichter/AliRoot.git] / TPC / AliTPCCalibViewerGUI.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16
17 ///////////////////////////////////////////////////////////////////////////////
18 //                                                                           //
19 //  GUI for the AliTPCCalibViewer                                            //
20 //  used for the calibration monitor                                         //
21 //  All functionalities of the AliTPCCalibViewer are here available
22 //  
23 //  Example usage:                                                           //
24 /*
25   aliroot
26   AliTPCCalibViewerGUI::ShowGUI("CalibTree.root")
27   Begin_macro(source,gui)
28   {   
29       char* fileName = "CalibTreeEmpty.root";
30       AliTPCCalibViewer::MakeTree(fileName, 0, "$ALICE_ROOT/TPC/Calib/MapCalibrationObjects.root");
31       gROOT->SetStyle("Plain");
32       // content of AliTPCCalibViewerGUI::ShowGUI(...)
33       TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
34       frmMain->SetWindowName("AliTPCCalibViewer GUI");
35       frmMain->SetCleanup(kDeepCleanup);
36       
37       TGTab* tabMain = new TGTab(frmMain, 1000, 600);
38       frmMain->AddFrame(tabMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
39    
40       TGCompositeFrame* tabCont1 = tabMain->AddTab("Viewer 1");
41       TGCompositeFrame* tabCont2 = tabMain->AddTab("Viewer 2");
42    
43       AliTPCCalibViewerGUI* calibViewer1 = new AliTPCCalibViewerGUI(tabCont1, 1000, 600, fileName);
44       tabCont1->AddFrame(calibViewer1, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
45    
46       AliTPCCalibViewerGUI* calibViewer2 = new AliTPCCalibViewerGUI(tabCont2, 1000, 600, fileName);
47       tabCont2->AddFrame(calibViewer2, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
48       
49       frmMain->MapSubwindows();
50       frmMain->Resize();
51       frmMain->MapWindow();
52       
53       return frmMain;
54      
55   }
56   End_macro
57 */
58 //                         //
59 //                                                                           //
60 ///////////////////////////////////////////////////////////////////////////////
61
62
63 #include "AliTPCCalibViewerGUI.h"
64 #include <iostream>
65
66 #include <TCanvas.h>
67 #include <TPad.h>
68 #include <TVirtualPad.h>
69
70 #include <TObjArray.h>
71 #include <TObjString.h>
72 #include <TVector.h>
73 #include <string.h>
74 #include <TH1.h>
75 #include "TStyle.h"
76 #include "AliTPCCalibViewer.h"
77
78 // #include "TGListBox.h"
79 // #include "TGNumberEntry"
80 // #include "TGSplitter"
81 // #include "TGTab"
82 // #include "TGLabel"
83 // #include "TGButtonGroup"
84 // #include "TGComboBox"
85 // #include "TRootEmbeddedCanvas"
86 // #include "TGButton"
87 // #include "TGRadioButton"
88 // #include "GTCheckButton"
89 // #include "TGTextEntry"
90
91
92
93
94 ClassImp(AliTPCCalibViewerGUI)
95
96 AliTPCCalibViewerGUI::AliTPCCalibViewerGUI(const TGWindow *p, UInt_t w, UInt_t h, char* fileName)
97   : TGCompositeFrame(p, w, h),
98     fViewer(0),
99     fContTopBottom(0),
100     fContLCR(0),
101     fContLeft(0),
102     ftabLeft(0),
103     ftabLeft0(0),
104     ftabLeft1(0),
105     fContRight(0),
106     fContCenter(0),
107     fContPlotOpt(0),
108     fContDrawOpt(0),
109     fContDrawOptSub1D2D(0),
110     fContNormalized(0),
111     fContCustom(0),
112     fContCuts(0),
113     fContSector(0),
114     fContAddCuts(0),
115     fContFit(0),
116     fContAddFit(0),
117     fContScaling(0),
118     fContSetMax(0),
119     fContSetMin(0),
120     fContAddDrawOpt(0),
121     fListVariables(0),
122     fBtnDraw(0),
123     fBtnFit(0),
124     fBtnAddFitFunction(0),
125     fBtnGetMinMax(0),
126     fCanvMain(0),
127     fRadioRaw(0),
128     fRadioNormalized(0),
129     fRadioPredefined(0),
130     fRadioCustom(0),
131     fRadio1D(0),
132     fRadio2D(0),
133     fRadioTPC(0),
134     fRadioSideA(0),
135     fRadioSideC(0),
136     fRadioSector(0),
137     fComboAddDrawOpt(0),
138     fChkAuto(0),
139     fComboMethod(0),
140     fListNormalization(0),
141     fComboCustom(0),
142     fChkAddDrawOpt(0),
143     fNmbSector(0),
144     fLblSector(0),
145     fChkCutZero(0),
146     fChkAddCuts(0),
147     fComboAddCuts(0), 
148     fComboCustomFit(0),
149     fChkSetMax(0),
150     fChkSetMin(0),
151     fChkGetMinMaxAuto(0),
152     fTxtSetMax(0),
153     fTxtSetMin(0) ,
154     fContDrawOpt1D(0), 
155     fcontDrawOpt1DSubLR(0),
156     fContDrawOpt1DSubNSC(0), 
157     fRadioNorm(0),
158     fRadioSigma(0),
159     fTxtSigmas(0),
160     fContCumuLR(0),
161     fContCumLeft(0),
162     fContCumRight(0),
163     fLblSigmaMax(0),
164     fTxtSigmaMax(0),
165     fRadioCumulative(0),
166     fCheckCumulativePM(0),
167     fRadioIntegrate(0),
168     fContDrawOpt1DSubMML(0),
169     fChkMean(0),
170     fChkMedian(0),
171     fChkLTM(0),
172     fContStatOpt(0),
173     fChkStatName(0),
174     fChkStatEntries(0),
175     fContStatMean(0),
176     fChkStatMean(0),
177     fChkStatMeanPM(0),
178     fContStatRMS(0),
179     fChkStatRMS(0),
180     fChkStatRMSPM(0),
181     fChkStatUnderflow(0),
182     fChkStatOverflow(0),
183     fChkStatIntegral(0),
184     fContStatSkew(0),
185     fChkStatSkewness(0),
186     fChkStatSkewnessPM(0),
187     fContStatKurt(0),
188     fChkStatKurtosis(0),
189     fChkStatKurtosisPM(0)
190 {
191    //
192    // AliTPCCalibViewerGUI constructor; fileName specifies the ROOT tree used for drawing 
193    //
194    SetCleanup(kDeepCleanup);
195    
196    // *****************************************************************************
197    // ************************* content of this MainFrame *************************
198    // *****************************************************************************
199    // top level container with horizontal layout
200    fContTopBottom = new TGCompositeFrame(this, w, h, kVerticalFrame | kFixedWidth | kFixedHeight);
201    AddFrame(fContTopBottom, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
202    
203    fContLCR = new TGCompositeFrame(fContTopBottom, w, h, kHorizontalFrame | kFixedWidth | kFixedHeight);
204    fContTopBottom->AddFrame(fContLCR, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
205    
206    // ***********************************************************************
207    // ************************* content of fContLCR *************************
208    // ***********************************************************************
209    // left container
210    fContLeft = new TGCompositeFrame(fContLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
211    fContLCR->AddFrame(fContLeft, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 5, 3, 3, 3));
212    
213    // left vertical splitter
214    TGVSplitter *splitLeft = new TGVSplitter(fContLCR);
215    splitLeft->SetFrame(fContLeft, kTRUE);
216    fContLCR->AddFrame(splitLeft, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0));
217
218    // right container
219    fContRight = new TGCompositeFrame(fContLCR, 150, 200, kVerticalFrame | kFixedWidth | kFitHeight);
220    fContLCR->AddFrame(fContRight, new TGLayoutHints(kLHintsTop | kLHintsRight | kLHintsExpandY, 3, 5, 3, 3));
221    
222    // center container
223    fContCenter = new TGCompositeFrame(fContLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
224    fContLCR->AddFrame(fContCenter, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
225
226    // right vertical splitter
227    TGVSplitter *splitRight = new TGVSplitter(fContLCR);
228    splitRight->SetFrame(fContRight, kFALSE);
229    fContLCR->AddFrame(splitRight, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0));
230    
231    
232    // ========================================================================
233    // ************************* content of fContLeft *************************
234    // ========================================================================
235    // --- draw button and tabLeft ---
236    // draw button
237    fBtnDraw = new TGTextButton(fContLeft, "&Draw");
238    fContLeft->AddFrame(fBtnDraw, new TGLayoutHints(kLHintsExpandX, 10, 10, 0, 0));
239    //fBtnDraw->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoTest(=\"fBtnDraw clicked\")");
240    fBtnDraw->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoDraw()");
241    
242    // three tabs on the left side:
243    ftabLeft = new TGTab(fContLeft);
244    fContLeft->AddFrame(ftabLeft, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 8, 0));
245    ftabLeft0 = ftabLeft->AddTab("General");
246    ftabLeft1 = ftabLeft->AddTab("More plot options");
247
248    
249       // **************************** content of tabLeft0 *******************************
250       
251       // draw options container *** fcontDrawOpt ***  " Plot options "
252       fContDrawOpt = new TGGroupFrame(ftabLeft0, "Plot options", kVerticalFrame | kFitWidth | kFitHeight);
253       ftabLeft0->AddFrame(fContDrawOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
254       fContDrawOptSub1D2D = new TGCompositeFrame(fContDrawOpt, 200, 23, kHorizontalFrame | kFitWidth | kFixedHeight);
255       fContDrawOpt->AddFrame(fContDrawOptSub1D2D, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
256       
257          // ------------------------- content of fContDrawOpt -------------------------
258          // -- radio1D, radio2D, chkAuto
259          // 1D radio button
260          fRadio1D = new TGRadioButton(fContDrawOptSub1D2D, "1D", 30);
261          fContDrawOptSub1D2D->AddFrame(fRadio1D, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
262          fRadio1D->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral()");
263          
264          // 2D radio button
265          fRadio2D = new TGRadioButton(fContDrawOptSub1D2D, "2D", 31);
266          fContDrawOptSub1D2D->AddFrame(fRadio2D, new TGLayoutHints(kLHintsNormal, 2, 2, 0, 0));
267          fRadio2D->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral()");
268          
269          // additional draw options container
270          fContAddDrawOpt = new TGCompositeFrame(fContDrawOpt, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
271          fContDrawOpt->AddFrame(fContAddDrawOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
272
273             //  content of --- fContAddDrawOpt ---
274             // addition draw options label
275             fChkAddDrawOpt = new TGCheckButton(fContAddDrawOpt, "Draw options:");
276             //fChkAddDrawOpt->SetTextJustify(kTextLeft);
277             fContAddDrawOpt->AddFrame(fChkAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
278             fChkAddDrawOpt->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
279             
280             // additional draw options combo box
281             fComboAddDrawOpt = new TGComboBox(fContAddDrawOpt);
282             fComboAddDrawOpt->Resize(0, fBtnDraw->GetDefaultHeight());
283             fComboAddDrawOpt->EnableTextInput(kTRUE);
284             fContAddDrawOpt->AddFrame(fComboAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
285             fComboAddDrawOpt->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
286             fComboAddDrawOpt->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
287                   
288          // automatic redraw check button
289          fChkAuto = new TGCheckButton(fContDrawOpt, "auto redraw");
290          fContDrawOpt->AddFrame(fChkAuto, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
291                
292       
293       // *** predefined radio button ***  " Predefined "
294       fRadioPredefined = new TGRadioButton(ftabLeft0, "Predefined: ", 13);
295       ftabLeft0->AddFrame(fRadioPredefined, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
296       fRadioPredefined->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral()");
297       
298       // list of variables
299       fListVariables = new TGListBox(ftabLeft0);
300       ftabLeft0->AddFrame(fListVariables, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 10, 0, 0, 0));
301       fListVariables->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
302    
303       
304       // normalization options container *** fContPlotOpt ***
305       //fContPlotOpt = new TGCompositeFrame(fContLeft, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
306       fContPlotOpt = new TGGroupFrame(ftabLeft0, "Normalization options", kVerticalFrame | kFitWidth | kFitHeight);
307       ftabLeft0->AddFrame(fContPlotOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 0, 0, 0));
308
309          // ------------------------- content of fContPlotOpt -------------------------
310          // raw radio button
311          fRadioRaw = new TGRadioButton(fContPlotOpt, "Raw", 10);
312          fContPlotOpt->AddFrame(fRadioRaw, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
313          fRadioRaw->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral()");
314       
315          // normalized radio button
316          fRadioNormalized = new TGRadioButton(fContPlotOpt, "Normalized", 11);
317          fContPlotOpt->AddFrame(fRadioNormalized, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
318          fRadioNormalized->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral()");
319       
320          // normalized options container *** fContNormalized ***
321          fContNormalized = new TGCompositeFrame(fContPlotOpt, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
322          fContPlotOpt->AddFrame(fContNormalized, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 15, 0, 0, 0));
323       
324             // --- content of fContNormalized ---
325             // --- combo box to select 'subtract' or 'divide', list of normalization variables
326             // method drop down combo box
327             fComboMethod = new TGComboBox(fContNormalized);
328             fComboMethod->Resize(0, fBtnDraw->GetDefaultHeight());
329             fContNormalized->AddFrame(fComboMethod, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
330             fComboMethod->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
331          
332             // list of normalization variables
333             fListNormalization = new TGListBox(fContNormalized);
334             fContNormalized->AddFrame(fListNormalization, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
335             fListNormalization->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
336
337       // custom radio button
338       fRadioCustom = new TGRadioButton(ftabLeft0, "Custom: ", 12);
339       ftabLeft0->AddFrame(fRadioCustom, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
340       fRadioCustom->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral()");
341       
342       // custom options container
343       // --- fComboCustom --- the custom draw line
344       fContCustom = new TGCompositeFrame(fContTopBottom, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
345       fContTopBottom->AddFrame(fContCustom, new TGLayoutHints(kLHintsExpandX, 10, 0, 0, 0));
346    
347          // ------------------------- content of fContCustom -------------------------
348          // text field for custom draw command
349          fComboCustom = new TGComboBox(fContCustom);
350          fComboCustom->Resize(0, fBtnDraw->GetDefaultHeight());
351          fComboCustom->EnableTextInput(kTRUE);
352          fContCustom->AddFrame(fComboCustom, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
353          fComboCustom->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "HandleButtonsGeneral(=42)");
354          fComboCustom->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
355       
356
357       
358       // **************************** content of tabLeft1 *******************************
359       
360       // draw options container *** fcontDrawOpt1D ***  " Plot options "
361       fContDrawOpt1D = new TGGroupFrame(ftabLeft1, "1D Plot options", kVerticalFrame | kFitWidth | kFitHeight);
362       ftabLeft1->AddFrame(fContDrawOpt1D, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
363       
364       fcontDrawOpt1DSubLR = new TGCompositeFrame(fContDrawOpt1D, 1, 1, kVerticalFrame | kFitWidth | kFitHeight);
365       fContDrawOpt1D->AddFrame(fcontDrawOpt1DSubLR, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
366       
367          // ***** content of fContDrawOpt1DSubLR *****
368          fContDrawOpt1DSubNSC = new TGCompositeFrame(fcontDrawOpt1DSubLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
369          fcontDrawOpt1DSubLR->AddFrame(fContDrawOpt1DSubNSC, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
370          
371             // --------------------------- content of fContDrawOpt1DSubNSC -----------------
372             fRadioNorm = new TGRadioButton(fContDrawOpt1DSubNSC, "Normal", 110);
373             fContDrawOpt1DSubNSC->AddFrame(fRadioNorm, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
374             fRadioNorm->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtons1D()");
375                
376             fRadioSigma = new TGRadioButton(fContDrawOpt1DSubNSC, "Sigma", 111);
377             fContDrawOpt1DSubNSC->AddFrame(fRadioSigma, new TGLayoutHints(kLHintsNormal, 0, 0, 5, 0));
378             fRadioSigma->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtons1D()");
379
380             fTxtSigmas = new TGTextEntry(fContDrawOpt1DSubNSC, "2; 4; 6", 111);
381             fContDrawOpt1DSubNSC->AddFrame(fTxtSigmas, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 15, 0, 0));
382             fTxtSigmas->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "HandleButtons1D(=111)");
383                
384             fContCumuLR = new TGCompositeFrame(fContDrawOpt1DSubNSC, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
385             fContDrawOpt1DSubNSC->AddFrame(fContCumuLR, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 0));
386             
387                fContCumLeft = new TGCompositeFrame(fContCumuLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
388                fContCumuLR->AddFrame(fContCumLeft, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
389                            
390                   fRadioCumulative = new TGRadioButton(fContCumLeft, "Cumulative", 112);
391                   fContCumLeft->AddFrame(fRadioCumulative, new TGLayoutHints(kLHintsNormal, 0, 10, 0, 0));
392                   fRadioCumulative->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtons1D()");
393                   
394                   fCheckCumulativePM = new TGCheckButton(fContCumLeft, "Plus/Minus");
395                   fContCumLeft->AddFrame(fCheckCumulativePM, new TGLayoutHints(kLHintsNormal, 10, 15, 0, 0));
396                   fCheckCumulativePM->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtons1D()");
397                   
398                   fRadioIntegrate = new TGRadioButton(fContCumLeft, "Integrate", 113);
399                   fContCumLeft->AddFrame(fRadioIntegrate, new TGLayoutHints(kLHintsNormal, 0, 0, 5, 0));
400                   fRadioIntegrate->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtons1D()");
401                   
402                fContCumRight = new TGCompositeFrame(fContCumuLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
403                fContCumuLR->AddFrame(fContCumRight, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
404                
405                   fLblSigmaMax = new TGLabel(fContCumRight, "SigmaMax:");
406                   fLblSigmaMax->SetTextJustify(kTextLeft);
407                   fContCumRight->AddFrame(fLblSigmaMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
408
409                   fTxtSigmaMax = new TGTextEntry(fContCumRight, "5", 112);
410                   fContCumRight->AddFrame(fTxtSigmaMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 15, 0, 0));
411                   fTxtSigmaMax->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "HandleButtons1D(=112)");
412              
413             
414          fContDrawOpt1DSubMML = new TGCompositeFrame(fcontDrawOpt1DSubLR, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
415          fcontDrawOpt1DSubLR->AddFrame(fContDrawOpt1DSubMML, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 0));
416          
417             // -------------- content of fcontDrawOpt1DSubLR
418             fChkMean = new TGCheckButton(fContDrawOpt1DSubMML, "Mean");
419             fContDrawOpt1DSubMML->AddFrame(fChkMean, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
420             fChkMean->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtons1D()");
421
422             fChkMedian = new TGCheckButton(fContDrawOpt1DSubMML, "Median");
423             fContDrawOpt1DSubMML->AddFrame(fChkMedian, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
424             fChkMedian->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtons1D()");
425
426             fChkLTM = new TGCheckButton(fContDrawOpt1DSubMML, "LTM");
427             fContDrawOpt1DSubMML->AddFrame(fChkLTM, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
428             fChkLTM->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtons1D()");
429             
430       
431       // statistic options container *** fcontStatOpt1D ***  " Statistic options "      
432       fContStatOpt = new TGGroupFrame(ftabLeft1, "Statistic options", kVerticalFrame | kFitWidth | kFitHeight);
433       ftabLeft1->AddFrame(fContStatOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
434       
435          fChkStatName = new TGCheckButton(fContStatOpt, "Name");
436          fContStatOpt->AddFrame(fChkStatName, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
437          fChkStatName->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
438       
439          fChkStatEntries = new TGCheckButton(fContStatOpt, "Entries");
440          fContStatOpt->AddFrame(fChkStatEntries, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
441          fChkStatEntries->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
442       
443          fContStatMean = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
444          fContStatOpt->AddFrame(fContStatMean, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
445       
446             fChkStatMean = new TGCheckButton(fContStatMean, "Mean");
447             fContStatMean->AddFrame(fChkStatMean, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
448             fChkStatMean->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
449             
450             fChkStatMeanPM = new TGCheckButton(fContStatMean, "+- Error");
451             fContStatMean->AddFrame(fChkStatMeanPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
452             fChkStatMeanPM->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
453
454          fContStatRMS = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
455          fContStatOpt->AddFrame(fContStatRMS, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
456       
457             fChkStatRMS = new TGCheckButton(fContStatRMS, "RMS");
458             fContStatRMS->AddFrame(fChkStatRMS, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
459             fChkStatRMS->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
460             
461             fChkStatRMSPM = new TGCheckButton(fContStatRMS, "+- Error");
462             fContStatRMS->AddFrame(fChkStatRMSPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
463             fChkStatRMSPM->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
464
465          fChkStatUnderflow = new TGCheckButton(fContStatOpt, "Underflow");
466          fContStatOpt->AddFrame(fChkStatUnderflow, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
467          fChkStatUnderflow->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
468       
469          fChkStatOverflow = new TGCheckButton(fContStatOpt, "Overflow");
470          fContStatOpt->AddFrame(fChkStatOverflow, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
471          fChkStatOverflow->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
472       
473          fChkStatIntegral = new TGCheckButton(fContStatOpt, "Integral");
474          fContStatOpt->AddFrame(fChkStatIntegral, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
475          fChkStatIntegral->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
476       
477          fContStatSkew = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
478          fContStatOpt->AddFrame(fContStatSkew, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
479       
480             fChkStatSkewness = new TGCheckButton(fContStatSkew, "Skewness");
481             fContStatSkew->AddFrame(fChkStatSkewness, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
482             fChkStatSkewness->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
483             
484             fChkStatSkewnessPM = new TGCheckButton(fContStatSkew, "+- Error");
485             fContStatSkew->AddFrame(fChkStatSkewnessPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
486             fChkStatSkewnessPM->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
487
488          fContStatKurt = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
489          fContStatOpt->AddFrame(fContStatKurt, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
490       
491             fChkStatKurtosis = new TGCheckButton(fContStatKurt, "Kurtosis");
492             fContStatKurt->AddFrame(fChkStatKurtosis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
493             fChkStatKurtosis->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
494             
495             fChkStatKurtosisPM = new TGCheckButton(fContStatKurt, "+- Error");
496             fContStatKurt->AddFrame(fChkStatKurtosisPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
497             fChkStatKurtosisPM->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsStat()");
498
499
500          
501          
502
503    // ==========================================================================
504    // ************************* content of fContCenter *************************
505    // ========================================================================
506    // main drawing canvas
507    fCanvMain = new TRootEmbeddedCanvas("Main Canvas", fContCenter, 200, 200, kFitWidth | kFitHeight);
508    fContCenter->AddFrame(fCanvMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
509       
510    
511    
512    
513    // =========================================================================   
514    // ************************* content of fContRight *************************
515    // ========================================================================
516    // cut options container
517    //fContCuts = new TGCompositeFrame(fContRight, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
518    fContCuts = new TGGroupFrame(fContRight, "Cuts", kVerticalFrame | kFitWidth | kFitHeight);
519    fContRight->AddFrame(fContCuts, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
520
521    
522       // ************************* content of fContCuts *************************
523       // TPC radio button
524       fRadioTPC = new TGRadioButton(fContCuts, "whole TPC", 20);
525       fContCuts->AddFrame(fRadioTPC, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
526       fRadioTPC->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsRight()");
527    
528       // side A radio button
529       fRadioSideA = new TGRadioButton(fContCuts, "side A", 21);
530       fContCuts->AddFrame(fRadioSideA, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
531       fRadioSideA->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsRight()");
532    
533       // side C radio button
534       fRadioSideC = new TGRadioButton(fContCuts, "side C", 22);
535       fContCuts->AddFrame(fRadioSideC, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
536       fRadioSideC->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsRight()");
537    
538       // sector radio button
539       fRadioSector = new TGRadioButton(fContCuts, "sector", 23);
540       fContCuts->AddFrame(fRadioSector, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
541       fRadioSector->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsRight()");
542    
543       // sector options container
544       fContSector = new TGCompositeFrame(fContCuts, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
545       fContCuts->AddFrame(fContSector, new TGLayoutHints(kLHintsExpandX, 5, 0, 0, 0));
546       
547          // ------------------------- content of fContSector -------------------------
548          // sector number entry
549          fNmbSector = new TGNumberEntry(fContSector, 0, 1, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative, TGNumberFormat::kNELLimitMinMax, 0, 71);
550          fContSector->AddFrame(fNmbSector, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
551          fNmbSector->Connect("ValueSet(Long_t)", "AliTPCCalibViewerGUI", this, "ChangeSector()");
552          
553          // sector number label
554          fLblSector = new TGLabel(fContSector, "IROC, A");
555          fLblSector->SetTextJustify(kTextLeft);
556          fContSector->AddFrame(fLblSector, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
557       
558       // additional cuts check button
559       fChkCutZero = new TGCheckButton(fContCuts, "Cut zeros");
560       fContCuts->AddFrame(fChkCutZero, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
561       fChkCutZero->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
562    
563       // additional cuts check button
564       fChkAddCuts = new TGCheckButton(fContCuts, "additional cuts");
565       fContCuts->AddFrame(fChkAddCuts, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
566       fChkAddCuts->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
567    
568       // additional cuts container
569       fContAddCuts = new TGCompositeFrame(fContCuts, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
570       fContCuts->AddFrame(fContAddCuts, new TGLayoutHints(kLHintsExpandX, -5, -5, 0, 0));
571       
572          // ------------------------- content of fContAddCuts -------------------------
573          // combo text field for additional cuts
574          fComboAddCuts = new TGComboBox(fContAddCuts);
575          fComboAddCuts->Resize(0, fBtnDraw->GetDefaultHeight());
576          fComboAddCuts->EnableTextInput(kTRUE);
577          fContAddCuts->AddFrame(fComboAddCuts, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
578          fComboAddCuts->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
579          fComboAddCuts->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
580    
581    
582    // Scaling options container
583    fContScaling = new TGGroupFrame(fContRight, "Scaling", kVerticalFrame | kFitWidth | kFitHeight);
584    fContRight->AddFrame(fContScaling, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
585
586       // ************************* content of fContScaling *************************
587       // SetMaximum container
588       fContSetMax = new TGCompositeFrame(fContScaling, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
589       fContScaling->AddFrame(fContSetMax, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
590       
591          // ------------------------- content of fContSetMax -------------------------
592          // SetMaximum - checkbox
593          fChkSetMax = new TGCheckButton(fContSetMax, "Set fixed max.");
594          fContSetMax->AddFrame(fChkSetMax, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
595          fChkSetMax->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "HandleButtonsRight()");
596          
597          // text field for maximum value
598          fTxtSetMax = new TGTextEntry(fContSetMax, "", 41);
599          fContSetMax->AddFrame(fTxtSetMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
600          fTxtSetMax->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "HandleButtonsRight()");
601    
602       // SetMinimum container
603       fContSetMin = new TGCompositeFrame(fContScaling, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
604       fContScaling->AddFrame(fContSetMin, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
605       
606          // ------------------------- content of fContSetMin -------------------------
607          // SetMinimum - checkbox
608          fChkSetMin = new TGCheckButton(fContSetMin, "Set fixed min.");
609          fContSetMin->AddFrame(fChkSetMin, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
610          fChkSetMin->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
611          
612          // text field for minimum value
613          fTxtSetMin = new TGTextEntry(fContSetMin, "", 40);
614          fContSetMin->AddFrame(fTxtSetMin, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
615          fTxtSetMin->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "HandleButtonsRight()");
616       
617       // get Min & Max from Plot - button
618       fBtnGetMinMax = new TGTextButton(fContScaling, "&Get scale from plot");
619       fContScaling->AddFrame(fBtnGetMinMax, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
620       fBtnGetMinMax->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "GetMinMax()");
621       
622       // GetMinMaxAuto - checkbox
623       fChkGetMinMaxAuto = new TGCheckButton(fContScaling, "Get Min + Max auto.");
624       fContScaling->AddFrame(fChkGetMinMaxAuto, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
625       fChkGetMinMaxAuto->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoNewSelection()");
626
627       
628    // Fit options container
629    fContFit = new TGGroupFrame(fContRight, "Custom Fit", kVerticalFrame | kFitWidth | kFitHeight);
630    fContRight->AddFrame(fContFit, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
631
632       // ------------------------- content of fContFit -------------------------
633       // container for additional fits
634       fContAddFit = new TGCompositeFrame(fContFit, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
635       fContFit->AddFrame(fContAddFit, new TGLayoutHints(kLHintsExpandX, -5, -5, 0, 0));
636    
637          // --- content of fContAddFit ---
638          // text field for custom fit
639          fComboCustomFit = new TGComboBox(fContAddFit);
640          fComboCustomFit->Resize(0, fBtnDraw->GetDefaultHeight());
641          fComboCustomFit->EnableTextInput(kTRUE);
642          fContAddFit->AddFrame(fComboCustomFit, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
643          fComboCustomFit->Connect("ReturnPressed()", "AliTPCCalibViewerGUI", this, "DoFit()");
644          fComboCustomFit->Connect("Selected(Int_t)", "AliTPCCalibViewerGUI", this, "DoFit()");
645       
646       // fit button
647       fBtnFit = new TGTextButton(fContAddFit, "&Fit");
648       fContAddFit->AddFrame(fBtnFit, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
649       fBtnFit->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoFit()");
650    
651       // add fit function button
652       //fBtnAddFitFunction = new TGTextButton(fContAddFit, "&Add fit function to normalization");
653       //fContAddFit->AddFrame(fBtnAddFitFunction, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
654       //fBtnAddFitFunction->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "AddFitFunction()");
655          
656    // set default button states
657    fRadioPredefined->SetState(kButtonDown);
658    fRadioRaw->SetState(kButtonDown);
659    fRadioTPC->SetState(kButtonDown);
660    fRadio1D->SetState(kButtonDown);
661    fChkAuto->SetState(kButtonDown);
662    fChkAddCuts->SetState(kButtonUp);
663    fChkGetMinMaxAuto->SetState(kButtonDown);
664    fChkSetMin->SetState(kButtonUp);
665    fChkSetMax->SetState(kButtonUp);
666    fRadioNorm->SetState(kButtonDown);
667    fRadioSigma->SetState(kButtonUp);
668    fRadioCumulative->SetState(kButtonUp);
669    fChkMean->SetState(kButtonDown);
670    fCheckCumulativePM->SetState(kButtonUp);
671    
672    fChkStatName->SetState(kButtonDown);
673    fChkStatEntries->SetState(kButtonDown);
674    fChkStatMean->SetState(kButtonDown);
675    fChkStatRMS->SetState(kButtonDown);
676 //    fChkStatMeanPM->SetState(kButtonUp);
677 //    fChkStatRMSPM->SetState(kButtonUp);
678 //    fChkStatUnderflow->SetState(kButtonUp);
679 //    fChkStatOverflow->SetState(kButtonUp);
680 //    fChkStatIntegral->SetState(kButtonUp);
681 //    fChkStatSkewness->SetState(kButtonUp);
682 //    fChkStatSkewnessPM->SetState(kButtonUp);
683 //    fChkStatKurtosis->SetState(kButtonUp);
684 //    fChkStatKurtosisPM->SetState(kButtonUp);
685       
686    // ======================================================================   
687    // ************************* Display everything *************************
688    // ======================================================================
689
690    if (fileName) Initialize(fileName);
691    SetWindowName("AliTPCCalibViewer GUI");
692    MapSubwindows();
693    Resize(GetDefaultSize());
694    MapWindow();
695 }
696
697 AliTPCCalibViewerGUI::AliTPCCalibViewerGUI(const AliTPCCalibViewerGUI &c)
698    : TGCompositeFrame(c.fParent, c.fWidth, c.fHeight),
699     fViewer(0),
700     fContTopBottom(0),
701     fContLCR(0),
702     fContLeft(0),
703     ftabLeft(0),
704     ftabLeft0(0),
705     ftabLeft1(0),
706     fContRight(0),
707     fContCenter(0),
708     fContPlotOpt(0),
709     fContDrawOpt(0),
710     fContDrawOptSub1D2D(0),
711     fContNormalized(0),
712     fContCustom(0),
713     fContCuts(0),
714     fContSector(0),
715     fContAddCuts(0),
716     fContFit(0),
717     fContAddFit(0),
718     fContScaling(0),
719     fContSetMax(0),
720     fContSetMin(0),
721     fContAddDrawOpt(0),
722     fListVariables(0),
723     fBtnDraw(0),
724     fBtnFit(0),
725     fBtnAddFitFunction(0),
726     fBtnGetMinMax(0),
727     fCanvMain(0),
728     fRadioRaw(0),
729     fRadioNormalized(0),
730     fRadioPredefined(0),
731     fRadioCustom(0),
732     fRadio1D(0),
733     fRadio2D(0),
734     fRadioTPC(0),
735     fRadioSideA(0),
736     fRadioSideC(0),
737     fRadioSector(0),
738     fComboAddDrawOpt(0),
739     fChkAuto(0),
740     fComboMethod(0),
741     fListNormalization(0),
742     fComboCustom(0),
743     fChkAddDrawOpt(0),
744     fNmbSector(0),
745     fLblSector(0),
746     fChkCutZero(0),
747     fChkAddCuts(0),
748     fComboAddCuts(0), 
749     fComboCustomFit(0),
750     fChkSetMax(0),
751     fChkSetMin(0),
752     fChkGetMinMaxAuto(0),
753     fTxtSetMax(0),
754     fTxtSetMin(0), 
755     fContDrawOpt1D(0),
756     fcontDrawOpt1DSubLR(0),
757     fContDrawOpt1DSubNSC(0), 
758     fRadioNorm(0),
759     fRadioSigma(0),
760     fTxtSigmas(0),
761     fContCumuLR(0),
762     fContCumLeft(0),
763     fContCumRight(0),
764     fLblSigmaMax(0),
765     fTxtSigmaMax(0),
766     fRadioCumulative(0),
767     fCheckCumulativePM(0),
768     fRadioIntegrate(0),
769     fContDrawOpt1DSubMML(0),
770     fChkMean(0),
771     fChkMedian(0),
772     fChkLTM(0), 
773     fContStatOpt(0),
774     fChkStatName(0),
775     fChkStatEntries(0),
776     fContStatMean(0),
777     fChkStatMean(0),
778     fChkStatMeanPM(0),
779     fContStatRMS(0),
780     fChkStatRMS(0),
781     fChkStatRMSPM(0),
782     fChkStatUnderflow(0),
783     fChkStatOverflow(0),
784     fChkStatIntegral(0),
785     fContStatSkew(0),
786     fChkStatSkewness(0),
787     fChkStatSkewnessPM(0),
788     fContStatKurt(0),
789     fChkStatKurtosis(0),
790     fChkStatKurtosisPM(0)
791 {
792   //
793   // dummy AliTPCCalibViewerGUI copy constructor
794   //
795 }
796
797 AliTPCCalibViewerGUI & AliTPCCalibViewerGUI::operator =(const AliTPCCalibViewerGUI & param) {
798    //
799    // dummy assignment operator
800    //
801    return (*this);
802 }
803
804 AliTPCCalibViewerGUI::~AliTPCCalibViewerGUI() {
805    // 
806    // Destructor
807    // 
808    if (fCanvMain && fCanvMain->GetCanvas()) {
809       for (Int_t i = 0; i < fCanvMain->GetCanvas()->GetListOfPrimitives()->GetEntries(); i++) {
810          if (strcmp(fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->ClassName(), "TFrame") != 0)
811             fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->Delete();
812       }
813    }
814    Cleanup();
815    if (fViewer) fViewer->Delete();
816 }
817
818 /*
819 void AliTPCCalibViewerGUI::CloseWindow() {
820    DeleteWindow();
821 }
822 */
823
824 void AliTPCCalibViewerGUI::Initialize(char* fileName) {
825    //
826    // initializes the GUI with default settings and opens tree for drawing
827    //
828    
829    // create AliTPCCalibViewer object, which will be used for generating all drawings
830    if (fViewer) delete fViewer;
831    fViewer = new AliTPCCalibViewer(fileName);
832
833    // fill fListVariables
834    TObjArray* arr = fViewer->GetListOfVariables();
835    TIterator* iter = arr->MakeIterator();
836    iter->Reset();
837    TObjString* currentStr = 0;
838    Int_t id = 0;
839    while ((currentStr = (TObjString*)(iter->Next()))) {
840       fListVariables->AddEntry(currentStr->GetString().Data(), id);
841       id++;
842    }
843    delete iter;
844    arr->Delete();
845    delete arr;
846
847    // fill fComboMethod
848    fComboMethod->AddEntry("subtract", 0);
849    fComboMethod->AddEntry("divide by", 1);
850
851    // fill fListNorm
852    arr = fViewer->GetListOfNormalizationVariables();
853    iter = arr->MakeIterator();
854    iter->Reset();
855    currentStr = 0;
856    id = 0;
857    while ((currentStr = (TObjString*)(iter->Next()))) {
858       fListNormalization->AddEntry(currentStr->GetString().Data(), id);
859       id++;
860    }
861    delete iter;
862    arr->Delete();
863    delete arr;
864
865    // fill fComboAddDrawOpt with some additional drawing options
866    fComboAddDrawOpt->AddEntry("profbox", 0);
867    fComboAddDrawOpt->AddEntry("profcolz", 1);
868    fComboAddDrawOpt->AddEntry("profcont0", 2);
869    fComboAddDrawOpt->AddEntry("proflego", 3);
870    fComboAddDrawOpt->AddEntry("proflego2", 4);
871    fComboAddDrawOpt->AddEntry("profsurf", 5);
872    fComboAddDrawOpt->AddEntry("profsurf1", 6);
873    fComboAddDrawOpt->AddEntry("profsurf2", 7);
874    fComboAddDrawOpt->AddEntry("box", 8);
875    fComboAddDrawOpt->AddEntry("colz", 9);
876    fComboAddDrawOpt->AddEntry("cont0", 10);
877    fComboAddDrawOpt->AddEntry("lego", 11);
878    fComboAddDrawOpt->AddEntry("lego2", 12);
879    fComboAddDrawOpt->AddEntry("surf", 13);
880    fComboAddDrawOpt->AddEntry("surf1", 14);
881    fComboAddDrawOpt->AddEntry("surf2", 15);
882
883
884    fListVariables->Select(0);
885    fListNormalization->Select(0);
886    fComboMethod->Select(0);
887
888    //fCanvMain->GetCanvas()->ToggleEventStatus(); // klappt nicht
889    //fCanvMain->GetCanvas()->GetCanvasImp()->ShowStatusBar(kTRUE); // klappt auch nicht
890    fListVariables->IntegralHeight(kFALSE);         // naja
891    fListNormalization->IntegralHeight(kFALSE);     // naja
892    DoDraw();
893 }
894
895
896
897 void AliTPCCalibViewerGUI::HandleButtonsGeneral(Int_t id) {
898    //
899    // handles mutual radio button exclusions
900    // for general Tab
901    //
902    if (id == -1) {
903       TGButton *btn = (TGButton *) gTQSender;
904       id = btn->WidgetId();
905    }
906
907    switch (id) {
908       case 10:             // fRadioRaw
909          fRadioNormalized->SetState(kButtonUp);
910          fRadioPredefined->SetState(kButtonDown);
911          fRadioCustom->SetState(kButtonUp);
912          // fComboMethod->UnmapWindow();
913          // fListNormalization->UnmapWindow();
914          break;
915       case 11:             // fRadioNormalized
916          fRadioRaw->SetState(kButtonUp);
917          fRadioPredefined->SetState(kButtonDown);
918          fRadioCustom->SetState(kButtonUp);
919          break;
920       case 12:             // fRadioCustom
921          fRadioPredefined->SetState(kButtonUp);
922          // fComboCustom->SetEnabled(kFALSE);
923          // fRadioNormalized->SetState(kButtonUp);
924          break;
925       case 42:             // fComboCustom
926          fRadioCustom->SetState(kButtonDown);
927          fRadioPredefined->SetState(kButtonUp);
928          break;
929       case 13:             // fRadioPredefined
930          fRadioCustom->SetState(kButtonUp);
931          // fComboCustom->SetEnabled(kTRUE);
932          //f RadioNormalized->SetState(kButtonUp);
933          break;
934       //--------
935       case 30:             // fRadio1D
936          fRadio2D->SetState(kButtonUp);
937          break;
938       case 31:             // fRadio2D
939          fRadio1D->SetState(kButtonUp);
940          break;
941    }
942    DoNewSelection();
943 }
944
945
946 void AliTPCCalibViewerGUI::HandleButtons1D(Int_t id) {
947    //
948    // handles mutual radio button exclusions
949    // 1D-Tab buttons
950    //
951    
952    if (id == -1) {
953       TGButton *btn = (TGButton *) gTQSender;
954       id = btn->WidgetId();
955    }
956    switch (id) {
957       case 110:            // 1D draw normal
958          fRadioNorm->SetState(kButtonDown);
959          fRadioSigma->SetState(kButtonUp);
960          fRadioCumulative->SetState(kButtonUp);
961          fRadioIntegrate->SetState(kButtonUp);
962          break;
963       case 111:            // 1D draw sigma
964          fRadioNorm->SetState(kButtonUp);
965          fRadioSigma->SetState(kButtonDown);
966          fRadioCumulative->SetState(kButtonUp);
967          fRadioIntegrate->SetState(kButtonUp);
968          break;
969       case 112:            // 1D draw cumulative
970          fRadioNorm->SetState(kButtonUp);
971          fRadioSigma->SetState(kButtonUp);
972          fRadioCumulative->SetState(kButtonDown);
973          fRadioIntegrate->SetState(kButtonUp);
974          break;
975       case 113:            // 1D draw integral
976          fRadioNorm->SetState(kButtonUp);
977          fRadioSigma->SetState(kButtonUp);
978          fRadioCumulative->SetState(kButtonUp);
979          fRadioIntegrate->SetState(kButtonDown);
980          break;
981    }
982    DoNewSelection();
983 }
984
985
986 void AliTPCCalibViewerGUI::HandleButtons2D(Int_t id) {
987    //
988    // handles mutual radio button exclusions
989    // 2D-Tab buttons
990    //
991    if (id == -1) {
992       TGButton *btn = (TGButton *) gTQSender;
993       id = btn->WidgetId();
994    }
995
996    switch (id) {
997       case 211:
998       break;
999    }
1000    DoNewSelection();
1001 }
1002
1003
1004 void AliTPCCalibViewerGUI::HandleButtonsStat(Int_t id) {
1005    // 
1006    // handles statistic check boxes 
1007    // checks each checkbox if checked
1008    // if the checkbox is checked, appends 'n' for name, 'e' for entries, ...
1009    // to a TString, passes this TString to gStyle->SetOptStat(...)
1010    // 
1011    id = id; // to avoid compiler warnings 
1012    TString statOpt("");
1013    if (fChkStatName->GetState() == kButtonDown) statOpt.Append("n");
1014    if (fChkStatEntries->GetState() == kButtonDown) statOpt.Append("e");
1015    if (fChkStatMean->GetState() == kButtonDown && fChkStatMeanPM->GetState() == kButtonUp) statOpt.Append("m");
1016    if (fChkStatMeanPM->GetState() == kButtonDown) statOpt.Append("M");
1017    if (fChkStatRMS->GetState() == kButtonDown && fChkStatRMSPM->GetState() == kButtonUp) statOpt.Append("r");
1018    if (fChkStatRMSPM->GetState() == kButtonDown) statOpt.Append("R");
1019    if (fChkStatUnderflow->GetState() == kButtonDown) statOpt.Append("u");
1020    if (fChkStatOverflow->GetState() == kButtonDown) statOpt.Append("o");
1021    if (fChkStatIntegral->GetState() == kButtonDown) statOpt.Append("i");
1022    if (fChkStatSkewness->GetState() == kButtonDown && fChkStatSkewnessPM->GetState() == kButtonUp) statOpt.Append("s");
1023    if (fChkStatSkewnessPM->GetState() == kButtonDown) statOpt.Append("S");
1024    if (fChkStatKurtosis->GetState() == kButtonDown && fChkStatKurtosisPM->GetState() == kButtonUp) statOpt.Append("k");
1025    if (fChkStatKurtosisPM->GetState() == kButtonDown) statOpt.Append("K");
1026
1027    gStyle->SetOptStat(statOpt);
1028    DoNewSelection();
1029 }
1030
1031
1032 void AliTPCCalibViewerGUI::HandleButtonsRight(Int_t id) {
1033    //
1034    // handles mutual radio button exclusions
1035    // right side buttons
1036    //
1037     if (id == -1) {
1038       TGButton *btn = (TGButton *) gTQSender;
1039       id = btn->WidgetId();
1040    }
1041
1042    switch (id) {
1043       case 20:             // fRadioTPC
1044          fRadioSideA->SetState(kButtonUp);
1045          fRadioSideC->SetState(kButtonUp);
1046          fRadioSector->SetState(kButtonUp);
1047          break;
1048       case 21:             // fRadioSideA
1049          fRadioTPC->SetState(kButtonUp);
1050          fRadioSideC->SetState(kButtonUp);
1051          fRadioSector->SetState(kButtonUp);
1052          break;
1053       case 22:             // fRadioSideC
1054          fRadioTPC->SetState(kButtonUp);
1055          fRadioSideA->SetState(kButtonUp);
1056          fRadioSector->SetState(kButtonUp);
1057          break;
1058       case 23:             // fRadioSector
1059          fRadioTPC->SetState(kButtonUp);
1060          fRadioSideA->SetState(kButtonUp);
1061          fRadioSideC->SetState(kButtonUp);
1062          break;
1063       case 40:             // fTxtSetMin
1064          fChkSetMin->SetState(kButtonDown);
1065          break;
1066       case 41:             // fTxtSetMax
1067          fChkSetMax->SetState(kButtonDown);
1068          break;
1069    }
1070    DoNewSelection();
1071 }
1072
1073
1074
1075 void AliTPCCalibViewerGUI::DoNewSelection() {
1076    //
1077    // decides whether to redraw if user makes another selection
1078    //
1079    
1080    if (fChkAuto->GetState() == kButtonDown) DoDraw();
1081 }
1082
1083
1084 void AliTPCCalibViewerGUI::DoDraw() {
1085    //
1086    // main method for drawing according to user selection
1087    //
1088    
1089    // specify data to plot
1090    TString desiredData("");
1091    if (!fListVariables->GetSelectedEntry()) return;
1092    desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
1093    desiredData += "~";
1094
1095    // specify normalization
1096    if (fRadioPredefined->GetState() == kButtonDown && fRadioNormalized->GetState() == kButtonDown) {
1097       TString op("");
1098       switch (fComboMethod->GetSelected()) {
1099          case 0:        // subtraction
1100             op += "-";
1101             break;
1102          case 1:        // division
1103             op += "/";
1104             break;
1105       }
1106       TString normalizationData("");
1107       if (!fListNormalization->GetSelectedEntry()) return;
1108       normalizationData += ((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle();
1109       
1110       if ( normalizationData.BeginsWith("Fit")) {
1111          // create fit formula, evaluate it an replace normalizationData-String
1112          // ********** create cut string **********
1113          TString cutStr("");
1114          if (fRadioTPC->GetState() == kButtonDown)
1115             cutStr += ""; // whole TPC is used for fitting
1116          if (fRadioSideA->GetState() == kButtonDown)
1117             cutStr += "(sector/18)%2==0"; // side A
1118          if (fRadioSideC->GetState() == kButtonDown)
1119             cutStr+= "(sector/18)%2==1"; // side C
1120          if (fRadioSector->GetState() == kButtonDown) {
1121             Int_t sector = (Int_t)(fNmbSector->GetNumber());
1122             cutStr += "sector==";
1123             cutStr += sector; 
1124          }
1125          if (fChkAddCuts->GetState() == kButtonDown && strcmp(fComboAddCuts->GetTextEntry()->GetText(), "") != 0){
1126             if (fRadioTPC->GetState() != kButtonDown) cutStr += " && ";
1127             cutStr += fComboAddCuts->GetTextEntry()->GetText();  
1128          }
1129          Double_t chi2 = 0;
1130          TVectorD fitParam(0);
1131          TMatrixD covMatrix(0,0);
1132          TString formulaStr("");
1133          if (normalizationData.CompareTo("FitLinLocal") == 0)
1134             formulaStr = "lx~ ++ ly~";
1135          if (normalizationData.CompareTo("FitLinGlobal") == 0) 
1136             formulaStr = "gx~ ++ gy~";
1137          if (normalizationData.CompareTo("FitParLocal") == 0)
1138             formulaStr = "lx~ ++ ly~ ++ lx~^2 ++ ly~^2 ++ lx~*ly~";
1139          if (normalizationData.CompareTo("FitParGlobal") == 0)
1140             formulaStr = "gx~ ++ gy~ ++ gx~^2 ++ gy~^2 ++ gx~*gy~";
1141          normalizationData = *fViewer->Fit(desiredData.Data(), formulaStr.Data(), cutStr.Data(), chi2, fitParam, covMatrix);
1142       }
1143
1144       desiredData += op;
1145       if (! (TString(((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle())).BeginsWith("Fit"))
1146          desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
1147       desiredData += normalizationData;
1148    }
1149    else if (fRadioCustom->GetState() == kButtonDown) {
1150       desiredData = fComboCustom->GetTextEntry()->GetText();
1151       if (desiredData == "") return;
1152    }
1153
1154    // specify cuts
1155    TString sectorStr("");
1156    if (fRadioTPC->GetState() == kButtonDown)
1157       sectorStr += "ALL";
1158    if (fRadioSideA->GetState() == kButtonDown)
1159       sectorStr += "A"; //cuts += "(sector/18)%2==0";
1160    if (fRadioSideC->GetState() == kButtonDown)
1161       sectorStr+= "C"; //cuts += "(sector/18)%2==1";
1162    if (fRadioSector->GetState() == kButtonDown) {
1163       Int_t sector = (Int_t)(fNmbSector->GetNumber());
1164       sectorStr += sector; //cuts += "sector==";
1165    }
1166    TString cutsStr("");
1167    
1168          
1169    if (fChkCutZero->GetState() == kButtonDown) {
1170       cutsStr += desiredData.Data();
1171       cutsStr += "!=0";
1172       if (fChkAddCuts->GetState() == kButtonDown) cutsStr += " && ";
1173    }
1174    if (fChkAddCuts->GetState() == kButtonDown)
1175       cutsStr += fComboAddCuts->GetTextEntry()->GetText();
1176
1177    TString addDrawOpt("");
1178    if (fChkAddDrawOpt->GetState() == kButtonDown)
1179       addDrawOpt += fComboAddDrawOpt->GetTextEntry()->GetText();
1180    
1181    // draw finally
1182    for (Int_t i = 0; i < fCanvMain->GetCanvas()->GetListOfPrimitives()->GetEntries(); i++) {
1183       if (strcmp(fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->ClassName(), "TFrame") != 0)
1184          fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->Delete();
1185    }
1186    //fCanvMain->GetCanvas()->Clear();
1187    fCanvMain->GetCanvas()->cd();
1188    Int_t entries = -1;
1189    if (fRadio1D->GetState() == kButtonDown){
1190       // 1D-Drawing
1191       TString strSigmaMax(fTxtSigmaMax->GetText());  // get sigmaMax from text enty
1192       Double_t sigmaMax = (strSigmaMax.IsFloat()) ? strSigmaMax.Atof() : 5; // convert to double, if not convertable, set to 5
1193       Bool_t plotMean   = fChkMean->GetState() == kButtonDown;
1194       Bool_t plotMedian = fChkMedian->GetState() == kButtonDown;
1195       Bool_t plotLTM    = fChkLTM->GetState() == kButtonDown;
1196       if (fRadioNorm->GetState() == kButtonDown)  // normal 1D drawing
1197          entries = fViewer->EasyDraw1D(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), addDrawOpt.Data());
1198       if (fRadioSigma->GetState() == kButtonDown) // sigma 1D drawing
1199          entries = fViewer->DrawHisto1D(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), // 
1200             fTxtSigmas->GetText(), plotMean, plotMedian, plotLTM);
1201       if (fRadioCumulative->GetState() == kButtonDown)  // cumulative 1D drawing
1202          entries = fViewer->SigmaCut(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), //
1203             sigmaMax, plotMean, plotMedian, plotLTM, // 
1204             fCheckCumulativePM->GetState() == kButtonDown, fTxtSigmas->GetText(), /* Float_t sigmaStep =*/ -1);
1205       if (fRadioIntegrate->GetState() == kButtonDown)  // integral 1D drawing  
1206          entries = fViewer->Integrate(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), //
1207             sigmaMax, plotMean, plotMedian, plotLTM, // 
1208             fTxtSigmas->GetText(), /* Float_t sigmaStep =*/ -1);            
1209    }
1210    else if (fRadio2D->GetState() == kButtonDown) {
1211       // 2D-Drawing
1212       entries = fViewer->EasyDraw(desiredData.Data(), sectorStr.Data(), cutsStr.Data(), addDrawOpt.Data());
1213    }
1214    if (entries == -1) return; // nothing was drawn, there is no histogram to get min and max
1215    
1216    
1217    // get or set Min & Max 
1218    // 
1219    // search for histogram
1220    TList* listOfPrimitives = fCanvMain->GetCanvas()->GetListOfPrimitives();
1221    TObject* ptr = 0;
1222    for (Int_t i = 0; i < listOfPrimitives->GetEntries(); i++) {
1223       ptr = listOfPrimitives->At(i);
1224       if ( ptr->InheritsFrom("TH1") ) break;
1225    }
1226    if ( ptr == 0 || !ptr->InheritsFrom("TH1") ) {  // if the loop did not find a TH1
1227       fCanvMain->GetCanvas()->Update();
1228       return;
1229       // unable to find histogram, no min and max wil be read out
1230    }
1231    TH1 *hist = (TH1*)ptr; 
1232    TString minTxt(fTxtSetMin->GetText());
1233    TString maxTxt(fTxtSetMax->GetText());
1234    // set min and max according to specified values, if checkbox is checked
1235    if (fChkSetMax->GetState() == kButtonDown && (maxTxt.IsDigit() || maxTxt.IsFloat()) )
1236       hist->SetMaximum(maxTxt.Atof());
1237    if (fChkSetMin->GetState() == kButtonDown && (minTxt.IsDigit() || minTxt.IsFloat()) )
1238       hist->SetMinimum(minTxt.Atof());
1239    // get min and max from plot       
1240    if (fChkGetMinMaxAuto->GetState() == kButtonDown) {
1241       if (fChkSetMax->GetState() == kButtonUp)
1242          fTxtSetMax->SetText(Form("%f", hist->GetMaximum()));
1243       if (fChkSetMin->GetState() == kButtonUp)
1244          fTxtSetMin->SetText(Form("%f", hist->GetMinimum()));
1245    }
1246    
1247    fCanvMain->GetCanvas()->Update();
1248 }
1249
1250
1251 void AliTPCCalibViewerGUI::DoFit() {
1252    //
1253    // main method for fitting
1254    //
1255    
1256    Double_t chi2 = 0;
1257    TVectorD fitParam(0);
1258    TMatrixD covMatrix(0,0);
1259    TString drawStr("");
1260    TString cutStr("");
1261    TString formulaStr("");
1262    TString *returnStr = new TString("");
1263
1264    
1265    // ******** create draw string *********
1266    if (fRadioCustom->GetState() == kButtonDown) {
1267    // take custom text as draw string
1268       drawStr = fComboCustom->GetTextEntry()->GetText();
1269       if (drawStr == "") return;
1270    }
1271    else if (fRadioPredefined->GetState() == kButtonDown) {
1272    // create drawStr out of selection
1273       drawStr += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
1274       drawStr += ".fElements";
1275       if (fRadioNormalized->GetState() == kButtonDown) {
1276       // normalize data by selection
1277          TString op("");
1278          switch (fComboMethod->GetSelected()) {
1279             case 0:        // subtraction
1280                op += "-";
1281                break;
1282             case 1:        // division
1283                op += "/";
1284                break;
1285          }
1286          TString normalizationData("");
1287          normalizationData += ((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle();
1288          drawStr += op;
1289          drawStr += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
1290          drawStr += normalizationData;
1291       }
1292    }
1293
1294    // ********** create cut string **********
1295    if (fRadioTPC->GetState() == kButtonDown)
1296       cutStr += ""; // whole TPC is used for fitting
1297    if (fRadioSideA->GetState() == kButtonDown)
1298       cutStr += "(sector/18)%2==0"; // side A
1299    if (fRadioSideC->GetState() == kButtonDown)
1300       cutStr+= "(sector/18)%2==1"; // side C
1301    if (fRadioSector->GetState() == kButtonDown) {
1302       Int_t sector = (Int_t)(fNmbSector->GetNumber());
1303       cutStr += "sector==";
1304       cutStr += sector; 
1305    }
1306    if (fChkAddCuts->GetState() == kButtonDown && strcmp(fComboAddCuts->GetTextEntry()->GetText(), "") != 0){
1307       if (fRadioTPC->GetState() != kButtonDown) cutStr += " && ";
1308       cutStr += fComboAddCuts->GetTextEntry()->GetText();  
1309    }
1310    
1311    // ********** get formula string **********
1312    formulaStr += fComboCustomFit->GetTextEntry()->GetText();
1313
1314    // ********** call AliTPCCalibViewer's fit-function
1315    returnStr = fViewer->Fit(drawStr.Data(), formulaStr.Data(), cutStr.Data(), chi2, fitParam, covMatrix);
1316    
1317    std::cout << std::endl;
1318    std::cout << "Your fit formula reads as follows:" << std::endl;
1319    std::cout << returnStr->Data() << std::endl;
1320    std::cout << "chi2 = " << chi2 << std::endl;
1321 }
1322
1323 void AliTPCCalibViewerGUI::GetMinMax() {
1324    //
1325    // Read current Min & Max from the plot and set it to fTxtSetMin & fTxtSetMax
1326    //
1327    TList* listOfPrimitives = fCanvMain->GetCanvas()->GetListOfPrimitives();
1328    TObject* ptr = 0;
1329    for (Int_t i = 0; i < listOfPrimitives->GetEntries(); i++) {
1330       ptr = listOfPrimitives->At(i);
1331       if ( ptr->InheritsFrom("TH1") ) break;
1332    }
1333    if ( ptr != 0 && !ptr->InheritsFrom("TH1") ) return;      // if the loop did not find a TH1
1334    TH1 *hist = (TH1*)ptr;
1335    Double_t histMax = hist->GetMaximum();
1336    Double_t histMin = hist->GetMinimum();
1337    fTxtSetMax->SetText(Form("%f",histMax));
1338    fTxtSetMin->SetText(Form("%f",histMin));
1339 }
1340
1341 void AliTPCCalibViewerGUI::ChangeSector(){
1342    // 
1343    // function that is called, when the number of the sector is changed
1344    // to change the sector label
1345    // 
1346    Int_t sector = (Int_t)(fNmbSector->GetNumber());
1347    char* secLabel = "";
1348    if (sector >= 0 && sector <= 17) // IROC, Side A
1349       secLabel = "IROC, A";
1350    if (sector >= 18 && sector <= 35) // IROC, Side C
1351       secLabel = "IROC, C";
1352    if (sector >= 36 && sector <= 53) // OROC, Side A
1353       secLabel = "OROC, A";
1354    if (sector >= 54 && sector <= 71) // OROC, Side C
1355       secLabel = "OROC, C";
1356    fLblSector->SetText(secLabel);
1357    DoNewSelection();
1358 }
1359
1360 void AliTPCCalibViewerGUI::AddFitFunction() const { 
1361    //
1362    // adds the last fit function to the normalization list
1363    // 
1364    std::cout << "Not yet implemented." << std::endl;
1365 }
1366    
1367
1368 void AliTPCCalibViewerGUI::ShowGUI(const char* fileName) {
1369    //
1370    // initialize and show GUI for presentation
1371    // 
1372    TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
1373    frmMain->SetWindowName("AliTPCCalibViewer GUI");
1374    frmMain->SetCleanup(kDeepCleanup);
1375    
1376    TGTab* tabMain = new TGTab(frmMain, 1000, 600);
1377    frmMain->AddFrame(tabMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
1378
1379    TGCompositeFrame* tabCont1 = tabMain->AddTab("Viewer 1");
1380    TGCompositeFrame* tabCont2 = tabMain->AddTab("Viewer 2");
1381    
1382    AliTPCCalibViewerGUI* calibViewer1 = new AliTPCCalibViewerGUI(tabCont1, 1000, 600, (char*)fileName);
1383    tabCont1->AddFrame(calibViewer1, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
1384
1385    AliTPCCalibViewerGUI* calibViewer2 = new AliTPCCalibViewerGUI(tabCont2, 1000, 600, (char*)fileName);
1386    tabCont2->AddFrame(calibViewer2, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
1387    
1388    frmMain->MapSubwindows();
1389    frmMain->Resize();
1390    frmMain->MapWindow();
1391
1392 }
1393