diff --git a/pulse_lib/acquisition/measurement_converter.py b/pulse_lib/acquisition/measurement_converter.py index bbe1ac3a8bd0761147598075a021233eb547a4a6..9dc7f403088d115477d0978410152279ab39ac4a 100644 --- a/pulse_lib/acquisition/measurement_converter.py +++ b/pulse_lib/acquisition/measurement_converter.py @@ -49,12 +49,12 @@ class DataSelection: class MeasurementParameter(MultiParameter): - def __init__(self, name, source, mc, data_filter): - setpoints = mc.get_setpoints(data_filter) + def __init__(self, name, source, mc, data_selection): + setpoints = mc.get_setpoints(data_selection) super().__init__(name, **setpoints.__dict__) self._source = source self._mc = mc - self._data_filter = data_filter + self._data_selection = data_selection self._derived_params = {} def add_derived_param(self, name, func, label=None, unit='mV', @@ -129,7 +129,10 @@ class MeasurementParameter(MultiParameter): time = tuple(np.arange(n_samples) * period) sp_names += ('time',) sp_units += ('ns',) - setpoints += ((time,)*n_rep,) + if add_repetitions: + setpoints += ((time,)*n_rep,) + else: + setpoints += (time,) sp_labels = sp_names self.setpoints = self.setpoints + (setpoints,) @@ -150,7 +153,7 @@ class MeasurementParameter(MultiParameter): data = self._source.get_channel_data() self._mc.set_channel_data(data) - data = self._mc.get_measurement_data(self._data_filter) + data = self._mc.get_measurement_data(self._data_selection) if len(self._derived_params) > 0: data_map = {name:values for name,values in zip(self.names, data)} @@ -187,42 +190,41 @@ class MeasurementConverter: self._generate_setpoints_raw() self._generate_setpoints() - # @@@ add raw average over periods. - def _generate_setpoints_raw(self): n_rep = self.n_rep digitizer_channels = self._description.digitizer_channels for m in self._description.measurements: - if isinstance(m, measurement_acquisition): - sp_names = ('repetition',) - sp_units = ('',) - shape = (n_rep,) - setpoints = (tuple(np.arange(n_rep)),) - if m.n_samples is not None: - period = 1e9/self._sample_rate - time = tuple(np.arange(m.n_samples) * period) - shape += (m.n_samples,) - sp_names += ('time',) - sp_units += ('ns',) - setpoints += ((time,)*n_rep,) - channel_name = m.acquisition_channel - channel = digitizer_channels[channel_name] - - name = f'{m.name}' - label = f'{m.name} ({channel_name}:{m.index})' - sp_raw = SetpointsSingle(name, label, 'mV', shape, setpoints, - sp_names, sp_names, sp_units) - self.sp_raw.append(sp_raw) - - if channel.iq_out: - for suffix in ['_I', '_Q']: - name = f'{m.name}{suffix}' - label = f'{m.name}{suffix} ({channel_name}{suffix}:{m.index})' - sp_raw = SetpointsSingle(name, label, 'mV', shape, setpoints, - sp_names, sp_names, sp_units) - self.sp_raw_split.append(sp_raw) - else: + if not isinstance(m, measurement_acquisition): + continue + sp_names = ('repetition',) + sp_units = ('',) + shape = (n_rep,) + setpoints = (tuple(np.arange(n_rep)),) + if m.n_samples is not None: + period = 1e9/self._sample_rate + time = tuple(np.arange(m.n_samples) * period) + shape += (len(time),) + sp_names += ('time',) + sp_units += ('ns',) + setpoints += ((time,)*n_rep,) + channel_name = m.acquisition_channel + channel = digitizer_channels[channel_name] + + name = f'{m.name}' + label = f'{m.name} ({channel_name}:{m.index})' + sp_raw = SetpointsSingle(name, label, 'mV', shape, setpoints, + sp_names, sp_names, sp_units) + self.sp_raw.append(sp_raw) + + if channel.iq_out: + for suffix in ['_I', '_Q']: + name = f'{m.name}{suffix}' + label = f'{m.name}{suffix} ({channel_name}{suffix}:{m.index})' + sp_raw = SetpointsSingle(name, label, 'mV', shape, setpoints, + sp_names, sp_names, sp_units) self.sp_raw_split.append(sp_raw) + else: + self.sp_raw_split.append(sp_raw) def _generate_setpoints(self):