GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
variable_tab.py
Go to the documentation of this file.
1#!/usr/bin/env python2
2
3import Tkinter as tk
4import ttk
5
6import ROOT
7ROOT.PyConfig.IgnoreCommandLineOptions = True
8
9from .util import PreserveGDir
10
11class VariableTab(object):
12
13 def __init__(self, main, frame):
14 self.main = main
15 self._setup_GUI(frame)
16 self.variables = {}
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)
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_ClickOnSetReplaceVariable_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.VariableSelectionVariableSelection)
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
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())
_load_variable_patterns(self, patterns)
SetReplaceVariable(self, name, value, update_cpp=True)
OnSetReplaceVariable_Click(self, *args)
__init__(self, main, frame)