Skip to content

Commit a483ce7

Browse files
authored
New data file format review (#83)
- Fixed broken custom variable dialogs. fix was needed because state_machine.py no longer returns a string repr() of the value, but instead returns the value itself - print variables at run start - fixed bug where changing experiment configurations between sessions would cause the 2nd session to freeze - remove file-type setting in gui, data logger hardcoded to use tsv
1 parent 57eefc4 commit a483ce7

File tree

8 files changed

+18
-32
lines changed

8 files changed

+18
-32
lines changed

config/user_variable_dialogs/blinker_gui_from_py.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ def __init__(self, parent, grid_layout, board, init_vars):
5858
row += 1
5959

6060
# radio buttons
61-
red_is_enabled = eval(init_vars["red_enabled"])
62-
green_is_enabled = eval(init_vars["green_enabled"])
61+
red_is_enabled = init_vars["red_enabled"]
62+
green_is_enabled = init_vars["green_enabled"]
6363
self.both_radio = QtWidgets.QRadioButton()
6464
self.both_lbl = QtWidgets.QLabel("🔴Both🟢")
6565
self.red_radio = QtWidgets.QRadioButton()

gui/configure_experiment_tab.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,20 +64,15 @@ def __init__(self, parent=None):
6464
data_dir_button = QtWidgets.QPushButton('')
6565
data_dir_button.setIcon(QtGui.QIcon("gui/icons/folder.svg"))
6666
data_dir_button.setFixedWidth(30)
67-
filetype_label = QtWidgets.QLabel('File type')
68-
self.filetype_select = QtWidgets.QComboBox()
69-
self.filetype_select.addItems(["tsv", "txt"])
7067

7168
self.experiment_parameters_layout = QtWidgets.QGridLayout()
7269
self.experiment_parameters_layout.addWidget(task_label,0,0,QtCore.Qt.AlignmentFlag.AlignCenter)
7370
self.experiment_parameters_layout.addWidget(hardware_test_label,0,1,QtCore.Qt.AlignmentFlag.AlignCenter)
7471
self.experiment_parameters_layout.addWidget(data_dir_label,0,2,1,2,QtCore.Qt.AlignmentFlag.AlignCenter)
75-
self.experiment_parameters_layout.addWidget(filetype_label,0,4,QtCore.Qt.AlignmentFlag.AlignCenter)
7672
self.experiment_parameters_layout.addWidget(self.task_select,1,0)
7773
self.experiment_parameters_layout.addWidget(self.hardware_test_select,1,1)
7874
self.experiment_parameters_layout.addWidget(self.data_dir_text,1,2)
7975
self.experiment_parameters_layout.addWidget(data_dir_button,1,3)
80-
self.experiment_parameters_layout.addWidget(self.filetype_select,1,4)
8176

8277
expbox_Vlayout = QtWidgets.QVBoxLayout(self.experiment_groupbox)
8378
expbox_Vlayout.addLayout(experiment_actions_layout)
@@ -174,7 +169,6 @@ def experiment_dict(self, filtered=False):
174169
'task': str(self.task_select.text()),
175170
'hardware_test': str(self.hardware_test_select.text()),
176171
'data_dir': self.data_dir_text.text(),
177-
'file_type': self.filetype_select.currentText(),
178172
'subjects': self.subjects_table.subjects_dict(filtered),
179173
'variables': self.variables_table.variables_list(),
180174
'subset_warning':self.subset_warning_checkbox.isChecked()}
@@ -289,10 +283,6 @@ def load_experiment(self, experiment_name):
289283
subjects_dict = {subject: {'run':True, 'setup':setup}
290284
for setup, subject in experiment['subjects'].items()}
291285
self.subjects_table.set_from_dict(subjects_dict)
292-
if 'file_type' in experiment.keys(): # Experiment file created with GUI version >= 1.9.
293-
self.filetype_select.setCurrentText(experiment['file_type'])
294-
else:
295-
self.filetype_select.setCurrentText('txt')
296286
self.variables_table.task_changed(experiment['task'])
297287
self.data_dir_text.setText(experiment['data_dir'])
298288
self.variables_table.set_from_list(experiment['variables'])

