Ambient field calibration results can be saved to csv file.

This commit is contained in:
2021-10-15 11:47:20 +02:00
parent 747e424871
commit d7ade91f80
2 changed files with 31 additions and 8 deletions
+10 -1
View File
@@ -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
View File
@@ -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):