Added set magnetic field and vector norms to the field data displays

Marius fancy implementation using globals
This commit is contained in:
2023-01-30 14:16:49 +01:00
parent 7f6244f337
commit c110605ce7
+81 -18
View File
@@ -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)