Logo ROOT   6.18/05
Reference Guide
TH2Editor.cxx
Go to the documentation of this file.
1// @(#)root/ged:$Id$
2// Author: Carsten Hof 09/08/04
3// Authors mail: Carsten_Hof@web.de
4
5/*************************************************************************
6 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
7 * All rights reserved. *
8 * *
9 * For the licensing terms see $ROOTSYS/LICENSE. *
10 * For the list of contributors see $ROOTSYS/README/CREDITS. *
11 *************************************************************************/
12
13//////////////////////////////////////////////////////////////////////////
14// //
15// TH2Editor //
16// Editor for changing TH2 histogram attributes, rebinning & fitting. //
17// For all possible draw options (there are a few which are not imple- //
18// mentable in a graphical user interface) see THistPainter::Paint in //
19// root/histpainter/THistPainter.cxx //
20//
21//Begin_Html
22/*
23<img src="gif/TH2Editor_1.gif">
24*/
25//End_Html
26//Begin_Html
27/*
28<img src="gif/TH2Editor_2.gif">
29*/
30//End_Html
31// These changes can be made via the TH2Editor: //
32// Style Tab: //
33// 'Line' : change Line attributes (color, thickness) //
34// see TAttLineEditor //
35// 'Fill' : change Fill attributes (color, pattern) //
36// see TAttFillEditor //
37// 'Title' : TextEntry: set the title of the histogram //
38// 'Histogram': change the draw options of the histogram //
39// 'Plot' : Radiobutton: draw a 2D or 3D plot of the histogram //
40// according to the Plot dimension there will be //
41// different drawing possibilities (ComboBoxes/ //
42// CheckBoxes) //
43// 2d Plot: //
44// 'Contour' : ComboBox: draw a contour plot (None, Cont0..4) //
45// 'Cont #' : TGNumberEntry: set the number of Contours //
46// 2d Plot checkboxes: //
47// 'Arrow' : arrow mode. Shows gradient between adjacent cells //
48// 'Col' : a box is drawn for each cell with a color scale //
49// varying with contents //
50// 'Text' : Draw bin contents as text //
51// 'Box' : a box is drawn for each cell with surface //
52// proportional to contents //
53// 'Scat' : Draw a scatter-plot (default) //
54// 'Palette' : the color palette is drawn //
55// //
56// 3d Plot: //
57// 'Type' : ComboBox: set histogram type Lego or Surface-Plot //
58// draw(Lego, Lego1..4, Surf, Surf1..5) //
59// see THistPainter::Paint //
60// 'Coords' : ComboBox: set the coordinate system (Cartesian, .. //
61// Spheric) see THistPainter::Paint //
62// 'Cont #' : TGNumberEntry: set the number of Contours (for e.g. //
63// Lego2 drawoption //
64// 3d Plot checkboxes: //
65// 'Errors' : draw errors in a cartesian lego plot //
66// 'Palette' : the color palette is drawn //
67// 'Front' : draw the front box of a cartesian lego plot //
68// 'Back' : draw the back box of a cartesian lego plot //
69// Available for a 3D lego plot: //
70// 'Bar' : change the bar attributes //
71// 'W' : change Bar Width //
72// 'O' : change Bar Offset //
73// Further Editor: //
74// 'Marker' : change the Marker attributes (color, appearance, //
75// thickness) see TAttMarkerEditor //
76// //
77//Begin_Html
78/*
79<img src="gif/TH2Editor1_1.gif">
80*/
81//End_Html
82//Begin_Html
83/*
84<img src="gif/TH2Editor1_2.gif">
85*/
86//End_Html
87// //
88// Rebinning Tab: //
89// This Tab has two different layouts. One is for a histogram which//
90// is not drawn from an ntuple. The other one is available for a //
91// histogram which is drawn from an ntuple. In this case the rebin //
92// algorithm can create a rebinned histogram from the original data//
93// i.e. the ntuple. //
94// To see te differences do for example: //
95// TFile f("hsimple.root"); //
96// hpxpy->Draw("Lego2"); // non ntuple histogram //
97// ntuple->Draw("px:py","","Lego2"); // ntuple histogram //
98// Non ntuple histogram: //
99// 'Rebin': with the Sliders (one for the x, one for the y axis) //
100// the number of bins (shown in the field below the //
101// Slider) can be changed to any number which divides //
102// the number of bins of the original histogram. //
103// Pushing 'Apply' will delete the origin histogram and //
104// replace it by the rebinned one on the screen. //
105// Pushing 'Ignore' the origin histogram will be restored//
106// Histogram drawn from an ntuple: //
107// 'Rebin' with the sliders the number of bins can be enlarged by//
108// a factor of 2,3,4,5 (moving to the right) or reduced //
109// by a factor of 1/2, 1/3, 1/4, 1/5 //
110// 'BinOffset': with the BinOffset slider the origin of the //
111// histogram can be changed within one binwidth //
112// Using this slider the effect of binning the data into //
113// bins can be made visible => statistical fluctuations //
114// 'Axis Range': with the DoubleSlider it is possible to zoom into//
115// the specified axis range. It is also possible to set //
116// the upper and lower limit in fields below the slider //
117// 'Delayed drawing': all the Binning sliders can be set to delay //
118// draw mode. Then the changes on the histogram are only //
119// updated, when the Slider is released. This should be //
120// activated if the redrawing of the histogram is too //
121// time consuming. //
122//////////////////////////////////////////////////////////////////////////
123
124
125#include "TH2Editor.h"
126#include "TGedEditor.h"
127#include "TGComboBox.h"
128#include "TGTextEntry.h"
129#include "TGToolTip.h"
130#include "TGLabel.h"
131#include "TVirtualPad.h"
132#include "TStyle.h"
133#include "TString.h"
134#include "TGButtonGroup.h"
135#include "TGNumberEntry.h"
136#include "TG3DLine.h"
137#include "TGDoubleSlider.h"
138#include "TGSlider.h"
139#include "TView.h"
140#include "TCanvas.h"
141#include "TGedPatternSelect.h"
142#include "TGColorSelect.h"
143#include "TColor.h"
144#include "TTreePlayer.h"
145#include "TSelectorDraw.h"
146#include "TGTab.h"
147#include "TGMsgBox.h"
148#include "TH2.h"
149#include "TROOT.h"
150
151
153
171
172////////////////////////////////////////////////////////////////////////////////
173/// Constructor of histogram attribute GUI.
174
176 Int_t height, UInt_t options, Pixel_t back)
177 : TGedFrame(p, width, height, options | kVerticalFrame, back),
178 fHist(0),
179 fBin(0),
180 fBinHist(0)
181{
182 MakeTitle("Title");
183
184 // Histogram title
185 fTitlePrec = 2;
186 fTitle = new TGTextEntry(this, new TGTextBuffer(50), kTH2_TITLE);
188 fTitle->SetToolTipText("Enter the histogram title string");
189 AddFrame(fTitle, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
190
191
192 // 2D or 3D Plot?
193 TGCompositeFrame *f2 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
194 fDimGroup = new TGHButtonGroup(f2,"Plot");
196 fDim->SetToolTipText("A 2-d plot of the histogram is dawn");
198 fDim0->SetToolTipText("A 3-d plot of the histogram is dawn");
201 fDimGroup->Show();
203 f2->AddFrame(fDimGroup, new TGLayoutHints(kLHintsTop, 4, 1, 0, 0));
204 AddFrame(f2, new TGLayoutHints(kLHintsTop, 1, 1, 2, 5));
205
206 // 2D Plot drawoptions
207 f6 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
208 AddFrame(f6, new TGLayoutHints(kLHintsTop, 3, 1, 4, 2));
209
210 TGCompositeFrame *f7 = new TGCompositeFrame(f6, 40, 20);
211 f6->AddFrame(f7, new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
212
213 TGLabel *fAddLabel = new TGLabel(f7, "Contour:");
214 f7->AddFrame(fAddLabel, new TGLayoutHints(kLHintsLeft, 6, 4, 4, 4));
215
216 fColContLbl = new TGLabel(f7, "Cont #:");
217 f7->AddFrame(fColContLbl, new TGLayoutHints( kLHintsLeft, 6, 4, 4, 4));
218
219 fAddArr = new TGCheckButton(f7, "Arrow", kARROW_ONOFF);
220 fAddArr ->SetToolTipText("Shows gradient between adjacent cells");
221 f7->AddFrame(fAddArr, new TGLayoutHints(kLHintsLeft, 6, 1, 2, 0));
222
223 fAddCol = new TGCheckButton(f7, "Col", kCOL_ONOFF);
224 fAddCol ->SetToolTipText("A box is drawn for each cell with a color scale varying with contents");
225 f7->AddFrame(fAddCol, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
226
227 fAddText = new TGCheckButton(f7, "Text", kTEXT_ONOFF);
228 fAddText ->SetToolTipText("Draw bin contents as text");
229 f7->AddFrame(fAddText, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 3));
230
232 f6->AddFrame(f8, new TGLayoutHints(kLHintsLeft, 5, 1, 0, 0));
233
235 f8->AddFrame(fContCombo, new TGLayoutHints(kLHintsLeft, 6, 1, 2, 1));
236 fContCombo->Resize(61, 20);
237 fContCombo->Associate(this);
238
239 fContLevels = new TGNumberEntry(f8, 20, 0, kCONT_LEVELS,
243 f8->AddFrame(fContLevels, new TGLayoutHints(kLHintsLeft, 6, 1, 3, 1));
244 fContLevels->GetNumberEntry()->SetToolTipText("Set number of contours (1..99)");
245 fContLevels->Resize(60,20);
246
247 fAddBox = new TGCheckButton(f8, "Box", kBOX_ONOFF);
248 fAddBox ->SetToolTipText("A box is drawn for each cell with surface proportional to contents");
249 f8->AddFrame(fAddBox, new TGLayoutHints(kLHintsLeft, 6, 1, 3, 0));
250
251 fAddScat = new TGCheckButton(f8, "Scat", kSCAT_ONOFF);
252 fAddScat ->SetToolTipText("Draw a scatter-plot");
253 f8->AddFrame(fAddScat, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
254
255 fAddPalette = new TGCheckButton(f8, "Palette", kPALETTE_ONOFF);
256 fAddPalette ->SetToolTipText("Add color palette beside the histogram");
257 f8->AddFrame(fAddPalette, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
258
259 f9 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
260 AddFrame(f9, new TGLayoutHints(kLHintsTop, 3, 1, 2, 0));
261
262 TGCompositeFrame *f10 = new TGCompositeFrame(f9, 40, 20);
263 f9->AddFrame(f10, new TGLayoutHints(kLHintsLeft, 0, 0, 3, 0));
264
265 TGLabel *fType = new TGLabel(f10, "Type:");
266 f10->AddFrame(fType, new TGLayoutHints(kLHintsNormal, 1, 1, 1, 1));
267
268 TGLabel *fCoords = new TGLabel(f10, "Coords:");
269 f10->AddFrame(fCoords, new TGLayoutHints(kLHintsLeft, 1, 1, 5, 1));
270
271 fColContLbl1 = new TGLabel(f10, "Cont #:");
272 f10->AddFrame(fColContLbl1, new TGLayoutHints( kLHintsLeft, 1, 1, 5, 3));
273
274 fAddFB = new TGCheckButton(f10, "Front", kFRONTBOX_ONOFF);
275 fAddFB ->SetToolTipText("Supress the drawing of the front box");
276 f10->AddFrame(fAddFB, new TGLayoutHints(kLHintsLeft, 0, 1, 6, 0));
277 fAddBB = new TGCheckButton(f10, "Back", kBACKBOX_ONOFF);
278 fAddBB ->SetToolTipText("Supress the drawing of the back box");
279 f10->AddFrame(fAddBB, new TGLayoutHints(kLHintsLeft, 0, 1, 3, 0));
280
281 TGCompositeFrame *f11 = new TGCompositeFrame(f9, 40, 20);
282 f9->AddFrame(f11, new TGLayoutHints(kLHintsLeft, 5, 1, 0, 0));
283
285 f11->AddFrame(fTypeCombo, new TGLayoutHints(kLHintsLeft, 0, 1, 2, 1));
286 fTypeCombo->Resize(80, 20);
287 fTypeCombo->Associate(this);
288
290 f11->AddFrame(fCoordsCombo, new TGLayoutHints(kLHintsLeft, 0, 1, 2, 1));
291 fCoordsCombo->Resize(80, 20);
292 fCoordsCombo->Associate(this);
293
294 fContLevels1 = new TGNumberEntry(f11, 20, 0, kCONT_LEVELS1,
298 fContLevels1->GetNumberEntry()->SetToolTipText("Set number of contours (1..99)");
299 fContLevels1->Resize(78,20);
300 f11->AddFrame(fContLevels1, new TGLayoutHints(kLHintsLeft, 0, 1, 2, 1));
301
302 fAddError = new TGCheckButton(f11, "Errors", kERROR_ONOFF);
303 fAddError ->SetToolTipText("Add color palette beside the histogram");
304 f11->AddFrame(fAddError, new TGLayoutHints(kLHintsLeft, 0, 1, 4, 0));
305 fAddPalette1 = new TGCheckButton(f11, "Palette", kPALETTE_ONOFF1);
306 fAddPalette1 ->SetToolTipText("Add color palette beside the histogram");
307 f11->AddFrame(fAddPalette1, new TGLayoutHints(kLHintsLeft, 0, 1, 3, 0));
308
309
310 // Bin bar settings
311 f12 = new TGCompositeFrame(this, 145, 10, kHorizontalFrame |
315 f12->AddFrame(new TGLabel(f12,"Bar"),
316 new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
318 new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
319 AddFrame(f12, new TGLayoutHints(kLHintsTop,0,0,6,4));
320
321 f13 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
322 TGLabel *fWidthLbl = new TGLabel(f13, "W:");
323 f13->AddFrame(fWidthLbl, new TGLayoutHints( kLHintsLeft, 1, 3, 4, 1));
324 fBarWidth = new TGNumberEntry(f13, 1.00, 6, kBAR_WIDTH,
328 fBarWidth->GetNumberEntry()->SetToolTipText("Set bar chart width");
329 fBarWidth->Resize(45,20);
330 f13->AddFrame(fBarWidth, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 1));
331
332 TGLabel *fOffsetLbl = new TGLabel(f13, "O:");
333 f13->AddFrame(fOffsetLbl, new TGLayoutHints(kLHintsLeft, 6,3, 4, 1));
334 fBarOffset = new TGNumberEntry(f13, 0.00, 5, kBAR_OFFSET,
338 fBarOffset->GetNumberEntry()->SetToolTipText("Set bar chart offset");
339 fBarOffset->Resize(50,20);
340 f13->AddFrame(fBarOffset, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 1));
341 AddFrame(f13, new TGLayoutHints(kLHintsTop, 1, 1, 0, 4));
342
343
344 // Set the color and pattern of the Frame (only for Cartesian 3D plot).
345 f38 = new TGCompositeFrame(this, 80, 20, kVerticalFrame);
350 f39->AddFrame(new TGLabel(f39,"Frame Fill"),
351 new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
352 f39->AddFrame(new TGHorizontal3DLine(f39),
353 new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
354 f38->AddFrame(f39, new TGLayoutHints(kLHintsTop,0,0,6,1));
355
357 fFrameColor = new TGColorSelect(f21, 0, kCOLOR);
358 f21->AddFrame(fFrameColor, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 0));
361 f21->AddFrame(fFramePattern, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 0));
363 f38->AddFrame(f21, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
365
366 fCutString = "";
367
368 CreateBinTab();
369
370 // add itself in the least of cleanups to be notified when attached histogram is deleted
371 gROOT->GetListOfCleanups()->Add(this);
372}
373
374////////////////////////////////////////////////////////////////////////////////
375/// Create the Binning tab.
376
378{
379 fBin = CreateEditorTabSubFrame("Binning");
380
381 // Editor for rebinning a histogram which does NOT derive from an Ntuple
383 TGCompositeFrame *title1 = new TGCompositeFrame(fBinXCont, 145, 10,
388 title1->AddFrame(new TGLabel(title1, "Rebin"),
389 new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
390 title1->AddFrame(new TGHorizontal3DLine(title1),
391 new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
392 fBinXCont->AddFrame(title1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
393
396 TGLabel *binSliderXLbl = new TGLabel(f22,"x:");
397 f22->AddFrame(binSliderXLbl,
398 new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4,0, 4, 1));
399 fBinXSlider = new TGHSlider(f22, 100, kSlider1 | kScaleBoth);
400 fBinXSlider->Resize(107,20);
401 f22->AddFrame(fBinXSlider, new TGLayoutHints(kLHintsLeft, 2,0,0,3));
402 fBinXCont->AddFrame(f22, new TGLayoutHints(kLHintsTop, 3, 7, 3, 5));
403
406 TGLabel *binXLabel1 = new TGLabel(f23, "# of Bins:");
407 f23->AddFrame(binXLabel1, new TGLayoutHints(kLHintsLeft, 20, 1, 2, 1));
410 ((TGTextEntry*)fBinXNumberEntry)->SetToolTipText("Set the number of x axis bins in the rebinned histogram");
411 fBinXNumberEntry->Resize(57,20);
412 f23->AddFrame(fBinXNumberEntry, new TGLayoutHints(kLHintsRight, 8, 0, 0, 0));
413 fBinXCont->AddFrame(f23, new TGLayoutHints(kLHintsTop, 0, 7, 3, 4));
414
417 TGLabel *binSliderYLbl = new TGLabel(f37,"y:");
418 f37->AddFrame(binSliderYLbl,
419 new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4,0, 4, 1));
420 fBinYSlider = new TGHSlider(f37, 100, kSlider1 | kScaleBoth);
421 fBinYSlider->Resize(107,20);
422 f37->AddFrame(fBinYSlider, new TGLayoutHints(kLHintsLeft, 1,0,0,3));
423 fBinXCont->AddFrame(f37, new TGLayoutHints(kLHintsTop, 3, 7, 3, 5));
424
427 TGLabel *binYLabel1 = new TGLabel(f36, "# of Bins:");
428 f36->AddFrame(binYLabel1, new TGLayoutHints(kLHintsLeft, 20, 1, 2, 1));
431 ((TGTextEntry*)fBinYNumberEntry)->SetToolTipText("Set the number of y axis bins in the rebinned histogram");
432 fBinYNumberEntry->Resize(57,20);
433 f36->AddFrame(fBinYNumberEntry, new TGLayoutHints(kLHintsRight, 8, 0, 0, 0));
434 fBinXCont->AddFrame(f36, new TGLayoutHints(kLHintsTop, 0, 7, 3, 4));
435
436 // Text buttons Apply & Ignore for rebinned histogram shown on the screen.
437 TGCompositeFrame *f24 = new TGCompositeFrame(fBinXCont, 118, 20,
440 fApply = new TGTextButton(f24, " &Apply ");
441 f24->AddFrame(fApply,
442 new TGLayoutHints(kLHintsExpandX | kLHintsLeft ,0, 3, 4, 4));
443 fCancel = new TGTextButton(f24, " &Ignore ");
444 f24->AddFrame(fCancel,
445 new TGLayoutHints(kLHintsExpandX | kLHintsLeft, 3, 0, 4, 4));
446 fBinXCont->AddFrame(f24, new TGLayoutHints(kLHintsTop, 20, 3, 3, 4));
448
449 // Widgets for rebinning a histogram which derives from an Ntuple
450
452 TGCompositeFrame *title2 = new TGCompositeFrame(fBinXCont1, 145, 10,
457 title2->AddFrame(new TGLabel(title2, "X-Axis"),
458 new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
459 title2->AddFrame(new TGHorizontal3DLine(title2),
460 new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
461 fBinXCont1->AddFrame(title2, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
462
465 fBinXSlider1 = new TGHSlider(f26, 100, kSlider1 | kScaleBoth);
466 fBinXSlider1->Resize(120,20);
470 f26->AddFrame(fBinXSlider1, new TGLayoutHints(kLHintsLeft, 2,0,0,0));
471 fBinXCont1->AddFrame(f26, new TGLayoutHints(kLHintsTop, 3, 7, 3, 0));
472
473 // Lettering of the Rebin Slider
476 TGLabel *l1 = new TGLabel(f27, "-5");
477 f27->AddFrame(l1, new TGLayoutHints(kLHintsLeft, 5, 1, -1, 0));
478 TGLabel *l2 = new TGLabel(f27, "-2");
479 f27->AddFrame(l2, new TGLayoutHints(kLHintsLeft, 31, 2, -1, 0));
480 TGLabel *l3 = new TGLabel(f27, "2");
481 f27->AddFrame(l3, new TGLayoutHints(kLHintsLeft, 21, 2, -1, 0));
482 TGLabel *l4 = new TGLabel(f27, "5");
483 f27->AddFrame(l4, new TGLayoutHints(kLHintsLeft, 36, 3, -1, 0));
484 fBinXCont1->AddFrame(f27, new TGLayoutHints(kLHintsTop, 0, 0, 0, 0));
485
486 TGCompositeFrame *f28 = new TGCompositeFrame(fBinXCont1, 140, 20,
488 TGLabel *binXLabel2 = new TGLabel(f28, "# of Bins:");
489 f28->AddFrame(binXLabel2, new TGLayoutHints(kLHintsLeft, 8, 1, 4, 1));
490
493 ((TGTextEntry*)fBinXNumberEntry1)->SetToolTipText("Set the number of x axis bins in the rebinned histogram");
496 new TGLayoutHints(kLHintsLeft, 21, 0, 2, 0));
497 fBinXCont1->AddFrame(f28, new TGLayoutHints(kLHintsTop, 0, 7, 2, 4));
498
501 TGLabel *xOffsetLbl = new TGLabel(f29, "BinOffset:");
502 f29->AddFrame(xOffsetLbl, new TGLayoutHints(kLHintsLeft, 7, 1, 2, 1));
507 0., 1.);
508 ((TGTextEntry*)fXOffsetNumberEntry)->SetToolTipText("Add an x-offset to the origin of the histogram");
511 new TGLayoutHints(kLHintsRight, 21, 0, 0, 0));
512 fBinXCont1->AddFrame(f29, new TGLayoutHints(kLHintsTop, 0, 7, 3, 1));
513
516 fXBinOffsetSld = new TGHSlider(f30, 100, kSlider1 | kScaleBoth);
517 fXBinOffsetSld->Resize(120,20);
519 fBinXCont1->AddFrame(f30, new TGLayoutHints(kLHintsTop, 3, 7, 3, 3));
521
522 // Same for Y-Axis:
523 // Widgets for rebinning a histogram which derives from an Ntuple
524
526 TGCompositeFrame *title3 = new TGCompositeFrame(fBinYCont1, 145, 10,
531 title3->AddFrame(new TGLabel(title3, "Y-Axis"),
532 new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
533 title3->AddFrame(new TGHorizontal3DLine(title3),
534 new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
535 fBinYCont1->AddFrame(title3, new TGLayoutHints(kLHintsTop, 0, 0, 7, 0));
536
539 fBinYSlider1 = new TGHSlider(f31, 100, kSlider1 | kScaleBoth);
540 fBinYSlider1->Resize(120,20);
544 f31->AddFrame(fBinYSlider1, new TGLayoutHints(kLHintsLeft, 2,0,0,0));
545 fBinYCont1->AddFrame(f31, new TGLayoutHints(kLHintsTop, 3, 7, 3, 0));
546
547 // Lettering of the Rebin Slider
550 TGLabel *l5 = new TGLabel(f32, "-5");
551 f32->AddFrame(l5, new TGLayoutHints(kLHintsLeft, 5, 1, -1, 0));
552 TGLabel *l6 = new TGLabel(f32, "-2");
553 f32->AddFrame(l6, new TGLayoutHints(kLHintsLeft, 31, 2, -1, 0));
554 TGLabel *l7 = new TGLabel(f32, "2");
555 f32->AddFrame(l7, new TGLayoutHints(kLHintsLeft, 21, 2, -1, 0));
556 TGLabel *l8 = new TGLabel(f32, "5");
557 f32->AddFrame(l8, new TGLayoutHints(kLHintsLeft, 36, 3, -1, 0));
558 fBinYCont1->AddFrame(f32, new TGLayoutHints(kLHintsTop, 0, 0, 0, 0));
559
560 TGCompositeFrame *f33 = new TGCompositeFrame(fBinYCont1, 140, 20,
562 TGLabel *binYLabel2 = new TGLabel(f33, "# of Bins:");
563 f33->AddFrame(binYLabel2, new TGLayoutHints(kLHintsLeft, 8, 1, 4, 1));
564
567 ((TGTextEntry*)fBinYNumberEntry1)->SetToolTipText("Set the number of Y axis bins in the rebinned histogram");
570 new TGLayoutHints(kLHintsLeft, 21, 0, 2, 0));
571 fBinYCont1->AddFrame(f33, new TGLayoutHints(kLHintsTop, 0, 7, 2, 4));
572
575 TGLabel *yOffsetLbl = new TGLabel(f34, "BinOffset:");
576 f34->AddFrame(yOffsetLbl, new TGLayoutHints(kLHintsLeft, 7, 1, 2, 1));
581 0., 1.);
582 ((TGTextEntry*)fYOffsetNumberEntry)->SetToolTipText("Add an Y-offset to the origin of the histogram");
585 new TGLayoutHints(kLHintsRight, 21, 0, 0, 0));
586 fBinYCont1->AddFrame(f34, new TGLayoutHints(kLHintsTop, 0, 7, 3, 1));
587
590 fYBinOffsetSld = new TGHSlider(f35, 100, kSlider1 | kScaleBoth);
591 fYBinOffsetSld->Resize(120,20);
594 fBinYCont1->AddFrame(f35, new TGLayoutHints(kLHintsTop, 3, 7, 3, 3));
596
597 // Axis ranges
598 TGCompositeFrame *title4 = new TGCompositeFrame(fBin, 145, 10,
603 title4->AddFrame(new TGLabel(title4, "Axis Range"),
604 new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
605 title4->AddFrame(new TGHorizontal3DLine(title4),
606 new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
607 fBin->AddFrame(title4, new TGLayoutHints(kLHintsTop, 0, 0, 5, 0));
608
610 TGLabel *fSliderXLbl = new TGLabel(f14,"x:");
611 f14->AddFrame(fSliderXLbl,
612 new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4,3, 2, 1));
613 fSliderX = new TGDoubleHSlider(f14, 1, 2);
614 fSliderX->Resize(119,20);
616 fBin->AddFrame(f14, new TGLayoutHints(kLHintsTop, 3, 7, 4, 1));
617
622 ((TGTextEntry*)fSldXMin)->SetToolTipText("Set the minimum value of the x-axis");
623 fSldXMin->Resize(57,20);
624 f17->AddFrame(fSldXMin, new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
628 ((TGTextEntry*)fSldXMax)->SetToolTipText("Set the maximum value of the x-axis");
629 fSldXMax->Resize(57,20);
630 f17->AddFrame(fSldXMax, new TGLayoutHints(kLHintsLeft, 4, 0, 0, 0));
631 fBin->AddFrame(f17, new TGLayoutHints(kLHintsTop, 20, 3, 5, 0));
632
634 TGLabel *fSliderYLbl = new TGLabel(f15,"y:");
635 f15->AddFrame(fSliderYLbl,
636 new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4,2, 4, 1));
637 fSliderY = new TGDoubleHSlider(f15, 1, 2);
638 fSliderY->Resize(119,20);
640 fBin->AddFrame(f15, new TGLayoutHints(kLHintsTop, 3, 7, 4, 1));
641
646 ((TGTextEntry*)fSldYMin)->SetToolTipText("Set the minimum value of the y-axis");
647 fSldYMin->Resize(57,20);
648 f18->AddFrame(fSldYMin, new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
652 ((TGTextEntry*)fSldYMax)->SetToolTipText("Set the maximum value of the y-axis");
653 fSldYMax->Resize(57,20);
654 f18->AddFrame(fSldYMax, new TGLayoutHints(kLHintsLeft, 4, 0, 0, 0));
655 fBin->AddFrame(f18, new TGLayoutHints(kLHintsTop, 20, 3, 5, 0));
656
658 fDelaydraw = new TGCheckButton(f20, "Delayed drawing", kDELAYED_DRAWING);
659 fDelaydraw ->SetToolTipText("Draw the new axis range when the Slider is released");
660 f20->AddFrame(fDelaydraw, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
661 fBin->AddFrame(f20, new TGLayoutHints(kLHintsTop, 2, 1, 5, 3));
662
663 fXBinOffsetSld->SetRange(0,100);
666
667 fYBinOffsetSld->SetRange(0,100);
670
673
674}
675
676////////////////////////////////////////////////////////////////////////////////
677/// Destructor.
678
680{
681 // remove itselef from the list of cleanups
682 gROOT->GetListOfCleanups()->Remove(this);
683
684 // children of TGButonGroup are not deleted
685 delete fDim;
686 delete fDim0;
687 delete fDimlh;
688 delete fDim0lh;
689
690 if (fBinHist) delete fBinHist;
691 fBinHist = 0;
692}
693
694////////////////////////////////////////////////////////////////////////////////
695/// Connect signals to slots.
696
698{
699 fTitle->Connect("TextChanged(const char *)", "TH2Editor", this, "DoTitle(const char *)");
700 fDimGroup->Connect("Clicked(Int_t)","TH2Editor",this,"DoHistView()");
701 fTypeCombo->Connect("Selected(Int_t)", "TH2Editor", this, "DoHistChanges()");
702 fCoordsCombo->Connect("Selected(Int_t)", "TH2Editor", this, "DoHistChanges()");
703 fContCombo->Connect("Selected(Int_t)", "TH2Editor", this, "DoHistChanges()");
704 fAddArr->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddArr(Bool_t)");
705 fAddBox->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddBox(Bool_t)");
706 fAddCol->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddCol(Bool_t)");
707 fAddScat->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddScat(Bool_t)");
708 fAddText->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddText(Bool_t)");
709 fAddError->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddError(Bool_t)");
710 fAddPalette->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddPalette(Bool_t)");
711 fAddPalette1->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddPalette(Bool_t)");
712 fAddFB->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddFB()");
713 fAddBB->Connect("Toggled(Bool_t)", "TH2Editor", this, "DoAddBB()");
714 fContLevels->Connect("ValueSet(Long_t)", "TH2Editor", this, "DoContLevel()");
715 (fContLevels->GetNumberEntry())->Connect("ReturnPressed()", "TH2Editor",
716 this,"DoContLevel()");
717 fContLevels1->Connect("ValueSet(Long_t)", "TH2Editor", this, "DoContLevel1()");
718 (fContLevels1->GetNumberEntry())->Connect("ReturnPressed()", "TH2Editor",
719 this,"DoContLevel1()");
720 fBarWidth->Connect("ValueSet(Long_t)", "TH2Editor", this, "DoBarWidth()");
721 (fBarWidth->GetNumberEntry())->Connect("ReturnPressed()", "TH2Editor",
722 this, "DoBarWidth()");
723 fBarOffset->Connect("ValueSet(Long_t)", "TH2Editor", this, "DoBarOffset()");
724 (fBarOffset->GetNumberEntry())->Connect("ReturnPressed()", "TH2Editor",
725 this, "DoBarOffset()");
726 fBinXSlider->Connect("PositionChanged(Int_t)","TH2Editor",this, "DoBinMoved()");
727 fBinXSlider->Connect("Released()","TH2Editor",this, "DoBinReleased()");
728 fBinXSlider->Connect("Pressed()","TH2Editor",this, "DoBinPressed()");
729 fBinYSlider->Connect("PositionChanged(Int_t)","TH2Editor",this, "DoBinMoved()");
730 fBinYSlider->Connect("Released()","TH2Editor",this, "DoBinReleased()");
731 fBinYSlider->Connect("Pressed()","TH2Editor",this, "DoBinPressed()");
732 fBinXNumberEntry->Connect("ReturnPressed()", "TH2Editor", this, "DoBinLabel()");
733 fBinYNumberEntry->Connect("ReturnPressed()", "TH2Editor", this, "DoBinLabel()");
734 fApply->Connect("Clicked()", "TH2Editor", this, "DoApply()");
735 fCancel->Connect("Pressed()", "TH2Editor", this, "DoCancel()");
736 fBinXSlider1->Connect("Released()","TH2Editor",this, "DoBinReleased1()");
737 fBinXSlider1->Connect("PositionChanged(Int_t)","TH2Editor",this, "DoBinMoved1()");
738 fBinXNumberEntry1->Connect("ReturnPressed()", "TH2Editor", this, "DoBinLabel1()");
739 fXBinOffsetSld->Connect("PositionChanged(Int_t)","TH2Editor",this, "DoOffsetMoved()");
740 fXBinOffsetSld->Connect("Released()","TH2Editor",this, "DoOffsetReleased()");
741 fXBinOffsetSld->Connect("Pressed()","TH2Editor",this, "DoOffsetPressed()");
742 fXOffsetNumberEntry->Connect("ReturnPressed()", "TH2Editor", this, "DoBinOffset()");
743 fBinYSlider1->Connect("Released()","TH2Editor",this, "DoBinReleased1()");
744 fBinYSlider1->Connect("PositionChanged(Int_t)","TH2Editor",this, "DoBinMoved1()");
745 fBinYNumberEntry1->Connect("ReturnPressed()", "TH2Editor", this, "DoBinLabel1()");
746 fYBinOffsetSld->Connect("PositionChanged(Int_t)","TH2Editor",this,"DoOffsetMoved()");
747 fYBinOffsetSld->Connect("Released()","TH2Editor",this, "DoOffsetReleased()");
748 fYBinOffsetSld->Connect("Pressed()","TH2Editor",this, "DoOffsetPressed()");
749 fYOffsetNumberEntry->Connect("ReturnPressed()", "TH2Editor", this,"DoBinOffset()");
750 fSliderX->Connect("PositionChanged()","TH2Editor",this, "DoSliderXMoved()");
751 fSliderX->Connect("Pressed()","TH2Editor",this, "DoSliderXPressed()");
752 fSliderX->Connect("Released()","TH2Editor",this, "DoSliderXReleased()");
753 fSldXMin->Connect("ReturnPressed()", "TH2Editor", this, "DoXAxisRange()");
754 fSldXMax->Connect("ReturnPressed()", "TH2Editor", this, "DoXAxisRange()");
755 fSliderY->Connect("PositionChanged()","TH2Editor",this, "DoSliderYMoved()");
756 fSliderY->Connect("Pressed()","TH2Editor",this, "DoSliderYPressed()");
757 fSliderY->Connect("Released()","TH2Editor",this, "DoSliderYReleased()");
758 fSldYMin->Connect("ReturnPressed()", "TH2Editor", this, "DoYAxisRange()");
759 fSldYMax->Connect("ReturnPressed()", "TH2Editor", this, "DoYAxisRange()");
760 fFrameColor->Connect("ColorSelected(Pixel_t)", "TH2Editor", this, "DoFillColor(Pixel_t)");
761 fFramePattern->Connect("PatternSelected(Style_t)", "TH2Editor", this, "DoFillPattern(Style_t)");
762
763 fInit = kFALSE;
764}
765
766////////////////////////////////////////////////////////////////////////////////
767/// Check if object is able to configure with this editor.
768
770{
771 if (obj == 0 || !obj->InheritsFrom(TH2::Class()) ||
772 (!strcmp(((TH2 *)obj)->GetName(),"htemp") &&
773 ((TH2*)obj)->GetEntries() == 0)) { // htemp is an empty histogram
774 return kFALSE;
775 }
776 return kTRUE;
777}
778
779////////////////////////////////////////////////////////////////////////////////
780/// Pick up the values of current histogram attributes.
781
783{
785 if (fBinHist && (obj != fHist)) {
786 //we have probably moved to a different pad.
787 //let's restore the original histogram
788 if (fHist) {
789 fHist->Reset();
797 }
798 // delete in anycase fBinHist also when fHist is zero (i.e when it has been deleted)
799 delete fBinHist;
800 fBinHist = 0;
801 if (fGedEditor->GetPad()) {
804 }
805 }
806
807 fHist = (TH2*) obj;
808
809 const char *text = fHist->GetTitle();
811 TString str = GetDrawOption();
813 str.ToUpper();
814
815 if (str == "") {
816 // default options = Scatter-Plot
817 ShowFrame(f6);
818 HideFrame(f9);
819 HideFrame(f12);
820 HideFrame(f13);
821 HideFrame(f38);
827
838 } else if (!str.Contains("LEGO") && !str.Contains("SURF")) {
839 ShowFrame(f6);
840 HideFrame(f9);
841 HideFrame(f12);
842 HideFrame(f13);
843 HideFrame(f38);
848 if (str.Contains("CONT")){
849 if (str.Contains("CONT1")) fContCombo->Select(kCONT_1);
850 else if (str.Contains("CONT2")) fContCombo->Select(kCONT_2);
851 else if (str.Contains("CONT3")) fContCombo->Select(kCONT_3);
852 else if (str.Contains("CONT4")) fContCombo->Select(kCONT_4);
853 else if (str.Contains("CONT0") || str.Contains("CONT"))
856
857 if (str.Contains("ARR")) fAddArr->SetState(kButtonDown);
859 if (str.Contains("BOX")) fAddBox->SetState(kButtonDown);
861 if (str.Contains("COL")) fAddCol->SetState(kButtonDown);
863 if (str.Contains("SCAT")) {
864 if (str=="SCAT") fAddScat->SetState(kButtonDisabled);
866 } else fAddScat->SetState(kButtonUp);
867 if (str.Contains("TEXT")) fAddText->SetState(kButtonDown);
869
871 if (str.Contains("COL") || (str.Contains("CONT") &&
872 !str.Contains("CONT2") && !str.Contains("CONT3"))) {
879
880 } else if (str.Contains("LEGO") || str.Contains("SURF")) {
881 HideFrame(f6);
882 ShowFrame(f9);
883 ShowFrame(f12);
884 ShowFrame(f13);
885 ShowFrame(f38);
888 if (str.Contains("LEGO4")) fTypeCombo->Select(kTYPE_LEGO4);
889 else if (str.Contains("LEGO3")) fTypeCombo->Select(kTYPE_LEGO3);
890 else if (str.Contains("LEGO2")) fTypeCombo->Select(kTYPE_LEGO2);
891 else if (str.Contains("LEGO1")) fTypeCombo->Select(kTYPE_LEGO1);
892 else if (str.Contains("LEGO")) fTypeCombo->Select(kTYPE_LEGO);
893 else if (str.Contains("SURF5")) fTypeCombo->Select(kTYPE_SURF5);
894 else if (str.Contains("SURF4")) fTypeCombo->Select(kTYPE_SURF4);
895 else if (str.Contains("SURF3")) fTypeCombo->Select(kTYPE_SURF3);
896 else if (str.Contains("SURF2")) fTypeCombo->Select(kTYPE_SURF2);
897 else if (str.Contains("SURF1")) fTypeCombo->Select(kTYPE_SURF1);
898 else if (str.Contains("SURF")) fTypeCombo->Select(kTYPE_SURF);
899
900
901 if (str.Contains("CYL")) fCoordsCombo->Select(kCOORDS_CYL);
902 else if (str.Contains("POL")) fCoordsCombo->Select(kCOORDS_POL);
903 else if (str.Contains("SPH")) fCoordsCombo->Select(kCOORDS_SPH);
904 else if (str.Contains("PSR")) fCoordsCombo->Select(kCOORDS_PSR);
905 else fCoordsCombo->Select(kCOORDS_CAR); //default
906
913
921 } else {
922 if (str.Contains("FB")) fAddFB->SetState(kButtonUp);
924 if (str.Contains("BB")) fAddBB->SetState(kButtonUp);
926 if (str.Contains("E")){
927 TString dum = str;
928 if (str.Contains("LEGO"))
929 dum.Remove(strstr(dum.Data(),"LEGO")-dum.Data(),4);
930 if (str.Contains("TEXT"))
931 dum.Remove(strstr(dum.Data(),"TEXT")-dum.Data(),4);
932 if (dum.Contains("E")) fAddError->SetState(kButtonDown);
935 }
943 else if (str.Contains("Z")) fAddPalette1->SetState(kButtonDown);
945 }
946
949
950 Int_t nx = fHist -> GetXaxis() -> GetNbins();
951 Int_t nxbinmin = fHist -> GetXaxis() -> GetFirst();
952 Int_t nxbinmax = fHist -> GetXaxis() -> GetLast();
953 fSliderX->SetRange(1,nx);
954 fSliderX->SetPosition((Double_t)nxbinmin,(Double_t)nxbinmax);
957
958 Int_t ny = fHist -> GetYaxis() -> GetNbins();
959 Int_t nybinmin = fHist -> GetYaxis() -> GetFirst();
960 Int_t nybinmax = fHist -> GetYaxis() -> GetLast();
961 fSliderY->SetRange(1,ny);
962 fSliderY->SetPosition((Double_t)nybinmin,(Double_t)nybinmax);
965
967
968 if (str.Contains("COL") || fContCombo->GetSelected()!= kCONT_NONE)
970 else fColContLbl->Disable();
971
972 if (str.Contains("LEGO2") || str.Contains("SURF1") ||
973 str.Contains("SURF2") || str.Contains("SURF3") ||
974 str.Contains("SURF5")) fColContLbl1->Enable();
975 else fColContLbl1->Disable();
976
979
982
984
985
986 // Check if histogram is from ntupla/tree or not.
987 // If it is a standard histogram or a ntupla based histogram
988 // show a different frame in case of rebinning (fBinCont) with sliders and bin number entries
989 // connected to different methods.
990 // For example the entry field fBinXNumberEntry is connected to
991 // the method DoBinLabel in case of non-ntupla histograms which just call Th1::Rebin
992 // In csae of a tree based histogram the entry field fBinNumberEntry1 is used which is connected to
993 // TH1Editor::DoBinLabel1 which is re-filling the histograms with the cached values from the TTreePlayer.
994 // Since the actual number of histogram entry can be larger than the cache size of the TTreePlayer
995 // (see JIRA ROOT-5900 or http://root.cern.ch/phpBB3/viewtopic.php?f=3&t=17107 )
996 // the GUI frame based on a non-tupla histogram is used when the number of entries of the histogram is
997 // not the same as the number of filled entries in the TTreePlayer object.
998
999 if (!player || player->GetHistogram()!=fHist ||
1000 fHist->GetEntries() != player->GetNfill()) {
1001 Int_t n1 = 0, n2 =0;
1002 Int_t upx =0, upy =0;
1003 if (fBinHist) n1 = fBinHist->GetXaxis()->GetNbins();
1004 else n1 = nx;
1005 if (fBinHist) n2 = fBinHist->GetYaxis()->GetNbins();
1006 else n2 = ny;
1010 if (n1 < 1) n1 = 1;
1011 if (n2 < 1) n2 = 1;
1012 Int_t* divx = Dividers(n1);
1013 Int_t* divy = Dividers(n2);
1014 if (divx[0]-1 <= 1) upx = 2;
1015 else upx = divx[0]-1;
1016 fBinXSlider->SetRange(1,upx);
1017 if (divy[0]-1 <= 1) upy = 2;
1018 else upy = divy[0]-1;
1019 fBinYSlider->SetRange(1,upy);
1020 Int_t i = 1; Int_t j = 1;
1023 else {
1024 while ( divx[i] != nx) i ++;
1025 fBinXSlider->SetPosition(divx[0] - i + 1);
1026 }
1029 else {
1030 while ( divy [j] != ny) j ++;
1031 fBinYSlider->SetPosition(divy[0] - j + 1);
1032 }
1037 delete [] divx;
1038 delete [] divy;
1039 }
1040 else if (player && fHist==player->GetHistogram() && fHist->GetEntries() == player->GetNfill()) {
1046 fBinXNumberEntry1->SetIntNumber(nxbinmax-nxbinmin+1);
1049 fBinYNumberEntry1->SetIntNumber(nybinmax-nybinmin+1);
1050 }
1051
1053 fHist->GetXaxis()->GetBinWidth(1));
1055 fHist->GetYaxis()->GetBinWidth(1));
1057
1061
1062}
1063
1064////////////////////////////////////////////////////////////////////////////////
1065/// Slot connected to the histogram title setting.
1066
1067void TH2Editor::DoTitle(const char *text)
1068{
1069 if (fAvoidSignal) return;
1071 Update();
1072}
1073
1074////////////////////////////////////////////////////////////////////////////////
1075/// Slot connected to the 'Plot' button group.
1076
1078{
1079 if (gPad && gPad->GetVirtCanvas()) gPad->GetVirtCanvas()->SetCursor(kWatch);
1080 gVirtualX->SetCursor(GetId(), gVirtualX->CreateCursor(kWatch));
1081
1082 if (fDim->GetState() == kButtonDown)
1083 DoHistSimple();
1084 else
1085 DoHistComplex();
1086
1087 if (gPad && gPad->GetVirtCanvas()) gPad->GetVirtCanvas()->SetCursor(kPointer);
1088 gVirtualX->SetCursor(GetId(), gVirtualX->CreateCursor(kPointer));
1089}
1090
1091////////////////////////////////////////////////////////////////////////////////
1092/// Slot connected to the 2D-Plot radio button.
1093
1095{
1096 if (fAvoidSignal) return;
1097 TString str = "";
1098 ShowFrame(f6);
1099 HideFrame(f9);
1100 HideFrame(f12);
1101 HideFrame(f13);
1102 HideFrame(f38);
1103 if (fContCombo->GetSelected()==-1)
1105 if ((fContCombo->GetSelected()!= kCONT_NONE) &&
1108
1110 if (str=="" || str=="SCAT" || str==fCutString) {
1113 } else if (fAddScat->GetState()==kButtonDisabled)
1115 if (str.Contains("COL") || fContCombo->GetSelected()!= kCONT_NONE)
1117 else fColContLbl->Disable();
1118
1120
1121 TString ocut = fCutString;
1122 ocut.ToUpper();
1123 if (!str.Contains(fCutString) && !str.Contains(ocut))
1124 str+=fCutString;
1125 SetDrawOption(str);
1126 Update();
1127}
1128
1129////////////////////////////////////////////////////////////////////////////////
1130/// Slot connected to the 3D-Plot radio button.
1131
1133{
1134 if (fAvoidSignal) return;
1135 TString str = "";
1136 HideFrame(f6);
1137 ShowFrame(f9);
1138 ShowFrame(f38);
1139 if (GetHistTypeLabel().Contains("LEGO")) {
1140 ShowFrame(f12);
1141 ShowFrame(f13);
1142 } else {
1143 HideFrame(f12);
1144 HideFrame(f13);
1145 }
1148
1150
1151 if (str.Contains("LEGO2") || str.Contains("SURF1") ||
1152 str.Contains("SURF2") || str.Contains("SURF3") ||
1153 str.Contains("SURF5")) {
1157 } else {
1160 }
1161
1163
1164 TString ocut = fCutString;
1165 ocut.ToUpper();
1166 if (!str.Contains(fCutString) && !str.Contains(ocut))
1167 str+=fCutString;
1168 SetDrawOption(str);
1169 Update();
1170}
1171
1172////////////////////////////////////////////////////////////////////////////////
1173/// Slot connected to histogram type, coordinate system, contour combo box.
1174
1176{
1177 if (fAvoidSignal) return;
1178 TString str = "";
1179 if (fDim->GetState() == kButtonDown) {
1183 fContCombo->GetSelected()!=kCONT_3) || str.Contains("COL")) {
1184
1185 if (str.Contains("Z")) fAddPalette->SetState(kButtonDown);
1188 if (str=="" || str=="SCAT" || str==fCutString) {
1191 } else if (fAddScat->GetState()==kButtonDisabled)
1194 if (str.Contains("COL") || fContCombo->GetSelected()!= kCONT_NONE)
1196 else
1198
1199 } else if (fDim0->GetState() == kButtonDown) {
1207 } else {
1214 }
1215 if ((fTypeCombo->GetSelected()==kTYPE_LEGO) ||
1224 if (GetHistTypeLabel().Contains("LEGO")) {
1225 ShowFrame(f12);
1226 ShowFrame(f13);
1227 } else {
1228 HideFrame(f12);
1229 HideFrame(f13);
1230 }
1233 if (str.Contains("LEGO2") || str.Contains("SURF1") ||
1234 str.Contains("SURF2") || str.Contains("SURF3") ||
1235 str.Contains("SURF5"))
1237 else
1239 }
1240
1241 TString ocut = fCutString;
1242 ocut.ToUpper();
1243 if (!str.Contains(fCutString) && !str.Contains(ocut))
1244 str+=fCutString;
1245 SetDrawOption(str);
1246 Update();
1247}
1248
1249////////////////////////////////////////////////////////////////////////////////
1250/// Slot connected to the "Arrow draw option" check button.
1251
1253{
1254 if (fAvoidSignal) return;
1256 TString str = GetDrawOption();
1257 str.ToUpper();
1258
1259 if (on) {
1260 if (!str.Contains("ARR")) {
1261 str += "ARR";
1264 make=kTRUE;
1265 }
1266 } else if (fAddArr->GetState()==kButtonUp) {
1267 if (str.Contains("ARR")) {
1268 str.Remove(strstr(str.Data(),"ARR")-str.Data(),3);
1269 if (str=="" || str=="SCAT" || str==fCutString) {
1272 }
1273 make=kTRUE;
1274 }
1275 }
1276 if (make) {
1277 DoHistChanges();
1278 }
1279}
1280
1281////////////////////////////////////////////////////////////////////////////////
1282/// Slot connected to the "Box draw option" check button.
1283
1285{
1286 if (fAvoidSignal) return;
1288 TString str = GetDrawOption();
1289 str.ToUpper();
1290
1291 if (on) {
1292 if (!str.Contains("BOX")) {
1293 str += "BOX";
1296 make=kTRUE;
1297 }
1298 } else if (fAddBox->GetState()==kButtonUp) {
1299 if (str.Contains("BOX")) {
1300 str.Remove(strstr(str.Data(),"BOX")-str.Data(),3);
1301 if (str=="" || str=="SCAT" || str==fCutString) {
1304 }
1305 make=kTRUE;
1306 }
1307 }
1308 if (make) {
1309 DoHistChanges();
1310 }
1311}
1312
1313////////////////////////////////////////////////////////////////////////////////
1314/// Slot connected to the "Col draw option" check button.
1315
1317{
1318 if (fAvoidSignal) return;
1320 TString str = GetDrawOption();
1321 str.ToUpper();
1322
1323 if (on) {
1324 if (!str.Contains("COL")) {
1325 str += "COL";
1326 fColContLbl->Enable() ;
1331 make=kTRUE;
1332 }
1333 } else if (fAddCol->GetState()==kButtonUp) {
1334 if (str.Contains("COL")) {
1335 str.Remove(strstr(str.Data(),"COL")-str.Data(),3);
1340 if (str.Contains("Z"))
1341 str.Remove(strstr(str.Data(),"Z")-str.Data(),1);
1342 }
1343 if (str=="" || str=="SCAT" || str==fCutString)
1346 fColContLbl->Enable() ;
1347 else fColContLbl->Disable();
1348 make=kTRUE;
1349 }
1350 }
1351 if (make) {
1352 DoHistChanges();
1353 }
1354}
1355
1356////////////////////////////////////////////////////////////////////////////////
1357/// Slot connected to the "Scat draw option" check button.
1358
1360{
1361 if (fAvoidSignal) return;
1363 TString str = GetDrawOption();
1364 str.ToUpper();
1365
1366 if (on) {
1367 if (!str.Contains("SCAT")) {
1368 str += "SCAT";
1369 make=kTRUE;
1370 }
1371 } else if (fAddScat->GetState()==kButtonUp) {
1372 if (str.Contains("SCAT")) {
1373 str.Remove(strstr(str.Data(),"SCAT")-str.Data(),4);
1374 make=kTRUE;
1375 }
1376 }
1377 if (make) {
1378 DoHistChanges();
1379 }
1380}
1381
1382////////////////////////////////////////////////////////////////////////////////
1383/// Slot connected to the "Text draw option" check button.
1384
1386{
1387 if (fAvoidSignal) return;
1389 TString str = GetDrawOption();
1390 str.ToUpper();
1391
1392 if (on) {
1393 if (!str.Contains("TEXT")) {
1394 str += "TEXT";
1397 make=kTRUE;
1398 }
1399 } else if (fAddText->GetState()==kButtonUp) {
1400 if (str.Contains("TEXT")) {
1401 str.Remove(strstr(str.Data(),"TEXT")-str.Data(),4);
1402 if (str=="" || str=="SCAT" || str==fCutString)
1404 make=kTRUE;
1405 }
1406 }
1407 if (make) {
1408 DoHistChanges();
1409 // next line is needed for marker editor refresh
1411 }
1412}
1413
1414////////////////////////////////////////////////////////////////////////////////
1415/// Slot connected to the "Error" check button.
1416
1418{
1419 if (fAvoidSignal) return;
1421 TString str = GetDrawOption();
1422 str.ToUpper();
1423
1424 TString dum = str;
1425 if (str.Contains("LEGO"))
1426 dum.Remove(strstr(dum.Data(),"LEGO")-dum.Data(),4);
1427 if (str.Contains("TEXT"))
1428 dum.Remove(strstr(dum.Data(),"TEXT")-dum.Data(),4);
1429 if (on) {
1430 if (!dum.Contains("E")) {
1431 str += "E";
1432 make=kTRUE;
1433 }
1434 } else if (fAddError->GetState() == kButtonUp) {
1435 if (str.Contains("E")) {
1436 if (fDim->GetState() == kButtonDown)
1438 else
1441 make=kTRUE;
1442 }
1443 }
1444 if (make) {
1445 DoHistChanges();
1446 }
1447}
1448
1449////////////////////////////////////////////////////////////////////////////////
1450/// Slot connected to the color palette check button.
1451
1453{
1454 if (fAvoidSignal) return;
1456 TString str = GetDrawOption();
1457 str.ToUpper();
1458
1459 if (on) {
1460 if (!str.Contains("Z")) {
1461 str += "Z";
1462 make=kTRUE;
1463 }
1464 } else if (fAddPalette->GetState()==kButtonUp ||
1466 if (str.Contains("Z")) {
1467 str.Remove(strstr(str.Data(),"Z")-str.Data(),1);
1468 make=kTRUE;
1469 }
1470 }
1471 if (make) {
1472 DoHistChanges();
1473 }
1474}
1475
1476////////////////////////////////////////////////////////////////////////////////
1477/// Slot connected to the "FB front-box draw option" check button.
1478
1480{
1481 if (fAvoidSignal) return;
1483 TString str = GetDrawOption();
1484 str.ToUpper();
1485
1486 if (fAddFB->GetState()==kButtonDown) {
1487 if (str.Contains("FB")) {
1488 if (str.Contains("SURF") && !(str.Contains("1") ||
1489 str.Contains("2") || str.Contains("3") ||
1490 str.Contains("4") || str.Contains("5"))) {
1491 TString dum = str;
1492 dum.Remove(strstr(dum.Data(),"SURF")-dum.Data(),4);
1493 if (dum.Contains("FB"))
1494 dum.Remove(strstr(dum.Data(),"FB")-dum.Data(),2);
1495 str = "SURF" + dum;
1496 } else str.Remove(strstr(str.Data(),"FB")-str.Data(),2);
1497 make = kTRUE;
1498 }
1499 } else if (fAddFB->GetState()==kButtonUp){
1500 if (!str.Contains("FB")) {
1501 str += "FB";
1502 make=kTRUE;
1503 }
1504 }
1505 if (make) {
1506 DoHistChanges();
1507 }
1508}
1509
1510////////////////////////////////////////////////////////////////////////////////
1511/// Slot connected to the "BB back-box draw option" check button.
1512
1514{
1515 if (fAvoidSignal) return;
1517 TString str = GetDrawOption();
1518 str.ToUpper();
1519
1520 if (fAddBB->GetState()==kButtonDown) {
1521 if (str.Contains("BB")) {
1522 if (str.Contains("FB")) {
1523 TString dum = str;
1524 dum.Remove(strstr(dum.Data(),"FB")-dum.Data(),2);
1525 dum.Remove(strstr(dum.Data(),"BB")-dum.Data(),2);
1526 str=dum+"FB";
1527 } else str.Remove(strstr(str.Data(),"BB")-str.Data(),2);
1528 make = kTRUE;
1529 }
1530 } else if (fAddBB->GetState()==kButtonUp){
1531 if (!str.Contains("BB")) {
1532 str += "BB";
1533 make=kTRUE;
1534 }
1535 }
1536 if (make) {
1537 DoHistChanges();
1538 }
1539}
1540
1541////////////////////////////////////////////////////////////////////////////////
1542/// Slot connected to the contour level number entry fContLevels.
1543
1545{
1546 if (fAvoidSignal) return;
1549 Update();
1550}
1551
1552////////////////////////////////////////////////////////////////////////////////
1553/// Slot connected to the contour level number entry fContLevels1.
1554
1556{
1557 if (fAvoidSignal) return;
1560 Update();
1561}
1562
1563////////////////////////////////////////////////////////////////////////////////
1564/// Slot connected to the bar width of the bar chart.
1565
1567{
1568 if (fAvoidSignal) return;
1570 Update();
1571}
1572
1573////////////////////////////////////////////////////////////////////////////////
1574/// Slot connected to the bar offset of the bar chart.
1575
1577{
1578 if (fAvoidSignal) return;
1580 Update();
1581}
1582
1583////////////////////////////////////////////////////////////////////////////////
1584/// Slot connected to the rebin slider in case of no ntuple histogram.
1585/// It updates some other widgets related to the rebin slider.
1586
1588{
1589 // Draw the rebinned histogram in case of the delay draw mode
1590 if (fAvoidSignal) return;
1592 if (!fBinHist) {
1593 fBinHist = (TH2*)fHist->Clone("BinHist");
1594 fBinHist->SetDirectory(0); // TH2Editor manages this histogram
1595 }
1596 Int_t nx = fBinHist->GetXaxis()->GetNbins();
1597 Int_t ny = fBinHist->GetYaxis()->GetNbins();
1598 Int_t numx = fBinXSlider->GetPosition();
1599 Int_t numy = fBinYSlider->GetPosition();
1600 Int_t* divx = Dividers(nx);
1601 Int_t* divy = Dividers(ny);
1602 if (divx[0]==2) fBinXSlider->SetPosition(2);
1603 if (divy[0]==2) fBinYSlider->SetPosition(2);
1604 if (divx[0]==2 && divy[0]==2) {
1605 delete [] divx;
1606 delete [] divy;
1607 return;
1608 }
1609 // delete the histogram which is on the screen
1610 fGedEditor->GetPad()->cd();
1611 fHist->Reset();
1614 ny,fBinHist->GetYaxis()->GetXmin(),
1615 fBinHist->GetYaxis()->GetXmax());
1616 fHist->Add(fBinHist);
1618 fHist->Rebin2D(divx[numx], divy[numy]);
1619
1620 //fModel=fHist;
1621
1622 if (divx[0]!=2) {
1623 TAxis* xaxis = fHist->GetXaxis();
1624 Double_t xBinWidth = xaxis->GetBinWidth(1);
1625 xaxis->SetRangeUser(fSldXMin->GetNumber()+xBinWidth/2,
1626 fSldXMax->GetNumber()-xBinWidth/2);
1627 fSliderX->SetRange(1,(Int_t)nx/divx[numx]);
1628 fSliderX->SetPosition(xaxis->FindBin(fSldXMin->GetNumber()+xBinWidth/2),
1629 xaxis->FindBin(fSldXMax->GetNumber()-xBinWidth/2));
1630 // the axis range could be changed a little bit by the Rebin algorithm
1631 fSldXMin->SetNumber(xaxis->GetBinLowEdge(xaxis->GetFirst()));
1632 fSldXMax->SetNumber(xaxis->GetBinUpEdge(xaxis->GetLast()));
1633 }
1634 if (divy[0]!=2) {
1635 TAxis* yaxis = fHist->GetYaxis();
1636 Double_t yBinWidth = yaxis->GetBinWidth(1);
1637 yaxis->SetRangeUser(fSldYMin->GetNumber()+yBinWidth/2,
1638 fSldYMax->GetNumber()-yBinWidth/2);
1639 fSliderY->SetRange(1,(Int_t)ny/divy[numy]);
1640 fSliderY->SetPosition(yaxis->FindBin(fSldYMin->GetNumber()+yBinWidth/2),
1641 yaxis->FindBin(fSldYMax->GetNumber()-yBinWidth/2));
1642 fSldYMin->SetNumber(yaxis->GetBinLowEdge(yaxis->GetFirst()));
1643 fSldYMax->SetNumber(yaxis->GetBinUpEdge(yaxis->GetLast()));
1644 }
1647 Update();
1648 delete [] divx;
1649 delete [] divy;
1650 }
1651// fGedEditor->GetPad()->GetCanvas()->Selected(fGedEditor->GetPad(), fHist, 0);
1652 // fModel = fHist;
1653 Refresh(fHist);
1654}
1655
1656////////////////////////////////////////////////////////////////////////////////
1657/// Slot connected to the rebin slider in case of no ntuple histogram.
1658
1660{
1661 if (fAvoidSignal) return;
1662 Int_t* divx = Dividers(fHist->GetXaxis()->GetNbins());
1663 Int_t* divy = Dividers(fHist->GetYaxis()->GetNbins());
1664 if (divx[0]==2 && divy[0]==2 && !fBinHist)
1666 "TH2Editor", "It is not possible to rebin the histogram",
1668 // calling the MessageBox again does NOT work!*/
1669 delete [] divx;
1670 delete [] divy;
1671}
1672
1673////////////////////////////////////////////////////////////////////////////////
1674/// Slot connected to the rebin sliders in case of no ntuple histogram
1675/// does the rebinning of the selected histogram.
1676
1678{
1679 // create a clone in the background, when the slider is moved for 1st time
1680 if (fAvoidSignal) return;
1681 if (!fBinHist /*&& fDelaydraw->GetState()!=kButtonDown*/) {
1682 Int_t* divx = Dividers(fHist->GetXaxis()->GetNbins());
1683 Int_t* divy = Dividers(fHist->GetYaxis()->GetNbins());
1684 // if there is nothing to rebin:
1685 if (divx[0]==2 && divy[0]==2) {
1686 delete [] divx;
1687 delete [] divy;
1688 return;
1689 }
1690 fBinHist = (TH2*)fHist->Clone("BinHist");
1691 fBinHist->SetDirectory(0); // TH2Editor manages this histogram
1692 delete [] divx;
1693 delete [] divy;
1694 }
1695 // if the slider already has been moved and the clone is saved
1696 Int_t nx = fBinHist->GetXaxis()->GetNbins();
1697 Int_t ny = fBinHist->GetYaxis()->GetNbins();
1698 Int_t numx = fBinXSlider->GetPosition();
1699 Int_t numy = fBinYSlider->GetPosition();
1700 if (nx < 1 || ny < 1) return;
1701 Int_t* divx = Dividers(nx);
1702 Int_t* divy = Dividers(ny);
1703 if (divx[0]==2) {
1705 numx=1;
1706 }
1707 if (divy[0]==2) {
1709 numy=1;
1710 }
1711 Int_t maxx = (Int_t)nx/divx[numx];
1712 Int_t maxy = (Int_t)ny/divy[numy];
1713 if (maxx==1) maxx=2;
1714 if (maxy==1) maxy=2;
1715 if (fDelaydraw->GetState()==kButtonUp){
1716 // delete the histogram which is on the screen
1717 fGedEditor->GetPad()->cd();
1718 fHist->Reset();
1721 ny,fBinHist->GetYaxis()->GetXmin(),
1722 fBinHist->GetYaxis()->GetXmax());
1723 fHist->Add(fBinHist);
1725 fHist->Rebin2D(divx[numx], divy[numy]);
1726 //fModel=fHist;
1727 if (divx[0]!=2) {
1728 TAxis* xaxis = fHist->GetXaxis();
1729 Double_t xBinWidth = xaxis->GetBinWidth(1);
1730 // if the user has zoomed into a special area the range will be reset:
1731 xaxis->SetRangeUser(fSldXMin->GetNumber()+xBinWidth/2,
1732 fSldXMax->GetNumber()-xBinWidth/2);
1733 fSliderX->SetRange(1,maxx);
1734 fSliderX->SetPosition(xaxis->FindBin(fSldXMin->GetNumber()+xBinWidth/2),
1735 xaxis->FindBin(fSldXMax->GetNumber()-xBinWidth/2));
1736 // the axis range could be changed a little bit by the Rebin algorithm
1737 fSldXMin->SetNumber(xaxis->GetBinLowEdge(xaxis->GetFirst()));
1738 fSldXMax->SetNumber(xaxis->GetBinUpEdge(xaxis->GetLast()));
1740 }
1741 if (divy[0]!=2) {
1742 TAxis* yaxis = fHist->GetYaxis();
1743 Double_t yBinWidth = yaxis->GetBinWidth(1);
1744 yaxis->SetRangeUser(fSldYMin->GetNumber()+yBinWidth/2,
1745 fSldYMax->GetNumber()-yBinWidth/2);
1746 fSliderY->SetRange(1,maxy);
1747 fSliderY->SetPosition(yaxis->FindBin(fSldYMin->GetNumber()+yBinWidth/2),
1748 yaxis->FindBin(fSldYMax->GetNumber()-yBinWidth/2));
1749 fSldYMin->SetNumber(yaxis->GetBinLowEdge(yaxis->GetFirst()));
1750 fSldYMax->SetNumber(yaxis->GetBinUpEdge(yaxis->GetLast()));
1752 }
1753 Update();
1754 }
1755 // set the according NumberEntries
1762 delete [] divx;
1763 delete [] divy;
1764}
1765
1766////////////////////////////////////////////////////////////////////////////////
1767/// Slot connected to the Bin Number Entry for the Rebin.
1768
1770{
1771 if (fAvoidSignal) return;
1772 Int_t i;
1775 Int_t nx = 0;
1776 if (fBinHist) nx = fBinHist->GetXaxis()->GetNbins();
1777 else nx = fHist->GetXaxis()->GetNbins();
1778 Int_t ny = 0;
1779 if (fBinHist) ny = fBinHist->GetYaxis()->GetNbins();
1780 else ny = fHist->GetYaxis()->GetNbins();
1781 if (nx < 2 || ny < 2) return;
1782 // Get the divider of nx/ny which is closest to numx/numy
1783 Int_t *divx = Dividers(nx);
1784 Int_t *divy = Dividers(ny);
1785 Int_t diff = TMath::Abs(numx - divx[1]);
1786 Int_t c = 1; Int_t d = 1;
1787 for (i = 2; i <= divx[0]; i++) {
1788 if ((TMath::Abs(numx - divx[i])) < diff) {
1789 c = i;
1790 diff = TMath::Abs(numx - divx[i]);
1791 }
1792 }
1793 diff = TMath::Abs(numy - divy[1]);
1794 for (i = 2; i <= divy[0]; i++) {
1795 if ((TMath::Abs(numy - divy[i])) < diff) {
1796 d = i;
1797 diff = TMath::Abs(numy - divy[i]);
1798 }
1799 }
1800 if (divx[c]!= fHist->GetXaxis()->GetNbins() ||
1801 divy[d]!= fHist->GetYaxis()->GetNbins()) {
1803 fBinXSlider->SetPosition(divx[0] - c +1);
1805 fBinYSlider->SetPosition(divy[0] - d +1);
1807 else DoBinReleased();
1808 }
1809// fGedEditor->GetPad()->GetCanvas()->Selected(fGedEditor->GetPad(), fHist, 0);
1810// fModel = fHist;
1811 Refresh(fHist);
1812 delete [] divx;
1813 delete [] divy;
1814}
1815
1816////////////////////////////////////////////////////////////////////////////////
1817/// Slot connected to the Apply Button in the Rebinned histogram Window.
1818
1820{
1821 Int_t ret = 0;
1823 "TH2 Editor", "Replace origin histogram with rebinned one?",
1825 if (ret==1) {
1826 if (fBinHist) {
1827 delete fBinHist;
1828 fBinHist = 0;
1829 }
1830 Int_t nx = fHist->GetXaxis()->GetNbins();
1831 Int_t ny = fHist->GetYaxis()->GetNbins();
1832 Int_t *divx = Dividers(nx);
1833 Int_t *divy = Dividers(ny);
1834 Int_t upx = 0, upy = 0;
1835 if (divx[0]-1 <= 1) upx = 2;
1836 else upx = divx[0]-1;
1837 if (divy[0]-1 <= 1) upy = 2;
1838 else upy = divy[0]-1;
1839 fBinXSlider->SetRange(1,upx);
1840 fBinYSlider->SetRange(1,upy);
1841 if (fBinXSlider->GetMaxPosition()==2 && divx[0]==2 )
1843 else fBinXSlider->SetPosition(1);
1844 if (fBinYSlider->GetMaxPosition()==2 && divy[0]==2 )
1846 else fBinYSlider->SetPosition(1);
1849 Update();
1850 delete [] divx;
1851 delete [] divy;
1852 } else if (ret==2) DoCancel();
1853}
1854
1855////////////////////////////////////////////////////////////////////////////////
1856/// Slot connected to the Cancel Button in the Rebinned histogram Window.
1857
1859{
1860 if (fBinHist) {
1861 fGedEditor->GetPad()->cd();
1862 fHist->Reset();
1868 fBinHist->GetYaxis()->GetXmax());
1869 fHist->Add(fBinHist);
1871 fBinHist->GetXaxis()->GetLast());
1873 fBinHist->GetYaxis()->GetLast());
1874
1875 delete fBinHist;
1876 fBinHist = 0;
1877
1880 Int_t* divx = Dividers(fHist->GetXaxis()->GetNbins());
1881 Int_t* divy = Dividers(fHist->GetYaxis()->GetNbins());
1882 if (divx[0]!=2) fBinXSlider->SetPosition(1);
1883 if (divy[0]!=2) fBinYSlider->SetPosition(1);
1884 // Consigning the new Histogram to all other Editors
1885// fGedEditor->GetPad()->GetCanvas()->Selected(fGedEditor->GetPad(), fHist, 0);
1886 Update();
1887 // fModel = fHist;
1888 Refresh(fHist);
1889 delete [] divx;
1890 delete [] divy;
1891 }
1892}
1893
1894
1895////////////////////////////////////////////////////////////////////////////////
1896/// Slot connected to the BinNumber Slider in case of a 'ntuple histogram'.
1897/// It does the rebin.
1898
1900{
1901 if (fAvoidSignal) return;
1902 Double_t oldXOffset = fXOffsetNumberEntry->GetNumber();
1903 Int_t xnumber = fBinXSlider1->GetPosition();
1904 Double_t oldYOffset = fYOffsetNumberEntry->GetNumber();
1905 Int_t ynumber = fBinYSlider1->GetPosition();
1906 if (xnumber==5 && ynumber==5) return;
1907 Int_t xfact = 0;
1908 Int_t yfact = 0;
1909 Int_t xBinNumber = 0;
1910 Int_t yBinNumber = 0;
1911 TAxis* xaxis = fHist->GetXaxis();
1912 TAxis* yaxis = fHist->GetYaxis();
1913 //"compute" the scaling factor:
1914 if (xnumber >= 5) xfact = xnumber - 4;
1915 else xfact = xnumber - 6;
1916 if (ynumber >= 5) yfact = ynumber - 4;
1917 else yfact = ynumber - 6;
1919 if (!player) return;
1920 Int_t nx = xaxis->GetNbins();
1921 Int_t ny = yaxis->GetNbins();
1922 Int_t firstx = xaxis->GetFirst();
1923 Int_t lastx = xaxis->GetLast();
1924 Int_t firsty = yaxis->GetFirst();
1925 Int_t lasty = yaxis->GetLast();
1926 Double_t minx = xaxis->GetBinLowEdge(1); // overall min in user coords
1927 Double_t maxx = xaxis->GetBinUpEdge(nx); // overall max in user coords
1928 Double_t miny = yaxis->GetBinLowEdge(1); // overall min in user coords
1929 Double_t maxy = yaxis->GetBinUpEdge(ny); // overall max in user coords
1930 Double_t rminx = xaxis->GetBinLowEdge(firstx); // recent min in user coords
1931 Double_t rmaxx = xaxis->GetBinUpEdge(lastx); // recent max in user coords
1932 Double_t rminy = yaxis->GetBinLowEdge(firsty); // recent min in user coords
1933 Double_t rmaxy = yaxis->GetBinUpEdge(lasty); // recent max in user coords
1934
1935 ((TH2*)player->GetHistogram())->SetCanExtend(TH1::kNoAxis);
1936 ((TH2*)player->GetHistogram())->Reset();
1937
1938 // Get new Number of bins
1939 if (xfact > 0) xBinNumber = xfact*nx;
1940 if (xfact < 0) xBinNumber = (Int_t) ((-1)*nx/xfact+0.5);
1941 if (xBinNumber < 1) xBinNumber = 1;
1942 if (xBinNumber > 1000) xBinNumber= 1000;
1943 if (yfact > 0) yBinNumber = yfact*ny;
1944 if (yfact < 0) yBinNumber = (Int_t) ((-1)*ny/yfact+0.5);
1945 if (yBinNumber < 1) yBinNumber = 1;
1946 if (yBinNumber > 1000) yBinNumber= 1000;
1947 Double_t xOffset = 1.*fXBinOffsetSld->GetPosition()/100*((maxx-minx)/xBinNumber);
1948 Double_t yOffset = 1.*fYBinOffsetSld->GetPosition()/100*((maxy-miny)/yBinNumber);
1949 // create new histogram - the main job is done by sel->TakeAction()
1950
1951 ((TH2*)player->GetHistogram())->SetBins(xBinNumber, minx-oldXOffset+xOffset,
1952 maxx-oldXOffset+xOffset,
1953 yBinNumber, miny-oldYOffset+yOffset,
1954 maxy-oldYOffset+yOffset);
1955 TSelectorDraw *sel = (TSelectorDraw*)player->GetSelector();
1956 if (!sel) return;
1957 sel->TakeAction();
1958
1959 // Restore and set all the attributes which were changed by TakeAction()
1961 fSliderX->SetRange(1,xBinNumber);
1962 fSliderY->SetRange(1,yBinNumber);
1963 Double_t xBinWidth = xaxis->GetBinWidth(1);
1964 Double_t yBinWidth = yaxis->GetBinWidth(1);
1965 fSliderX->SetPosition(xaxis->FindBin(rminx+xBinWidth/2),
1966 xaxis->FindBin(rmaxx-xBinWidth/2));
1967 fSliderY->SetPosition(yaxis->FindBin(rminy+yBinWidth/2),
1968 yaxis->FindBin(rmaxy-yBinWidth/2));
1969 xOffset = 1.*fXBinOffsetSld->GetPosition()/100*xBinWidth; // nessesary ??
1970 yOffset = 1.*fYBinOffsetSld->GetPosition()/100*yBinWidth; // nessesary ??
1971
1972 // SetRange in BinNumbers along x and y!
1973 xaxis->SetRange(xaxis->FindBin(rminx+xBinWidth/2),
1974 xaxis->FindBin(rmaxx-xBinWidth/2));
1975 yaxis->SetRange(yaxis->FindBin(rminy+yBinWidth/2),
1976 yaxis->FindBin(rmaxy-yBinWidth/2));
1977 fSldXMin->SetNumber(xaxis->GetBinLowEdge(xaxis->GetFirst()));
1978 fSldXMax->SetNumber(xaxis->GetBinUpEdge(xaxis->GetLast()));
1979 fSldYMin->SetNumber(yaxis->GetBinLowEdge(yaxis->GetFirst()));
1980 fSldYMax->SetNumber(yaxis->GetBinUpEdge(yaxis->GetLast()));
1981 fBinXNumberEntry1->SetNumber(xaxis->GetLast() - xaxis->GetFirst()+1);
1982 fBinYNumberEntry1->SetNumber(yaxis->GetLast() - yaxis->GetFirst()+1);
1988 xaxis->GetBinWidth(1));
1990 yaxis->GetBinWidth(1));
1992 // when you 2-clicks on a slider, sometimes it gets caught on wrong position! (2 or -2)
1994 // when you 2-clicks on a slider, sometimes it gets caught on wrong position! (2 or -2)
1995 Update();
1996}
1997
1998////////////////////////////////////////////////////////////////////////////////
1999/// Slot connected to the rebin slider in case of an ntuple histogram.
2000/// Updates the BinNumberEntryField during the BinSlider movement.
2001
2003{
2004 if (fAvoidSignal) return;
2005 TAxis* xaxis = fHist->GetXaxis();
2006 TAxis* yaxis = fHist->GetYaxis();
2007 Int_t firstx = xaxis->GetFirst();
2008 Int_t lastx = xaxis->GetLast();
2009 Int_t firsty = yaxis->GetFirst();
2010 Int_t lasty = yaxis->GetLast();
2011 Int_t xnumber = fBinXSlider1->GetPosition();
2012 Int_t ynumber = fBinYSlider1->GetPosition();
2013 Int_t numx = lastx-firstx+1;
2014 Int_t numy = lasty-firsty+1;
2015 Int_t xfact = 0;
2016 Int_t yfact = 0;
2017 Int_t xBinNumber = 0;
2018 Int_t yBinNumber = 0;
2019 if (xnumber >= 5) xfact = xnumber - 4;
2020 else xfact = xnumber - 6;
2021 if (xfact > 0) xBinNumber = xfact*numx;
2022 if (xfact < 0) xBinNumber = (Int_t) ((-1)*numx/xfact+0.5);
2023 if (xBinNumber < 1) xBinNumber = 1;
2024 if (xBinNumber > 1000) xBinNumber= 1000;
2025 if (fBinXNumberEntry1->GetNumber()!=xBinNumber)
2026 fBinXNumberEntry1->SetIntNumber(xBinNumber);
2027
2028 if (ynumber >= 5) yfact = ynumber - 4;
2029 else yfact = ynumber - 6;
2030 if (yfact > 0) yBinNumber = yfact*numy;
2031 if (yfact < 0) yBinNumber = (Int_t) ((-1)*numy/yfact+0.5);
2032 if (yBinNumber < 1) yBinNumber = 1;
2033 if (yBinNumber > 1000) yBinNumber= 1000;
2034 if (fBinYNumberEntry1->GetNumber()!=yBinNumber)
2035 fBinYNumberEntry1->SetIntNumber(yBinNumber);
2036}
2037
2038////////////////////////////////////////////////////////////////////////////////
2039/// Slot connected to the Bin Number Entry for the Rebin.
2040
2042{
2043 if (fAvoidSignal) return;
2044 Double_t oldXOffset = fXOffsetNumberEntry->GetNumber();
2046 Double_t oldYOffset = fYOffsetNumberEntry->GetNumber();
2048 TAxis* xaxis = fHist->GetXaxis();
2049 TAxis* yaxis = fHist->GetYaxis();
2051 if (!player) return;
2052 Int_t firstx = xaxis->GetFirst();
2053 Int_t lastx = xaxis->GetLast();
2054 Int_t firsty = yaxis->GetFirst();
2055 Int_t lasty = yaxis->GetLast();
2056 Int_t nx = xaxis->GetNbins();
2057 Int_t ny = yaxis->GetNbins();
2058 Double_t minx = xaxis->GetBinLowEdge(1); // overall min in user coords
2059 Double_t maxx = xaxis->GetBinUpEdge(nx); // overall max in user coords
2060 Double_t miny = yaxis->GetBinLowEdge(1); // overall min in user coords
2061 Double_t maxy = yaxis->GetBinUpEdge(ny); // overall max in user coords
2062 Double_t rminx = xaxis->GetBinLowEdge(firstx); // recent min in user coords
2063 Double_t rmaxx = xaxis->GetBinUpEdge(lastx); // recent max in user coords
2064 Double_t rminy = yaxis->GetBinLowEdge(firsty); // recent min in user coords
2065 Double_t rmaxy = yaxis->GetBinUpEdge(lasty); // recent max in user coords
2066
2067 ((TH2*)player->GetHistogram())->SetCanExtend(TH1::kNoAxis);
2068 ((TH2*)player->GetHistogram())->Reset();
2069
2070 // Calculate the new number of bins in the complete range
2071 Int_t xBinNumber = (Int_t) ((maxx-minx)/(rmaxx - rminx)*numx + 0.5);
2072 if (xBinNumber < 1) xBinNumber = 1;
2073 if (xBinNumber > 1000) xBinNumber= 1000;
2074 Double_t xOffset = 1.*(fXBinOffsetSld->GetPosition())/100*(maxx-minx)/xBinNumber;
2075 Int_t yBinNumber = (Int_t) ((maxy-miny)/(rmaxy - rminy)*numy + 0.5);
2076 if (yBinNumber < 1) yBinNumber = 1;
2077 if (yBinNumber > 1000) yBinNumber= 1000;
2078 Double_t yOffset = 1.*(fYBinOffsetSld->GetPosition())/100*(maxy-miny)/yBinNumber;
2079 // create new histogram - the main job is done by sel->TakeAction()
2080 ((TH2*)player->GetHistogram())->SetBins(xBinNumber, minx-oldXOffset+xOffset,
2081 maxx-oldXOffset+xOffset,
2082 yBinNumber, miny-oldYOffset+yOffset,
2083 maxy-oldYOffset+yOffset);
2084 TSelectorDraw *sel = (TSelectorDraw*)player->GetSelector();
2085 if (!sel) return;
2086 sel->TakeAction();
2087
2088 // Restore and set all the attributes which were changed by TakeAction()
2090 fSliderX->SetRange(1,xBinNumber);
2091 fSliderY->SetRange(1,yBinNumber);
2092 Double_t xBinWidth = xaxis->GetBinWidth(1);
2093 Double_t yBinWidth = yaxis->GetBinWidth(1);
2094 fSliderX->SetPosition(xaxis->FindBin(rminx+xBinWidth/2),
2095 xaxis->FindBin(rmaxx-xBinWidth/2));
2096 fSliderY->SetPosition(yaxis->FindBin(rminy+yBinWidth/2),
2097 yaxis->FindBin(rmaxy-yBinWidth/2));
2098 xOffset = 1.*fXBinOffsetSld->GetPosition()/100*xBinWidth; //nesessary ??
2099 yOffset = 1.*fYBinOffsetSld->GetPosition()/100*yBinWidth; //nesessary ??
2100
2101 // SetRange in BinNumbers along x and y!
2102 xaxis->SetRange(xaxis->FindBin(rminx+xBinWidth/2),
2103 xaxis->FindBin(rmaxx-xBinWidth/2));
2104 yaxis->SetRange(yaxis->FindBin(rminy+yBinWidth/2),
2105 yaxis->FindBin(rmaxy-yBinWidth/2));
2106 fSldXMin->SetNumber(xaxis->GetBinLowEdge(xaxis->GetFirst()));
2107 fSldXMax->SetNumber(xaxis->GetBinUpEdge(xaxis->GetLast()));
2108 fSldYMin->SetNumber(yaxis->GetBinLowEdge(yaxis->GetFirst()));
2109 fSldYMax->SetNumber(yaxis->GetBinUpEdge(yaxis->GetLast()));
2114 Update();
2115}
2116
2117////////////////////////////////////////////////////////////////////////////////
2118/// Slot connected to the OffSetSlider. It saves the OldBinOffset
2119/// (nessesary for delay draw mode).
2120
2122{
2123 if (fAvoidSignal) return;
2126}
2127
2128////////////////////////////////////////////////////////////////////////////////
2129/// Slot connected to the OffSetSlider that
2130/// changes the origin of the histogram inbetween a binwidth;
2131/// rebin the histogram with the new Offset given by the slider.
2132/// problem: histogram with variable binwidth??
2133
2135{
2136 if (fAvoidSignal) return;
2140 TAxis* xaxis = fHist->GetXaxis();
2141 TAxis* yaxis = fHist->GetYaxis();
2142 Double_t xBinWidth = xaxis->GetBinWidth(1);
2143 Double_t yBinWidth = yaxis->GetBinWidth(1);
2144 Double_t xOffset = 1.*numx/100*xBinWidth;
2145 Double_t yOffset = 1.*numy/100*yBinWidth;
2146 Double_t oldXOffset = fOldXOffset;
2147 Double_t oldYOffset = fOldYOffset;
2148 Int_t nx = xaxis->GetNbins();
2149 Int_t ny = yaxis->GetNbins();
2150
2152 if (!player) return;
2153
2154 Int_t firstx = xaxis->GetFirst();
2155 Int_t lastx = xaxis->GetLast();
2156 Int_t firsty = yaxis->GetFirst();
2157 Int_t lasty = yaxis->GetLast();
2158 Double_t minx = xaxis->GetBinLowEdge(1); // overall min in user coords
2159 Double_t maxx = xaxis->GetBinUpEdge(nx); // overall max in user coords
2160 Double_t miny = yaxis->GetBinLowEdge(1); // overall min in user coords
2161 Double_t maxy = yaxis->GetBinUpEdge(ny); // overall max in user coords
2162 Double_t rminx = xaxis->GetBinLowEdge(firstx); // recent min in user coords
2163 Double_t rmaxx = xaxis->GetBinUpEdge(lastx); // recent max in user coords
2164 Double_t rminy = yaxis->GetBinLowEdge(firsty); // recent min in user coords
2165 Double_t rmaxy = yaxis->GetBinUpEdge(lasty); // recent max in user coords
2166
2167 ((TH2*)player->GetHistogram())->SetCanExtend(TH1::kNoAxis);
2168 ((TH2*)player->GetHistogram())->Reset();
2169
2170 ((TH2*)player->GetHistogram())->SetBins(nx, minx-oldXOffset+xOffset,
2171 maxx-oldXOffset+xOffset,
2172 ny, miny-oldYOffset+yOffset,
2173 maxy-oldYOffset+yOffset);
2174 TSelectorDraw *sel = (TSelectorDraw*)player->GetSelector();
2175 if (!sel) return;
2176 sel->TakeAction();
2177
2178 // Restore all the attributes which were changed by TakeAction()
2180
2181 // SetRange in BinNumbers along x and y!
2182 xaxis->SetRange(xaxis->FindBin(rminx+xOffset-oldXOffset+xBinWidth/2),
2183 xaxis->FindBin(rmaxx+xOffset-oldXOffset-xBinWidth/2));
2184 yaxis->SetRange(yaxis->FindBin(rminy+yOffset-oldYOffset+yBinWidth/2),
2185 yaxis->FindBin(rmaxy+yOffset-oldYOffset-yBinWidth/2));
2186 fSldXMin->SetNumber(xaxis->GetBinLowEdge(xaxis->GetFirst()));
2187 fSldXMax->SetNumber(xaxis->GetBinUpEdge(xaxis->GetLast()));
2188 fSldYMin->SetNumber(yaxis->GetBinLowEdge(yaxis->GetFirst()));
2189 fSldYMax->SetNumber(yaxis->GetBinUpEdge(yaxis->GetLast()));
2192 Update();
2193 }
2194}
2195
2196////////////////////////////////////////////////////////////////////////////////
2197/// Slot connected to the OffSetSlider.
2198/// It changes the origin of the histogram inbetween a binwidth;
2199/// rebin the histogram with the new offset given by the slider.
2200/// problem: histogram with variable binwidth??
2201
2203{
2204 if (fAvoidSignal) return;
2207 TAxis* xaxis = fHist->GetXaxis();
2208 TAxis* yaxis = fHist->GetYaxis();
2209 Double_t xBinWidth = xaxis->GetBinWidth(1);
2210 Double_t yBinWidth = yaxis->GetBinWidth(1);
2211 Double_t xOffset = 1.*numx/100*xBinWidth;
2212 Double_t yOffset = 1.*numy/100*yBinWidth;
2213 if (fDelaydraw->GetState()==kButtonUp){
2214 Double_t oldXOffset = fXOffsetNumberEntry->GetNumber();
2215 Double_t oldYOffset = fYOffsetNumberEntry->GetNumber();
2216 Int_t nx = xaxis->GetNbins();
2217 Int_t ny = yaxis->GetNbins();
2218
2220 if (!player) return;
2221
2222 Int_t firstx = xaxis->GetFirst();
2223 Int_t lastx = xaxis->GetLast();
2224 Int_t firsty = yaxis->GetFirst();
2225 Int_t lasty = yaxis->GetLast();
2226 Double_t minx = xaxis->GetBinLowEdge(1); // overall min in user coords
2227 Double_t maxx = xaxis->GetBinUpEdge(nx); // overall max in user coords
2228 Double_t miny = yaxis->GetBinLowEdge(1); // overall min in user coords
2229 Double_t maxy = yaxis->GetBinUpEdge(ny); // overall max in user coords
2230 Double_t rminx = xaxis->GetBinLowEdge(firstx); // recent min in user coords
2231 Double_t rmaxx = xaxis->GetBinUpEdge(lastx); // recent max in user coords
2232 Double_t rminy = yaxis->GetBinLowEdge(firsty); // recent min in user coords
2233 Double_t rmaxy = yaxis->GetBinUpEdge(lasty); // recent max in user coords
2234
2235 ((TH2*)player->GetHistogram())->SetCanExtend(TH1::kNoAxis);
2236 ((TH2*)player->GetHistogram())->Reset();
2237
2238 ((TH2*)player->GetHistogram())->SetBins(nx,minx-oldXOffset+xOffset,
2239 maxx-oldXOffset+xOffset,
2240 ny, miny-oldYOffset+yOffset,
2241 maxy-oldYOffset+yOffset);
2242 TSelectorDraw *sel = (TSelectorDraw*)player->GetSelector();
2243 if (!sel) return;
2244 sel->TakeAction();
2245
2246 // Restore all the attributes which were changed by TakeAction()
2248
2249 // SetRange in BinNumbers along x and y!
2250 xaxis->SetRange(xaxis->FindBin(rminx+xOffset-oldXOffset+xBinWidth/2),
2251 xaxis->FindBin(rmaxx+xOffset-oldXOffset-xBinWidth/2));
2252 yaxis->SetRange(yaxis->FindBin(rminy+yOffset-oldYOffset+yBinWidth/2),
2253 yaxis->FindBin(rmaxy+yOffset-oldYOffset-yBinWidth/2));
2254 fSldXMin->SetNumber(xaxis->GetBinLowEdge(xaxis->GetFirst()));
2255 fSldXMax->SetNumber(xaxis->GetBinUpEdge(xaxis->GetLast()));
2256 fSldYMin->SetNumber(yaxis->GetBinLowEdge(yaxis->GetFirst()));
2257 fSldYMax->SetNumber(yaxis->GetBinUpEdge(yaxis->GetLast()));
2260 Update();
2261 }
2266}
2267
2268////////////////////////////////////////////////////////////////////////////////
2269/// Slot connected to the OffSetNumberEntry, related to the OffSetSlider
2270/// changes the origin of the histogram inbetween a binwidth.
2271
2273{
2274 if (fAvoidSignal) return;
2275 TAxis* xaxis = fHist->GetXaxis();
2276 TAxis* yaxis = fHist->GetYaxis();
2277 Double_t xBinWidth = xaxis->GetBinWidth(1);
2278 Double_t yBinWidth = yaxis->GetBinWidth(1);
2280 Double_t oldXOffset = 1.*fXBinOffsetSld->GetPosition()/100*xBinWidth;
2282 Double_t oldYOffset = 1.*fYBinOffsetSld->GetPosition()/100*yBinWidth;
2283 Int_t nx = xaxis->GetNbins();
2284 Int_t ny = yaxis->GetNbins();
2286 if (!player) return;
2287 Int_t firstx = xaxis->GetFirst();
2288 Int_t lastx = xaxis->GetLast();
2289 Int_t firsty = yaxis->GetFirst();
2290 Int_t lasty = yaxis->GetLast();
2291 Double_t minx = xaxis->GetBinLowEdge(1); // overall min in user coords
2292 Double_t maxx = xaxis->GetBinUpEdge(nx); // overall max in user coords
2293 Double_t miny = yaxis->GetBinLowEdge(1); // overall min in user coords
2294 Double_t maxy = yaxis->GetBinUpEdge(ny); // overall max in user coords
2295 Double_t rminx = xaxis->GetBinLowEdge(firstx); // recent min in user coords
2296 Double_t rmaxx = xaxis->GetBinUpEdge(lastx); // recent max in user coords
2297 Double_t rminy = yaxis->GetBinLowEdge(firsty); // recent min in user coords
2298 Double_t rmaxy = yaxis->GetBinUpEdge(lasty); // recent max in user coords
2299
2300 ((TH2*)player->GetHistogram())->SetCanExtend(TH1::kNoAxis);
2301 ((TH2*)player->GetHistogram())->Reset();
2302
2303 ((TH2*)player->GetHistogram())->SetBins(nx,minx+xOffset-oldXOffset,
2304 maxx+xOffset-oldXOffset,
2305 ny,miny+yOffset-oldYOffset,
2306 maxy+yOffset-oldYOffset);
2307 TSelectorDraw *sel = (TSelectorDraw*)player->GetSelector();
2308 if (!sel) return;
2309 sel->TakeAction();
2310
2311 // Restore all the attributes which were changed by TakeAction()
2313
2314 // SetRange in BinNumbers along x and y!
2315 xaxis->SetRange(xaxis->FindBin(rminx+xOffset-oldXOffset+xBinWidth/2),
2316 xaxis->FindBin(rmaxx+xOffset-oldXOffset-xBinWidth/2));
2317 yaxis->SetRange(yaxis->FindBin(rminy+yOffset-oldYOffset+yBinWidth/2),
2318 yaxis->FindBin(rmaxy+yOffset-oldYOffset-yBinWidth/2));
2319 fSldXMin->SetNumber(xaxis->GetBinLowEdge(xaxis->GetFirst()));
2320 fSldXMax->SetNumber(xaxis->GetBinUpEdge(xaxis->GetLast()));
2321 fXBinOffsetSld->SetPosition((Int_t)(xOffset/xBinWidth*100));
2322 fSldYMin->SetNumber(yaxis->GetBinLowEdge(yaxis->GetFirst()));
2323 fSldYMax->SetNumber(yaxis->GetBinUpEdge(yaxis->GetLast()));
2324 fYBinOffsetSld->SetPosition((Int_t)(yOffset/yBinWidth*100));
2325 Update();
2326}
2327
2328////////////////////////////////////////////////////////////////////////////////
2329/// Slot connected to the x-Slider that redraws the histogram
2330/// with the new slider range.
2331
2333{
2334 if (fAvoidSignal) return;
2335 TAxis* xaxis = fHist->GetXaxis();
2337 // 2D plot
2338 Int_t px1,py1,px2,py2;
2339 Float_t ymin,ymax,xleft,xright;
2340 xleft = xaxis->GetBinLowEdge((Int_t)((fSliderX->GetMinPosition())+0.5));
2341 xright = xaxis->GetBinUpEdge((Int_t)((fSliderX->GetMaxPosition())+0.5));
2344 px1 = fGedEditor->GetPad()->XtoAbsPixel(xleft);
2345 py1 = fGedEditor->GetPad()->YtoAbsPixel(ymin);
2346 px2 = fGedEditor->GetPad()->XtoAbsPixel(xright);
2347 py2 = fGedEditor->GetPad()->YtoAbsPixel(ymax);
2348 if (fGedEditor->GetPad()->GetCanvas())
2350 fGedEditor->GetPad()->cd();
2354 gVirtualX->DrawBox(px1, py1, px2, py2, TVirtualX::kHollow);
2355 fPx1old = px1;
2356 fPy1old = py1;
2357 fPx2old = px2 ;
2358 fPy2old = py2;
2359 gVirtualX->Update(0);
2360 fSldXMin->SetNumber(xleft);
2361 fSldXMax->SetNumber(xright);
2362 } else if (fDelaydraw->GetState()==kButtonDown &&
2365 // 3D plot
2366 Float_t p1[3], p2[3], p3[3], p4[3], p5[3], p6[3], p7[3], p8[3];
2367 if (fGedEditor->GetPad()->GetCanvas())
2369 fGedEditor->GetPad()->cd();
2370 TView *fView = fGedEditor->GetPad()->GetView();
2371 if (!fView) return;
2372 Double_t *rmin = fView->GetRmin();
2373 if (!rmin) return;
2374 Double_t *rmax = fView->GetRmax();
2375 if (!rmax) return;
2376 p1[0] = p4[0] = p5[0] = p8[0] =
2377 xaxis->GetBinLowEdge((Int_t)((fSliderX->GetMinPosition())+0.5));
2378 p2[0] = p3[0] = p6[0] = p7[0] =
2379 xaxis->GetBinUpEdge((Int_t)((fSliderX->GetMaxPosition())+0.5));
2380 p1[1] = p2[1] = p3[1] = p4[1] = rmin[1];
2381 p5[1] = p6[1] = p7[1] = p8[1] = rmax[1];
2382 p1[2] = p2[2] = p5[2] = p6[2] = rmin[2];
2383 p3[2] = p4[2] = p7[2] = p8[2] = rmax[2];
2388 PaintBox3D(p2, p3, p7, p6);
2389 PaintBox3D(p1, p4, p8, p5);
2390 for (Int_t i = 0; i<3; i++){
2391 fP1oldx[i] = p1[i];
2392 fP2oldx[i] = p2[i];
2393 fP3oldx[i] = p3[i];
2394 fP4oldx[i] = p4[i];
2395 fP5oldx[i] = p5[i];
2396 fP6oldx[i] = p6[i];
2397 fP7oldx[i] = p7[i];
2398 fP8oldx[i] = p8[i];
2399 }
2400 fSldXMin->SetNumber(p1[0]);
2401 fSldXMax->SetNumber(p2[0]);
2402 } else if (fDelaydraw->GetState()==kButtonDown &&
2406 } else {
2408 (Int_t)((fSliderX->GetMaxPosition())+0.5));
2409 fSldXMin->SetNumber(xaxis->GetBinLowEdge(xaxis->GetFirst()));
2410 fSldXMax->SetNumber(xaxis->GetBinUpEdge(xaxis->GetLast()));
2412 Update();
2413 }
2416}
2417
2418////////////////////////////////////////////////////////////////////////////////
2419/// Slot connected to the x axis range slider that initialises
2420/// the "virtual" box which is drawn in delay draw mode.
2421
2423{
2424 if (fAvoidSignal) return;
2425 TAxis* xaxis = fHist->GetXaxis();
2426 Float_t ymin,ymax,xleft,xright;
2428 // 2D Plot
2429 if (!fGedEditor->GetPad()) return;
2430 fGedEditor->GetPad()->cd();
2431 if (fGedEditor->GetPad()->GetCanvas())
2435 xleft = xaxis->GetBinLowEdge((Int_t)((fSliderX->GetMinPosition())+0.5));
2436 xright = xaxis->GetBinUpEdge((Int_t)((fSliderX->GetMaxPosition())+0.5));
2439 fPx1old = fGedEditor->GetPad()->XtoAbsPixel(xleft);
2441 fPx2old = fGedEditor->GetPad()->XtoAbsPixel(xright);
2444 } else if (fDelaydraw->GetState()==kButtonDown &&
2447 // 3D plot
2448 if (!fGedEditor->GetPad()) return;
2449 fGedEditor->GetPad()->cd();
2450 TView *fView = fGedEditor->GetPad()->GetView();
2451 if (!fView) return;
2452 Double_t *rmin = fView->GetRmin();
2453 if (!rmin) return;
2454 Double_t *rmax = fView->GetRmax();
2455 if (!rmax) return;
2456 fP1oldx[0] = fP4oldx[0] = fP5oldx[0] = fP8oldx[0] =
2457 xaxis->GetBinLowEdge((Int_t)((fSliderX->GetMinPosition())+0.5));
2458 fP2oldx[0] = fP3oldx[0] = fP6oldx[0] = fP7oldx[0] =
2459 xaxis->GetBinUpEdge((Int_t)((fSliderX->GetMaxPosition())+0.5));
2460 fP1oldx[1] = fP2oldx[1] = fP3oldx[1] = fP4oldx[1] = rmin[1];
2461 fP5oldx[1] = fP6oldx[1] = fP7oldx[1] = fP8oldx[1] = rmax[1];
2462 fP1oldx[2] = fP2oldx[2] = fP5oldx[2] = fP6oldx[2] = rmin[2];
2463 fP3oldx[2] = fP4oldx[2] = fP7oldx[2] = fP8oldx[2] = rmax[2];
2464 if (fGedEditor->GetPad()->GetCanvas())
2470 }
2471}
2472
2473////////////////////////////////////////////////////////////////////////////////
2474/// Slot connected to the x-axis slider finalizing values after
2475/// the slider movement.
2476
2478{
2479 if (fAvoidSignal) return;
2482 (Int_t)((fSliderX->GetMaxPosition())+0.5));
2485 Update();
2486 }
2488 if (player) if (player->GetHistogram() == fHist) {
2489 Int_t last = fHist->GetXaxis()->GetLast();
2492 Update();
2493 }
2494}
2495
2496////////////////////////////////////////////////////////////////////////////////
2497/// Slot connected to the Max/Min number entry fields showing x-axis range.
2498
2500{
2501 TAxis* xaxis = fHist->GetXaxis();
2502 Int_t nx = xaxis->GetNbins();
2503 Double_t width = xaxis->GetBinWidth(1);
2504 if ((fSldXMin->GetNumber()+width/2) < (xaxis->GetBinLowEdge(1)))
2505 fSldXMin->SetNumber(xaxis->GetBinLowEdge(1));
2506 if ((fSldXMax->GetNumber()-width/2) > (xaxis->GetBinUpEdge(nx)))
2507 fSldXMax->SetNumber(xaxis->GetBinUpEdge(nx));
2509 fSldXMax->GetNumber()-width/2);
2510 Int_t nxbinmin = xaxis->GetFirst();
2511 Int_t nxbinmax = xaxis->GetLast();
2512 fSliderX->SetPosition((Double_t)(nxbinmin),(Double_t)(nxbinmax));
2513 Update();
2514}
2515
2516////////////////////////////////////////////////////////////////////////////////
2517/// Slot connected to the x-slider for redrawing the
2518/// histogram with the new slider Range (immediately).
2519
2521{
2522 if (fAvoidSignal) return;
2523 TAxis* yaxis = fHist->GetYaxis();
2525 Int_t px1,py1,px2,py2;
2526 Float_t xmin,xmax,ybottom,ytop;
2527 ybottom = yaxis->GetBinLowEdge((Int_t)((fSliderY->GetMinPosition())+0.5));
2528 ytop = yaxis->GetBinUpEdge((Int_t)((fSliderY->GetMaxPosition())+0.5));
2531 px1 = fGedEditor->GetPad()->XtoAbsPixel(xmin);
2532 py1 = fGedEditor->GetPad()->YtoAbsPixel(ybottom);
2533 px2 = fGedEditor->GetPad()->XtoAbsPixel(xmax);
2534 py2 = fGedEditor->GetPad()->YtoAbsPixel(ytop);
2535 if (fGedEditor->GetPad()->GetCanvas())
2537 fGedEditor->GetPad()->cd();
2541 gVirtualX->DrawBox(px1, py1, px2, py2, TVirtualX::kHollow);
2542 fPx1old = px1;
2543 fPy1old = py1;
2544 fPx2old = px2 ;
2545 fPy2old = py2;
2546 gVirtualX->Update(0);
2547 fSldYMin->SetNumber(ybottom);
2548 fSldYMax->SetNumber(ytop);
2549 } else if (fDelaydraw->GetState()==kButtonDown &&
2552 // 3D plot
2553 Float_t p1[3], p2[3], p3[3], p4[3], p5[3], p6[3], p7[3], p8[3];
2554 if (fGedEditor->GetPad()->GetCanvas())
2556 fGedEditor->GetPad()->cd();
2557 TView *fView = fGedEditor->GetPad()->GetView();
2558 if (!fView) return;
2559 Double_t *rmin = fView->GetRmin();
2560 if (!rmin) return;
2561 Double_t *rmax = fView->GetRmax();
2562 if (!rmax) return;
2563 p1[0] = p2[0] = p3[0] = p4[0] = rmin[0];
2564 p5[0] = p6[0] = p7[0] = p8[0] = rmax[0];
2565 p1[1] = p4[1] = p5[1] = p8[1] =
2566 yaxis->GetBinLowEdge((Int_t)((fSliderY->GetMinPosition())+0.5));
2567 p2[1] = p3[1] = p6[1] = p7[1] =
2568 yaxis->GetBinUpEdge((Int_t)((fSliderY->GetMaxPosition())+0.5));
2569 p1[2] = p2[2] = p5[2] = p6[2] = rmin[2];
2570 p3[2] = p4[2] = p7[2] = p8[2] = rmax[2];
2575 PaintBox3D(p2, p3, p7, p6);
2576 PaintBox3D(p1, p4, p8, p5);
2577 for (Int_t i = 0; i<3; i++) {
2578 fP1oldy[i] = p1[i];
2579 fP2oldy[i] = p2[i];
2580 fP3oldy[i] = p3[i];
2581 fP4oldy[i] = p4[i];
2582 fP5oldy[i] = p5[i];
2583 fP6oldy[i] = p6[i];
2584 fP7oldy[i] = p7[i];
2585 fP8oldy[i] = p8[i];
2586 }
2587 fSldYMin->SetNumber(p1[1]);
2588 fSldYMax->SetNumber(p2[1]);
2589 } else if (fDelaydraw->GetState()==kButtonDown &&
2593 } else {
2594 yaxis->SetRange((Int_t)((fSliderY->GetMinPosition())+0.5),
2595 (Int_t)((fSliderY->GetMaxPosition())+0.5));
2596 fSldYMin->SetNumber(yaxis->GetBinLowEdge(yaxis->GetFirst()));
2597 fSldYMax->SetNumber(yaxis->GetBinUpEdge(yaxis->GetLast()));
2599 Update();
2600 }
2603}
2604
2605////////////////////////////////////////////////////////////////////////////////
2606/// Slot connected to y-axis slider which initialises
2607/// the "virtual" box which is drawn in delay draw mode.
2608
2610{
2611 if (fAvoidSignal) return;
2612 TAxis* yaxis = fHist->GetYaxis();
2613 Float_t xmin,xmax,ytop,ybottom;
2615 // 2D plot:
2616 if (!fGedEditor->GetPad()) return;
2617 fGedEditor->GetPad()->cd();
2618 if (fGedEditor->GetPad()->GetCanvas())
2622 ybottom = yaxis->GetBinLowEdge((Int_t)((fSliderY->GetMinPosition())+0.5));
2623 ytop = yaxis->GetBinUpEdge((Int_t)((fSliderY->GetMaxPosition())+0.5));
2627 fPy1old = fGedEditor->GetPad()->YtoAbsPixel(ybottom);
2631 } else if (fDelaydraw->GetState()==kButtonDown &&
2634 // 3D plot
2635 if (!fGedEditor->GetPad()) return;
2636 fGedEditor->GetPad()->cd();
2637 TView *fView = fGedEditor->GetPad()->GetView();
2638 if (!fView) return;
2639 Double_t *rmin = fView->GetRmin();
2640 if (!rmin) return;
2641 Double_t *rmax = fView->GetRmax();
2642 if (!rmax) return;
2643 fP1oldy[0] = fP2oldy[0] = fP3oldy[0] = fP4oldy[0] = rmin[0];
2644 fP5oldy[0] = fP6oldy[0] = fP7oldy[0] = fP8oldy[0] = rmax[0];
2645 fP1oldy[1] = fP4oldy[1] = fP5oldy[1] = fP8oldy[1] =
2646 yaxis->GetBinLowEdge((Int_t)((fSliderY->GetMinPosition())+0.5));
2647 fP2oldy[1] = fP3oldy[1] = fP6oldy[1] = fP7oldy[1] =
2648 yaxis->GetBinUpEdge((Int_t)((fSliderY->GetMaxPosition())+0.5));
2649 fP1oldy[2] = fP2oldy[2] = fP5oldy[2] = fP6oldy[2] = rmin[2];
2650 fP3oldy[2] = fP4oldy[2] = fP7oldy[2] = fP8oldy[2] = rmax[2];
2651 if (fGedEditor->GetPad()->GetCanvas())
2657 }
2658}
2659
2660////////////////////////////////////////////////////////////////////////////////
2661/// Slot connected to the y-axis slider finalizing values after
2662/// the slider movement.
2663
2665{
2666 if (fAvoidSignal) return;
2669 (Int_t)((fSliderY->GetMaxPosition())+0.5));
2672 Update();
2673 }
2674
2676 if (player) if (player->GetHistogram() == fHist) {
2677 Int_t last = fHist->GetYaxis()->GetLast();
2680 Update();
2681 }
2682}
2683
2684////////////////////////////////////////////////////////////////////////////////
2685/// Slot connected to the Max/Min number entry fields showing y-axis range.
2686
2688{
2689 if (fAvoidSignal) return;
2690 TAxis* yaxis = fHist->GetYaxis();
2691 Int_t ny = yaxis->GetNbins();
2692 Double_t width = yaxis->GetBinWidth(1);
2693
2694 if ((fSldYMin->GetNumber()+width/2) < (yaxis->GetBinLowEdge(1)))
2695 fSldYMin->SetNumber(yaxis->GetBinLowEdge(1));
2696 if ((fSldYMax->GetNumber()-width/2) > (yaxis->GetBinUpEdge(ny)))
2697 fSldYMax->SetNumber(yaxis->GetBinUpEdge(ny));
2698
2700 fSldYMax->GetNumber()-width/2);
2701 Int_t nybinmin = yaxis -> GetFirst();
2702 Int_t nybinmax = yaxis -> GetLast();
2703 fSliderY->SetPosition((Double_t)(nybinmin),(Double_t)(nybinmax));
2704 Update();
2705}
2706
2707////////////////////////////////////////////////////////////////////////////////
2708/// Slot connected to the fill area color.
2709
2711{
2712 if (fAvoidSignal || !fGedEditor->GetPad()) return;
2713 fGedEditor->GetPad()->cd();
2715 Update();
2716}
2717
2718////////////////////////////////////////////////////////////////////////////////
2719/// Slot connected to the fill area pattern.
2720
2722{
2723 if (fAvoidSignal || !fGedEditor->GetPad()) return;
2724 fGedEditor->GetPad()->cd();
2725 fGedEditor->GetPad()->SetFrameFillStyle(pattern);
2726 Update();
2727}
2728
2729////////////////////////////////////////////////////////////////////////////////
2730/// Return the immediate histogram type (HIST, LEGO1-4, SURF1-5).
2731
2733{
2734 TString s="";
2735 switch (fTypeCombo->GetSelected()){
2736 case (-1) : {s = ""; break;}
2737 case (kTYPE_LEGO ): {s = "LEGO"; break;}
2738 case (kTYPE_LEGO1): {s = "LEGO1"; break;}
2739 case (kTYPE_LEGO2): {s = "LEGO2"; break;}
2740 case (kTYPE_LEGO3): {s = "LEGO3"; break;}
2741 case (kTYPE_LEGO4): {s = "LEGO4"; break;}
2742 case (kTYPE_SURF ): {s = "SURF"; break;}
2743 case (kTYPE_SURF1): {s = "SURF1"; break;}
2744 case (kTYPE_SURF2): {s = "SURF2"; break;}
2745 case (kTYPE_SURF3): {s = "SURF3"; break;}
2746 case (kTYPE_SURF4): {s = "SURF4"; break;}
2747 case (kTYPE_SURF5): {s = "SURF5"; break;}
2748 default: break;
2749 }
2750 return s;
2751}
2752
2753////////////////////////////////////////////////////////////////////////////////
2754/// Return the immediate coordinate system of the histogram.
2755/// (POL, CYL, SPH,PSR)
2756
2758{
2759 TString s="";
2760 switch (fCoordsCombo->GetSelected()){
2761 case (-1) : {s = ""; break;}
2762 case (kCOORDS_CAR): {s = ""; break;}
2763 case (kCOORDS_POL): {s = "POL"; break;}
2764 case (kCOORDS_CYL): {s = "CYL"; break;}
2765 case (kCOORDS_SPH): {s = "SPH"; break;}
2766 case (kCOORDS_PSR): {s = "PSR"; break;}
2767 default: break;
2768 }
2769 return s;
2770}
2771
2772////////////////////////////////////////////////////////////////////////////////
2773/// Returns histogram contour option (None,Cont0..5).
2774
2776{
2777 TString s="";
2778 switch (fContCombo->GetSelected()){
2779 case (-1) : {s = ""; break;}
2780 case (kCONT_NONE) : {s = ""; break;}
2781 case (kCONT_0) : {s = "CONT0"; break;}
2782 case (kCONT_1) : {s = "CONT1"; break;}
2783 case (kCONT_2) : {s = "CONT2"; break;}
2784 case (kCONT_3) : {s = "CONT3"; break;}
2785 case (kCONT_4) : {s = "CONT4"; break;}
2786 default: break;
2787 }
2788 return s;
2789}
2790
2791////////////////////////////////////////////////////////////////////////////////
2792/// Return histogram additive options (Arr,Box,Col,Scat,Col,Text,E,Z,FB,BB).
2793
2795{
2796 TString s="";
2797 if (fDim->GetState()==kButtonDown) {
2798 if (fAddArr->GetState()==kButtonDown) s+="ARR";
2799 if (fAddBox->GetState()==kButtonDown) s+="BOX";
2800 if (fAddCol->GetState()==kButtonDown) s+="COL";
2801 if (fAddScat->GetState()==kButtonDown) s+="SCAT";
2802 if (fAddText->GetState()==kButtonDown) s+="TEXT";
2803 if (fAddPalette->GetState()==kButtonDown) s+="Z";
2804 } else if (fDim0->GetState()==kButtonDown){
2805 if (fAddPalette1->GetState()==kButtonDown) s+="Z";
2806 if (fAddError->GetState()==kButtonDown) s+="E";
2807 if (fAddFB->GetState()==kButtonUp) s+="FB";
2808 if (fAddBB->GetState()==kButtonUp) s+="BB";
2809 }
2810 return s;
2811}
2812
2813////////////////////////////////////////////////////////////////////////////////
2814/// Return draw option string related to graphical cut in use.
2815
2817{
2818 TString cutopt = " ";
2819 TString opt = GetDrawOption();
2820 Int_t scut = opt.First('[');
2821 if (scut != -1) {
2822 Int_t ecut = opt.First(']');
2823 cutopt += opt(scut,ecut);
2824 }
2825 return cutopt;
2826}
2827
2828////////////////////////////////////////////////////////////////////////////////
2829/// Create histogram type combo box.
2830
2832{
2833 TGComboBox *c = new TGComboBox(parent, id);
2834
2835 c->AddEntry("Lego" , kTYPE_LEGO);
2836 c->AddEntry("Lego1", kTYPE_LEGO1);
2837 c->AddEntry("Lego2", kTYPE_LEGO2);
2838 c->AddEntry("Lego3", kTYPE_LEGO3);
2839 c->AddEntry("Lego4", kTYPE_LEGO4);
2840 c->AddEntry("Surf" , kTYPE_SURF);
2841 c->AddEntry("Surf1", kTYPE_SURF1);
2842 c->AddEntry("Surf2", kTYPE_SURF2);
2843 c->AddEntry("Surf3", kTYPE_SURF3);
2844 c->AddEntry("Surf4", kTYPE_SURF4);
2845 c->AddEntry("Surf5", kTYPE_SURF5);
2846
2847 return c;
2848}
2849
2850////////////////////////////////////////////////////////////////////////////////
2851/// Create coordinate system combo box.
2852
2854{
2855 TGComboBox *c = new TGComboBox(parent, id);
2856
2857 c->AddEntry("Cartesian", kCOORDS_CAR);
2858 c->AddEntry("Cylindric", kCOORDS_CYL);
2859 c->AddEntry("Polar", kCOORDS_POL);
2860 c->AddEntry("Rapidity", kCOORDS_PSR);
2861 c->AddEntry("Spheric", kCOORDS_SPH);
2862 TGListBox* lb = c->GetListBox();
2863 lb->Resize(lb->GetWidth(), 83);
2864
2865 return c;
2866}
2867
2868////////////////////////////////////////////////////////////////////////////////
2869/// Create contour combo box.
2870
2872{
2873 TGComboBox *c = new TGComboBox(parent, id);
2874
2875 c->AddEntry("None" , kCONT_NONE);
2876 c->AddEntry("Cont0", kCONT_0);
2877 c->AddEntry("Cont1", kCONT_1);
2878 c->AddEntry("Cont2", kCONT_2);
2879 c->AddEntry("Cont3", kCONT_3);
2880 c->AddEntry("Cont4", kCONT_4);
2881
2882 return c;
2883}
2884
2885////////////////////////////////////////////////////////////////////////////////
2886/// Paint a square in 3D.
2887
2889{
2890 fGedEditor->GetPad()->PaintLine3D(p1, p2);
2891 fGedEditor->GetPad()->PaintLine3D(p2, p3);
2892 fGedEditor->GetPad()->PaintLine3D(p3, p4);
2893 fGedEditor->GetPad()->PaintLine3D(p4, p1);
2894}
2895////////////////////////////////////////////////////////////////////////////////
2896/// Give an array of dividers of n (without the trivial divider n))
2897/// in the first entry the number of dividers is saved.
2898
2900{
2901 Int_t* div;
2902 if (n <= 0) {
2903 div = new Int_t[1];
2904 div[0]=0;
2905 } else if (n == 1) {
2906 div = new Int_t[2];
2907 div[0]=div[1]=1;
2908 } else {
2909 div = new Int_t[(Int_t) n/2+2];
2910 div[0]=0;
2911 div[1]=1;
2912
2913 Int_t num = 1;
2914 for (Int_t i=2; i <= n/2; i++) {
2915 if (n % i == 0) {
2916 num++;
2917 div[num] = i;
2918 }
2919 }
2920 num++;
2921 div[num]=n;
2922 div[0] = num;
2923 }
2924 return div;
2925}
2926
2927////////////////////////////////////////////////////////////////////////////////
2928/// Skip TH1Editor in building list of editors.
2929
2931{
2932 fGedEditor->ActivateEditors(TH1::Class()->GetListOfBases(), kTRUE);
2933}
2934
2935////////////////////////////////////////////////////////////////////////////////
2936/// If the contained histogram obj is deleted we must set its pointer to zero
2937
2939{
2940 if (obj == fHist) {
2941 fHist = 0;
2942 }
2943}
2944
void Class()
Definition: Class.C:29
ULong_t Pixel_t
Definition: GuiTypes.h:39
PyObject * fType
#define d(i)
Definition: RSha256.hxx:102
#define c(i)
Definition: RSha256.hxx:101
int Int_t
Definition: RtypesCore.h:41
unsigned int UInt_t
Definition: RtypesCore.h:42
const Bool_t kFALSE
Definition: RtypesCore.h:88
bool Bool_t
Definition: RtypesCore.h:59
double Double_t
Definition: RtypesCore.h:55
short Style_t
Definition: RtypesCore.h:76
float Float_t
Definition: RtypesCore.h:53
const Bool_t kTRUE
Definition: RtypesCore.h:87
#define ClassImp(name)
Definition: Rtypes.h:365
include TDocParser_001 C image html pict1_TDocParser_001 png width
Definition: TDocParser.cxx:121
@ kButtonDown
Definition: TGButton.h:54
@ kButtonDisabled
Definition: TGButton.h:56
@ kButtonUp
Definition: TGButton.h:53
@ kChildFrame
Definition: TGFrame.h:57
@ kVerticalFrame
Definition: TGFrame.h:59
@ kFixedWidth
Definition: TGFrame.h:65
@ kFitWidth
Definition: TGFrame.h:64
@ kHorizontalFrame
Definition: TGFrame.h:60
@ kOwnBackground
Definition: TGFrame.h:69
@ kLHintsRight
Definition: TGLayout.h:33
@ kLHintsLeft
Definition: TGLayout.h:31
@ kLHintsCenterY
Definition: TGLayout.h:35
@ kLHintsNormal
Definition: TGLayout.h:39
@ kLHintsTop
Definition: TGLayout.h:34
@ kLHintsExpandX
Definition: TGLayout.h:37
@ kMBNo
Definition: TGMsgBox.h:43
@ kMBYes
Definition: TGMsgBox.h:42
@ kMBOk
Definition: TGMsgBox.h:44
@ kMBIconExclamation
Definition: TGMsgBox.h:35
@ kMBIconQuestion
Definition: TGMsgBox.h:34
@ kScaleBoth
Definition: TGSlider.h:62
@ kSlider1
Definition: TGSlider.h:56
ETH2Wid
Definition: TH2Editor.cxx:154
@ kTYPE_SURF2
Definition: TH2Editor.cxx:158
@ kSLIDERX_MAX
Definition: TH2Editor.cxx:166
@ kBINYSLIDER
Definition: TH2Editor.cxx:168
@ kSLIDERX_MIN
Definition: TH2Editor.cxx:166
@ kTYPE_SURF5
Definition: TH2Editor.cxx:158
@ kBACKBOX_ONOFF
Definition: TH2Editor.cxx:162
@ kCONT_1
Definition: TH2Editor.cxx:164
@ kERROR_ONOFF
Definition: TH2Editor.cxx:160
@ kCOORDS_PSR
Definition: TH2Editor.cxx:159
@ kYBINOFFSET
Definition: TH2Editor.cxx:169
@ kPALETTE_ONOFF1
Definition: TH2Editor.cxx:160
@ kTYPE_SURF
Definition: TH2Editor.cxx:158
@ kTYPE_LEGO
Definition: TH2Editor.cxx:157
@ kTYPE_SURF3
Definition: TH2Editor.cxx:158
@ kTYPE_LEGO3
Definition: TH2Editor.cxx:157
@ kCONT_4
Definition: TH2Editor.cxx:164
@ kTYPE_LEGO2
Definition: TH2Editor.cxx:157
@ kCONT_TYPE
Definition: TH2Editor.cxx:160
@ kARROW_ONOFF
Definition: TH2Editor.cxx:161
@ kPATTERN
Definition: TH2Editor.cxx:167
@ kTYPE_SURF1
Definition: TH2Editor.cxx:158
@ kCOORDS_CAR
Definition: TH2Editor.cxx:159
@ kCONT_LEVELS1
Definition: TH2Editor.cxx:165
@ kTYPE_LEGO4
Definition: TH2Editor.cxx:157
@ kCONT_2
Definition: TH2Editor.cxx:164
@ kSLIDERY_MAX
Definition: TH2Editor.cxx:166
@ kDIM_COMPLEX
Definition: TH2Editor.cxx:156
@ kPALETTE_ONOFF
Definition: TH2Editor.cxx:160
@ kCOORDS_POL
Definition: TH2Editor.cxx:159
@ kTYPE_SURF4
Definition: TH2Editor.cxx:158
@ kCOORD_TYPE
Definition: TH2Editor.cxx:159
@ kCONT_0
Definition: TH2Editor.cxx:164
@ kBINXSLIDER1
Definition: TH2Editor.cxx:168
@ kBAR_OFFSET
Definition: TH2Editor.cxx:163
@ kCONT_NONE
Definition: TH2Editor.cxx:164
@ kBOX_ONOFF
Definition: TH2Editor.cxx:161
@ kSLIDERY_MIN
Definition: TH2Editor.cxx:166
@ kBINXSLIDER
Definition: TH2Editor.cxx:168
@ kCOORDS_SPH
Definition: TH2Editor.cxx:159
@ kCONT_LEVELS
Definition: TH2Editor.cxx:165
@ kCOLOR
Definition: TH2Editor.cxx:167
@ kCOORDS_CYL
Definition: TH2Editor.cxx:159
@ kDELAYED_DRAWING
Definition: TH2Editor.cxx:167
@ kBINYSLIDER1
Definition: TH2Editor.cxx:168
@ kCOL_ONOFF
Definition: TH2Editor.cxx:161
@ kFRONTBOX_ONOFF
Definition: TH2Editor.cxx:162
@ kSCAT_ONOFF
Definition: TH2Editor.cxx:161
@ kTEXT_ONOFF
Definition: TH2Editor.cxx:161
@ kXBINOFFSET
Definition: TH2Editor.cxx:169
@ kTYPE_LEGO1
Definition: TH2Editor.cxx:157
@ kTH2_TITLE
Definition: TH2Editor.cxx:155
@ kHIST_TYPE
Definition: TH2Editor.cxx:156
@ kDIM_SIMPLE
Definition: TH2Editor.cxx:156
@ kCONT_3
Definition: TH2Editor.cxx:164
@ kBAR_WIDTH
Definition: TH2Editor.cxx:163
float xmin
Definition: THbookFile.cxx:93
float ymin
Definition: THbookFile.cxx:93
float xmax
Definition: THbookFile.cxx:93
float ymax
Definition: THbookFile.cxx:93
#define gROOT
Definition: TROOT.h:414
#define gPad
Definition: TVirtualPad.h:286
#define gVirtualX
Definition: TVirtualX.h:345
@ kWatch
Definition: TVirtualX.h:47
@ kPointer
Definition: TVirtualX.h:47
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition: TAttLine.h:43
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TAttLine.h:40
Color_t GetFrameFillColor() const
Definition: TAttPad.h:53
void SetFrameFillColor(Color_t color=1)
Definition: TAttPad.h:73
void SetFrameFillStyle(Style_t styl=0)
Definition: TAttPad.h:75
Style_t GetFrameFillStyle() const
Definition: TAttPad.h:55
Class to manage histogram axis.
Definition: TAxis.h:30
Double_t GetXmax() const
Definition: TAxis.h:134
virtual Int_t FindBin(Double_t x)
Find bin number corresponding to abscissa x.
Definition: TAxis.cxx:279
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
Definition: TAxis.cxx:504
Int_t GetLast() const
Return last bin on the axis i.e.
Definition: TAxis.cxx:455
Double_t GetXmin() const
Definition: TAxis.h:133
Int_t GetNbins() const
Definition: TAxis.h:121
virtual void SetRangeUser(Double_t ufirst, Double_t ulast)
Set the viewing range for the axis from ufirst to ulast (in user coordinates).
Definition: TAxis.cxx:928
virtual void SetRange(Int_t first=0, Int_t last=0)
Set the viewing range for the axis from bin first to last.
Definition: TAxis.cxx:903
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
Definition: TAxis.cxx:526
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
Definition: TAxis.cxx:514
Int_t GetFirst() const
Return first bin on the axis i.e.
Definition: TAxis.cxx:444
virtual void Selected(TVirtualPad *pad, TObject *obj, Int_t event)
Emit Selected() signal.
Definition: TCanvas.cxx:1572
void FeedbackMode(Bool_t set)
Turn rubberband feedback mode on or off.
Definition: TCanvas.cxx:1076
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition: TClass.h:75
static ULong_t Number2Pixel(Int_t ci)
Static method that given a color index number, returns the corresponding pixel value.
Definition: TColor.cxx:2003
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
Definition: TColor.cxx:1764
virtual void Show()
Show group of buttons.
virtual void SetLayoutHints(TGLayoutHints *l, TGButton *button=0)
Set layout hints for the specified button or if button=0 for all buttons.
virtual void SetButton(Int_t id, Bool_t down=kTRUE)
Sets the button with id to be on/down, and if this is an exclusive group, all other button in the gro...
virtual void SetToolTipText(const char *text, Long_t delayms=400)
Set tool tip text associated with this button.
Definition: TGButton.cxx:395
virtual EButtonState GetState() const
Definition: TGButton.h:112
virtual void SetState(EButtonState state, Bool_t emit=kFALSE)
Set button state.
Definition: TGButton.cxx:185
virtual void SetState(EButtonState state, Bool_t emit=kFALSE)
Set check button state.
Definition: TGButton.cxx:1200
const TGWindow * GetDefaultRoot() const
Returns the root (i.e.
Definition: TGClient.cxx:234
void NeedRedraw(TGWindow *w, Bool_t force=kFALSE)
Set redraw flags.
Definition: TGClient.cxx:372
void SetColor(Pixel_t color, Bool_t emit=kTRUE)
Set color.
virtual Int_t GetSelected() const
Definition: TGComboBox.h:134
virtual void Select(Int_t id, Bool_t emit=kTRUE)
Make the selected item visible in the combo box window and emit signals according to the second param...
Definition: TGComboBox.cxx:443
TGCompositeFrame(const TGCompositeFrame &)
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1099
virtual void Layout()
Layout the elements of the composite frame.
Definition: TGFrame.cxx:1239
virtual void ChangeOptions(UInt_t options)
Change composite frame options. Options is an OR of the EFrameTypes.
Definition: TGFrame.cxx:1025
virtual void ShowFrame(TGFrame *f)
Show sub frame.
Definition: TGFrame.cxx:1186
virtual void HideFrame(TGFrame *f)
Hide sub frame.
Definition: TGFrame.cxx:1172
virtual Float_t GetMaxPosition() const
virtual Float_t GetMinPosition() const
virtual void SetRange(Float_t min, Float_t max)
virtual void SetPosition(Float_t min, Float_t max)
virtual UInt_t GetDefaultHeight() const
Definition: TGFrame.h:238
virtual void Resize(UInt_t w=0, UInt_t h=0)
Resize the frame.
Definition: TGFrame.cxx:587
Bool_t Contains(Int_t x, Int_t y) const
Definition: TGFrame.h:285
UInt_t GetWidth() const
Definition: TGFrame.h:271
virtual void Resize(UInt_t w, UInt_t h)
Resize the frame.
Definition: TGSlider.h:173
virtual void Disable(Bool_t on=kTRUE)
Definition: TGLabel.h:97
virtual void Enable()
Definition: TGLabel.h:99
virtual void Resize(UInt_t w, UInt_t h)
Resize the listbox widget.
Definition: TGListBox.cxx:1419
virtual Double_t GetNumber() const
Get the numeric value (floating point representation).
virtual void SetLimits(ELimit limits=kNELNoLimits, Double_t min=0, Double_t max=1)
Set the numerical limits.
virtual void SetIntNumber(Long_t val)
Set the numeric value (integer representation).
virtual void SetNumber(Double_t val)
Set the numeric value (floating point representation).
virtual void SetNumber(Double_t val)
virtual void SetIntNumber(Long_t val)
TGNumberEntryField * GetNumberEntry() const
virtual Double_t GetNumber() const
TGClient * fClient
Definition: TGObject.h:37
Handle_t GetId() const
Definition: TGObject.h:47
virtual Int_t GetMaxPosition() const
Definition: TGSlider.h:111
virtual Int_t GetPosition() const
Definition: TGSlider.h:109
virtual void SetPosition(Int_t pos)
Definition: TGSlider.h:105
virtual void SetRange(Int_t min, Int_t max)
Definition: TGSlider.h:101
virtual void SetScale(Int_t scale)
Definition: TGSlider.h:100
Bool_t IsEnabled(Int_t tabIndex) const
Returns true if tab is enabled.
Definition: TGTab.cxx:447
virtual void SetEnabled(Int_t tabIndex, Bool_t on=kTRUE)
Enable or disable tab.
Definition: TGTab.cxx:435
virtual Bool_t SetTab(Int_t tabIndex, Bool_t emit=kTRUE)
Brings the composite frame with the index tabIndex to the front and generate the following event if t...
Definition: TGTab.cxx:507
Int_t GetCurrent() const
Definition: TGTab.h:105
virtual void SetToolTipText(const char *text, Long_t delayms=500)
Set tool tip text associated with this text entry.
virtual void SetText(const char *text, Bool_t emit=kTRUE)
Sets text entry to text, clears the selection and moves the cursor to the end of the line.
virtual void Associate(const TGWindow *w)
Definition: TGWidget.h:84
virtual const TGWindow * GetMainFrame() const
Returns top level main frame.
Definition: TGWindow.cxx:133
virtual const char * GetName() const
Return unique name, used in SavePrimitive methods.
Definition: TGWindow.cxx:221
TGTab * GetTab() const
Definition: TGedEditor.h:84
void ActivateEditors(TList *bcl, Bool_t recurse)
Searches GedFrames for classes in the given list.
Definition: TGedEditor.cxx:564
virtual TCanvas * GetCanvas() const
Definition: TGedEditor.h:88
virtual TVirtualPad * GetPad() const
Definition: TGedEditor.h:89
virtual Option_t * GetDrawOption() const
Get draw options of the selected object.
Definition: TGedFrame.cxx:81
TGedEditor * fGedEditor
Definition: TGedFrame.h:54
virtual TGVerticalFrame * CreateEditorTabSubFrame(const char *name)
Create a vertical frame to be used by 'owner' in extra tab 'name'.
Definition: TGedFrame.cxx:123
virtual void SetDrawOption(Option_t *option="")
Set drawing option for object.
Definition: TGedFrame.cxx:145
Bool_t fInit
Definition: TGedFrame.h:53
virtual void MakeTitle(const char *title)
Create attribute frame title.
Definition: TGedFrame.cxx:96
virtual void Refresh(TObject *model)
Refresh the GUI info about the object attributes.
Definition: TGedFrame.cxx:135
virtual void Update()
Update the current pad when an attribute is changed via GUI.
Definition: TGedFrame.cxx:73
Bool_t fAvoidSignal
Definition: TGedFrame.h:56
void SetPattern(Style_t pattern, Bool_t emit=kTRUE)
Set pattern.
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
Definition: TH1.cxx:8351
virtual void SetTitle(const char *title)
See GetStatOverflows for more information.
Definition: TH1.cxx:6309
virtual Float_t GetBarWidth() const
Definition: TH1.h:252
virtual Float_t GetBarOffset() const
Definition: TH1.h:251
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
Definition: TH1.h:316
TObject * Clone(const char *newname=0) const
Make a complete copy of the underlying object.
Definition: TH1.cxx:2664
virtual Bool_t Add(TF1 *h1, Double_t c1=1, Option_t *option="")
Performs the operation: this = this + c1*f1 if errors are defined (see TH1::Sumw2),...
Definition: TH1.cxx:777
TAxis * GetYaxis()
Definition: TH1.h:317
virtual void SetContour(Int_t nlevels, const Double_t *levels=0)
Set the number and values of contour levels.
Definition: TH1.cxx:7905
virtual void SetBarWidth(Float_t width=0.5)
Definition: TH1.h:356
virtual Double_t GetEntries() const
Return the current number of entries.
Definition: TH1.cxx:4277
virtual UInt_t SetCanExtend(UInt_t extendBitMask)
Make the histogram axes extendable / not extendable according to the bit mask returns the previous bi...
Definition: TH1.cxx:6255
virtual void SetBarOffset(Float_t offset=0.25)
Definition: TH1.h:355
@ kNoAxis
NOTE: Must always be 0 !!!
Definition: TH1.h:69
virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax)
Redefine x axis parameters.
Definition: TH1.cxx:8181
virtual Int_t GetContour(Double_t *levels=0)
Return contour values into array levels if pointer levels is non zero.
Definition: TH1.cxx:7833
TGNumberEntryField * fSldXMin
Definition: TH2Editor.h:97
TGCheckButton * fAddArr
Definition: TH2Editor.h:67
TGNumberEntryField * fYOffsetNumberEntry
Definition: TH2Editor.h:94
virtual void DoOffsetPressed()
Slot connected to the OffSetSlider.
Definition: TH2Editor.cxx:2121
TGNumberEntry * fContLevels1
Definition: TH2Editor.h:75
virtual void DoBarWidth()
Slot connected to the bar width of the bar chart.
Definition: TH2Editor.cxx:1566
TGCompositeFrame * f9
Definition: TH2Editor.h:60
Float_t fP4oldy[3]
Definition: TH2Editor.h:137
virtual void SetModel(TObject *obj)
Pick up the values of current histogram attributes.
Definition: TH2Editor.cxx:782
virtual void DoBinReleased()
Slot connected to the rebin slider in case of no ntuple histogram.
Definition: TH2Editor.cxx:1587
TGCheckButton * fAddBB
Definition: TH2Editor.h:72
TGNumberEntryField * fXOffsetNumberEntry
Definition: TH2Editor.h:88
Float_t fP3oldx[3]
Definition: TH2Editor.h:128
Float_t fP5oldy[3]
Definition: TH2Editor.h:138
TGCheckButton * fAddFB
Definition: TH2Editor.h:71
virtual void RecursiveRemove(TObject *obj)
If the contained histogram obj is deleted we must set its pointer to zero.
Definition: TH2Editor.cxx:2938
TGCompositeFrame * fBinXCont
Definition: TH2Editor.h:78
virtual void DoBinPressed()
Slot connected to the rebin slider in case of no ntuple histogram.
Definition: TH2Editor.cxx:1659
TGDoubleHSlider * fSliderY
Definition: TH2Editor.h:99
void CreateBinTab()
Create the Binning tab.
Definition: TH2Editor.cxx:377
TH2 * fBinHist
Definition: TH2Editor.h:142
TGTextButton * fApply
Definition: TH2Editor.h:83
virtual Bool_t AcceptModel(TObject *model)
Check if object is able to configure with this editor.
Definition: TH2Editor.cxx:769
TGCompositeFrame * f6
Definition: TH2Editor.h:59
virtual void DoAddError(Bool_t on)
Slot connected to the "Error" check button.
Definition: TH2Editor.cxx:1417
virtual void DoAddArr(Bool_t on)
Slot connected to the "Arrow draw option" check button.
Definition: TH2Editor.cxx:1252
TGCheckButton * fAddError
Definition: TH2Editor.h:64
TGHSlider * fBinYSlider1
Definition: TH2Editor.h:92
Float_t fP8oldy[3]
Definition: TH2Editor.h:141
TGNumberEntryField * fBinXNumberEntry1
Definition: TH2Editor.h:87
virtual void DoAddBB()
Slot connected to the "BB back-box draw option" check button.
Definition: TH2Editor.cxx:1513
TGCheckButton * fAddPalette1
Definition: TH2Editor.h:66
TGCompositeFrame * f38
Definition: TH2Editor.h:63
virtual void DoFillPattern(Style_t)
Slot connected to the fill area pattern.
Definition: TH2Editor.cxx:2721
Float_t fP2oldx[3]
Definition: TH2Editor.h:127
TGDoubleHSlider * fSliderX
Definition: TH2Editor.h:96
virtual void DoApply()
Slot connected to the Apply Button in the Rebinned histogram Window.
Definition: TH2Editor.cxx:1819
TGNumberEntryField * fBinYNumberEntry
Definition: TH2Editor.h:82
TGHSlider * fBinYSlider
Definition: TH2Editor.h:81
Double_t fOldXOffset
Definition: TH2Editor.h:143
TGHSlider * fYBinOffsetSld
Definition: TH2Editor.h:95
TGNumberEntryField * fBinXNumberEntry
Definition: TH2Editor.h:80
Float_t fP7oldx[3]
Definition: TH2Editor.h:132
virtual void DoSliderYPressed()
Slot connected to y-axis slider which initialises the "virtual" box which is drawn in delay draw mode...
Definition: TH2Editor.cxx:2609
TGCheckButton * fAddPalette
Definition: TH2Editor.h:65
TGCompositeFrame * fBinXCont1
Definition: TH2Editor.h:85
Float_t fP1oldx[3]
Definition: TH2Editor.h:126
TString fCutString
Definition: TH2Editor.h:105
virtual void DoOffsetMoved()
Slot connected to the OffSetSlider.
Definition: TH2Editor.cxx:2202
void PaintBox3D(Float_t *p1, Float_t *p2, Float_t *p3, Float_t *p4)
Paint a square in 3D.
Definition: TH2Editor.cxx:2888
TGRadioButton * fDim
Definition: TH2Editor.h:55
TGNumberEntry * fBarWidth
Definition: TH2Editor.h:76
TGNumberEntryField * fSldYMin
Definition: TH2Editor.h:100
virtual void DoYAxisRange()
Slot connected to the Max/Min number entry fields showing y-axis range.
Definition: TH2Editor.cxx:2687
virtual void DoContLevel()
Slot connected to the contour level number entry fContLevels.
Definition: TH2Editor.cxx:1544
virtual void DoContLevel1()
Slot connected to the contour level number entry fContLevels1.
Definition: TH2Editor.cxx:1555
TGHSlider * fBinXSlider
Definition: TH2Editor.h:79
TGHSlider * fXBinOffsetSld
Definition: TH2Editor.h:89
virtual void DoAddPalette(Bool_t on)
Slot connected to the color palette check button.
Definition: TH2Editor.cxx:1452
TGRadioButton * fDim0
Definition: TH2Editor.h:56
virtual void DoHistChanges()
Slot connected to histogram type, coordinate system, contour combo box.
Definition: TH2Editor.cxx:1175
virtual void ConnectSignals2Slots()
Connect signals to slots.
Definition: TH2Editor.cxx:697
TGLayoutHints * fDimlh
Definition: TH2Editor.h:57
TGCheckButton * fAddScat
Definition: TH2Editor.h:69
virtual void DoBinLabel1()
Slot connected to the Bin Number Entry for the Rebin.
Definition: TH2Editor.cxx:2041
Int_t fTitlePrec
Definition: TH2Editor.h:53
TGLabel * fColContLbl
Definition: TH2Editor.h:51
TGNumberEntry * fContLevels
Definition: TH2Editor.h:74
TString GetHistTypeLabel()
Return the immediate histogram type (HIST, LEGO1-4, SURF1-5).
Definition: TH2Editor.cxx:2732
TGedPatternSelect * fFramePattern
Definition: TH2Editor.h:104
TGCheckButton * fDelaydraw
Definition: TH2Editor.h:102
TGHSlider * fBinXSlider1
Definition: TH2Editor.h:86
Float_t fP2oldy[3]
Definition: TH2Editor.h:135
Float_t fP8oldx[3]
Definition: TH2Editor.h:133
static TGComboBox * BuildHistCoordsComboBox(TGFrame *parent, Int_t id)
Create coordinate system combo box.
Definition: TH2Editor.cxx:2853
virtual void ActivateBaseClassEditors(TClass *cl)
Skip TH1Editor in building list of editors.
Definition: TH2Editor.cxx:2930
TGLayoutHints * fDim0lh
Definition: TH2Editor.h:58
virtual void DoAddScat(Bool_t on)
Slot connected to the "Scat draw option" check button.
Definition: TH2Editor.cxx:1359
TH2Editor(const TGWindow *p=0, Int_t width=140, Int_t height=30, UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground())
Constructor of histogram attribute GUI.
Definition: TH2Editor.cxx:175
virtual void DoSliderXReleased()
Slot connected to the x-axis slider finalizing values after the slider movement.
Definition: TH2Editor.cxx:2477
TGCheckButton * fAddCol
Definition: TH2Editor.h:70
virtual void DoSliderXPressed()
Slot connected to the x axis range slider that initialises the "virtual" box which is drawn in delay ...
Definition: TH2Editor.cxx:2422
TGCheckButton * fAddBox
Definition: TH2Editor.h:68
virtual void DoAddText(Bool_t on)
Slot connected to the "Text draw option" check button.
Definition: TH2Editor.cxx:1385
TH2 * fHist
Definition: TH2Editor.h:44
virtual void DoHistView()
Slot connected to the 'Plot' button group.
Definition: TH2Editor.cxx:1077
virtual void DoXAxisRange()
Slot connected to the Max/Min number entry fields showing x-axis range.
Definition: TH2Editor.cxx:2499
Float_t fP6oldx[3]
Definition: TH2Editor.h:131
TGCheckButton * fAddText
Definition: TH2Editor.h:73
TString GetCutOptionString()
Return draw option string related to graphical cut in use.
Definition: TH2Editor.cxx:2816
Int_t * Dividers(Int_t n)
Give an array of dividers of n (without the trivial divider n)) in the first entry the number of divi...
Definition: TH2Editor.cxx:2899
TString GetHistContLabel()
Returns histogram contour option (None,Cont0..5).
Definition: TH2Editor.cxx:2775
virtual void DoBinReleased1()
Slot connected to the BinNumber Slider in case of a 'ntuple histogram'.
Definition: TH2Editor.cxx:1899
TGColorSelect * fFrameColor
Definition: TH2Editor.h:103
TString GetHistCoordsLabel()
Return the immediate coordinate system of the histogram.
Definition: TH2Editor.cxx:2757
Int_t fPx1old
Definition: TH2Editor.h:122
virtual void DoSliderYMoved()
Slot connected to the x-slider for redrawing the histogram with the new slider Range (immediately).
Definition: TH2Editor.cxx:2520
virtual void DoBinLabel()
Slot connected to the Bin Number Entry for the Rebin.
Definition: TH2Editor.cxx:1769
TGTextButton * fCancel
Definition: TH2Editor.h:84
TGCompositeFrame * fBin
Definition: TH2Editor.h:45
TGNumberEntryField * fSldYMax
Definition: TH2Editor.h:101
Double_t fOldYOffset
Definition: TH2Editor.h:144
TGCompositeFrame * f13
Definition: TH2Editor.h:62
TGNumberEntryField * fSldXMax
Definition: TH2Editor.h:98
virtual void DoBinMoved1()
Slot connected to the rebin slider in case of an ntuple histogram.
Definition: TH2Editor.cxx:2002
virtual void DoTitle(const char *text)
Slot connected to the histogram title setting.
Definition: TH2Editor.cxx:1067
Float_t fP5oldx[3]
Definition: TH2Editor.h:130
Float_t fP4oldx[3]
Definition: TH2Editor.h:129
TGComboBox * fContCombo
Definition: TH2Editor.h:50
Int_t fPy2old
Definition: TH2Editor.h:125
Int_t fPy1old
Definition: TH2Editor.h:123
TGTextEntry * fTitle
Definition: TH2Editor.h:47
virtual void DoAddCol(Bool_t on)
Slot connected to the "Col draw option" check button.
Definition: TH2Editor.cxx:1316
virtual void DoBarOffset()
Slot connected to the bar offset of the bar chart.
Definition: TH2Editor.cxx:1576
virtual void DoOffsetReleased()
Slot connected to the OffSetSlider that changes the origin of the histogram inbetween a binwidth; reb...
Definition: TH2Editor.cxx:2134
virtual ~TH2Editor()
Destructor.
Definition: TH2Editor.cxx:679
virtual void DoBinOffset()
Slot connected to the OffSetNumberEntry, related to the OffSetSlider changes the origin of the histog...
Definition: TH2Editor.cxx:2272
TGLabel * fColContLbl1
Definition: TH2Editor.h:52
static TGComboBox * BuildHistTypeComboBox(TGFrame *parent, Int_t id)
Create histogram type combo box.
Definition: TH2Editor.cxx:2831
Float_t fP3oldy[3]
Definition: TH2Editor.h:136
Float_t fP1oldy[3]
Definition: TH2Editor.h:134
static TGComboBox * BuildHistContComboBox(TGFrame *parent, Int_t id)
Create contour combo box.
Definition: TH2Editor.cxx:2871
TGNumberEntry * fBarOffset
Definition: TH2Editor.h:77
TGComboBox * fCoordsCombo
Definition: TH2Editor.h:49
virtual void DoCancel()
Slot connected to the Cancel Button in the Rebinned histogram Window.
Definition: TH2Editor.cxx:1858
Float_t fP7oldy[3]
Definition: TH2Editor.h:140
Int_t fPx2old
Definition: TH2Editor.h:124
TGCompositeFrame * fBinYCont1
Definition: TH2Editor.h:91
Float_t fP6oldy[3]
Definition: TH2Editor.h:139
virtual void DoSliderYReleased()
Slot connected to the y-axis slider finalizing values after the slider movement.
Definition: TH2Editor.cxx:2664
TGHButtonGroup * fDimGroup
Definition: TH2Editor.h:54
virtual void DoBinMoved()
Slot connected to the rebin sliders in case of no ntuple histogram does the rebinning of the selected...
Definition: TH2Editor.cxx:1677
virtual void DoAddFB()
Slot connected to the "FB front-box draw option" check button.
Definition: TH2Editor.cxx:1479
TString GetHistAdditiveLabel()
Return histogram additive options (Arr,Box,Col,Scat,Col,Text,E,Z,FB,BB).
Definition: TH2Editor.cxx:2794
TGNumberEntryField * fBinYNumberEntry1
Definition: TH2Editor.h:93
TGComboBox * fTypeCombo
Definition: TH2Editor.h:48
virtual void DoHistSimple()
Slot connected to the 2D-Plot radio button.
Definition: TH2Editor.cxx:1094
virtual void DoFillColor(Pixel_t)
Slot connected to the fill area color.
Definition: TH2Editor.cxx:2710
virtual void DoAddBox(Bool_t on)
Slot connected to the "Box draw option" check button.
Definition: TH2Editor.cxx:1284
virtual void DoHistComplex()
Slot connected to the 3D-Plot radio button.
Definition: TH2Editor.cxx:1132
virtual void DoSliderXMoved()
Slot connected to the x-Slider that redraws the histogram with the new slider range.
Definition: TH2Editor.cxx:2332
TGCompositeFrame * f12
Definition: TH2Editor.h:61
Service class for 2-Dim histogram classes.
Definition: TH2.h:30
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
Definition: TH2.cxx:2424
virtual TH2 * Rebin2D(Int_t nxgroup=2, Int_t nygroup=2, const char *newname="")
Rebin this histogram grouping nxgroup/nygroup bins along the xaxis/yaxis together.
Definition: TH2.cxx:1526
virtual const char * GetTitle() const
Returns title of object.
Definition: TNamed.h:48
Mother of all ROOT objects.
Definition: TObject.h:37
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
Definition: TObject.cxx:443
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot.
Definition: TQObject.cxx:867
A specialized TSelector for TTree::Draw.
Definition: TSelectorDraw.h:31
virtual void TakeAction()
Execute action for object obj fNfill times.
Basic string class.
Definition: TString.h:131
Ssiz_t First(char c) const
Find first occurrence of a character c.
Definition: TString.cxx:499
const char * Data() const
Definition: TString.h:364
void ToUpper()
Change string to upper case.
Definition: TString.cxx:1138
TString & Remove(Ssiz_t pos)
Definition: TString.h:668
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:619
Implement some of the functionality of the class TTree requiring access to extra libraries (Histogram...
Definition: TTreePlayer.h:37
TSelector * GetSelector() const
Definition: TTreePlayer.h:84
TH1 * GetHistogram() const
Definition: TTreePlayer.h:77
virtual Int_t GetNfill() const
Definition: TTreePlayer.h:80
See TView3D.
Definition: TView.h:25
virtual Double_t * GetRmax()=0
virtual Double_t * GetRmin()=0
virtual void Modified(Bool_t flag=1)=0
virtual Int_t YtoAbsPixel(Double_t y) const =0
virtual Double_t GetUymax() const =0
virtual void PaintLine3D(Float_t *p1, Float_t *p2)=0
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
virtual Int_t XtoAbsPixel(Double_t x) const =0
virtual void Update()=0
virtual Double_t GetUxmax() const =0
virtual Double_t GetUymin() const =0
virtual Double_t GetUxmin() const =0
virtual TView * GetView() const =0
virtual TCanvas * GetCanvas() const =0
static TVirtualTreePlayer * GetCurrentPlayer()
Static function: return the current player (if any)
TText * text
const Int_t n
Definition: legend1.C:16
constexpr std::array< decltype(std::declval< F >()(std::declval< int >())), N > make(F f)
static constexpr double s
Short_t Abs(Short_t d)
Definition: TMathBase.h:120
Definition: first.py:1