GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
mainwindow.py
Go to the documentation of this file.
1#!/usr/bin/env python2
2
3import ast
4import os
5import pprint
6import Tkinter as tk
7import tkFileDialog
8import ttk
9
10import sys
11
12import ROOT
13
14from .run_command import run_command
15from .hist_tab import HistTab
16from .tcut_tab import TCutTab
17from .variable_tab import VariableTab
18from .util import update_tcanvases
19from .AnsiColorText import AnsiColorText
20from .status_widget import ThreadStatusFrame
21
22class MainWindow(object):
23
24 def __init__(self):
25 self.window = tk.Tk()
26 self._load_icons()
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
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)
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)
329
331 if self.refreshrate.get()<0:
332 self.window.after(1000,self._PeriodicRefresh_PeriodicRefresh)
333 return
334
335 self.RefreshHistograms()
336 self.window.after(self.refreshrate.get()*1000, self._PeriodicRefresh_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
438 update_tcanvases()
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()
447 update_tcanvases()
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)
if(hist &&fragment->TriggerId< 0) hist -> Fill(fragment->GetCharge(0))
ResetHistograms(self, hist=None)
open_canvas(self, title="", columns=-1, rows=-1, topx=0, topy=0, width=0, height=0)
_MakeRefreshMenu(self, menubar)
_save_gui_file(self, filename=None)
Definition mainwindow.py:46
_MakePlotMenu(self, menubar)
_MakeHelpMenu(self, menubar)
LoadGuiFile(self, filename)
Definition mainwindow.py:34
_MakeZoneMenu(self, menubar)
LoadRootFile(self, filename=None)
_setup_status_bar(self, parent)
LoadDataFile(self, filename=None)
get_canvas_size(self, size="")
LoadWindowFile(self, filename=None)
_MakeFileMenu(self, menubar)
_MakeOptStatMenu(self, menubar)
load_library(self, library_name, grut_lib=True)
_dump_root_file(self, filename=None, include_histograms=True)
Definition mainwindow.py:67
_draw_single(self, hist, color=1, nselected=1)