Skip to content

Commit 94b12ea

Browse files
author
Vintrix
authored
Merge pull request QudevETH#5 from QudevETH/devel/Cphi_gate
Devel/cphi gate
2 parents 1be3c80 + 19fc719 commit 94b12ea

34 files changed

+5675
-1530
lines changed

pycqed/analysis/analysis_toolbox.py

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ def get_param_value_from_file(file_path, instr_name, param_name, h5mode='r+'):
328328
return param_val
329329

330330

331-
def get_qb_channel_map_from_file(qb_names, file_path, value_names, h5mode='r+'):
331+
def get_qb_channel_map_from_hdf(qb_names, file_path, value_names, h5mode='r+'):
332332

333333
data_file = h5py.File(measurement_filename(file_path), h5mode)
334334
instr_settings = data_file['Instrument settings']
@@ -341,22 +341,19 @@ def get_qb_channel_map_from_file(qb_names, file_path, value_names, h5mode='r+'):
341341
elif 'lin_trans' in value_names[0]:
342342
ro_type = 'lin_trans w'
343343
else:
344-
input_ro_type = value_names[0]
345344
ro_type = 'w'
346-
logging.warning('Readout type "{}" does not have standard '
347-
'format.'.format(input_ro_type))
348345

349346
for qbn in qb_names:
350-
try:
351-
qbchs = [str(instr_settings[qbn].attrs['acq_I_channel'])]
352-
ro_acq_weight_type = instr_settings[qbn].attrs['acq_weights_type']
353-
if ro_acq_weight_type in ['SSB', 'DSB', 'optimal_qutrit']:
354-
qbchs += [str(instr_settings[qbn].attrs['acq_Q_channel'])]
355-
channel_map[qbn] = [ch for ch in value_names for nr in qbchs
356-
if ro_type+nr in ch]
357-
except KeyError:
358-
log.warning('Could not get channels')
359-
pass
347+
qbchs = [str(instr_settings[qbn].attrs['acq_I_channel'])]
348+
ro_acq_weight_type = instr_settings[qbn].attrs['acq_weights_type']
349+
if ro_acq_weight_type in ['SSB', 'DSB', 'optimal_qutrit']:
350+
qbchs += [str(instr_settings[qbn].attrs['acq_Q_channel'])]
351+
channel_map[qbn] = [ch for ch in value_names for nr in qbchs
352+
if ro_type+nr in ch]
353+
354+
all_values_empty = np.all([len(v) == 0 for v in channel_map.values()])
355+
if len(channel_map) == 0 or all_values_empty:
356+
raise ValueError('Did not find any channels. qb_channel_map is empty.')
360357
return channel_map
361358

362359

@@ -1550,8 +1547,8 @@ def normalize_2D_data_on_elements(data_2D, elements):
15501547
return data_2D
15511548

15521549

