From c110605ce789d41bdc448e7fc502ca07e14fea79 Mon Sep 17 00:00:00 2001 From: Markus Koller Date: Mon, 30 Jan 2023 14:16:49 +0100 Subject: [PATCH] Added set magnetic field and vector norms to the field data displays Marius fancy implementation using globals --- src/user_interface.py | 99 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 18 deletions(-) diff --git a/src/user_interface.py b/src/user_interface.py index 06136a8..f0d8663 100644 --- a/src/user_interface.py +++ b/src/user_interface.py @@ -41,6 +41,7 @@ BIG_BUTTON_FONT = (font, points[1], "bold") SMALL_BUTTON_FONT = (font, points[2]) DEFAULT_FONT = (font, points[2]) +target_values = [np.nan, np.nan, np.nan, np.nan] class HelmholtzGUI(Tk): # main application window, almost everything else here is called from this class @@ -602,8 +603,13 @@ class CalibrateAmbientField(Frame): # UI variables self.connected_state_var = StringVar(value="Not connected") self.field_value_vars = [StringVar(value="No data"), + StringVar(value="No data"), StringVar(value="No data"), StringVar(value="No data")] + self.target_value_vars = [StringVar(value="No data"), + StringVar(value="No data"), + StringVar(value="No data"), + StringVar(value="No data")] self.calibration_procedure_progress_var = IntVar(value=0) # Contains results for ambient field calibration self.ambient_field_result_vars = [StringVar(), StringVar(), StringVar()] @@ -641,16 +647,26 @@ class CalibrateAmbientField(Frame): field_data_frame.grid(row=row_counter, column=0, sticky="nw") field_data_label = Label(field_data_frame, text="Field data:", font=SUB_HEADER_FONT) field_data_label.grid(row=0, column=0, padx=10, pady=3, sticky="nw") - axis_labels = ['X:', 'Y:', 'Z:'] - for i in range(3): - field_data_axis_label = Label(field_data_frame, text=axis_labels[i]) - field_data_axis_label.grid(row=i, column=1, padx=10, pady=3) + axis_labels_mgm = ['X_mgm:', 'Y_mgm:', 'Z_mgm:', 'T_mgm:'] + axis_labels_hh = ['X_hh:', 'Y_hh:', 'Z_hh:', 'T_hh:'] + for i in range(4): + field_data_axis_label = Label(field_data_frame, text=axis_labels_mgm[i]) + field_data_axis_label.grid(row=i+1, column=0, padx=10, pady=3) field_data_axis_data = Label(field_data_frame, textvariable=self.field_value_vars[i]) - field_data_axis_data.grid(row=i, column=2, padx=(20, 0), pady=3) + field_data_axis_data.grid(row=i+1, column=1, padx=(20, 0), pady=3) field_data_axis_units = Label(field_data_frame, text="\u03BCT") - field_data_axis_units.grid(row=i, column=3, padx=5, pady=3) + field_data_axis_units.grid(row=i+1, column=2, padx=5, pady=3) + + field_data_axis_label = Label(field_data_frame, text=axis_labels_hh[i]) + field_data_axis_label.grid(row=i+1, column=3, padx=10, pady=3) + + field_data_axis_data = Label(field_data_frame, textvariable=self.target_value_vars[i]) + field_data_axis_data.grid(row=i+1, column=4, padx=(20, 0), pady=3) + + field_data_axis_units = Label(field_data_frame, text="\u03BCT") + field_data_axis_units.grid(row=i+1, column=5, padx=5, pady=3) row_counter += 1 # Calibration start and reinitialize buttons @@ -819,9 +835,13 @@ class CalibrateAmbientField(Frame): # Get new field data new_field = g.MAGNETOMETER.field + global target_values for i in range(3): # Display in uT self.field_value_vars[i].set("{:.3f}".format(new_field[i] * 1e6)) + self.target_value_vars[i].set("{:.3f}".format(target_values[i] * 1e6)) + self.field_value_vars[3].set("{:.3f}".format(np.sqrt(new_field[0]**2+new_field[1]**2+new_field[2]**2) * 1e6)) + self.target_value_vars[3].set("{:.3f}".format(target_values[3] * 1e6)) # Get mpi messages from calibration procedures try: @@ -1014,8 +1034,13 @@ class CalibrateMagnetometerSimple(Frame): # UI variables self.connected_state_var = StringVar(value="Not connected") self.field_value_vars = [StringVar(value="No data"), + StringVar(value="No data"), StringVar(value="No data"), StringVar(value="No data")] + self.target_value_vars = [StringVar(value="No data"), + StringVar(value="No data"), + StringVar(value="No data"), + StringVar(value="No data")] self.calibration_procedure_progress_var = IntVar(value=0) # Calibration parameters self.calibration_points_var = IntVar(value=8) @@ -1056,16 +1081,26 @@ class CalibrateMagnetometerSimple(Frame): field_data_frame.grid(row=row_counter, column=0, sticky="nw") field_data_label = Label(field_data_frame, text="Field data:", font=SUB_HEADER_FONT) field_data_label.grid(row=0, column=0, padx=10, pady=3, sticky="nw") - axis_labels = ['X:', 'Y:', 'Z:'] - for i in range(3): - field_data_axis_label = Label(field_data_frame, text=axis_labels[i]) - field_data_axis_label.grid(row=i, column=1, padx=10, pady=3) + axis_labels_mgm = ['X_mgm:', 'Y_mgm:', 'Z_mgm:', 'T_mgm:'] + axis_labels_hh = ['X_hh:', 'Y_hh:', 'Z_hh:', 'T_hh:'] + for i in range(4): + field_data_axis_label = Label(field_data_frame, text=axis_labels_mgm[i]) + field_data_axis_label.grid(row=i + 1, column=0, padx=10, pady=3) field_data_axis_data = Label(field_data_frame, textvariable=self.field_value_vars[i]) - field_data_axis_data.grid(row=i, column=2, padx=(20, 0), pady=3) + field_data_axis_data.grid(row=i + 1, column=1, padx=(20, 0), pady=3) field_data_axis_units = Label(field_data_frame, text="\u03BCT") - field_data_axis_units.grid(row=i, column=3, padx=5, pady=3) + field_data_axis_units.grid(row=i + 1, column=2, padx=5, pady=3) + + field_data_axis_label = Label(field_data_frame, text=axis_labels_hh[i]) + field_data_axis_label.grid(row=i + 1, column=3, padx=10, pady=3) + + field_data_axis_data = Label(field_data_frame, textvariable=self.target_value_vars[i]) + field_data_axis_data.grid(row=i + 1, column=4, padx=(20, 0), pady=3) + + field_data_axis_units = Label(field_data_frame, text="\u03BCT") + field_data_axis_units.grid(row=i + 1, column=5, padx=5, pady=3) row_counter += 1 # Centered controls @@ -1301,6 +1336,9 @@ class CalibrateMagnetometerSimple(Frame): for i in range(3): # Display in uT self.field_value_vars[i].set("{:.3f}".format(new_field[i] * 1e6)) + self.target_value_vars[i].set("{:.3f}".format(target_values[i] * 1e6)) + self.field_value_vars[3].set("{:.3f}".format(np.sqrt(new_field[0]**2+new_field[1]**2+new_field[2]**2)* 1e6)) + self.target_value_vars[3].set("{:.3f}".format(target_values[3] * 1e6)) # Get mpi messages from calibration procedures try: @@ -1497,8 +1535,13 @@ class CalibrateMagnetometerComplete(Frame): # UI variables self.connected_state_var = StringVar(value="Not connected") self.field_value_vars = [StringVar(value="No data"), + StringVar(value="No data"), StringVar(value="No data"), StringVar(value="No data")] + self.target_value_vars = [StringVar(value="No data"), + StringVar(value="No data"), + StringVar(value="No data"), + StringVar(value="No data")] self.calibration_procedure_progress_var = IntVar(value=0) # Calibration parameters self.mag_field_magnitude_var = DoubleVar(value=100) @@ -1549,16 +1592,26 @@ class CalibrateMagnetometerComplete(Frame): field_data_frame.grid(row=row_counter, column=0, sticky="nw") field_data_label = Label(field_data_frame, text="Field data:", font=SUB_HEADER_FONT) field_data_label.grid(row=0, column=0, padx=10, pady=3, sticky="nw") - axis_labels = ['X:', 'Y:', 'Z:'] - for i in range(3): - field_data_axis_label = Label(field_data_frame, text=axis_labels[i]) - field_data_axis_label.grid(row=i, column=1, padx=10, pady=3) + axis_labels_mgm = ['X_mgm:', 'Y_mgm:', 'Z_mgm:', 'T_mgm:'] + axis_labels_hh = ['X_hh:', 'Y_hh:', 'Z_hh:', 'T_hh:'] + for i in range(4): + field_data_axis_label = Label(field_data_frame, text=axis_labels_mgm[i]) + field_data_axis_label.grid(row=i + 1, column=0, padx=10, pady=3) field_data_axis_data = Label(field_data_frame, textvariable=self.field_value_vars[i]) - field_data_axis_data.grid(row=i, column=2, padx=(20, 0), pady=3) + field_data_axis_data.grid(row=i + 1, column=1, padx=(20, 0), pady=3) field_data_axis_units = Label(field_data_frame, text="\u03BCT") - field_data_axis_units.grid(row=i, column=3, padx=5, pady=3) + field_data_axis_units.grid(row=i + 1, column=2, padx=5, pady=3) + + field_data_axis_label = Label(field_data_frame, text=axis_labels_hh[i]) + field_data_axis_label.grid(row=i + 1, column=3, padx=10, pady=3) + + field_data_axis_data = Label(field_data_frame, textvariable=self.target_value_vars[i]) + field_data_axis_data.grid(row=i + 1, column=4, padx=(20, 0), pady=3) + + field_data_axis_units = Label(field_data_frame, text="\u03BCT") + field_data_axis_units.grid(row=i + 1, column=5, padx=5, pady=3) row_counter += 1 # Centered controls @@ -1796,6 +1849,9 @@ class CalibrateMagnetometerComplete(Frame): for i in range(3): # Display in uT self.field_value_vars[i].set("{:.3f}".format(new_field[i] * 1e6)) + self.target_value_vars[i].set("{:.3f}".format(target_values[i] * 1e6)) + self.field_value_vars[3].set("{:.3f}".format(np.sqrt(new_field[0]**2+new_field[1]**2+new_field[2]**2)* 1e6)) + self.target_value_vars[3].set("{:.3f}".format(target_values[3] * 1e6)) # Get mpi messages from calibration procedures try: @@ -2664,9 +2720,16 @@ class StatusDisplay(Frame): def update_label_poll_method(self): """Infinite loop to poll for status updates to display""" + global target_values try: new_status = self.update_label_queue.get(block=False) # Blocks until new data is available. self.update_labels(new_status) + target_values = [new_status['axes'][0]['target_field'], + new_status['axes'][1]['target_field'], + new_status['axes'][2]['target_field'], + np.sqrt(new_status['axes'][0]['target_field']**2 + + new_status['axes'][1]['target_field']**2 + + new_status['axes'][2]['target_field']**2)] except Empty: pass self.controller.after(200, self.update_label_poll_method)