gui/custom_variables_dialog.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def __init__(self, init_var_dict, label, spin_min, spin_max, step, varname):
2323
self.spn = QtWidgets.QSpinBox()
2424

2525
self.spn.setRange(spin_min, spin_max)
26-
self.spn.setValue(eval(init_var_dict[varname]))
26+
self.spn.setValue(init_var_dict[varname])
2727
self.spn.setSingleStep(step)
2828
self.spn.setAlignment(center)
2929
self.spn.setMinimumWidth(spin_width)
@@ -77,7 +77,7 @@ def reload(self):
7777
"""Reload value from sm_info. sm_info is updated when variables are output
7878
during framework run due to get/set."""
7979
self.value_text_colour("black")
80-
self.spn.setValue(eval(str(self.board.sm_info["variables"][self.varname])))
80+
self.spn.setValue(self.board.sm_info["variables"][self.varname])
8181
QtCore.QTimer.singleShot(1000, self.value_text_colour)
8282

8383
def setVisible(self, makeVisible):
@@ -111,7 +111,7 @@ def __init__(self, init_var_dict, label, varname, text_width=80):
111111
self.line_edit.setAlignment(center)
112112
self.line_edit.setMinimumWidth(text_width)
113113
self.line_edit.setMaximumWidth(text_width)
114-
self.line_edit.setText(init_var_dict[varname])
114+
self.line_edit.setText(str(init_var_dict[varname]))
115115
self.line_edit.textChanged.connect(lambda x: self.value_text_colour("black"))
116116
self.line_edit.returnPressed.connect(self.set)
117117
self.value_text_colour("gray")
@@ -186,7 +186,7 @@ def __init__(self, init_var_dict, label, varname):
186186
self.label = QtWidgets.QLabel(label)
187187
self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight | QtCore.Qt.AlignmentFlag.AlignVCenter)
188188
self.checkbox = QtWidgets.QCheckBox()
189-
self.checkbox.setChecked(eval(init_var_dict[varname]))
189+
self.checkbox.setChecked(init_var_dict[varname])
190190
self.checkbox.clicked.connect(self.set)
191191

192192
def setBoard(self, board):
@@ -264,7 +264,7 @@ def __init__(self, init_var_dict, label, slide_min, slide_max, step, varname):
264264
self.slider.setTickPosition(QtWidgets.QSlider.TickPosition.TicksBelow)
265265
self.slider.setInterval(step)
266266
self.slider.setRange(slide_min, slide_max)
267-
self.slider.setValue(eval(init_var_dict[varname]))
267+
self.slider.setValue(init_var_dict[varname])
268268

269269
self.suffix = ""
270270
self.label = QtWidgets.QLabel(label)

gui/dialogs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ def select_path(self):
458458
self.show_edit()
459459