1553-
def rotate_and_normalize_data(data, cal_zero_points=None, cal_one_points=None,
1554-
zero_coord=None, one_coord=None, **kw):
1550+
def rotate_and_normalize_data_IQ(data, cal_zero_points=None, cal_one_points=None,
1551+
zero_coord=None, one_coord=None, **kw):
15551552
'''
15561553
Rotates and normalizes data with respect to some reference coordinates.
15571554
There are two ways to specify the reference coordinates.
@@ -1603,10 +1600,10 @@ def rotate_and_normalize_data(data, cal_zero_points=None, cal_one_points=None,
16031600
line_slope = fit_res.params['slope'].value
16041601
line_intercept = fit_res.params['intercept'].value
16051602
#finx the x, y coordinates of the projected points
1606-
x_proj=(x+line_slope*y-line_slope*line_intercept)/(line_slope**2+1)
1607-
y_proj= line_slope*(x_proj)+line_intercept
1603+
x_proj = (x+line_slope*y-line_slope*line_intercept)/(line_slope**2+1)
1604+
y_proj = line_slope*(x_proj)+line_intercept
16081605

1609-
#find the minimum (on th ey axis) point on the line
1606+
#find the minimum (on the y axis) point on the line
16101607
y_min_line = min(fit_res.best_fit)
16111608
x_min_line = x[np.argmin(fit_res.best_fit)]
16121609

@@ -1701,8 +1698,8 @@ def rotate_and_normalize_data_no_cal_points(data, **kw):
17011698
return normalized_data
17021699

17031700

1704-
def normalize_data_v3(data, cal_zero_points=np.arange(-4, -2, 1),
1705-
cal_one_points=np.arange(-2, 0, 1), **kw):
1701+
def rotate_and_normalize_data_1ch(data, cal_zero_points=np.arange(-4, -2, 1),
1702+
cal_one_points=np.arange(-2, 0, 1), **kw):
17061703
'''
17071704
Normalizes data according to calibration points
17081705
Inputs:
@@ -1723,6 +1720,7 @@ def normalize_data_v3(data, cal_zero_points=np.arange(-4, -2, 1),
17231720

17241721
return normalized_data
17251722

1723+
17261724
def predict_gm_proba_from_cal_points(X, cal_points):
17271725
"""
17281726
For each point of the data array X, predicts the probability of being

pycqed/analysis/measurement_analysis.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1670,7 +1670,7 @@ def norm_data_to_cal_points(self):
16701670
else:
16711671
cal_zero_points = self.cal_points[0]
16721672
cal_one_points = self.cal_points[1]
1673-
self.corr_data = a_tools.normalize_data_v3(
1673+
self.corr_data = a_tools.rotate_and_normalize_data_1ch(
16741674
self.measured_values[0],
16751675
cal_zero_points=cal_zero_points,
16761676
cal_one_points=cal_one_points)
@@ -1817,9 +1817,9 @@ def normalize_data_to_calibration_points(self, values, calsteps,
18171817
if len(self.measured_values) == 1 or len(self.RO_channels) == 1:
18181818
# Only one quadrature was measured
18191819
if cal_zero_points is None and cal_one_points is None:
1820-
# a_tools.normalize_data_v3 does not work with 0 cal_points. Use
1820+
# a_tools.rotate_and_normalize_data_1ch does not work with 0 cal_points. Use
18211821
# 4 cal_points.
1822-
logging.warning('a_tools.normalize_data_v3 does not have support'
1822+
logging.warning('a_tools.rotate_and_normalize_data_1ch does not have support'
18231823
' for 0 cal_points. Setting NoCalPoints to 4.')
18241824
self.NoCalPoints = 4
18251825
calsteps = 4
@@ -1830,8 +1830,8 @@ def normalize_data_to_calibration_points(self, values, calsteps,
18301830
list(range(int(NoPts - int(self.NoCalPoints) / 2), NoPts))
18311831
ch_to_measure = \
18321832
0 if len(self.measured_values) == 1 else self.RO_channels[0]
1833-
print('ch to measure ', ch_to_measure)
1834-
self.corr_data = a_tools.normalize_data_v3(
1833+
log.debug('ch to measure ', ch_to_measure)
1834+
self.corr_data = a_tools.rotate_and_normalize_data_1ch(
18351835
self.measured_values[ch_to_measure],
18361836
cal_zero_points, cal_one_points)
18371837
else:
@@ -1935,7 +1935,7 @@ def __init__(self, NoCalPoints=4, center_point=31, make_fig=True,
19351935
def run_default_analysis(self,
19361936
close_main_fig=True, **kw):
19371937
super(chevron_optimization_v2, self).run_default_analysis(**kw)
1938-
measured_values = a_tools.normalize_data_v3(self.measured_values[0])
1938+
measured_values = a_tools.rotate_and_normalize_data_1ch(self.measured_values[0])
19391939
self.cost_value_1, self.period = self.sum_cost(self.sweep_points * 1e9,
19401940
measured_values)
19411941
self.cost_value_2 = self.swap_cost(self.sweep_points * 1e9,
@@ -1963,7 +1963,7 @@ def run_default_analysis(self,
19631963
self.save_fig(fig, fig_tight=False, **kw)
19641964

19651965
def analysis_on_fig(self, ax):
1966-
measured_values = a_tools.normalize_data_v3(self.measured_values[0])
1966+
measured_values = a_tools.rotate_and_normalize_data_1ch(self.measured_values[0])
19671967
self.cost_value_1, self.period = self.sum_cost(self.sweep_points * 1e9,
19681968
measured_values)
19691969
self.cost_value_2 = self.swap_cost(self.sweep_points * 1e9,
@@ -2629,7 +2629,7 @@ def __init__(self, NoCalPoints=4, center_point=31, make_fig=True,
26292629
def run_default_analysis(self,
26302630
close_main_fig=True, **kw):
26312631
super(TD_UHFQC, self).run_default_analysis(**kw)
2632-
measured_values = a_tools.normalize_data_v3(self.measured_values[0])
2632+
measured_values = a_tools.rotate_and_normalize_data_1ch(self.measured_values[0])
26332633

26342634
fig, ax = plt.subplots(1, figsize=(8, 6))
26352635

@@ -8734,7 +8734,7 @@ def run_default_analysis(self, **kw):
87348734
self.add_analysis_datagroup_to_file()
87358735
self.get_naming_and_values()
87368736
x = self.sweep_points
8737-
y = a_tools.normalize_data_v3(self.measured_values[0])
8737+
y = a_tools.rotate_and_normalize_data_1ch(self.measured_values[0])
87388738

87398739
fit_res = self.fit(x[:-4], y[:-4])
87408740
self.fit_res = fit_res
@@ -11253,7 +11253,7 @@ def oneD_sweep_analysis(self, **kw):
1125311253
data_filter(self.data[1])[cal_points_idxs[0] +
1125411254
cal_points_idxs[1]]
1125511255
))
11256-
self.ampls = a_tools.normalize_data_v3(
11256+
self.ampls = a_tools.rotate_and_normalize_data_1ch(
1125711257
measured_values, cal_zero_points=cal_points_idxs[0],
1125811258
cal_one_points=cal_points_idxs[1])[0:-self.NoCalPoints]
1125911259

pycqed/analysis/randomized_benchmarking_analysis.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ def extract_data(self, **kw):
137137

138138
data = np.zeros((self.n_cl.size))
139139
if find_empirical_variance:
140-
self.epsilon = np.zeros((self.n_cl.size))
140+
self.epsilon = np.zeros(self.n_cl.size)
141141
for i in range(self.n_cl.size):
142142
y = [data_raw[j][i] for j in range(self.nr_seeds)]
143143
data[i] = np.mean(y)
@@ -169,11 +169,11 @@ def extract_data(self, **kw):
169169
# for TwoD==False
170170
self.data_calibrated = deepcopy(self.data_rearranged[0])
171171
if find_empirical_variance:
172-
self.epsilon = np.zeros((self.n_cl.size))
172+
self.epsilon = np.zeros(self.n_cl.size)
173173
for i in range(self.n_cl.size):
174174
a[0] = data_rearranged[0][i]
175175
a[1] = data_rearranged[1][i]
176-
data_calibrated = a_tools.rotate_and_normalize_data(
176+
data_calibrated = a_tools.rotate_and_normalize_data_IQ(
177177
a, self.cal_points[0], self.cal_points[1])[0]
178178
self.data_calibrated[i] = data_calibrated
179179
data_calibrated = data_calibrated[:-int(self.NoCalPoints)]

pycqed/analysis_v2/base_analysis.py

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from pycqed.measurement.hdf5_data import read_dict_from_hdf5
2828
import copy
2929
import logging
30-
log = logging.getLogger()
30+
log = logging.getLogger(__name__)
3131
log.addHandler(logging.StreamHandler())
3232

3333

@@ -290,22 +290,29 @@ def get_data_from_timestamp_list(self):
290290
return raw_data_dict
291291

292292
@staticmethod
293-
def add_measured_values_ord_dict(raw_data_dict):
293+
def add_measured_data(raw_data_dict):
294294
if 'measured_data' in raw_data_dict and \
295295
'value_names' in raw_data_dict:
296296
measured_data = raw_data_dict.pop('measured_data')
297297
raw_data_dict['measured_data'] = OrderedDict()
298-
sweep_points = measured_data[:-len(raw_data_dict['value_names'])]
298+
299+
value_names = raw_data_dict['value_names']
300+
if not isinstance(value_names, list):
301+
value_names = [value_names]
302+
303+
sweep_points = measured_data[:-len(value_names)]
304+
305+
299306
if sweep_points.shape[0] > 1:
300307
raw_data_dict['hard_sweep_points'] = np.unique(sweep_points[0])
301308
raw_data_dict['soft_sweep_points'] = np.unique(sweep_points[1:])
302309
else:
303310
raw_data_dict['hard_sweep_points'] = np.unique(sweep_points[0])
304311

305-
data = measured_data[-len(raw_data_dict['value_names']):]
306-
if data.shape[0] != len(raw_data_dict['value_names']):
312+
data = measured_data[-len(value_names):]
313+
if data.shape[0] != len(value_names):
307314
raise ValueError('Shape mismatch between data and ro channels.')
308-
for i, ro_ch in enumerate(raw_data_dict['value_names']):
315+
for i, ro_ch in enumerate(value_names):
309316
if 'soft_sweep_points' in raw_data_dict:
310317
hsl = len(raw_data_dict['hard_sweep_points'])
311318
ssl = len(raw_data_dict['soft_sweep_points'])
@@ -339,13 +346,13 @@ def extract_data(self):
339346

340347
self.raw_data_dict = self.get_data_from_timestamp_list()
341348
if len(self.timestamps) == 1:
342-
self.raw_data_dict = self.add_measured_values_ord_dict(
349+
self.raw_data_dict = self.add_measured_data(
343350
self.raw_data_dict)
344351
else:
345352
temp_dict_list = []
346353
for i, rd_dict in enumerate(self.raw_data_dict):
347354
temp_dict_list.append(
348-
self.add_measured_values_ord_dict(rd_dict))
355+
self.add_measured_data(rd_dict))
349356
self.raw_data_dict = tuple(temp_dict_list)
350357

351358
def process_data(self):
@@ -484,7 +491,8 @@ def run_fitting(self):
484491
Only model fitting is implemented here. Minimizing fitting should
485492
be implemented here.
486493
'''
487-
self.fit_res = {}
494+
if self.fit_res is None:
495+
self.fit_res = {}
488496
for key, fit_dict in self.fit_dicts.items():
489497
guess_dict = fit_dict.get('guess_dict', None)
490498
guess_pars = fit_dict.get('guess_pars', None)
@@ -1008,6 +1016,8 @@ def plot_line(self, pdict, axs):
10081016
plot_title = pdict.get('title', None)
10091017
plot_xrange = pdict.get('xrange', None)
10101018
plot_yrange = pdict.get('yrange', None)
1019+
plot_yscale = pdict.get('yscale', None)
1020+
plot_xscale = pdict.get('xscale', None)
10111021

10121022
if pdict.get('color', False):
10131023
plot_linekws['color'] = pdict.get('color')
@@ -1095,6 +1105,10 @@ def plot_line(self, pdict, axs):
10951105
if plot_yrange is not None:
10961106
ymin, ymax = plot_yrange
10971107
axs.set_ylim(ymin, ymax)
1108+
if plot_yscale is not None:
1109+
axs.set_yscale(plot_yscale)
1110+
if plot_xscale is not None:
1111+
axs.set_xscale(plot_xscale)
10981112

10991113
if self.tight_fig:
11001114
axs.figure.tight_layout()

pycqed/analysis_v2/distortions_analysis.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ def process_data(self):
6565
self.proc_data_dict['xunit'] = self.raw_data_dict['value_units'][0][x_ch_idx]
6666

6767
self.proc_data_dict['xvals'] = list(self.raw_data_dict
68-
['measured_values_ord_dict'].values())[x_ch_idx][0]
68+
['measured_data'].values())[x_ch_idx][0]
6969
self.proc_data_dict['yvals'] = list(self.raw_data_dict
70-
['measured_values_ord_dict'].values())[y_ch_idx][0]
70+
['measured_data'].values())[y_ch_idx][0]
7171

7272

7373
# Detect the rising edge and shift the time axis

pycqed/analysis_v2/optimization_analysis.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def prepare_plots(self):
3333

3434

3535
for i, val_name in enumerate(self.raw_data_dict['value_names'][0]):
36-
yvals = self.raw_data_dict['measured_values_ord_dict'][val_name][0]
36+
yvals = self.raw_data_dict['measured_data'][val_name][0]
3737

3838
self.plot_dicts['{}_vs_iteration'.format(val_name)] = {
3939
'plotfn': self.plot_line,

0 commit comments

Comments
 (0)