GRSISort
Created by P.C. Bender
Developement Team: P.C. Bender, R. Dunlop, V. Bildstein
An extension of the ROOT analysis Framework
variable_tab.py
Go to the documentation of this file.
1 #!/usr/bin/env python2
2 
3 import Tkinter as tk
4 import ttk
5 
6 import ROOT
7 ROOT.PyConfig.IgnoreCommandLineOptions = True
8 
9 from .util import PreserveGDir
10 
11 class VariableTab(object):
12 
13  def __init__(self, main, frame):
14  self.main = main
15  self._setup_GUI(frame)
16  self.variables = {}
17  self.OnUpdateAll_Click()
18 
19  def _setup_GUI(self, frame):
20  self.frame = frame
21  self._MakeButtons(frame)
22  self._MakeTreeView(frame)
23 
24  def _MakeButtons(self, parent):
25  # Text entries
26  frame = tk.Frame(parent)
27  tk.Label(frame, text='Name').grid(row=0, column=0)
28  tk.Label(frame, text='Value').grid(row=0, column=1)
29  self.var_name = tk.StringVar()
30  tk.Entry(frame, textvariable=self.var_name).grid(row=1, column=0)
31  self.var_value = tk.StringVar()
32  entry = tk.Entry(frame, textvariable=self.var_value)
33  entry.bind('<Return>',self.OnSetReplaceVariable_Click)
34  entry.grid(row=1, column=1)
35  frame.pack(fill=tk.X,expand=False)
36 
37  # Buttons
38  frame = tk.Frame(parent)
39  tk.Button(frame, text='Set/Replace',
40  command=self.OnSetReplaceVariable_Click).pack(side=tk.LEFT)
41  tk.Button(frame, text='Delete',
42  command=self.OnDeleteVariable_Click).pack(side=tk.LEFT)
43  tk.Button(frame, text='Update',
44  command=self.OnUpdateAll_Click).pack(side=tk.LEFT)
45  tk.Button(frame, text='Save',
46  command=self.OnSave_Click).pack(side=tk.LEFT)
47  frame.pack(fill=tk.X,expand=False)
48 
49  def _MakeTreeView(self, parent):
50  self.treeview = ttk.Treeview(parent, columns=('value',))
51  self.treeview.heading('#0', text='Name')
52  self.treeview.heading('value', text='Value')
53  self.treeview.pack(fill=tk.BOTH,expand=True)
54  self.treeview.bind("<Double-1>",self.VariableSelection)
55 
56  def OnUpdateAll_Click(self, *args):
57  t = ROOT.GValue.AllValues()
58  for val in t:
59  self.SetReplaceVariable(val.GetName(), val.GetValue(),
60  update_cpp = False)
61 
62  def OnSave_Click(self, *args):
63  ROOT.GValue.WriteValFile("myvalues.val")
64 
65 
66  def SetReplaceVariable(self, name, value, update_cpp = True):
67  self.variables[name] = value
68  if name in self.treeview.get_children():
69  self.treeview.item(name, values=(str(value),))
70  else:
71  self.treeview.insert('','end',name, text=name, values=(str(value),))
72 
73  if update_cpp:
74  ROOT.GValue.SetReplaceValue(name, value)
75 
76 
77  def DeleteVariable(self, name):
78  self.variables.pop(name, None)
79  self.treeview.delete(name)
80 
81  def OnSetReplaceVariable_Click(self, *args):
82  name = self.var_name.get()
83  if not name:
84  return
85 
86  try:
87  value = float(self.var_value.get())
88  except ValueError:
89  print 'Could not convert "{}" to float'.format(self.var_value.get())
90  return
91 
92  self.SetReplaceVariable(name, value)
93 
95  selection = self.treeview.selection()
96  if not selection:
97  return
98  self.DeleteVariable(selection[0])
99 
100  def VariableSelection(self, event):
101  name = event.widget.selection()[0]
102  self.var_name.set(name)
103  self.var_value.set(str(self.variables[name]))
104 
105  def _dump_to_tfile(self):
106  #pipeline = ROOT.GetPipeline(0)
107  #if not pipeline:
108  # return
109 
110  tdir = ROOT.gDirectory.mkdir('variables')
111  #with PreserveGDir(tdir):
112  # for obj in pipeline.GetVariables():
113  # obj.Write()
114 
116  return self.variables
117 
118  def _load_variable_patterns(self, patterns):
119  for name, value in patterns.items():
120  self.SetReplaceVariable(name, value)
121 
122  def AddFile(self, tfile):
123  tdir = tfile.GetListOfKeys().FindObject('variables')
124  if (tdir and
125  issubclass(getattr(ROOT, tdir.GetClassName()), ROOT.TDirectory)):
126  tdir = tdir.ReadObj()
127  for key in tdir.GetListOfKeys():
128  obj = key.ReadObj()
129  #print " Name : " + obj.GetName()
130  #print " Value : " + str(obj.GetValue())
131  self.SetReplaceVariable(obj.GetName(),
132  obj.GetValue())
def _load_variable_patterns(self, patterns)
def OnSetReplaceVariable_Click(self, args)
Definition: variable_tab.py:81
def OnUpdateAll_Click(self, args)
Definition: variable_tab.py:56
def SetReplaceVariable(self, name, value, update_cpp=True)
Definition: variable_tab.py:66
def VariableSelection(self, event)
def _MakeButtons(self, parent)
Definition: variable_tab.py:24
def DeleteVariable(self, name)
Definition: variable_tab.py:77
def __init__(self, main, frame)
Definition: variable_tab.py:13
def _MakeTreeView(self, parent)
Definition: variable_tab.py:49