From d7ade91f8035797a0141a9197b5d24b235c250c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20Teichr=C3=B6b?= Date: Fri, 15 Oct 2021 11:47:20 +0200 Subject: [PATCH] Ambient field calibration results can be saved to csv file. --- src/calibration.py | 11 ++++++++++- src/user_interface.py | 28 +++++++++++++++++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/calibration.py b/src/calibration.py index 0a37f83..6cf0c3c 100644 --- a/src/calibration.py +++ b/src/calibration.py @@ -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 diff --git a/src/user_interface.py b/src/user_interface.py index a85e420..46c557b 100644 --- a/src/user_interface.py +++ b/src/user_interface.py @@ -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):