460460
def show_edit(self):
461-
if self.path_text.text() != self.path:
461+
if self.get() != self.path:
462462
if self.edited is False:
463463
self.edited = True
464464
self.name_label.setStyleSheet("color:red;")
@@ -515,7 +515,7 @@ def show_edit(self):
515515
also keeps a running tally of how many settings have been edited
516516
and enables/disables the "Save settings" button accordingly
517517
"""
518-
if self.spn.value() != self.start_value:
518+
if self.get() != self.start_value:
519519
if self.edited is False:
520520
self.edited = True
521521
self.label.setStyleSheet("color:red;")

gui/plotting.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ def close_experiment(self):
315315
subject_plot.setParent(None)
316316
subject_plot.deleteLater()
317317
self.subject_tabs.closeDetachedTabs()
318+
self.subject_plots.clear()
318319
self.close()
319320

320321
def update(self):

gui/run_experiment_tab.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ def setup_task(self):
405405
def make_variables_dialog(self):
406406
'''Configure variables dialog and ready subjectbox to start experiment. '''
407407
if 'custom_variables_dialog' in self.board.sm_info['variables']: # Task uses custon variables dialog
408-
custom_variables_name = eval(self.board.sm_info['variables']['custom_variables_dialog'])
408+
custom_variables_name = self.board.sm_info['variables']['custom_variables_dialog']
409409
potential_dialog = Custom_variables_dialog(self,custom_variables_name, is_experiment=True)
410410
if potential_dialog.custom_gui == "json_gui":
411411
self.variables_dialog = potential_dialog
@@ -440,7 +440,7 @@ def start_task(self):
440440
self.start_time = datetime.now()
441441
ex = self.run_exp_tab.experiment
442442
self.print_to_log('\nStarting experiment.\n')
443-
self.data_logger.open_data_file(ex['data_dir'], ex['name'], self.setup_name, self.subject, ex['file_type'], datetime.now())
443+
self.data_logger.open_data_file(ex['data_dir'], ex['name'], self.setup_name, self.subject, "tsv", datetime.now())
444444
if self.subject_variables: # Write variables set pre run to data file.
445445
var_dict = {v_name: eval(v_value) for v_name, v_value, pv in self.variables_set_pre_run}
446446
self.data_logger.write_to_file([Datatuple(type='V',time=0, ID='set', data=json.dumps(var_dict))])

gui/run_task_tab.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,13 @@ def __init__(self, parent=None):
8282
data_dir_button.setFixedWidth(30)
8383
subject_label = QtWidgets.QLabel("Subject ID:")
8484
self.subject_text = QtWidgets.QLineEdit()
85-
filetype_label = QtWidgets.QLabel("File type:")
86-
self.filetype_select = QtWidgets.QComboBox()
87-
self.filetype_select.addItems(["tsv", "txt"])
8885

8986
filegroup_layout = QtWidgets.QGridLayout()
9087
filegroup_layout.addWidget(data_dir_label, 0, 0)
91-
filegroup_layout.addWidget(self.data_dir_text, 0, 1, 1, 2)
92-
filegroup_layout.addWidget(data_dir_button, 0, 3)
88+
filegroup_layout.addWidget(self.data_dir_text, 0, 1)
89+
filegroup_layout.addWidget(data_dir_button, 0, 2)
9390
filegroup_layout.addWidget(subject_label, 1, 0)
9491
filegroup_layout.addWidget(self.subject_text, 1, 1)
95-
filegroup_layout.addWidget(filetype_label, 1, 2)
96-
filegroup_layout.addWidget(self.filetype_select, 1, 3)
9792
self.file_groupbox.setLayout(filegroup_layout)
9893

9994
self.data_dir_text.textChanged.connect(self.test_data_path)
@@ -323,7 +318,7 @@ def setup_task(self):
323318
self.variables_dialog = Variables_dialog(self, self.board)
324319
self.using_json_gui = False
325320
if "custom_variables_dialog" in self.board.sm_info["variables"]:
326-
custom_variables_name = eval(self.board.sm_info["variables"]["custom_variables_dialog"])
321+
custom_variables_name = self.board.sm_info["variables"]["custom_variables_dialog"]
327322
potential_dialog = Custom_variables_dialog(self, custom_variables_name)
328323
if potential_dialog.custom_gui == "json_gui":
329324
self.variables_dialog = potential_dialog
@@ -370,8 +365,7 @@ def start_task(self):
370365
return
371366
subject_ID = self.subject_text.text()
372367
setup_ID = self.board_select.currentText()
373-
file_type = self.filetype_select.currentText()
374-
self.data_logger.open_data_file(self.data_dir, "run_task", setup_ID, subject_ID, file_type)
368+
self.data_logger.open_data_file(self.data_dir, "run_task", setup_ID, subject_ID, "tsv")
375369
self.data_logger.copy_task_file(self.data_dir, self.GUI_main.task_directory, "run_task-task_files")
376370
self.fresh_task = False
377371
self.running = True

pyControl/hardware.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from . import timer
44
from . import framework as fw
55
from . import state_machine as sm
6-
from .utility import randint, warning
6+
from .utility import randint, warning, print_variables
77

88
# Ring buffer -----------------------------------------------------------------
99

@@ -69,6 +69,7 @@ def run_start():
6969
# Called at start of each framework run.
7070
interrupt_queue.reset()
7171
stream_data_queue.reset()
72+
print_variables()
7273
for IO_object in IO_dict.values():
7374
IO_object._run_start()
7475

0 commit comments

Comments
 (0)