forked from zietzm/Helmholtz_Test_Bench
Ambient field calibration results can be saved to csv file.
This commit is contained in:
+10
-1
@@ -57,6 +57,8 @@ class AmbientFieldCalibration(Thread):
|
||||
self.cage_dev.close()
|
||||
|
||||
def calibration_procedure(self):
|
||||
raw_experiment_data = []
|
||||
|
||||
start_time = datetime.now()
|
||||
target_time = 0
|
||||
current_time = datetime.now()
|
||||
@@ -91,9 +93,16 @@ class AmbientFieldCalibration(Thread):
|
||||
current_time = datetime.now()
|
||||
|
||||
coil_constants = np.array([g.CAGE_DEVICE.axes[i].coil_const for i in range(3)])
|
||||
for i, axis in zip(range(3), ['x', 'y', 'z']):
|
||||
raw_experiment_data.append({'axis': axis,
|
||||
'cancellation_current': -self.axis_currents[i],
|
||||
'ambient_field': -self.axis_currents[i] * coil_constants[i],
|
||||
'residual_field': g.MAGNETOMETER.field[i]})
|
||||
|
||||
results = {'ambient': -self.axis_currents,
|
||||
'ambient_ut': -self.axis_currents * coil_constants * 1e6,
|
||||
'residual': g.MAGNETOMETER.field}
|
||||
'residual': g.MAGNETOMETER.field,
|
||||
'raw_data': raw_experiment_data}
|
||||
self.put_message('ambient_data', results)
|
||||
|
||||
# Put device into an off and ready state
|
||||
|
||||
+21
-7
@@ -570,6 +570,7 @@ class CalibrateAmbientField(Frame):
|
||||
self.ambient_field_result_vars = [StringVar(), StringVar(), StringVar()]
|
||||
self.ambient_field_ut_result_vars = [StringVar(), StringVar(), StringVar()]
|
||||
self.ambient_field_residual_vars = [StringVar(), StringVar(), StringVar()]
|
||||
self.ambient_field_raw_data = None # Used for export to csv
|
||||
self.ambient_field_result = None # Used for saving to config file
|
||||
# Contains results for coil constant calibration
|
||||
self.coil_constant_vars = [StringVar(), StringVar(), StringVar()]
|
||||
@@ -614,9 +615,8 @@ class CalibrateAmbientField(Frame):
|
||||
# Calibration start and save to csv buttons
|
||||
start_button_frame = Frame(self.left_column)
|
||||
start_button_frame.grid(row=row_counter, column=0, sticky="sw")
|
||||
# TODO: Add command
|
||||
self.save_ambient_calibration_button = Button(start_button_frame, text="Save results to CSV",
|
||||
command=None,
|
||||
command=self.save_to_csv_ambient_field,
|
||||
state="disabled",
|
||||
pady=5, padx=5, font=SMALL_BUTTON_FONT)
|
||||
self.save_ambient_calibration_button.grid(row=0, column=0)
|
||||
@@ -802,6 +802,7 @@ class CalibrateAmbientField(Frame):
|
||||
self.ambient_field_ut_result_vars[i].set("{:.3f}".format(results['ambient_ut'][i]))
|
||||
self.ambient_field_residual_vars[i].set("{:.3f}".format(results['residual'][i] * 1e6))
|
||||
|
||||
self.ambient_field_raw_data = results['raw_data']
|
||||
self.ambient_field_result = results['ambient_ut'] * 1e-6
|
||||
self.save_ambient_calibration_button.configure(state='normal')
|
||||
self.ambient_field_save_results_button.configure(state='normal')
|
||||
@@ -844,12 +845,25 @@ class CalibrateAmbientField(Frame):
|
||||
ui_print("Error: Failed to export non-existent calibration data.")
|
||||
return
|
||||
|
||||
with open('coil_constant_calibration.csv', mode='w', newline='') as csv_file:
|
||||
fieldnames = self.coil_constant_raw_data[0].keys()
|
||||
csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=',', quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
|
||||
|
||||
self.save_to_csv('coil_constant_calibration.csv', self.coil_constant_raw_data)
|
||||
ui_print("Saved calibration results to coil_constant_calibration.csv.")
|
||||
|
||||
def save_to_csv_ambient_field(self):
|
||||
if self.ambient_field_raw_data is None:
|
||||
ui_print("Error: Failed to export non-existent calibration data.")
|
||||
return
|
||||
|
||||
self.save_to_csv('ambient_field_calibration.csv', self.ambient_field_raw_data)
|
||||
ui_print("Saved calibration results to ambient_field_calibration.csv.")
|
||||
|
||||
def save_to_csv(self, filename, data):
|
||||
with open(filename, mode='w', newline='') as csv_file:
|
||||
fieldnames = data[0].keys()
|
||||
csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=',', quotechar='"',
|
||||
quoting=csv.QUOTE_NONNUMERIC)
|
||||
|
||||
csv_writer.writeheader()
|
||||
for row in self.coil_constant_raw_data:
|
||||
for row in data:
|
||||
csv_writer.writerow(row)
|
||||
|
||||
def save_and_apply_ambient_calibration(self):
|
||||
|
||||
Reference in New Issue
Block a user