GRSISort
Created by P.C. Bender
Developement Team: P.C. Bender, R. Dunlop, V. Bildstein
An extension of the ROOT analysis Framework
mainwindow.py
Go to the documentation of this file.
1 #!/usr/bin/env python2
2 
3 import ast
4 import os
5 import pprint
6 import Tkinter as tk
7 import tkFileDialog
8 import ttk
9 
10 import sys
11 
12 import ROOT
13 
14 from .run_command import run_command
15 from .hist_tab import HistTab
16 from .tcut_tab import TCutTab
17 from .variable_tab import VariableTab
18 from .util import update_tcanvases
19 from .AnsiColorText import AnsiColorText
20 from .status_widget import ThreadStatusFrame
21 
22 class MainWindow(object):
23 
24  def __init__(self):
25  self.window = tk.Tk()
26  self._load_icons()
27  self._load_default_style()
28 
29  self.canvases = []
30  self.files = {}
31 
32  self._setup_GUI()
33 
34  def LoadGuiFile(self, filename):
35  with open(filename) as f:
36  text = f.read()
37  settings = ast.literal_eval(text)
38 
39  if 'tcuts' in settings:
40  self.tcut_tab._load_tcut_patterns(settings['tcuts'])
41  if 'compiled_histograms' in settings:
42  self.hist_tab._load_compiled_histograms(settings['compiled_histograms']['name'])
43  if 'variables' in settings:
44  self.variable_tab._load_variable_patterns(settings['variables'])
45 
46  def _save_gui_file(self, filename = None):
47  if filename is None:
48  filename = tkFileDialog.asksaveasfilename(filetypes=(("GUI File", "*.hist"),))
49 
50  if not filename:
51  return
52 
53  if not filename.endswith('.hist'):
54  filename += '.hist'
55 
56  output = {}
57  output['histograms'] = self.hist_tab._hist_patterns()
58  output['tcuts'] = self.tcut_tab._tcut_patterns()
59  output['variables'] = self.variable_tab._variable_patterns()
60 
61  if self.hist_tab._compiled_histogram_filename():
62  output['compiled_histograms'] = {'name':self.hist_tab._compiled_histogram_filename()}
63 
64  with open(filename,'w') as f:
65  pprint.pprint(output, f)
66 
67  def _dump_root_file(self, filename = None, include_histograms = True):
68  if filename is None:
69  filename = tkFileDialog.asksaveasfilename(filetypes=(("ROOT File", "*.root"),))
70 
71  if not filename:
72  return
73 
74  if not filename.endswith('.root'):
75  filename += '.root'
76 
77  self.RefreshHistograms()
78  output = ROOT.TFile(filename,'RECREATE')
79  if include_histograms:
80  self.hist_tab._dump_to_tfile()
81  self.tcut_tab._dump_to_tfile()
82  self.variable_tab._dump_to_tfile()
83  output.Close()
84 
85  def _load_icons(self):
86  self.icons = {}
87  self.icons['h1_t'] = tk.PhotoImage(
88  file = os.path.join(os.path.dirname(__file__),'../icons','h1_t.gif'))
89  self.icons['h2_t'] = tk.PhotoImage(
90  file = os.path.join(os.path.dirname(__file__),'../icons','h2_t.gif'))
91  self.icons['folder_t'] = tk.PhotoImage(
92  file = os.path.join(os.path.dirname(__file__),'../icons','folder_t.gif'))
93  self.icons['tfile'] = tk.PhotoImage(
94  file = os.path.join(os.path.dirname(__file__),'../icons','rootdb_t.gif'))
95  self.icons['tcutg'] = tk.PhotoImage(
96  file = os.path.join(os.path.dirname(__file__),'../icons','bld_cut.gif'))
97  self.icons['ttree'] = tk.PhotoImage(
98  file = os.path.join(os.path.dirname(__file__),'../icons','ttree_t.gif'))
99  img = tk.PhotoImage(file=os.path.join(os.path.dirname(__file__),'../icons','hdb_s.gif'))
100  self.window.tk.call('wm','iconphoto',self.window._w,img)
101 
103  style = ROOT.TStyle("GRSIStyle","")
104  style.SetOptStat(1001111)
105  style.SetPalette(1)
106  style.SetTitleColor(ROOT.kBlue)
107  style.SetStatTextColor(ROOT.kBlue)
108  style.SetFuncColor(ROOT.kRed)
109  style.SetTitleBorderSize(0)
110  style.SetOptFit(1111)
111  style.SetPadBorderSize(1)
112  style.SetPadBorderMode(1)
113  ROOT.gROOT.SetStyle("GRSIStyle")
114  ROOT.gROOT.ForceStyle()
115 
116 
117  def _setup_GUI(self):
118  ws = self.window.winfo_screenwidth()
119  hs = self.window.winfo_screenheight()
120 
121  self.window.geometry('450x850+%d+%d' % (ws-475,25))
122  self.window.wm_title("hist-o-matic")
123  self.window.config(menu=self._MakeMenuBar())
124 
125  frame = tk.Frame(self.window)
126  button = tk.Button(frame,
127  text='Load Data File',fg="black",bg="goldenrod",
128  command=self.LoadDataFile)
129  button.pack(side=tk.LEFT)
130 
131  button = tk.Button(frame,
132  text='Load Root File',fg="black",bg="goldenrod",
133  command=self.LoadRootFile)
134  button.pack(side=tk.LEFT)
135 
136  button = tk.Button(frame,
137  text='Load Window File',fg="black",bg="goldenrod",
138  command=self.LoadWindowFile)
139  button.pack(side=tk.LEFT)
140 
141  frame.pack(fill=tk.X,expand=False)
142 
143  frame = tk.Frame(self.window)
144 
145  button = tk.Button(frame,
146  text='Refresh',fg="black",bg="goldenrod",
147  command=self.RefreshHistograms)
148  button.pack(side=tk.LEFT)
149 
150  button = tk.Button(frame,
151  text='Reset',fg="black",bg="goldenrod",
152  command=self.ResetHistograms)
153  button.pack(side=tk.LEFT)
154 
155  button = tk.Button(frame,
156  text='Reset All',fg="black",bg="goldenrod",
157  command=self.ResetAllHistograms)
158  button.pack(side=tk.LEFT)
159 
160  button = tk.Button(frame,
161  text='Resort Data',fg="black",bg="goldenrod",
162  command=self.ResortDataFile)
163  button.pack(side=tk.LEFT)
164 
165  frame.pack(fill=tk.X,expand=False)
166 
167  notebook = ttk.Notebook(self.window)
168 
169  hist_page = ttk.Frame(notebook)
170  self.hist_tab = HistTab(self, hist_page)
171  notebook.add(hist_page, text='Histograms')
172 
173  tcut_page = ttk.Frame(notebook)
174  self.tcut_tab = TCutTab(self, tcut_page)
175  notebook.add(tcut_page, text='Gates')
176 
177  variable_page = ttk.Frame(notebook)
178  self.variable_tab = VariableTab(self, variable_page)
179  notebook.add(variable_page, text='Variables')
180 
181  notebook.pack(fill=tk.BOTH,expand=True)
182 
183  self._setup_status_bar(self.window)
184 
185  status = ThreadStatusFrame(self.window)
186  status.pack()
187 
188 
189  def _setup_status_bar(self, parent):
190  frame = tk.Frame(parent, height=60)
191  frame.propagate(False)
192  self.status_bar = AnsiColorText(frame, bg='black')
193  self.status_bar.pack(fill=tk.X,expand=True)
194  frame.pack(fill=tk.X, expand=False)
195  self.window.after_idle(self._update_status_bar)
196 
198  self.status_bar.delete(1.0, tk.END)
199  #pipeline = ROOT.GetPipeline(0)
200  #if pipeline:
201  # self.status_bar.write(pipeline.Status())
202  #self.window.after(1000, self._update_status_bar)
203 
204  def _SetOptStat(self):
205  stat = ''
206  if self.optstat_name.get():
207  stat += 'n'
208  if self.optstat_entries.get():
209  stat += 'e'
210  if self.optstat_mean.get():
211  stat += 'm'
212  if self.optstat_mean_err.get():
213  stat += 'M'
214  if self.optstat_rms.get():
215  stat += 'r'
216  if self.optstat_rms_err.get():
217  stat += 'R'
218  if self.optstat_underflow.get():
219  stat += 'u'
220  if self.optstat_overflow.get():
221  stat += 'o'
222  if self.optstat_integral.get():
223  stat += 'i'
224  if self.optstat_skew.get():
225  stat += 's'
226  if self.optstat_skew_err.get():
227  stat += 'S'
228  if self.optstat_kurt.get():
229  stat += 'k'
230  if self.optstat_kurt_err.get():
231  stat += 'K'
232  ROOT.gStyle.SetOptStat(stat)
233 
234  def _MakeMenuBar(self):
235  menubar = tk.Menu(self.window)
236 
237  self._MakeFileMenu(menubar)
238  self._MakeRefreshMenu(menubar)
239  self._MakeZoneMenu(menubar)
240  self._MakeOptStatMenu(menubar)
241  self._MakePlotMenu(menubar)
242  self._MakeHelpMenu(menubar)
243 
244  return menubar
245 
246  def _MakeFileMenu(self, menubar):
247  self.defaultcanvassize = tk.StringVar(value='800x600')
248  filemenu = tk.Menu(menubar,tearoff=0)
249  filemenu.add_command(label="New Canvas",command=self.open_canvas)
250  filemenu.add_separator()
251  filemenu.add_checkbutton(label="Size 800 x 600",onvalue="800x600",
252  variable=self.defaultcanvassize)
253  filemenu.add_checkbutton(label="Size 1200 x 600",onvalue="1200x600",
254  variable=self.defaultcanvassize)
255  filemenu.add_checkbutton(label="Size 1900 x 450",onvalue="1900x450",
256  variable=self.defaultcanvassize)
257  filemenu.add_checkbutton(label="Size 1900 x 900",onvalue="1900x900",
258  variable=self.defaultcanvassize)
259  filemenu.add_separator()
260  filemenu.add_command(label="Close All Canvases",command=self.close_all_canvases)
261  filemenu.add_separator()
262  filemenu.add_command(label="Open GUI",command=self.hello)
263  filemenu.add_command(label="Save GUI",command=self._save_gui_file)
264  filemenu.add_command(label="Dump ROOT Config",
265  command=lambda :self._dump_root_file(include_histograms=False))
266  filemenu.add_command(label="Dump ROOT Histograms",command=self._dump_root_file)
267  filemenu.add_separator()
268  filemenu.add_command(label="Exit",command=self.Terminate)
269  menubar.add_cascade(label="File",menu=filemenu)
270 
271  def Terminate(self):
272  self.dummy = ROOT.TTimer('.q',-1)
273  self.dummy.Start(-1, True)
274 
275  def _PickIcon(self, obj):
276  if not obj:
277  return ''
278 
279  # If this is a TKey, look up the icon for the thing it points to.
280  if isinstance(obj, ROOT.TKey):
281  cls = ROOT.TClass(obj.GetClassName())
282  else:
283  cls = obj.IsA()
284 
285  if cls.InheritsFrom(ROOT.TH2.Class()):
286  return self.icons['h2_t']
287  elif cls.InheritsFrom(ROOT.TH1.Class()):
288  return self.icons['h1_t']
289  elif cls.InheritsFrom(ROOT.TFile.Class()):
290  return self.icons['tfile']
291  elif cls.InheritsFrom(ROOT.TDirectory.Class()):
292  return self.icons['folder_t']
293  elif cls.InheritsFrom(ROOT.TList.Class()):
294  return self.icons['folder_t']
295  elif cls.InheritsFrom(ROOT.TTree.Class()):
296  return self.icons['ttree']
297  else:
298  return ''
299 
300  def get_canvas_size(self,size=""):
301  if not size:
302  size = self.defaultcanvassize.get()
303  size = size.lower()
304  size.replace(" ","")
305  size = size.split("x")
306  array =(size[0],size[1])
307  return array
308 
309  def _MakeRefreshMenu(self,menubar):
310  self.refreshrate = tk.IntVar(value='-1')
311 
312  refreshmenu = tk.Menu(menubar,tearoff=0)
313  refreshmenu.add_checkbutton(label="Off",onvalue=-1,
314  variable=self.refreshrate)
315  refreshmenu.add_command(label="Now!",command=self.RefreshHistograms)
316  refreshmenu.add_separator()
317  refreshmenu.add_checkbutton(label="1 second",onvalue=1,
318  variable=self.refreshrate)
319  refreshmenu.add_checkbutton(label="2 seconds",onvalue=2,
320  variable=self.refreshrate)
321  refreshmenu.add_checkbutton(label="5 seconds",onvalue=5,
322  variable=self.refreshrate)
323  refreshmenu.add_checkbutton(label="10 seconds",onvalue=10,
324  variable=self.refreshrate)
325  refreshmenu.add_checkbutton(label="30 seconds",onvalue=30,
326  variable=self.refreshrate)
327  menubar.add_cascade(label="Refresh",menu=refreshmenu)
328  self.window.after_idle(self._PeriodicRefresh)
329 
330  def _PeriodicRefresh(self):
331  if self.refreshrate.get()<0:
332  self.window.after(1000,self._PeriodicRefresh)
333  return
334 
335  self.RefreshHistograms()
336  self.window.after(self.refreshrate.get()*1000, self._PeriodicRefresh)
337 
338  def _MakeZoneMenu(self, menubar):
339  self.predefinedzones = tk.StringVar(value='1x1')
340  self.zone_rows = 1
341  self.zone_cols = 1
342 
343  zonesmenu = tk.Menu(menubar,tearoff=0)
344  zonesmenu.add_checkbutton(label="1 x 1",onvalue='1x1',
345  variable=self.predefinedzones,command=self.set_zones)
346  zonesmenu.add_checkbutton(label="1 x 2",onvalue='1x2',
347  variable=self.predefinedzones,command=self.set_zones)
348  zonesmenu.add_checkbutton(label="1 x 3",onvalue='1x3',
349  variable=self.predefinedzones,command=self.set_zones)
350  zonesmenu.add_checkbutton(label="2 x 1",onvalue='2x1',
351  variable=self.predefinedzones,command=self.set_zones)
352  zonesmenu.add_checkbutton(label="2 x 2",onvalue='2x2',
353  variable=self.predefinedzones,command=self.set_zones)
354  zonesmenu.add_checkbutton(label="2 x 3",onvalue='2x3',
355  variable=self.predefinedzones,command=self.set_zones)
356  zonesmenu.add_checkbutton(label="2 x 5",onvalue='2x5',
357  variable=self.predefinedzones,command=self.set_zones)
358  zonesmenu.add_checkbutton(label="3 x 1",onvalue='3x1',
359  variable=self.predefinedzones,command=self.set_zones)
360  zonesmenu.add_checkbutton(label="3 x 2",onvalue='3x2',
361  variable=self.predefinedzones,command=self.set_zones)
362  zonesmenu.add_checkbutton(label="3 x 3",onvalue='3x3',
363  variable=self.predefinedzones,command=self.set_zones)
364  zonesmenu.add_checkbutton(label="4 x 4",onvalue='4x4',
365  variable=self.predefinedzones,command=self.set_zones)
366  zonesmenu.add_checkbutton(label="5 x 2",onvalue='5x2',
367  variable=self.predefinedzones,command=self.set_zones)
368  zonesmenu.add_checkbutton(label="8 x 3",onvalue='8x3',
369  variable=self.predefinedzones,command=self.set_zones)
370  zonesmenu.add_checkbutton(label="8 x 4",onvalue='8x4',
371  variable=self.predefinedzones,command=self.set_zones)
372  zonesmenu.add_checkbutton(label="9 x 4",onvalue='9x4',
373  variable=self.predefinedzones,command=self.set_zones)
374  zonesmenu.add_checkbutton(label="12 x 12",onvalue='12x12',
375  variable=self.predefinedzones,command=self.set_zones)
376  zonesmenu.add_checkbutton(label="13 x 13",onvalue='13x13',
377  variable=self.predefinedzones,command=self.set_zones)
378  menubar.add_cascade(label="Zones",menu=zonesmenu)
379 
380  def set_zones(self):
381  zones_str = self.predefinedzones.get()
382  try:
383  zones = map(int,zones_str.split("x"))
384  self.zone_cols,self.zone_rows = zones
385  except (IndexError,ValueError):
386  print 'Cannot set zones to "{}"'.format(zones_str)
387 
388  def _MakeOptStatMenu(self, menubar):
389  self.optstat_name = tk.BooleanVar(value=True)
390  self.optstat_entries = tk.BooleanVar(value=True)
391  self.optstat_mean = tk.BooleanVar(value=True)
392  self.optstat_mean_err = tk.BooleanVar(value=False)
393  self.optstat_rms = tk.BooleanVar(value=False)
394  self.optstat_rms_err = tk.BooleanVar(value=False)
395  self.optstat_underflow = tk.BooleanVar(value=False)
396  self.optstat_overflow = tk.BooleanVar(value=False)
397  self.optstat_integral = tk.BooleanVar(value=True)
398  self.optstat_skew = tk.BooleanVar(value=False)
399  self.optstat_skew_err = tk.BooleanVar(value=False)
400  self.optstat_kurt = tk.BooleanVar(value=False)
401  self.optstat_kurt_err = tk.BooleanVar(value=False)
402 
403  optstatmenu = tk.Menu(menubar,tearoff=0)
404  optstatmenu.add_checkbutton(label="Name",onvalue=1,variable=self.optstat_name)
405  optstatmenu.add_checkbutton(label="Entries",onvalue=1,variable=self.optstat_entries)
406  optstatmenu.add_checkbutton(label="Mean",onvalue=1,variable=self.optstat_mean)
407  optstatmenu.add_checkbutton(label="Mean Error",onvalue=1,variable=self.optstat_mean_err)
408  optstatmenu.add_checkbutton(label="RMS",onvalue=1,variable=self.optstat_rms)
409  optstatmenu.add_checkbutton(label="RMS Error",onvalue=1,variable=self.optstat_rms_err)
410  optstatmenu.add_checkbutton(label="Underflows",onvalue=1,variable=self.optstat_underflow)
411  optstatmenu.add_checkbutton(label="Overflows",onvalue=1,variable=self.optstat_overflow)
412  optstatmenu.add_checkbutton(label="Integral",onvalue=1,variable=self.optstat_integral)
413  optstatmenu.add_checkbutton(label="Skew",onvalue=1,variable=self.optstat_skew)
414  optstatmenu.add_checkbutton(label="Skew Error",onvalue=1,variable=self.optstat_skew_err)
415  optstatmenu.add_checkbutton(label="Kurtosis",onvalue=1,variable=self.optstat_kurt)
416  optstatmenu.add_checkbutton(label="Kurtosis Error",onvalue=1,variable=self.optstat_kurt_err)
417  menubar.add_cascade(label="OptStats",menu=optstatmenu)
418 
419  def _MakePlotMenu(self, menubar):
420  self.plotlocation = tk.StringVar(value='NewCanvas')
421 
422  plotmenu = tk.Menu(menubar,tearoff=0)
423  plotmenu.add_checkbutton(label="New Canvas",onvalue='NewCanvas',
424  variable=self.plotlocation)
425  plotmenu.add_checkbutton(label="Next Pad",onvalue='NextPad',
426  variable=self.plotlocation)
427  plotmenu.add_checkbutton(label="Current Pad (replace)",onvalue='Replace',
428  variable=self.plotlocation)
429  plotmenu.add_checkbutton(label="Current Pad (overlay)",onvalue='Overlay',
430  variable=self.plotlocation)
431  menubar.add_cascade(label="Plot",menu=plotmenu)
432 
433  def _MakeHelpMenu(self,menubar):
434  helpmenu = tk.Menu(menubar,tearoff=0)
435  menubar.add_cascade(label="Send Help",menu=helpmenu)
436 
437  def RefreshHistograms(self):
439 
440  def ResetHistograms(self,hist=None):
441  if hist is None:
442  for obj in ROOT.gPad.GetListOfPrimitives():
443  if isinstance(obj, ROOT.TH1):
444  obj.Reset()
445  else:
446  hist.Reset()
448 
450  ROOT.TGRSIint.instance().ResetAllHistograms()
451 
452  def ResortDataFile(self):
453  ROOT.TGRSIint.instance().ResortDataFile()
454 
455  def _draw_single(self,hist,color=1,nselected=1):
456  canvas_exists = bool(filter(None,self.canvases))
457 
458  if(not canvas_exists or not ROOT.gPad):
459  self.open_canvas(columns=self.zone_cols,rows = self.zone_rows)
460  ROOT.gPad.GetCanvas().cd(self.zone_cols*self.zone_rows)
461 
462  if (self.plotlocation.get()=='NewCanvas'):
463  ROOT.gPad.GetCanvas().cd(0)
464  if (ROOT.gPad.GetListOfPrimitives().GetSize()==0):
465  ROOT.gPad.GetCanvas().Clear();
466  ROOT.gPad.Divide(self.zone_cols,self.zone_rows)
467  else:
468  self.open_canvas(columns=self.zone_cols,rows = self.zone_rows)
469  ROOT.gPad.GetCanvas().cd(self.zone_cols*self.zone_rows)
470 
471 
472  if self.plotlocation.get()!='Replace' and self.plotlocation.get()!='Overlay':
473  if(self.zone_cols*self.zone_rows!=1):
474  self.plotlocation.set('NextPad')
475  #ROOT.gPad.GetCanvas().cd(self.zone_cols*self.zone_rows)
476 
477  #self.open_canvas(columns=self.zone_cols,rows = self.zone_rows)
478  #if self.zone_cols*self.zone_rows !=1:
479  # self.plotlocation = 'NextPad'
480  # ROOT.gPad.GetCanvas().cd(self.zone_cols*self.zone_rows)
481 
482 
483 
484  opt = []
485 
486  currentnumber = ROOT.gPad.GetNumber()
487  if (self.plotlocation.get() == 'NextPad' and currentnumber>0):
488  ROOT.gPad.GetCanvas().cd(currentnumber+1)
489  if ROOT.gPad.GetNumber() == currentnumber:
490  ROOT.gPad.GetCanvas().cd(1)
491 
492  elif self.plotlocation.get() == 'Overlay':
493  opt.append('same')
494 
495  if hist.GetDimension() > 1:
496  opt.append('colz')
497  self._SetOptStat()
498  hist.SetLineColor(color)
499  hist.Draw(' '.join(opt))
500 
501  def AddDirectory(self, tdir):
502  if tdir:
503  self.hist_tab.AddActiveDirectory(tdir)
504  # if 'online' in tdir.GetOption():
505  # self.hist_tab.AddActiveDirectory(tdir)
506  # else:
507  # self.hist_tab.Insert(tdir)
508 
509  self.tcut_tab.AddDirectory(tdir)
510 
511  def LoadCutG(self, cutg):
512  if cutg:
513  self.tcut_tab.AddCut(cutg)
514 
515  def LoadDataFile(self, filename = None):
516  if filename is None:
517  filename = tkFileDialog.askopenfilename(filetypes=(("NSCL Evt", "*.evt"),
518  ("GEB File", "*.dat"),
519  ("GZip File", "*.gz")))
520 
521  if not filename:
522  return
523 
524  ROOT.TGRSIint.instance().LoadRawFile(filename)
525 
526  def LoadRootFile(self,filename=None):
527  #print "In py LoadRooFile " + filename
528  if filename is None:
529  filename = tkFileDialog.askopenfilename(filetypes=(("ROOT File", "*.root"),))
530 
531  if not filename:
532  return
533 
534  filename = os.path.abspath(filename)
535  tfile = ROOT.TGRSIint.instance().OpenRootFile(filename)
536  if tfile:
537  self.files[filename] = tfile
538  self.hist_tab.Insert(tfile)
539  self.tcut_tab.AddFile(tfile)
540  self.variable_tab.AddFile(tfile)
541  else:
542  print 'MainWindow.LoadRootFile: Could not open {}'.format(filename)
543 
544  def LoadWindowFile(self,filename=None):
545  if filename is None:
546  filename = tkFileDialog.askopenfilename(filetypes=(("Window File","*.win"),))
547 
548  if not filename:
549  return
550  filename = os.path.abspath(filename)
551  can = ROOT.TPresetCanvas()
552  can.ReadWinFile(filename)
553  can.Draw()
554 
555 
556  def Run(self):
557  self.window.mainloop()
558 
559  def Update(self):
560  self.window.update()
561 
562  def load_library(self, library_name, grut_lib = True):
563  if grut_lib:
564  library_name = os.path.join(os.path.dirname(__file__),
565  '..','libraries',library_name)
566  ROOT.gSystem.Load(library_name)
567 
568  def hello(self):
569  print "hello!"
570 
572  canvases = ROOT.gROOT.GetListOfCanvases()
573  for canvas in canvases:
574  canvas.Close()
575 
576  def open_canvas(self,title="",columns=-1,rows=-1,topx=0,topy=0,width=0,height=0):
577  if not title:
578  title = "canvas" + str(len(self.canvases))
579 
580  if columns==-1 or rows==-1:
581  columns = self.zone_cols
582  rows = self.zone_rows
583 
584  if width*height == 0:
585  array = self.get_canvas_size()
586  array = map(int,array)
587  canvas = ROOT.GCanvas(title,title,0,0,array[0],array[1],True)
588  else:
589  canvas = ROOT.GCanvas(title,title,topx,topy,width,height,True)
590  canvas.cd()
591 
592  if columns*rows == 1:
593  self.plotlocation.set('NewCanvas')
594  else:
595  self.plotlocation.set('NextPad')
596  canvas.Divide(columns,rows)
597  canvas.cd(columns*rows)
598  canvas.Modified()
599  canvas.Update()
600  #ROOT.PyConfig.GUIThreadScheduleOnce+= [ canvas.Update ]
601  #ROOT.PyGUIThread.join(0.1)
602 
603  self.canvases.append(canvas)
def LoadGuiFile(self, filename)
Definition: mainwindow.py:34
def _PickIcon(self, obj)
Definition: mainwindow.py:275
def open_canvas(self, title="", columns=-1, rows=-1, topx=0, topy=0, width=0, height=0)
Definition: mainwindow.py:576
def LoadWindowFile(self, filename=None)
Definition: mainwindow.py:544
def _draw_single(self, hist, color=1, nselected=1)
Definition: mainwindow.py:455
def _MakeFileMenu(self, menubar)
Definition: mainwindow.py:246
def _dump_root_file(self, filename=None, include_histograms=True)
Definition: mainwindow.py:67
def _save_gui_file(self, filename=None)
Definition: mainwindow.py:46
def _MakeZoneMenu(self, menubar)
Definition: mainwindow.py:338
def LoadCutG(self, cutg)
Definition: mainwindow.py:511
def get_canvas_size(self, size="")
Definition: mainwindow.py:300
def _MakePlotMenu(self, menubar)
Definition: mainwindow.py:419
def _MakeRefreshMenu(self, menubar)
Definition: mainwindow.py:309
def AddDirectory(self, tdir)
Definition: mainwindow.py:501
def _setup_status_bar(self, parent)
Definition: mainwindow.py:189
def LoadRootFile(self, filename=None)
Definition: mainwindow.py:526
def _MakeOptStatMenu(self, menubar)
Definition: mainwindow.py:388
def update_tcanvases(objects=None)
Definition: util.py:16
def LoadDataFile(self, filename=None)
Definition: mainwindow.py:515
if(hist) hist -> Fill(fragment->GetCharge())
def ResetHistograms(self, hist=None)
Definition: mainwindow.py:440
def load_library(self, library_name, grut_lib=True)
Definition: mainwindow.py:562
def _MakeHelpMenu(self, menubar)
Definition: mainwindow.py:433