diff --git a/artwork/icons/oxygen/source_svg/camera_lens.svg b/artwork/icons/oxygen/source_svg/camera_lens.svg new file mode 100644 index 0000000000..bbf63d5eac --- /dev/null +++ b/artwork/icons/oxygen/source_svg/camera_lens.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/artwork/icons/qudiTheme/22x22/stop-record-counter.png b/artwork/icons/qudiTheme/22x22/stop-record-counter.png new file mode 100644 index 0000000000..ad1542e904 Binary files /dev/null and b/artwork/icons/qudiTheme/22x22/stop-record-counter.png differ diff --git a/artwork/icons/qudiTheme/22x22/trace-snapshot.png b/artwork/icons/qudiTheme/22x22/trace-snapshot.png new file mode 100644 index 0000000000..cf272877d5 Binary files /dev/null and b/artwork/icons/qudiTheme/22x22/trace-snapshot.png differ diff --git a/artwork/icons/qudiTheme/source_svg/stop-record-counter.svg b/artwork/icons/qudiTheme/source_svg/stop-record-counter.svg new file mode 100644 index 0000000000..57082d813e --- /dev/null +++ b/artwork/icons/qudiTheme/source_svg/stop-record-counter.svg @@ -0,0 +1,592 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/artwork/icons/qudiTheme/source_svg/trace-snapshot.svg b/artwork/icons/qudiTheme/source_svg/trace-snapshot.svg new file mode 100644 index 0000000000..8d9bad1e40 --- /dev/null +++ b/artwork/icons/qudiTheme/source_svg/trace-snapshot.svg @@ -0,0 +1,508 @@ + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/gui/time_series_gui.py b/gui/time_series_gui.py index 681eaba817..cac06b15f6 100644 --- a/gui/time_series_gui.py +++ b/gui/time_series_gui.py @@ -135,6 +135,8 @@ def on_activate(self): # Connecting user interactions self._mw.start_trace_Action.triggered.connect(self.start_clicked) self._mw.record_trace_Action.triggered.connect(self.record_clicked) + self._mw.trace_snapshot_Action.triggered.connect( + self._time_series_logic.save_trace_snapshot, QtCore.Qt.QueuedConnection) self._mw.trace_length_DoubleSpinBox.editingFinished.connect(self.data_window_changed) self._mw.data_rate_DoubleSpinBox.editingFinished.connect(self.data_rate_changed) @@ -180,6 +182,7 @@ def on_deactivate(self): # disconnect signals self._mw.start_trace_Action.triggered.disconnect() self._mw.record_trace_Action.triggered.disconnect() + self._mw.trace_snapshot_Action.triggered.disconnect() self._mw.trace_length_DoubleSpinBox.editingFinished.disconnect() self._mw.data_rate_DoubleSpinBox.editingFinished.disconnect() self._mw.oversampling_SpinBox.editingFinished.disconnect() diff --git a/logic/time_series_reader_logic.py b/logic/time_series_reader_logic.py index 25b2f5342e..a0be1e30e5 100644 --- a/logic/time_series_reader_logic.py +++ b/logic/time_series_reader_logic.py @@ -633,31 +633,32 @@ def save_trace_snapshot(self, to_file=True, name_tag='', save_figure=True): This method saves the already displayed counts to file and does not accumulate them. """ - timestamp = dt.datetime.now() - - # write the parameters: - parameters = dict() - parameters['Time stamp'] = timestamp.strftime('%d.%m.%Y, %H:%M:%S.%f') - parameters['Data rate (Hz)'] = self._data_rate - parameters['Oversampling factor (samples)'] = self._oversampling_factor - parameters['Sampling rate (Hz)'] = self.sampling_rate + with self.threadlock: + timestamp = dt.datetime.now() - header = ', '.join('{0} ({1})'.format(ch, prop['unit']) for ch, prop in - self._streamer.channel_properties.items()) - data = {header: self.trace_data} + # write the parameters: + parameters = dict() + parameters['Time stamp'] = timestamp.strftime('%d.%m.%Y, %H:%M:%S.%f') + parameters['Data rate (Hz)'] = self._data_rate + parameters['Oversampling factor (samples)'] = self._oversampling_factor + parameters['Sampling rate (Hz)'] = self.sampling_rate - if to_file: - # time_arr = np.arange(self._trace_window_size) / self._data_rate - filepath = self._savelogic.get_path_for_module(module_name='TimeSeriesReader') - filelabel = 'data_trace_snapshot_{0}'.format( - name_tag) if name_tag else 'data_trace_snapshot' - self._savelogic.save_data(data=data, - filepath=filepath, - parameters=parameters, - filelabel=filelabel, - timestamp=timestamp, - delimiter='\t') - self.log.info('Time series snapshot saved to: {0}'.format(filepath)) + header = ', '.join('{0} ({1})'.format(ch, prop['unit']) for ch, prop in + self._streamer.channel_properties.items()) + data = {header: self.trace_data} + + if to_file: + # time_arr = np.arange(self._trace_window_size) / self._data_rate + filepath = self._savelogic.get_path_for_module(module_name='TimeSeriesReader') + filelabel = 'data_trace_snapshot_{0}'.format( + name_tag) if name_tag else 'data_trace_snapshot' + self._savelogic.save_data(data=data, + filepath=filepath, + parameters=parameters, + filelabel=filelabel, + timestamp=timestamp, + delimiter='\t') + self.log.info('Time series snapshot saved to: {0}'.format(filepath)) return data, parameters def _stop_reader_wait(self):