Bug corrected.
[u/mrichter/AliRoot.git] / STEER / AliBaseCalibViewerGUI.cxx
CommitLineData
11a2ac51 1///////////////////////////////////////////////////////////////////////////////
2// //
3// Base class for the AliTPCCalibViewer and AliTRDCalibViewer //
4// used for the calibration monitor //
5// //
6// Authors: Marian Ivanov (Marian.Ivanov@cern.ch) //
7// Jens Wiechula (Jens.Wiechula@cern.ch) //
8// Ionut Arsene (iarsene@cern.ch) //
9// //
10///////////////////////////////////////////////////////////////////////////////
11
12#include <TCanvas.h>
13#include <TPad.h>
14#include <TVirtualPad.h>
15#include <TROOT.h>
16#include <TObjArray.h>
17#include <TObjString.h>
18#include <TVector.h>
19#include <string.h>
20#include <TH1.h>
21#include <TStyle.h>
22#include <TGFileDialog.h>
23#include <TGInputDialog.h>
24#include <TGWidget.h>
25#include <TGFrame.h>
26#include <TGButton.h>
27#include <TGListBox.h>
28#include <TGComboBox.h>
29#include <TGNumberEntry.h>
30#include <TRootEmbeddedCanvas.h>
31#include <TGSplitter.h>
32#include <TGButtonGroup.h>
33#include <TGLabel.h>
34#include <TGTab.h>
35#include <TString.h>
36
37#include "AliBaseCalibViewerGUI.h"
38
39ClassImp(AliBaseCalibViewerGUI)
40
41//________________________________________________________________________________________
42AliBaseCalibViewerGUI::AliBaseCalibViewerGUI(const TGWindow *p, UInt_t w, UInt_t h)
43 : TGCompositeFrame(p, w, h),
44 fViewer(0),
45 fContTopBottom(0),
46 fContLCR(0),
47 fContLeft(0),
48 ftabLeft(0),
49 ftabLeft0(0),
50 ftabLeft1(0),
51 ftabRight(0),
52 fTabRight0(0),
53 fTabRight1(0),
54 fContRight(0),
55 fContCenter(0),
56 fContPlotOpt(0),
57 fContDrawOpt(0),
58 fContDrawOptSub1D2D(0),
59 fContNormalized(0),
60 fContCustom(0),
61 fContCuts(0),
62 fContAddCuts(0),
63 fContFit(0),
64 fContAddFit(0),
65 fContScaling(0),
66 fContSetMax(0),
67 fContSetMin(0),
68 fContAddDrawOpt(0),
69 fListVariables(0),
70 fBtnDraw(0),
71 fBtnFit(0),
72 fBtnAddFitFunction(0),
73 fBtnGetMinMax(0),
74 fCanvMain(0),
75 fRadioRaw(0),
76 fRadioNormalized(0),
77 fRadioPredefined(0),
78 fRadioCustom(0),
79 fRadio1D(0),
80 fRadio2D(0),
81 fComboAddDrawOpt(0),
82 fChkAuto(0),
83 fChkAutoAppend(0),
84 fComboMethod(0),
85 fListNormalization(0),
86 fComboCustom(0),
87 fLblCustomDraw(0),
88 fChkAddDrawOpt(0),
89 fLblAddCuts(0),
90 fComboAddCuts(0),
91 fComboCustomFit(0),
92 fChkSetMax(0),
93 fChkSetMin(0),
94 fChkGetMinMaxAuto(0),
95 fTxtSetMax(0),
96 fTxtSetMin(0) ,
97 fContDrawOpt1D(0),
98 fcontDrawOpt1DSubLR(0),
99 fContDrawOpt1DSubNSC(0),
100 fRadioNorm(0),
101 fRadioSigma(0),
102 fTxtSigmas(0),
103 fContCumuLR(0),
104 fContCumLeft(0),
105 fContCumRight(0),
106 fLblSigmaMax(0),
107 fTxtSigmaMax(0),
108 fRadioCumulative(0),
109 fCheckCumulativePM(0),
110 fRadioIntegrate(0),
111 fContDrawOpt1DSubMML(0),
112 fChkMean(0),
113 fChkMedian(0),
114 fChkLTM(0),
115 fContStatOpt(0),
116 fChkStatName(0),
117 fChkStatEntries(0),
118 fContStatMean(0),
119 fChkStatMean(0),
120 fChkStatMeanPM(0),
121 fContStatRMS(0),
122 fChkStatRMS(0),
123 fChkStatRMSPM(0),
124 fChkStatUnderflow(0),
125 fChkStatOverflow(0),
126 fChkStatIntegral(0),
127 fContStatSkew(0),
128 fChkStatSkewness(0),
129 fChkStatSkewnessPM(0),
130 fContStatKurt(0),
131 fChkStatKurtosis(0),
132 fChkStatKurtosisPM(0),
133 fBtnUnchekAll(0),
134 fContLabeling(0),
135 fChkLabelTitle(0),
136 fTxtLabelTitle(0),
137 fChkLabelXaxis(0),
138 fTxtLabelXaxis(0),
139 fChkLabelYaxis(0),
140 fTxtLabelYaxis(0),
141 fChkLabelGetAuto(0),
142 fContSave(0),
143 fBtnSave(0),
144 fContAddSaveOpt(0),
145 fChkAddSaveOpt(0),
146 fComboAddSaveOpt(0),
147 fContExport(0),
148 fContAddExport(0),
149 fComboExportName(0),
150 fBtnExport(0),
151 fBtnAddNorm(0),
152 fContTree(0),
153 fBtnDumpToFile(0),
154 fBtnLoadTree(0),
155 fChkAddAsReference(0),
156 fTxtRefName(0),
157 fInitialized(0)
158{
159 //
160 // AliBaseCalibViewerGUI constructor; fileName specifies the ROOT tree used for drawing
161 //
162}
163
164//________________________________________________________________________________________
165void AliBaseCalibViewerGUI::DrawGUI(const TGWindow *p, UInt_t w, UInt_t h) {
166 //
167 // draw the GUI
168 //
169 // ======================================================================
170 // ************************* Display everything *************************
171 // ======================================================================
172
173 SetCleanup(kDeepCleanup);
174 p = p; // to avoid compiler warnings
175
176 // *****************************************************************************
177 // ************************* content of this MainFrame *************************
178 // *****************************************************************************
179 // top level container with horizontal layout
180 fContTopBottom = new TGCompositeFrame(this, w, h, kVerticalFrame | kFixedWidth | kFixedHeight);
181 AddFrame(fContTopBottom, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
182
183 fContLCR = new TGCompositeFrame(fContTopBottom, w, h, kHorizontalFrame | kFixedWidth | kFixedHeight);
184 fContTopBottom->AddFrame(fContLCR, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
185
186 // ***********************************************************************
187 // ************************* content of fContLCR *************************
188 // ***********************************************************************
189 // left container
190 fContLeft = new TGCompositeFrame(fContLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
191 fContLCR->AddFrame(fContLeft, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 5, 3, 3, 3));
192
193 // left vertical splitter
194 TGVSplitter *splitLeft = new TGVSplitter(fContLCR);
195 splitLeft->SetFrame(fContLeft, kTRUE);
196 fContLCR->AddFrame(splitLeft, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0));
197
198 // right container
199 fContRight = new TGCompositeFrame(fContLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
200 fContLCR->AddFrame(fContRight, new TGLayoutHints(kLHintsTop | kLHintsRight | kLHintsExpandY, 3, 5, 3, 3));
201
202 // center container
203 fContCenter = new TGCompositeFrame(fContLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
204 fContLCR->AddFrame(fContCenter, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
205
206 // right vertical splitter
207 TGVSplitter *splitRight = new TGVSplitter(fContLCR);
208 splitRight->SetFrame(fContRight, kFALSE);
209 fContLCR->AddFrame(splitRight, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0));
210
211
212 // ========================================================================
213 // ************************* content of fContLeft *************************
214 // ========================================================================
215 // --- draw button and tabLeft ---
216 // draw button
217 fBtnDraw = new TGTextButton(fContLeft, "&Draw");
218 fContLeft->AddFrame(fBtnDraw, new TGLayoutHints(kLHintsExpandX, 10, 10, 0, 0));
219 //fBtnDraw->Connect("Clicked()", "AliTPCCalibViewerGUI", this, "DoTest(=\"fBtnDraw clicked\")");
220 fBtnDraw->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoDraw()");
221 fBtnDraw->SetToolTipText("Press here to draw according to selections.");
222
223 // tabs on the left side:
224 ftabLeft = new TGTab(fContLeft);
225 fContLeft->AddFrame(ftabLeft, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 8, 0));
226 ftabLeft0 = ftabLeft->AddTab("General");
227 ftabLeft1 = ftabLeft->AddTab("More plot options");
228
229
230 // **************************** content of tabLeft0 *******************************
231
232 // draw options container *** fcontDrawOpt *** " Plot options "
233 fContDrawOpt = new TGGroupFrame(ftabLeft0, "Plot options", kVerticalFrame | kFitWidth | kFitHeight);
234 ftabLeft0->AddFrame(fContDrawOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
235 fContDrawOptSub1D2D = new TGCompositeFrame(fContDrawOpt, 200, 23, kHorizontalFrame | kFitWidth | kFixedHeight);
236 fContDrawOpt->AddFrame(fContDrawOptSub1D2D, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
237
238 // ------------------------- content of fContDrawOpt -------------------------
239 // -- radio1D, radio2D, chkAuto
240 // 1D radio button
241 fRadio1D = new TGRadioButton(fContDrawOptSub1D2D, "1D", 30);
242 fContDrawOptSub1D2D->AddFrame(fRadio1D, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
243 fRadio1D->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
244 fRadio1D->SetToolTipText("1D drawing \nSelect this if you want to have the full control for the custom draw.");
245
246 // 2D radio button
247 fRadio2D = new TGRadioButton(fContDrawOptSub1D2D, "2D", 31);
248 fContDrawOptSub1D2D->AddFrame(fRadio2D, new TGLayoutHints(kLHintsNormal, 2, 2, 0, 0));
249 fRadio2D->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
250 fRadio2D->SetToolTipText("2D drawing");
251
252 // additional draw options container
253 fContAddDrawOpt = new TGCompositeFrame(fContDrawOpt, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
254 fContDrawOpt->AddFrame(fContAddDrawOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
255
256 // content of --- fContAddDrawOpt ---
257 // addition draw options label
258 fChkAddDrawOpt = new TGCheckButton(fContAddDrawOpt, "Draw options:");
259 //fChkAddDrawOpt->SetTextJustify(kTextLeft);
260 fContAddDrawOpt->AddFrame(fChkAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
261 fChkAddDrawOpt->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
262 fChkAddDrawOpt->SetToolTipText("Enter additional draw options like 'prof' or 'colz' here.\nBe careful with the option 'same' for 2D drawings as it will crash (ROOT feature).");
263
264 // additional draw options combo box
265 fComboAddDrawOpt = new TGComboBox(fContAddDrawOpt);
266 fComboAddDrawOpt->Resize(0, fBtnDraw->GetDefaultHeight());
267 fComboAddDrawOpt->EnableTextInput(kTRUE);
268 fContAddDrawOpt->AddFrame(fComboAddDrawOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
269 fComboAddDrawOpt->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral(=14)");
270 fComboAddDrawOpt->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
271
272 // automatic redraw check button
273 fChkAuto = new TGCheckButton(fContDrawOpt, "Auto redraw");
274 fContDrawOpt->AddFrame(fChkAuto, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
275 fChkAuto->SetToolTipText("Decide if you want an automatic redraw on each new selection.\nNot recommended on a slow machine, during remote connection or if your draw option is 'same'.");
276
277 // automatic append ending check button
278 fChkAutoAppend = new TGCheckButton(fContDrawOpt, "Auto add appending");
279 fContDrawOpt->AddFrame(fChkAutoAppend, new TGLayoutHints(kLHintsNormal, 0, 2, 0, 0));
280 fChkAutoAppend->SetToolTipText("Tries to repair your custom draw string or custom cut string, if you forgot '~' or '.fElements' \nThis function may be buggy!");
281
282
283 // *** predefined radio button *** " Predefined "
284 fRadioPredefined = new TGRadioButton(ftabLeft0, "Predefined: ", 13);
285 ftabLeft0->AddFrame(fRadioPredefined, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
286 fRadioPredefined->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
287 fRadioPredefined->SetToolTipText("Draw predefined variables according to selection.");
288
289 // list of variables
290 fListVariables = new TGListBox(ftabLeft0);
291 ftabLeft0->AddFrame(fListVariables, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 10, 0, 0, 0));
292 fListVariables->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
293
294
295 // normalization options container *** fContPlotOpt ***
296 //fContPlotOpt = new TGCompositeFrame(fContLeft, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
297 fContPlotOpt = new TGGroupFrame(ftabLeft0, "Normalization options", kVerticalFrame | kFitWidth | kFitHeight);
298 ftabLeft0->AddFrame(fContPlotOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 0, 0, 0));
299
300 // ------------------------- content of fContPlotOpt -------------------------
301 // raw radio button
302 fRadioRaw = new TGRadioButton(fContPlotOpt, "Raw", 10);
303 fContPlotOpt->AddFrame(fRadioRaw, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
304 fRadioRaw->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
305 fRadioRaw->SetToolTipText("Plot without normalization");
306
307 // normalized radio button
308 fRadioNormalized = new TGRadioButton(fContPlotOpt, "Normalized", 11);
309 fContPlotOpt->AddFrame(fRadioNormalized, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
310 fRadioNormalized->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
311 fRadioNormalized->SetToolTipText("Normalize data");
312
313 // normalized options container *** fContNormalized ***
314 fContNormalized = new TGCompositeFrame(fContPlotOpt, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
315 fContPlotOpt->AddFrame(fContNormalized, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 15, 0, 0, 0));
316
317 // --- content of fContNormalized ---
318 // --- combo box to select 'subtract' or 'divide', list of normalization variables
319 // method drop down combo box
320 fComboMethod = new TGComboBox(fContNormalized);
321 fComboMethod->Resize(0, fBtnDraw->GetDefaultHeight());
322 fContNormalized->AddFrame(fComboMethod, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
323 fComboMethod->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
324
325 // list of normalization variables
326 fListNormalization = new TGListBox(fContNormalized);
327 fContNormalized->AddFrame(fListNormalization, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
328 fListNormalization->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
329
330 // custom radio button
331 fRadioCustom = new TGRadioButton(ftabLeft0, "Custom: ", 12);
332 ftabLeft0->AddFrame(fRadioCustom, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
333 fRadioCustom->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral()");
334 fRadioCustom->SetToolTipText("Draw data according to user specific text entry in the 'Custom Draw' line. Remember '~' (= '.fElements')!");
335 // custom options container is located further down
336
337 // **************************** content of tabLeft1 *******************************
338
339 // draw options container *** fcontDrawOpt1D *** " Plot options "
340 fContDrawOpt1D = new TGGroupFrame(ftabLeft1, "1D Plot options", kVerticalFrame | kFitWidth | kFitHeight);
341 ftabLeft1->AddFrame(fContDrawOpt1D, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
342
343 fcontDrawOpt1DSubLR = new TGCompositeFrame(fContDrawOpt1D, 1, 1, kVerticalFrame | kFitWidth | kFitHeight);
344 fContDrawOpt1D->AddFrame(fcontDrawOpt1DSubLR, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
345
346 // ***** content of fContDrawOpt1DSubLR *****
347 fContDrawOpt1DSubNSC = new TGCompositeFrame(fcontDrawOpt1DSubLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
348 fcontDrawOpt1DSubLR->AddFrame(fContDrawOpt1DSubNSC, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
349
350 // --------------------------- content of fContDrawOpt1DSubNSC -----------------
351 fRadioNorm = new TGRadioButton(fContDrawOpt1DSubNSC, "Normal", 110);
352 fContDrawOpt1DSubNSC->AddFrame(fRadioNorm, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
353 fRadioNorm->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
354 fRadioNorm->SetToolTipText("Produce a normal 1D plot, a histogram of the selected data.");
355
356 fRadioSigma = new TGRadioButton(fContDrawOpt1DSubNSC, "Sigma", 111);
357 fContDrawOpt1DSubNSC->AddFrame(fRadioSigma, new TGLayoutHints(kLHintsNormal, 0, 0, 5, 0));
358 fRadioSigma->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
359 fRadioSigma->SetToolTipText("Draw a normal histogram, but also lines that indicate the mean/median/LTM \nand sigmas of the selected data.");
360
361 fTxtSigmas = new TGTextEntry(fContDrawOpt1DSubNSC, "2; 4; 6", 111);
362 fContDrawOpt1DSubNSC->AddFrame(fTxtSigmas, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 15, 0, 0));
363 fTxtSigmas->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtons1D(=111)");
364 fTxtSigmas->SetToolTipText("Enter sigma intervals you would like to be indicated by lines. \nExample: '2; 4; 6'");
365
366 fContCumuLR = new TGCompositeFrame(fContDrawOpt1DSubNSC, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
367 fContDrawOpt1DSubNSC->AddFrame(fContCumuLR, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 0));
368
369 fContCumLeft = new TGCompositeFrame(fContCumuLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
370 fContCumuLR->AddFrame(fContCumLeft, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
371
372 fRadioCumulative = new TGRadioButton(fContCumLeft, "Cumulative", 112);
373 fContCumLeft->AddFrame(fRadioCumulative, new TGLayoutHints(kLHintsNormal, 0, 10, 0, 0));
374 fRadioCumulative->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
375 fRadioCumulative->SetToolTipText("Draw the cumulative (SigmaCut) of the given selection. \nThe data distribution is integrated, starting from the mean/median/LTM.");
376
377 fCheckCumulativePM = new TGCheckButton(fContCumLeft, "Plus/Minus");
378 fContCumLeft->AddFrame(fCheckCumulativePM, new TGLayoutHints(kLHintsNormal, 10, 15, 0, 0));
379 fCheckCumulativePM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
380 fCheckCumulativePM->SetToolTipText("Decide whether you want the cumulative integration for each direction (+/-) \nor only for the absolute distance to the mean/median/LTM value.");
381
382 fRadioIntegrate = new TGRadioButton(fContCumLeft, "Integrate", 113);
383 fContCumLeft->AddFrame(fRadioIntegrate, new TGLayoutHints(kLHintsNormal, 0, 0, 5, 0));
384 fRadioIntegrate->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
385 fRadioIntegrate->SetToolTipText("Draw the integral of the given selection.");
386
387 fContCumRight = new TGCompositeFrame(fContCumuLR, 200, 23, kVerticalFrame | kFitWidth | kFitHeight);
388 fContCumuLR->AddFrame(fContCumRight, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
389
390 fLblSigmaMax = new TGLabel(fContCumRight, "SigmaMax:");
391 fLblSigmaMax->SetTextJustify(kTextLeft);
392 fContCumRight->AddFrame(fLblSigmaMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 0, 0, 0));
393
394 fTxtSigmaMax = new TGTextEntry(fContCumRight, "5", 112);
395 fContCumRight->AddFrame(fTxtSigmaMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 15, 0, 0));
396 fTxtSigmaMax->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtons1D(=112)");
397 fTxtSigmaMax->SetToolTipText("Enter up to which multiple of sigma you want to integrate.");
398
399
400 fContDrawOpt1DSubMML = new TGCompositeFrame(fcontDrawOpt1DSubLR, 200, 23, kHorizontalFrame | kFitWidth | kFitHeight);
401 fcontDrawOpt1DSubLR->AddFrame(fContDrawOpt1DSubMML, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 0));
402
403 // -------------- content of fcontDrawOpt1DSubLR
404 fChkMean = new TGCheckButton(fContDrawOpt1DSubMML, "Mean");
405 fContDrawOpt1DSubMML->AddFrame(fChkMean, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
406 fChkMean->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
407 fChkMean->SetToolTipText("Activate Mean for Sigma/Cumulative/Integrate");
408
409 fChkMedian = new TGCheckButton(fContDrawOpt1DSubMML, "Median");
410 fContDrawOpt1DSubMML->AddFrame(fChkMedian, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
411 fChkMedian->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
412 fChkMedian->SetToolTipText("Activate Median for Sigma/Cumulative/Integrate");
413
414 fChkLTM = new TGCheckButton(fContDrawOpt1DSubMML, "LTM");
415 fContDrawOpt1DSubMML->AddFrame(fChkLTM, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
416 fChkLTM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtons1D()");
417 fChkLTM->SetToolTipText("Activate LTM for Sigma/Cumulative/Integrate");
418
419
420 // statistic options container *** fcontStatOpt1D *** " Statistic options "
421 fContStatOpt = new TGGroupFrame(ftabLeft1, "Statistic options", kVerticalFrame | kFitWidth | kFitHeight);
422 ftabLeft1->AddFrame(fContStatOpt, new TGLayoutHints(kLHintsExpandX, 0, 0, 10, 0));
423
424 fChkStatName = new TGCheckButton(fContStatOpt, "Name");
425 fContStatOpt->AddFrame(fChkStatName, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
426 fChkStatName->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
427 fChkStatName->SetToolTipText("Display the name in the statistics legend.");
428
429 fChkStatEntries = new TGCheckButton(fContStatOpt, "Entries");
430 fContStatOpt->AddFrame(fChkStatEntries, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
431 fChkStatEntries->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
432 fChkStatEntries->SetToolTipText("Display the number of entries in the statistics legend.");
433
434 fContStatMean = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
435 fContStatOpt->AddFrame(fContStatMean, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
436
437 fChkStatMean = new TGCheckButton(fContStatMean, "Mean");
438 fContStatMean->AddFrame(fChkStatMean, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
439 fChkStatMean->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
440 fChkStatMean->SetToolTipText("Display the mean value of the data in the statistics legend.");
441
442 fChkStatMeanPM = new TGCheckButton(fContStatMean, "+- Error");
443 fContStatMean->AddFrame(fChkStatMeanPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
444 fChkStatMeanPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
445 fChkStatMeanPM->SetToolTipText("Display the mean value's error in the statistics legend.");
446
447 fContStatRMS = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
448 fContStatOpt->AddFrame(fContStatRMS, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
449
450 fChkStatRMS = new TGCheckButton(fContStatRMS, "RMS");
451 fContStatRMS->AddFrame(fChkStatRMS, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
452 fChkStatRMS->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
453 fChkStatRMS->SetToolTipText("Display the RMS value of the data in the statistics legend.");
454
455 fChkStatRMSPM = new TGCheckButton(fContStatRMS, "+- Error");
456 fContStatRMS->AddFrame(fChkStatRMSPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
457 fChkStatRMSPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
458 fChkStatRMSPM->SetToolTipText("Display the RMS value's error in the statistics legend.");
459
460 fChkStatUnderflow = new TGCheckButton(fContStatOpt, "Underflow");
461 fContStatOpt->AddFrame(fChkStatUnderflow, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
462 fChkStatUnderflow->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
463 fChkStatUnderflow->SetToolTipText("Display the number of entries in the underflow bin.");
464
465 fChkStatOverflow = new TGCheckButton(fContStatOpt, "Overflow");
466 fContStatOpt->AddFrame(fChkStatOverflow, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
467 fChkStatOverflow->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
468 fChkStatOverflow->SetToolTipText("Display the number of entries in the overflow bin.");
469
470 fChkStatIntegral = new TGCheckButton(fContStatOpt, "Integral");
471 fContStatOpt->AddFrame(fChkStatIntegral, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
472 fChkStatIntegral->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
473 fChkStatIntegral->SetToolTipText("Display the integral of the data in the statistics legend.");
474
475 fContStatSkew = new TGCompositeFrame(fContStatOpt, 1, 1, kHorizontalFrame | kFitWidth | kFitHeight);
476 fContStatOpt->AddFrame(fContStatSkew, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
477
478 fChkStatSkewness = new TGCheckButton(fContStatSkew, "Skewness");
479 fContStatSkew->AddFrame(fChkStatSkewness, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
480 fChkStatSkewness->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
481 fChkStatSkewness->SetToolTipText("Display the skewness of the data in the statistics legend. \nBe careful! Sometimes the skewness causes a floating point exception that hangs the GUI!");
482
483 fChkStatSkewnessPM = new TGCheckButton(fContStatSkew, "+- Error");
484 fContStatSkew->AddFrame(fChkStatSkewnessPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
485 fChkStatSkewnessPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
486 fChkStatSkewnessPM->SetToolTipText("Display the skewness' error in the statistics legend.");
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()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
494 fChkStatKurtosis->SetToolTipText("Display the kurtosis of the data in the statistics legend.");
495
496 fChkStatKurtosisPM = new TGCheckButton(fContStatKurt, "+- Error");
497 fContStatKurt->AddFrame(fChkStatKurtosisPM, new TGLayoutHints(kLHintsNormal, 10, 0, 0, 0));
498 fChkStatKurtosisPM->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsStat()");
499 fChkStatKurtosisPM->SetToolTipText("Display the kurtosis' error in the statistics legend.");
500
501 fBtnUnchekAll = new TGTextButton(fContStatOpt, "&Uncheck all");
502 fContStatOpt->AddFrame(fBtnUnchekAll, new TGLayoutHints(kLHintsExpandX, 10, 10, 0, 0));
503 fBtnUnchekAll->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "UnchekAllStat()");
504 fBtnUnchekAll->SetToolTipText("Disable all statistics legend entries, \nno statistics legend.");
505
506
507 // custom options container
508 // --- fComboCustom --- the custom draw line on the very low
509 fContCustom = new TGCompositeFrame(fContTopBottom, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
510 fContTopBottom->AddFrame(fContCustom, new TGLayoutHints(kLHintsExpandX, 10, 0, 0, 0));
511
512 // ------------------------- content of fContCustom -------------------------
513 fLblCustomDraw = new TGLabel(fContCustom, "Custom draw: ");
514 fLblCustomDraw->SetTextJustify(kTextLeft);
515 fContCustom->AddFrame(fLblCustomDraw, new TGLayoutHints(kLHintsNormal, 5, 0, 0, 0));
516 // text field for custom draw command
517 fComboCustom = new TGComboBox(fContCustom);
518 fComboCustom->Resize(0, fBtnDraw->GetDefaultHeight());
519 fComboCustom->EnableTextInput(kTRUE);
520 fContCustom->AddFrame(fComboCustom, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
521 fComboCustom->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsGeneral(=42)");
522 fComboCustom->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
523
524
525 // additional cuts container
526 fContAddCuts = new TGCompositeFrame(fContTopBottom, 200, 200, kHorizontalFrame | kFitWidth | kFitHeight);
527 fContTopBottom->AddFrame(fContAddCuts, new TGLayoutHints(kLHintsExpandX, 10, 0, 0, 0));
528
529 // ------------------------- content of fContAddCuts -------------------------
530 fLblAddCuts = new TGLabel(fContAddCuts, "Custom cuts: ");
531 fLblAddCuts->SetTextJustify(kTextLeft);
532 fContAddCuts->AddFrame(fLblAddCuts, new TGLayoutHints(kLHintsNormal, 5, 0, 0, 0));
533 // combo text field for additional cuts
534 fComboAddCuts = new TGComboBox(fContAddCuts);
535 fComboAddCuts->Resize(0, fBtnDraw->GetDefaultHeight());
536 fComboAddCuts->EnableTextInput(kTRUE);
537 fContAddCuts->AddFrame(fComboAddCuts, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
538 fComboAddCuts->Connect("Selected(Int_t)", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
539
540 // ==========================================================================
541 // ************************* content of fContCenter *************************
542 // ========================================================================
543 // main drawing canvas
544 fCanvMain = new TRootEmbeddedCanvas("Main_Canvas", fContCenter, 200, 200, kFitWidth | kFitHeight);
545 fContCenter->AddFrame(fCanvMain, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
546
547 fCanvMain->GetCanvas()->Connect("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)", "AliBaseCalibViewerGUI", this, "MouseMove(Int_t, Int_t, Int_t, TObject*)");
548
549 fCanvMain->GetCanvas()->Connect("RangeAxisChanged()", "AliTPCCalibViewerGUI", this, "GetMinMax()");
550 fCanvMain->GetCanvas()->SetToolTipText("The Main_Canvas, here your plots are displayed.");
551
552
553 // =========================================================================
554 // ************************* content of fContRight *************************
555 // ========================================================================
556
557 // tabs on the right side:
558 ftabRight = new TGTab(fContRight);
559 fContRight->AddFrame(ftabRight, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 8, 0));
560 fTabRight0 = ftabRight->AddTab("Basic");
561 fTabRight1 = ftabRight->AddTab("Advanced");
562
563
564 // **************************** content of tabLeft0 *******************************
565 // cut options container
566
567 fContCuts = new TGGroupFrame(fTabRight0, "Cuts", kVerticalFrame | kFitWidth | kFitHeight);
568 fTabRight0->AddFrame(fContCuts, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
569
570 // Scaling options container
571 fContScaling = new TGGroupFrame(fTabRight0, "Scaling", kVerticalFrame | kFitWidth | kFitHeight);
572 fTabRight0->AddFrame(fContScaling, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
573
574 // ************************* content of fContScaling *************************
575 // SetMaximum container
576 fContSetMax = new TGCompositeFrame(fContScaling, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
577 fContScaling->AddFrame(fContSetMax, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
578
579 // ------------------------- content of fContSetMax -------------------------
580 // SetMaximum - checkbox
581 fChkSetMax = new TGCheckButton(fContSetMax, "Set fixed max.");
582 fContSetMax->AddFrame(fChkSetMax, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
583 fChkSetMax->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
584 fChkSetMax->SetToolTipText("Set the maximum fixed to the value specified here.");
585
586 // text field for maximum value
587 fTxtSetMax = new TGTextEntry(fContSetMax, "", 41);
588 fContSetMax->AddFrame(fTxtSetMax, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
589 fTxtSetMax->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
590 fTxtSetMax->SetToolTipText("maximum value for the drawing");
591
592 // SetMinimum container
593 fContSetMin = new TGCompositeFrame(fContScaling, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
594 fContScaling->AddFrame(fContSetMin, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
595
596 // ------------------------- content of fContSetMin -------------------------
597 // SetMinimum - checkbox
598 fChkSetMin = new TGCheckButton(fContSetMin, "Set fixed min.");
599 fContSetMin->AddFrame(fChkSetMin, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
600 fChkSetMin->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
601 fChkSetMin->SetToolTipText("Set the minimum fixed to the value specified here.");
602
603 // text field for minimum value
604 fTxtSetMin = new TGTextEntry(fContSetMin, "", 40);
605 fContSetMin->AddFrame(fTxtSetMin, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
606 fTxtSetMin->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
607 fTxtSetMin->SetToolTipText("minimum value for the drawing");
608
609 // get Min & Max from Plot - button
610 fBtnGetMinMax = new TGTextButton(fContScaling, "&Get scale from plot");
611 fContScaling->AddFrame(fBtnGetMinMax, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
612 fBtnGetMinMax->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "GetMinMax()");
613 fBtnGetMinMax->SetToolTipText("Get min and max from plot, e.g. after rescaling by dragging the palette. \nObsolete! The button's function will change to 'Unzoom all'.");
614
615 // GetMinMaxAuto - checkbox
616 fChkGetMinMaxAuto = new TGCheckButton(fContScaling, "Get Min + Max auto.");
617 fContScaling->AddFrame(fChkGetMinMaxAuto, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
618 fChkGetMinMaxAuto->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
619 fChkGetMinMaxAuto->SetToolTipText("Get minimum and maximum automatically from each new plot. \nDeactivate this, if you want to 'save' your specified minimum and maximum.");
620
621 // labeling container *** fContLabeling *** " Labeling "
622 fContLabeling = new TGGroupFrame(fTabRight0, "Labeling", kVerticalFrame | kFitWidth | kFitHeight);
623 fTabRight0->AddFrame(fContLabeling, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
624
625 fChkLabelTitle = new TGCheckButton(fContLabeling, "Set title:");
626 fContLabeling->AddFrame(fChkLabelTitle, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
627 fChkLabelTitle->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
628 fChkLabelTitle->SetToolTipText("Set the plot title.");
629
630 fTxtLabelTitle = new TGTextEntry(fContLabeling, "Title", 500);
631 fContLabeling->AddFrame(fTxtLabelTitle, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
632 fTxtLabelTitle->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=50)");
633 fTxtLabelTitle->SetToolTipText("plot title");
634
635 fChkLabelXaxis = new TGCheckButton(fContLabeling, "Set X-axis label:");
636 fContLabeling->AddFrame(fChkLabelXaxis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
637 fChkLabelXaxis->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
638 fChkLabelXaxis->SetToolTipText("Set the X-axis label.");
639
640 fTxtLabelXaxis = new TGTextEntry(fContLabeling, "XaxisLabel", 500);
641 fContLabeling->AddFrame(fTxtLabelXaxis, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
642 fTxtLabelXaxis->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=51)");
643 fTxtLabelXaxis->SetToolTipText("X-axis label");
644
645 fChkLabelYaxis = new TGCheckButton(fContLabeling, "Set Y-axis label:");
646 fContLabeling->AddFrame(fChkLabelYaxis, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
647 fChkLabelYaxis->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
648 fChkLabelYaxis->SetToolTipText("Set the Y-axis label.");
649
650 fTxtLabelYaxis = new TGTextEntry(fContLabeling, "YaxisLabel", 500);
651 fContLabeling->AddFrame(fTxtLabelYaxis, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
652 fTxtLabelYaxis->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw(=52)");
653 fTxtLabelYaxis->SetToolTipText("Y-axis label");
654
655 fChkLabelGetAuto = new TGCheckButton(fContLabeling, "Get labels auto.");
656 fContLabeling->AddFrame(fChkLabelGetAuto, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
657 fChkLabelGetAuto->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "HandleButtonsNoRedraw()");
658 fChkLabelGetAuto->SetToolTipText("Get labels automatically from each new plot \nDeactivate this, if you want to 'save' your specified labels.");
659
660
661 // **************************** content of ftabRight1 *******************************
662 // Save container
663 fContSave = new TGGroupFrame(fTabRight1, "Save", kVerticalFrame | kFitWidth | kFitHeight);
664 fTabRight1->AddFrame(fContSave, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
665 // save button
666 fBtnSave = new TGTextButton(fContSave, "&Save picture");
667 fContSave->AddFrame(fBtnSave, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
668 fBtnSave->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "SavePicture()");
669 fBtnSave->SetToolTipText("Open a 'Save as...' dialog to save the current plot as picture or macro.");
670
671 // additional save options container
672 fContAddSaveOpt = new TGCompositeFrame(fContSave, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
673 fContSave->AddFrame(fContAddSaveOpt, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
674
675 // content of --- fContAddSaveOpt ---
676 // addition save options label
677 fChkAddSaveOpt = new TGCheckButton(fContAddSaveOpt, "Save options:");
678 fContAddSaveOpt->AddFrame(fChkAddSaveOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
679 fChkAddSaveOpt->Connect("Clicked()", "AliBaseCalibViewerGUI", this, "DoNewSelection()");
680 fChkAddSaveOpt->SetToolTipText("Additional save options (see documentation for TPad::Print()).");
681
682 // additional save options combo box
683 fComboAddSaveOpt = new TGComboBox(fContAddSaveOpt);
684 fContAddSaveOpt->AddFrame(fComboAddSaveOpt, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
685 fComboAddSaveOpt->Resize(0, fBtnDraw->GetDefaultHeight());
686 fComboAddSaveOpt->EnableTextInput(kTRUE);
687 fComboAddSaveOpt->Connect("ReturnPressed()", "AliBaseCalibViewerGUI", this, "SavePicture()");
688
689 // calPad export container
690 fContExport = new TGGroupFrame(fTabRight1, "Export AliTPCCalPad", kVerticalFrame | kFitWidth | kFitHeight);
691 fTabRight1->AddFrame(fContExport, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
692 // ------------------------- content of fContExport -------------------------
693 // container for export name
694
695 fContAddExport = new TGCompositeFrame(fContExport, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
696 fContExport->AddFrame(fContAddExport, new TGLayoutHints(kLHintsExpandX, -5, -5, 0, 0));
697
698 fComboExportName = new TGComboBox(fContAddExport);
699 fComboExportName->Resize(0, fBtnDraw->GetDefaultHeight());
700 fContAddExport->AddFrame(fComboExportName, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
701 fComboExportName->AddEntry("calPad", 0); // first default value
702 fComboExportName->Select(0); // select default value before connecting
703 fComboExportName->EnableTextInput(kTRUE);
704
705 // export button
706 fBtnExport = new TGTextButton(fContExport, "&Export to CINT");
707 fContExport->AddFrame(fBtnExport, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
708 fBtnExport->SetToolTipText("Lifeless button :(");
709
710 // add to normalisation button
711 fBtnAddNorm = new TGTextButton(fContExport, "&Add to normalization");
712 fContExport->AddFrame(fBtnAddNorm, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
713 fBtnAddNorm->SetToolTipText("Lifeless button :(");
714
715 // Tree container
716 fContTree = new TGGroupFrame(fTabRight1, "Tree", kVerticalFrame | kFitWidth | kFitHeight);
717 fTabRight1->AddFrame(fContTree, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
718
719 // dump tree to file button
720 fBtnDumpToFile = new TGTextButton(fContTree, "&Dump to File");
721 fContTree->AddFrame(fBtnDumpToFile, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
722 fBtnDumpToFile->SetToolTipText("Lifeless button :(");
723
724 // dump tree to file button
725 fBtnLoadTree = new TGTextButton(fContTree, "&Load Tree");
726 fContTree->AddFrame(fBtnLoadTree, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
727 fBtnLoadTree->SetToolTipText("Lifeless button :(");
728
729 fChkAddAsReference = new TGCheckButton(fContTree, "as reference:");
730 fContTree->AddFrame(fChkAddAsReference, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
731 fChkAddAsReference->SetToolTipText("Lifeless button :(");
732
733 fTxtRefName = new TGTextEntry(fContTree, "R", 500);
734 fContTree->AddFrame(fTxtRefName, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 15, 0, 0, 0));
735 fTxtRefName->SetToolTipText("Reference Name");
736
737 // Fit options container
738 fContFit = new TGGroupFrame(fTabRight1, "Custom fit", kVerticalFrame | kFitWidth | kFitHeight);
739 fTabRight1->AddFrame(fContFit, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
740
741 // ------------------------- content of fContFit -------------------------
742 // container for additional fits
743 fContAddFit = new TGCompositeFrame(fContFit, 200, 200, kVerticalFrame | kFitWidth | kFitHeight);
744 fContFit->AddFrame(fContAddFit, new TGLayoutHints(kLHintsExpandX, -5, -5, 0, 0));
745
746 // --- content of fContAddFit ---
747 // text field for custom fit
748 fComboCustomFit = new TGComboBox(fContAddFit);
749 fComboCustomFit->Resize(0, fBtnDraw->GetDefaultHeight());
750 fComboCustomFit->EnableTextInput(kTRUE);
751 fContAddFit->AddFrame(fComboCustomFit, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
752
753 // fit button
754 fBtnFit = new TGTextButton(fContAddFit, "&Fit");
755 fContAddFit->AddFrame(fBtnFit, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
756 fBtnFit->SetToolTipText("Lifeless button :(");
757}
758
759//________________________________________________________________________________________
760AliBaseCalibViewerGUI::AliBaseCalibViewerGUI(const AliBaseCalibViewerGUI &c)
761 : TGCompositeFrame(c.fParent, c.fWidth, c.fHeight),
762 fViewer(0),
763 fContTopBottom(0),
764 fContLCR(0),
765 fContLeft(0),
766 ftabLeft(0),
767 ftabLeft0(0),
768 ftabLeft1(0),
769 ftabRight(0),
770 fTabRight0(0),
771 fTabRight1(0),
772 fContRight(0),
773 fContCenter(0),
774 fContPlotOpt(0),
775 fContDrawOpt(0),
776 fContDrawOptSub1D2D(0),
777 fContNormalized(0),
778 fContCustom(0),
779 fContCuts(0),
780 fContAddCuts(0),
781 fContFit(0),
782 fContAddFit(0),
783 fContScaling(0),
784 fContSetMax(0),
785 fContSetMin(0),
786 fContAddDrawOpt(0),
787 fListVariables(0),
788 fBtnDraw(0),
789 fBtnFit(0),
790 fBtnAddFitFunction(0),
791 fBtnGetMinMax(0),
792 fCanvMain(0),
793 fRadioRaw(0),
794 fRadioNormalized(0),
795 fRadioPredefined(0),
796 fRadioCustom(0),
797 fRadio1D(0),
798 fRadio2D(0),
799 fComboAddDrawOpt(0),
800 fChkAuto(0),
801 fChkAutoAppend(0),
802 fComboMethod(0),
803 fListNormalization(0),
804 fComboCustom(0),
805 fLblCustomDraw(0),
806 fChkAddDrawOpt(0),
807 fLblAddCuts(0),
808 fComboAddCuts(0),
809 fComboCustomFit(0),
810 fChkSetMax(0),
811 fChkSetMin(0),
812 fChkGetMinMaxAuto(0),
813 fTxtSetMax(0),
814 fTxtSetMin(0),
815 fContDrawOpt1D(0),
816 fcontDrawOpt1DSubLR(0),
817 fContDrawOpt1DSubNSC(0),
818 fRadioNorm(0),
819 fRadioSigma(0),
820 fTxtSigmas(0),
821 fContCumuLR(0),
822 fContCumLeft(0),
823 fContCumRight(0),
824 fLblSigmaMax(0),
825 fTxtSigmaMax(0),
826 fRadioCumulative(0),
827 fCheckCumulativePM(0),
828 fRadioIntegrate(0),
829 fContDrawOpt1DSubMML(0),
830 fChkMean(0),
831 fChkMedian(0),
832 fChkLTM(0),
833 fContStatOpt(0),
834 fChkStatName(0),
835 fChkStatEntries(0),
836 fContStatMean(0),
837 fChkStatMean(0),
838 fChkStatMeanPM(0),
839 fContStatRMS(0),
840 fChkStatRMS(0),
841 fChkStatRMSPM(0),
842 fChkStatUnderflow(0),
843 fChkStatOverflow(0),
844 fChkStatIntegral(0),
845 fContStatSkew(0),
846 fChkStatSkewness(0),
847 fChkStatSkewnessPM(0),
848 fContStatKurt(0),
849 fChkStatKurtosis(0),
850 fChkStatKurtosisPM(0),
851 fBtnUnchekAll(0),
852 fContLabeling(0),
853 fChkLabelTitle(0),
854 fTxtLabelTitle(0),
855 fChkLabelXaxis(0),
856 fTxtLabelXaxis(0),
857 fChkLabelYaxis(0),
858 fTxtLabelYaxis(0),
859 fChkLabelGetAuto(0),
860 fContSave(0),
861 fBtnSave(0),
862 fContAddSaveOpt(0),
863 fChkAddSaveOpt(0),
864 fComboAddSaveOpt(0),
865 fContExport(0),
866 fContAddExport(0),
867 fComboExportName(0),
868 fBtnExport(0),
869 fBtnAddNorm(0),
870 fContTree(0),
871 fBtnDumpToFile(0),
872 fBtnLoadTree(0),
873 fChkAddAsReference(0),
874 fTxtRefName(0),
875 fInitialized(0)
876{
877 //
878 // dummy AliBaseCalibViewerGUI copy constructor
879 //
880}
881
882//________________________________________________________________________________________
883AliBaseCalibViewerGUI & AliBaseCalibViewerGUI::operator =(const AliBaseCalibViewerGUI & /*param*/) {
884 //
885 // dummy assignment operator
886 //
887 return (*this);
888}
889
890//________________________________________________________________________________________
891AliBaseCalibViewerGUI::~AliBaseCalibViewerGUI() {
892 //
893 // Destructor
894 //
895 /*
896 if (fCanvMain && fCanvMain->GetCanvas()) {
897 for (Int_t i = 0; i < fCanvMain->GetCanvas()->GetListOfPrimitives()->GetEntries(); i++) {
898 if (strcmp(fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->ClassName(), "TFrame") != 0)
899 fCanvMain->GetCanvas()->GetListOfPrimitives()->At(i)->Delete();
900 }
901 }
902*/
903 // Cleanup();
904}
905
906//________________________________________________________________________________________
907void AliBaseCalibViewerGUI::SetInitialValues() {
908 //
909 // Set the default button states
910 //
911 fChkAuto->SetState(kButtonUp);
912 fRadioPredefined->SetState(kButtonDown);
913 fRadioRaw->SetState(kButtonDown);
914 fRadio1D->SetState(kButtonDown);
915 fChkGetMinMaxAuto->SetState(kButtonDown);
916 fChkSetMin->SetState(kButtonUp);
917 fChkSetMax->SetState(kButtonUp);
918 fRadioNorm->SetState(kButtonDown);
919 fRadioSigma->SetState(kButtonUp);
920 fRadioCumulative->SetState(kButtonUp);
921 fChkMean->SetState(kButtonDown);
922 fCheckCumulativePM->SetState(kButtonUp);
923
924 fChkLabelGetAuto->SetState(kButtonDown);
925
926 Int_t statOpt = gStyle->GetOptStat();
927 if (statOpt == 1) statOpt = 1111;
928 if (statOpt / 200000000 >= 1) {
929 fChkStatKurtosis->SetState(kButtonDown);
930 fChkStatKurtosisPM->SetState(kButtonDown);
931 statOpt -= 200000000;
932 }
933 if (statOpt / 100000000 >= 1) {
934 fChkStatKurtosis->SetState(kButtonDown);
935 statOpt -= 100000000;
936 }
937 if (statOpt / 20000000 >= 1) {
938 fChkStatSkewness->SetState(kButtonDown);
939 fChkStatSkewnessPM->SetState(kButtonDown);
940 statOpt -= 20000000;
941 }
942 if (statOpt / 10000000 >= 1) {
943 fChkStatSkewness->SetState(kButtonDown);
944 statOpt -= 10000000;
945 }
946 if (statOpt / 1000000 >= 1) {
947 fChkStatIntegral->SetState(kButtonDown);
948 statOpt -= 1000000;
949 }
950 if (statOpt / 100000 >= 1) {
951 fChkStatOverflow->SetState(kButtonDown);
952 statOpt -= 100000;
953 }
954 if (statOpt / 10000 >= 1) {
955 fChkStatUnderflow->SetState(kButtonDown);
956 statOpt -= 10000;
957 }
958 if (statOpt / 2000 >= 1) {
959 fChkStatRMS->SetState(kButtonDown);
960 fChkStatRMSPM->SetState(kButtonDown);
961 statOpt -= 2000;
962 }
963 if (statOpt / 1000 >= 1) {
964 fChkStatRMS->SetState(kButtonDown);
965 statOpt -= 1000;
966 }
967 if (statOpt / 200 >= 1) {
968 fChkStatMean->SetState(kButtonDown);
969 fChkStatMeanPM->SetState(kButtonDown);
970 statOpt -= 200;
971 }
972 if (statOpt / 100 >= 1) {
973 fChkStatMean->SetState(kButtonDown);
974 statOpt -= 100;
975 }
976 if (statOpt / 10 >= 1) {
977 fChkStatEntries->SetState(kButtonDown);
978 statOpt -= 10;
979 }
980 if (statOpt / 1 >= 1) {
981 fChkStatName->SetState(kButtonDown);
982 statOpt -= 1;
983 }
984
985 // fill fComboAddDrawOpt with some additional drawing options
986 fComboAddDrawOpt->AddEntry("same", 0);
987 fComboAddDrawOpt->AddEntry("profbox", 1);
988 fComboAddDrawOpt->AddEntry("profcolz", 2);
989 fComboAddDrawOpt->AddEntry("profcont0", 3);
990 fComboAddDrawOpt->AddEntry("proflego", 4);
991 fComboAddDrawOpt->AddEntry("proflego2", 5);
992 fComboAddDrawOpt->AddEntry("profsurf", 6);
993 fComboAddDrawOpt->AddEntry("profsurf1", 7);
994 fComboAddDrawOpt->AddEntry("profsurf2", 8);
995 fComboAddDrawOpt->AddEntry("box", 9);
996 fComboAddDrawOpt->AddEntry("colz", 10);
997 fComboAddDrawOpt->AddEntry("cont0", 11);
998 fComboAddDrawOpt->AddEntry("lego", 12);
999 fComboAddDrawOpt->AddEntry("lego2", 13);
1000 fComboAddDrawOpt->AddEntry("surf", 14);
1001 fComboAddDrawOpt->AddEntry("surf1", 15);
1002 fComboAddDrawOpt->AddEntry("surf2", 16);
1003
1004 // fill fComboAddSaveOpt with some additional drawing options
1005 fComboAddSaveOpt->AddEntry("Portrait", 0);
1006 fComboAddSaveOpt->AddEntry("Landscape", 1);
1007 fComboAddSaveOpt->AddEntry("Preview", 2);
1008 fComboAddSaveOpt->AddEntry("+50", 3);
1009
1010 // fill fComboMethod
1011 fComboMethod->AddEntry("subtract", 0);
1012 fComboMethod->AddEntry("divide by", 1);
1013
1014 // fill fComboExportName
1015 fBtnExport->SetEnabled(kFALSE);
1016 fBtnAddNorm->SetEnabled(kFALSE);
1017
1018 // select initial variables
1019 fListVariables->Select(0);
1020 fListNormalization->Select(0);
1021 fComboMethod->Select(0);
1022
1023 fListVariables->IntegralHeight(kFALSE); // naja
1024 fListNormalization->IntegralHeight(kFALSE); // naja
1025 fChkAuto->SetState(kButtonDown);
1026}
1027
1028//________________________________________________________________________________________
1029void AliBaseCalibViewerGUI::HandleButtonsGeneral(Int_t id) {
1030 //
1031 // handles mutual radio button exclusions
1032 // for general Tab
1033 //
1034 if (id == -1) {
1035 TGButton *btn = (TGButton *) gTQSender;
1036 id = btn->WidgetId();
1037 }
1038
1039 switch (id) {
1040 case 10: // fRadioRaw
1041 fRadioNormalized->SetState(kButtonUp);
1042 fRadioPredefined->SetState(kButtonDown);
1043 fRadioCustom->SetState(kButtonUp);
1044 break;
1045 case 11: // fRadioNormalized
1046 fRadioRaw->SetState(kButtonUp);
1047 fRadioPredefined->SetState(kButtonDown);
1048 fRadioCustom->SetState(kButtonUp);
1049 break;
1050 case 12: // fRadioCustom
1051 fRadioPredefined->SetState(kButtonUp);
1052 break;
1053 case 14: // select Draw options fComboAddDrawOpt
1054 fChkAddDrawOpt->SetState(kButtonDown);
1055 break;
1056 case 13: // fRadioPredefined
1057 fRadioCustom->SetState(kButtonUp);
1058 break;
1059 //--------
1060 case 30: // fRadio1D
1061 fRadio2D->SetState(kButtonUp);
1062 fBtnExport->SetEnabled(kFALSE);
1063 fBtnAddNorm->SetEnabled(kFALSE);
1064 break;
1065 case 31: // fRadio2D
1066 fRadio1D->SetState(kButtonUp);
1067 fBtnExport->SetEnabled(kTRUE);
1068 fBtnAddNorm->SetEnabled(kTRUE);
1069 break;
1070 case 42: // fComboCustom
1071 fRadioCustom->SetState(kButtonDown);
1072 fRadioPredefined->SetState(kButtonUp);
1073 break;
1074 }
1075 DoNewSelection();
1076}
1077
1078//________________________________________________________________________________________
1079void AliBaseCalibViewerGUI::HandleButtons1D(Int_t id) {
1080 //
1081 // handles mutual radio button exclusions
1082 // 1D-Tab buttons
1083 //
1084
1085 if (id == -1) {
1086 TGButton *btn = (TGButton *) gTQSender;
1087 id = btn->WidgetId();
1088 }
1089 switch (id) {
1090 case 110: // 1D draw normal
1091 fRadioNorm->SetState(kButtonDown);
1092 fRadioSigma->SetState(kButtonUp);
1093 fRadioCumulative->SetState(kButtonUp);
1094 fRadioIntegrate->SetState(kButtonUp);
1095 break;
1096 case 111: // 1D draw sigma
1097 fRadioNorm->SetState(kButtonUp);
1098 fRadioSigma->SetState(kButtonDown);
1099 fRadioCumulative->SetState(kButtonUp);
1100 fRadioIntegrate->SetState(kButtonUp);
1101 break;
1102 case 112: // 1D draw cumulative
1103 fRadioNorm->SetState(kButtonUp);
1104 fRadioSigma->SetState(kButtonUp);
1105 fRadioCumulative->SetState(kButtonDown);
1106 fRadioIntegrate->SetState(kButtonUp);
1107 break;
1108 case 113: // 1D draw integral
1109 fRadioNorm->SetState(kButtonUp);
1110 fRadioSigma->SetState(kButtonUp);
1111 fRadioCumulative->SetState(kButtonUp);
1112 fRadioIntegrate->SetState(kButtonDown);
1113 break;
1114 }
1115 DoNewSelection();
1116}
1117
1118//________________________________________________________________________________________
1119void AliBaseCalibViewerGUI::HandleButtonsStat(Int_t id) {
1120 //
1121 // handles statistic check boxes
1122 // checks each checkbox if checked
1123 // if the checkbox is checked, appends 'n' for name, 'e' for entries, ...
1124 // to a TString, passes this TString to gStyle->SetOptStat(...)
1125 //
1126 if (id == -1) {
1127 TGButton *btn = (TGButton *) gTQSender;
1128 id = btn->WidgetId();
1129 }
1130 TString statOpt("");
1131 if (fChkStatName->GetState() == kButtonDown) statOpt.Append("n");
1132 if (fChkStatEntries->GetState() == kButtonDown) statOpt.Append("e");
1133 if (fChkStatMean->GetState() == kButtonDown && fChkStatMeanPM->GetState() == kButtonUp) statOpt.Append("m");
1134 if (fChkStatMeanPM->GetState() == kButtonDown) statOpt.Append("M");
1135 if (fChkStatRMS->GetState() == kButtonDown && fChkStatRMSPM->GetState() == kButtonUp) statOpt.Append("r");
1136 if (fChkStatRMSPM->GetState() == kButtonDown) statOpt.Append("R");
1137 if (fChkStatUnderflow->GetState() == kButtonDown) statOpt.Append("u");
1138 if (fChkStatOverflow->GetState() == kButtonDown) statOpt.Append("o");
1139 if (fChkStatIntegral->GetState() == kButtonDown) statOpt.Append("i");
1140 if (fChkStatSkewness->GetState() == kButtonDown && fChkStatSkewnessPM->GetState() == kButtonUp) statOpt.Append("s");
1141 if (fChkStatSkewnessPM->GetState() == kButtonDown) statOpt.Append("S");
1142 if (fChkStatKurtosis->GetState() == kButtonDown && fChkStatKurtosisPM->GetState() == kButtonUp) statOpt.Append("k");
1143 if (fChkStatKurtosisPM->GetState() == kButtonDown) statOpt.Append("K");
1144
1145 gStyle->SetOptStat(statOpt);
1146 DoNewSelection();
1147}
1148
1149//________________________________________________________________________________________
1150void AliBaseCalibViewerGUI::HandleButtonsNoRedraw(Int_t id) {
1151 //
1152 // handles label & scaling checkboxes
1153 // without redrawing (not necessary, faster like this)
1154 //
1155 if (id == -1) {
1156 TGButton *btn = (TGButton *) gTQSender;
1157 id = btn->WidgetId();
1158 }
1159
1160 switch (id) {
1161 case 40: // fTxtSetMin
1162 fChkSetMin->SetState(kButtonDown);
1163 break;
1164 case 41: // fTxtSetMax
1165 fChkSetMax->SetState(kButtonDown);
1166 break;
1167 case 50: // fTxtLabelTitle
1168 fChkLabelTitle->SetState(kButtonDown);
1169 break;
1170 case 51: // fTxtLabelXaxis
1171 fChkLabelXaxis->SetState(kButtonDown);
1172 break;
1173 case 52: // fTxtLabelXaxis
1174 fChkLabelYaxis->SetState(kButtonDown);
1175 break;
1176 }
1177 SetMinMaxLabel();
1178}
1179
1180//________________________________________________________________________________________
1181void AliBaseCalibViewerGUI::ReplacePlaceHolders(TString &str)
1182{
1183 //
1184 // replace the defined placeholders in the custom draw string and cut string
1185 //
1186 TString drawPlaceHolder("#draw#");
1187 TString normPlaceHolder("#norm#");
1188
1189 //current draw variable
1190 TString desiredData("");
1191 if (fListVariables->GetSelectedEntry()){
1192 desiredData += ((TGTextLBEntry*)(fListVariables->GetSelectedEntry()))->GetTitle();
1193 str.ReplaceAll(drawPlaceHolder,desiredData);
1194 }
1195
1196 //current normalisation
1197 TString normalizationData("");
1198 if (fListNormalization->GetSelectedEntry()){
1199 normalizationData += ((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle();
1200 if (! (TString(((TGTextLBEntry*)(fListNormalization->GetSelectedEntry()))->GetTitle())).BeginsWith("Fit"))
1201 if ( normalizationData.BeginsWith("_") ) normalizationData = desiredData+normalizationData;
1202 if ( fListVariables->FindEntry(normalizationData.Data()) )
1203 normalizationData+="~";
1204 str.ReplaceAll(normPlaceHolder,normalizationData);
1205 }
1206}
1207
1208//________________________________________________________________________________________
1209void AliBaseCalibViewerGUI::DoNewSelection() {
1210 //
1211 // decides whether to redraw if user makes another selection
1212 //
1213 if (fChkAuto->GetState() == kButtonDown) DoDraw();
1214}
1215
1216//________________________________________________________________________________________
1217void AliBaseCalibViewerGUI::SavePicture() {
1218 //
1219 // saves the current picture
1220 //
1221 // use the following combination of file type and save options:
1222 // (see also TCanvas::Print)
1223 //
1224 // "ps" - Postscript file is produced (see special cases below)
1225 // "Portrait" - Postscript file is produced (Portrait)
1226 // "Landscape" - Postscript file is produced (Landscape)
1227 // "eps" - an Encapsulated Postscript file is produced
1228 // "Preview" - an Encapsulated Postscript file with preview is produced.
1229 // "pdf" - a PDF file is produced
1230 // "svg" - a SVG file is produced
1231 // "gif" - a GIF file is produced
1232 // "gif+NN" - an animated GIF file is produced, where NN is delay in 10ms units
1233 // "xpm" - a XPM file is produced
1234 // "png" - a PNG file is produced
1235 // "jpg" - a JPEG file is produced
1236 // "tiff" - a TIFF file is produced
1237 // "cxx" - a C++ macro file is produced
1238 // "xml" - a XML file
1239 // "root" - a ROOT binary file
1240
1241 const char *kSaveAsTypes[] = {
1242 "Postscript", "*.ps",
1243 "Encapsulated Postscript", "*.eps",
1244 "PDF", "*.pdf",
1245 "JPEG", "*.jpg",
1246 "PNG", "*.png",
1247 "TIFF", "*.tiff",
1248 "GIF", "*.gif",
1249 "XPM", "*.xpm",
1250 "SVG", "*.svg",
1251 "XML", "*.xml",
1252 "C++ macro", "*.cxx",
1253 "Macro file", "*.C",
1254 "ROOT file", "*.root",
1255 "All file", "*",
1256 0, 0
1257 };
1258 TString addSaveOpt("");
1259 if (fChkAddSaveOpt->GetState() == kButtonDown)
1260 addSaveOpt += fComboAddSaveOpt->GetTextEntry()->GetText();
1261 TString dir(".");
1262 TGFileInfo fi;
1263 fi.fFileTypes = kSaveAsTypes;
1264 fi.fOverwrite = kFALSE;
1265 new TGFileDialog(gClient->GetRoot(), gClient->GetRoot(), kFDSave, &fi);
1266 if (fi.fFilename && strlen(fi.fFilename)) {
1267 if (addSaveOpt != "")
1268 fCanvMain->GetCanvas()->Print(fi.fFilename, addSaveOpt.Data());
1269 else
1270 fCanvMain->GetCanvas()->Print(fi.fFilename);
1271 }
1272}
1273
1274//________________________________________________________________________________________
1275void AliBaseCalibViewerGUI::GetMinMax() {
1276 //
1277 // Read current Min & Max from the plot and set it to fTxtSetMin & fTxtSetMax
1278 //
1279 if (fChkGetMinMaxAuto->GetState() == kButtonUp) return;
1280 TList* listOfPrimitives = fCanvMain->GetCanvas()->GetListOfPrimitives();
1281 TObject* ptr = 0;
1282 for (Int_t i = 0; i < listOfPrimitives->GetEntries(); i++) {
1283 ptr = listOfPrimitives->At(i);
1284 if ( ptr->InheritsFrom("TH1") ) break;
1285 }
1286 if ( ptr != 0 && !ptr->InheritsFrom("TH1") ) return; // if the loop did not find a TH1
1287 TH1 *hist = (TH1*)ptr;
1288
1289 if (fRadio2D->GetState() == kButtonDown) {
1290 if (fChkSetMax->GetState() == kButtonUp)
1291 fTxtSetMax->SetText(Form("%f", hist->GetMaximum()));
1292 if (fChkSetMin->GetState() == kButtonUp)
1293 fTxtSetMin->SetText(Form("%f", hist->GetMinimum()));
1294 }
1295 else if (fRadio1D->GetState() == kButtonDown) {
1296 if (fChkSetMax->GetState() == kButtonUp)
1297 fTxtSetMax->SetText( Form("%f", hist->GetXaxis()->GetXmax()) );
1298 if (fChkSetMin->GetState() == kButtonUp)
1299 fTxtSetMin->SetText( Form("%f", hist->GetXaxis()->GetXmin()) );
1300 }
1301}
1302
1303//________________________________________________________________________________________
1304void AliBaseCalibViewerGUI::SetMinMaxLabel() {
1305 //
1306 // Set Minimum, Maximum and labels without redrawing the plot
1307 // (faster)
1308 //
1309
1310 // search for histogram
1311 TList* listOfPrimitives = fCanvMain->GetCanvas()->GetListOfPrimitives();
1312 TObject* ptr = 0;
1313 for (Int_t i = 0; i < listOfPrimitives->GetEntries(); i++) {
1314 ptr = listOfPrimitives->At(i);
1315 if ( ptr->InheritsFrom("TH1") ) break;
1316 }
1317 if ( ptr == 0 || !ptr->InheritsFrom("TH1") ) { // if the loop did not find a TH1
1318 fCanvMain->GetCanvas()->Update();
1319 Warning("SetMinMaxLabel","No Histogram found!");
1320 return;
1321 // unable to find histogram, no min and max wil be read out
1322 }
1323
1324 TH1 *hist = (TH1*)ptr;
1325 TString minTxt(fTxtSetMin->GetText());
1326 TString maxTxt(fTxtSetMax->GetText());
1327
1328 // set min and max according to specified values, if checkbox is checked
1329 if (fRadio2D->GetState() == kButtonDown) {
1330 if (fChkSetMax->GetState() == kButtonDown && fChkSetMax->GetState() == kButtonDown &&(maxTxt.IsDigit() || maxTxt.IsFloat()) )
1331 hist->SetMaximum(maxTxt.Atof());
1332 if (fChkSetMax->GetState() == kButtonUp)
1333 hist->SetMaximum(-1111); // default value, to unzoom
1334 if (fChkSetMin->GetState() == kButtonDown && (minTxt.IsDigit() || minTxt.IsFloat()) )
1335 hist->SetMinimum(minTxt.Atof());
1336 if (fChkSetMin->GetState() == kButtonUp)
1337 hist->SetMinimum(-1111); // default value, to unzoom
1338 }
1339 else if (fRadio2D->GetState() == kButtonDown) {
1340 if (fChkSetMin->GetState() == kButtonDown &&
1341 fChkSetMax->GetState() == kButtonDown && hist->GetXaxis())
1342 hist->GetXaxis()->SetRangeUser(hist->GetXaxis()->GetXmin(), hist->GetXaxis()->GetXmax());
1343 else if (fChkSetMax->GetState() == kButtonDown && hist->GetXaxis())
1344 hist->GetXaxis()->SetRangeUser(hist->GetXaxis()->GetXmin(), maxTxt.Atof());
1345 else if (fChkSetMin->GetState() == kButtonDown && hist->GetXaxis())
1346 hist->GetXaxis()->SetRangeUser(minTxt.Atof(), hist->GetXaxis()->GetXmax());
1347 hist->SetTitle(hist->GetTitle()); // trick to update the histogram
1348 }
1349
1350 // get min and max from plot
1351 GetMinMax();
1352
1353 // set labels according to specification, if cehckboxes are checked
1354 if (fChkLabelTitle->GetState() == kButtonDown)
1355 hist->SetTitle(fTxtLabelTitle->GetText());
1356 if (fChkLabelXaxis->GetState() == kButtonDown)
1357 hist->GetXaxis()->SetTitle(fTxtLabelXaxis->GetText());
1358 if (fChkLabelYaxis->GetState() == kButtonDown)
1359 hist->GetYaxis()->SetTitle(fTxtLabelYaxis->GetText());
1360 // get and/or set labels and title
1361 if (fChkLabelGetAuto->GetState() == kButtonDown) {
1362 fTxtLabelTitle->SetText(hist->GetTitle());
1363 fTxtLabelXaxis->SetTitle(hist->GetXaxis()->GetTitle());
1364 fTxtLabelYaxis->SetTitle(hist->GetYaxis()->GetTitle());
1365 }
1366 hist->SetTitle(hist->GetTitle()); // trick to update the histogram
1367 fCanvMain->GetCanvas()->Update();
1368}
1369
1370//________________________________________________________________________________________
1371void AliBaseCalibViewerGUI::UnchekAllStat() {
1372 //
1373 // Disable all statistical legend entries, no statistical legend.
1374 //
1375 fChkStatName->SetState(kButtonUp);
1376 fChkStatEntries->SetState(kButtonUp);
1377 fChkStatMean->SetState(kButtonUp);
1378 fChkStatMeanPM->SetState(kButtonUp);
1379 fChkStatRMS->SetState(kButtonUp);
1380 fChkStatRMSPM->SetState(kButtonUp);
1381 fChkStatUnderflow->SetState(kButtonUp);
1382 fChkStatOverflow->SetState(kButtonUp);
1383 fChkStatIntegral->SetState(kButtonUp);
1384 fChkStatSkewness->SetState(kButtonUp);
1385 fChkStatSkewnessPM->SetState(kButtonUp);
1386 fChkStatKurtosis->SetState(kButtonUp);
1387 fChkStatKurtosisPM->SetState(kButtonUp);
1388
1389 HandleButtonsStat(0);
1390}