From d8ae06b6fcab2bf5c939e67931b42e68367e1319 Mon Sep 17 00:00:00 2001 From: Santiago Valles Sanclemente Date: Mon, 11 Jul 2022 16:22:51 +0200 Subject: [PATCH 01/12] Added disable metadata option to all single qubit experiments --- .../qubit_objects/HAL_Transmon.py | 481 +++++++++++------- .../qubit_objects/qubit_object.py | 22 +- 2 files changed, 307 insertions(+), 196 deletions(-) diff --git a/pycqed/instrument_drivers/meta_instrument/qubit_objects/HAL_Transmon.py b/pycqed/instrument_drivers/meta_instrument/qubit_objects/HAL_Transmon.py index db5ce49ee3..8bc0e2f082 100644 --- a/pycqed/instrument_drivers/meta_instrument/qubit_objects/HAL_Transmon.py +++ b/pycqed/instrument_drivers/meta_instrument/qubit_objects/HAL_Transmon.py @@ -436,7 +436,8 @@ def find_frequency_adaptive( update=True, use_max=False, spec_mode='pulsed_marked', - verbose=True + verbose=True, + disable_snapshot_metadata=False ) -> bool: # USED_BY: device_dependency_graphs.py """ @@ -475,7 +476,7 @@ def find_frequency_adaptive( freqs = np.arange(f_center - f_span / 2, f_center + f_span / 2, f_step) self.measure_spectroscopy(MC=MC, freqs=freqs, mode=spec_mode, - analyze=False) + analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) label = 'spec' # Use 'try' because it can give a TypeError when no peak is found @@ -535,7 +536,8 @@ def find_qubit_sweetspot( set_to_sweetspot=True, method='DAC', fluxChan=None, - spec_mode='pulsed_marked' + spec_mode='pulsed_marked', + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py """ @@ -575,7 +577,8 @@ def find_qubit_sweetspot( mode=spec_mode, nested_resonator_calibration=False, # nested_resonator_calibration_use_min=False, - resonator_freqs=np.arange(-5e6, 5e6, 0.2e6) + self.freq_res() + resonator_freqs=np.arange(-5e6, 5e6, 0.2e6) + self.freq_res(), + disable_snapshot_metadata=disable_snapshot_metadata ) timestamp = a_tools.get_timestamps_in_range( @@ -592,9 +595,9 @@ def find_qubit_sweetspot( for i, dac_value in enumerate(dac_values): self.instr_FluxCtrl.get_instr()[self.fl_dc_ch()](dac_value) if i == 0: - self.find_frequency(freqs=freqs, update=True) + self.find_frequency(freqs=freqs, update=True, disable_snapshot_metadata=disable_snapshot_metadata) else: - self.find_frequency(update=True) + self.find_frequency(update=True, disable_snapshot_metadata=disable_snapshot_metadata) t_end = time.strftime('%Y%m%d_%H%M%S') @@ -636,7 +639,8 @@ def find_qubit_sweetspot( return True - def find_qubit_sweetspot_1D(self, freqs=None, dac_values=None): + def find_qubit_sweetspot_1D(self, freqs=None, dac_values=None, + disable_snapshot_metadata=False): # self.spec_pow(-30) self.ro_acq_averages(2 ** 14) @@ -661,9 +665,9 @@ def find_qubit_sweetspot_1D(self, freqs=None, dac_values=None): self.instr_FluxCtrl.get_instr()[flux_channel](dac_value) # Find Resonator - self.find_resonator_frequency(freqs=np.arange(-5e6, 5.1e6, .1e6) + self.freq_res(), use_min=True) + self.find_resonator_frequency(freqs=np.arange(-5e6, 5.1e6, .1e6) + self.freq_res(), use_min=True, disable_snapshot_metadata=disable_snapshot_metadata) # Find Qubit frequency - self.find_frequency(freqs=freqs) + self.find_frequency(freqs=freqs, disable_snapshot_metadata=disable_snapshot_metadata) Qubit_frequency.append(self.freq_qubit()) Reson_frequency.append(self.freq_res()) @@ -675,9 +679,9 @@ def find_qubit_sweetspot_1D(self, freqs=None, dac_values=None): # Set Flux Current to sweetspot self.instr_FluxCtrl.get_instr()[flux_channel](sweetspot_current) self.find_resonator_frequency(freqs=np.arange(-5e6, 5.1e6, .1e6) + self.freq_res(), - use_min=True) + use_min=True, disable_snapshot_metadata=disable_snapshot_metadata) frequency_sweet_spot = self.find_frequency( - freqs=np.arange(-50e6, 50e6, .5e6) + self.freq_qubit()) + freqs=np.arange(-50e6, 50e6, .5e6) + self.freq_qubit(), disable_snapshot_metadata=disable_snapshot_metadata) return frequency_sweet_spot @@ -686,7 +690,8 @@ def find_anharmonicity_estimate( anharmonicity=None, mode='pulsed_marked', update=True, - power_12=10 + power_12=10, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs.py @@ -711,7 +716,7 @@ def find_anharmonicity_estimate( old_spec_pow = self.spec_pow() self.spec_pow(self.spec_pow() + power_12) - self.measure_spectroscopy(freqs=freqs, mode=mode, analyze=False) + self.measure_spectroscopy(freqs=freqs, mode=mode, analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) a = ma.Qubit_Spectroscopy_Analysis(label=self.msmt_suffix, analyze_ef=True) @@ -731,7 +736,8 @@ def find_bus_frequency( close_fig=True, analyze=True, MC: Optional[MeasurementControl] = None, - prepare_for_continuous_wave=True + prepare_for_continuous_wave=True, + disable_snapshot_metadata=False ): """ Drive the qubit and sit at the spectroscopy peak while the bus is driven with @@ -795,7 +801,7 @@ def find_bus_frequency( else: self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Bus_spectroscopy_' + self.msmt_suffix + label) + MC.run(name='Bus_spectroscopy_' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) spec_source_bus.off() self.hal_acq_spec_mode_off() @@ -809,7 +815,8 @@ def find_bus_frequency( # calibrate_ functions (HAL_Transmon specific) ########################################################################## - def calibrate_ro_pulse_amp_CW(self, freqs=None, powers=None, update=True): + def calibrate_ro_pulse_amp_CW(self, freqs=None, powers=None, update=True, + disable_snapshot_metadata=False): # USED_BY: device_dependency_graphs.py """ Does a resonator power scan and determines at which power the low power @@ -827,7 +834,7 @@ def calibrate_ro_pulse_amp_CW(self, freqs=None, powers=None, update=True): if powers is None: powers = np.arange(-40, 0.1, 8) - self.measure_resonator_power(freqs=freqs, powers=powers, analyze=False) + self.measure_resonator_power(freqs=freqs, powers=powers, analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) fit_res = ma.Resonator_Powerscan_Analysis(label='Resonator_power_scan', close_fig=True) if update: @@ -850,7 +857,8 @@ def calibrate_mw_pulse_amplitude_coarse( verbose=False, MC: Optional[MeasurementControl] = None, update=True, - all_modules=False + all_modules=False, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs.py @@ -867,7 +875,7 @@ def calibrate_mw_pulse_amplitude_coarse( else: amps = np.linspace(0, 1, 31) - self.measure_rabi(amps=amps, MC=MC, analyze=False, all_modules=all_modules) + self.measure_rabi(amps=amps, MC=MC, analyze=False, all_modules=all_modules, disable_snapshot_metadata=disable_snapshot_metadata) a = ma.Rabi_Analysis(close_fig=close_fig, label='rabi') @@ -955,7 +963,8 @@ def calibrate_mixer_skewness_drive( x0: list = [1.0, 0.0], cma_stds: list = [.15, 10], maxfevals: int = 250, - update: bool = True + update: bool = True, + disable_snapshot_metadata=False ) -> bool: # USED_BY: device_dependency_graphs.py """ @@ -1068,7 +1077,7 @@ def load_square(): MC.set_detector_function(detector) # sets test_detector MC.set_adaptive_function_parameters(ad_func_pars) MC.set_sweep_points(np.linspace(0, 2, 300)) - MC.run( + MC.run, disable_snapshot_metadata=disable_snapshot_metadata( name='Spurious_sideband_{}{}'.format( mixer_ch, self.msmt_suffix), mode='adaptive') @@ -1129,7 +1138,7 @@ def load_square(): # MC.set_sweep_functions([S1, S2]) # MC.set_detector_function(detector) # sets test_detector # MC.set_adaptive_function_parameters(ad_func_pars) - # MC.run(name='Spurious_sideband', mode='adaptive') + # MC.run(name='Spurious_sideband', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) # a = ma.OptimizationAnalysis(auto=True, label='Spurious_sideband') # alpha = a.optimization_result[0][0] # phi = a.optimization_result[0][1] @@ -1140,7 +1149,8 @@ def load_square(): # LutMan.mixer_alpha(alpha) # LutMan.mixer_phi(phi) - def calibrate_mixer_skewness_RO(self, update=True): + def calibrate_mixer_skewness_RO(self, update=True, + disable_snapshot_metadata=False): """ Calibrates the mixer skewness using mixer_skewness_cal_UHFQC_adaptive see calibration toolbox for details FIXME: outdated @@ -1191,7 +1201,7 @@ def calibrate_mixer_skewness_RO(self, update=True): MC.set_sweep_functions([S1, S2]) MC.set_detector_function(detector) # sets test_detector MC.set_adaptive_function_parameters(ad_func_pars) - MC.run(name='Spurious_sideband', mode='adaptive') + MC.run(name='Spurious_sideband', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) a = ma.OptimizationAnalysis(auto=True, label='Spurious_sideband') alpha = a.optimization_result[0][0] phi = a.optimization_result[0][1] @@ -1204,7 +1214,8 @@ def calibrate_mixer_skewness_RO(self, update=True): def calibrate_mixer_offsets_RO( self, update: bool = True, - ftarget=-110 + ftarget=-110, + disable_snapshot_metadata=False ) -> bool: # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs.py @@ -1257,7 +1268,8 @@ def calibrate_mw_pulses_basic( kw_offsets={'ftarget': -120}, kw_skewness={}, kw_motzoi={'update': True}, - f_target_skewness=-120 + f_target_skewness=-120, + disable_snapshot_metadata=False ): """ @@ -1300,7 +1312,8 @@ def calibrate_ssro_coarse( freqs=None, amps=None, analyze: bool = True, - update: bool = True + update: bool = True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -1358,7 +1371,7 @@ def calibrate_ssro_coarse( msmt_kw={'prepare': True} ) nested_MC.set_detector_function(d) - nested_MC.run(name='RO_coarse_tuneup', mode='2D') + nested_MC.run(name='RO_coarse_tuneup', mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) if analyze is True: # Analysis @@ -1389,7 +1402,8 @@ def calibrate_ssro_pulse_duration( use_adaptive: bool = True, n_points: int = 80, analyze: bool = True, - update: bool = True + update: bool = True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -1463,13 +1477,13 @@ def calibrate_ssro_pulse_duration( 'bounds': [(10e-9, 400e-9), amp_lim], 'minimize': False }) - nested_MC.run(name='RO_duration_tuneup_{}'.format(self.name), + nested_MC.run(name='RO_duration_tuneup_{}'.format(self.name), disable_snapshot_metadata=disable_snapshot_metadata, mode='adaptive') # Use standard 2D sweep else: nested_MC.set_sweep_points(times) nested_MC.set_sweep_points_2D(amps) - nested_MC.run(name='RO_duration_tuneup_{}'.format(self.name), + nested_MC.run(name='RO_duration_tuneup_{}'.format(self.name), disable_snapshot_metadata=disable_snapshot_metadata, mode='2D') ##################### # Analysis @@ -1496,7 +1510,8 @@ def calibrate_ssro_fine( optimize_threshold: float = .99, check_threshold: float = .90, analyze: bool = True, - update: bool = True + update: bool = True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -1524,7 +1539,7 @@ def calibrate_ssro_fine( ''' ## check single-qubit ssro first, if assignment fidelity below 92.5%, run optimizer - self.measure_ssro(post_select=True) + self.measure_ssro(post_select=True, disable_snapshot_metadata=disable_snapshot_metadata) if self.F_ssro() > check_threshold: return True @@ -1571,7 +1586,7 @@ def calibrate_ssro_fine( nested_MC.set_adaptive_function_parameters(ad_func_pars) nested_MC.set_optimization_method('nelder_mead') - nested_MC.run(name='RO_fine_tuneup', mode='adaptive') + nested_MC.run(name='RO_fine_tuneup', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) if analyze is True: ma.OptimizationAnalysis(label='RO_fine_tuneup') @@ -1582,7 +1597,8 @@ def calibrate_ro_acq_delay( MC: Optional[MeasurementControl] = None, analyze: bool = True, prepare: bool = True, - disable_metadata: bool = False + disable_snapshot_metadata: bool = False, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -1625,7 +1641,7 @@ def calibrate_ro_acq_delay( MC.set_sweep_points(np.arange(self.input_average_detector.nr_samples) / sampling_rate) MC.set_detector_function(self.input_average_detector) - MC.run(name=f'Measure_Acq_Delay_{self.msmt_suffix}', disable_snapshot_metadata=disable_metadata) + MC.run(name=f'Measure_Acq_Delay_{self.msmt_suffix}', disable_snapshot_metadata=disable_snapshot_metadata) self.ro_pulse_amp(old_pow) @@ -1645,7 +1661,8 @@ def calibrate_mw_gates_restless( initial_steps: list = [0.05, 0.05, 1e6], nr_cliffords: int = 80, nr_seeds: int = 200, verbose: bool = True, update: bool = True, - prepare_for_timedomain: bool = True + prepare_for_timedomain: bool = True, + disable_snapshot_metadata=False ): """ Refs: @@ -1660,7 +1677,7 @@ def calibrate_mw_gates_restless( nr_cliffords=nr_cliffords, nr_seeds=nr_seeds, verbose=verbose, update=update, prepare_for_timedomain=prepare_for_timedomain, - method='restless') + method='restless', disable_snapshot_metadata=disable_snapshot_metadata) def calibrate_mw_gates_rb( self, @@ -1672,7 +1689,8 @@ def calibrate_mw_gates_rb( verbose: bool = True, update: bool = True, prepare_for_timedomain: bool = True, method: bool = None, - optimizer: str = 'NM' + optimizer: str = 'NM', + disable_snapshot_metadata=False ): """ Calibrates microwave pulses using a randomized benchmarking based @@ -1775,7 +1793,7 @@ def calibrate_mw_gates_rb( 'maxiter': 1500} MC.set_adaptive_function_parameters(ad_func_pars) - MC.run(name=msmt_string, + MC.run(name=msmt_string, disable_snapshot_metadata=disable_snapshot_metadata, mode='adaptive') a = ma.OptimizationAnalysis(label=msmt_string) @@ -1805,7 +1823,8 @@ def calibrate_mw_gates_allxy( start_values=None, initial_steps=None, parameter_list=None, - termination_opt=0.01 + termination_opt=0.01, + disable_snapshot_metadata=False ): # FIXME: this tuneup does not update the qubit object parameters # update: Fixed on the the pagani set-up @@ -1855,7 +1874,7 @@ def calibrate_mw_gates_allxy( nested_MC.set_adaptive_function_parameters(ad_func_pars) nested_MC.set_optimization_method('nelder_mead') - nested_MC.run(name='gate_tuneup_allxy', mode='adaptive') + nested_MC.run(name='gate_tuneup_allxy', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) a2 = ma.OptimizationAnalysis(label='gate_tuneup_allxy') if a2.optimization_result[1][0] > termination_opt: @@ -1867,7 +1886,8 @@ def calibrate_mw_gates_allxy2( self, nested_MC: Optional[MeasurementControl] = None, start_values=None, - initial_steps=None, f_termination=0.01 + initial_steps=None, f_termination=0.01, + disable_snapshot_metadata=False ): ''' FIXME! Merge both calibrate allxy methods. @@ -1927,7 +1947,7 @@ def calibrate_mw_gates_allxy2( nested_MC.set_adaptive_function_parameters(ad_func_pars) nested_MC.set_optimization_method('nelder_mead') - nested_MC.run(name='gate_tuneup_allxy', mode='adaptive') + nested_MC.run(name='gate_tuneup_allxy', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) a2 = ma.OptimizationAnalysis(label='gate_tuneup_allxy') self.ro_acq_averages(old_avg) # Open all vsm channels @@ -1947,7 +1967,8 @@ def calibrate_RO( nested_MC: Optional[MeasurementControl] = None, start_params=None, initial_step=None, - threshold=0.05 + threshold=0.05, + disable_snapshot_metadata=False ): ''' Optimizes the RO assignment fidelity using 2 parameters: @@ -1983,7 +2004,7 @@ def calibrate_RO( nested_MC.set_sweep_functions([self.ro_freq, self.ro_pulse_amp]) def wrap_func(): - error = 1 - self.calibrate_optimal_weights()['F_a'] + error = 1 - self.calibrate_optimal_weights(disable_snapshot_metadata=disable_snapshot_metadata)['F_a'] return error d = det.Function_Detector(wrap_func, @@ -2001,7 +2022,7 @@ def wrap_func(): nested_MC.set_adaptive_function_parameters(ad_func_pars) nested_MC.set_optimization_method('nelder_mead') - nested_MC.run(name='RO_tuneup', mode='adaptive') + nested_MC.run(name='RO_tuneup', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) a = ma.OptimizationAnalysis(label='RO_tuneup') @@ -2025,7 +2046,8 @@ def calibrate_depletion_pulse( use_RTE_cost_function=False, use_adaptive_optimizer=False, adaptive_loss_weight=5, - target_cost=0.02 + target_cost=0.02, + disable_snapshot_metadata=False ): """ this function automatically tunes up a two step, four-parameter @@ -2179,7 +2201,7 @@ def calibrate_depletion_pulse( optimizer_result = nested_MC.run( f"Depletion_tuneup_{self.name}_adaptive-{use_adaptive_optimizer}", - mode='adaptive') + mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) a = ma.OptimizationAnalysis(label='Depletion_tuneup') return a.optimization_result, optimizer_result @@ -2193,7 +2215,8 @@ def calibrate_ef_rabi( analyze=True, close_fig=True, prepare_for_timedomain=True, - update=True + update=True, + disable_snapshot_metadata=False ): """ Calibrates the pi pulse of the ef/12 transition using @@ -2209,7 +2232,8 @@ def calibrate_ef_rabi( recovery_pulse=recovery_pulse, MC=MC, label=label, analyze=analyze, close_fig=close_fig, - prepare_for_timedomain=prepare_for_timedomain + prepare_for_timedomain=prepare_for_timedomain, + disable_snapshot_metadata=disable_snapshot_metadata ) if update: ef_pi_amp = a2.proc_data_dict['ef_pi_amp'] @@ -2219,7 +2243,12 @@ def calibrate_ef_rabi( # calibrate_ functions (overrides for class Qubit) ########################################################################## - def calibrate_motzoi(self, MC: Optional[MeasurementControl] = None, verbose=True, update=True, motzois=None): + def calibrate_motzoi(self, MC: Optional[MeasurementControl] = None, + verbose=True, + update=True, + motzois=None, + disable_snapshot_metadata=False + ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, """ @@ -2235,7 +2264,7 @@ def calibrate_motzoi(self, MC: Optional[MeasurementControl] = None, verbose=True motzois = gen_sweep_pts(center=0, span=.3, num=31) # large range - a = self.measure_motzoi(MC=MC, motzoi_amps=motzois, analyze=True) + a = self.measure_motzoi(MC=MC, motzoi_amps=motzois, analyze=True, disable_snapshot_metadata=disable_snapshot_metadata) opt_motzoi = a.get_intersect()[0] if opt_motzoi > max(motzois) or opt_motzoi < min(motzois): if verbose: @@ -2256,7 +2285,8 @@ def calibrate_mixer_offsets_drive( mixer_channels=['G', 'D'], update: bool = True, ftarget=-110, - maxiter=300 + maxiter=300, + disable_snapshot_metadata=False ) -> bool: # USED_BY: device_dependency_graphs.py """ @@ -2391,11 +2421,12 @@ def calibrate_optimal_weights( optimal_IQ: bool = False, measure_transients_CCL_switched: bool = False, prepare: bool = True, - disable_metadata: bool = False, + disable_snapshot_metadata: bool = False, nr_shots_per_case: int = 2 ** 13, post_select: bool = False, averages: int = 2 ** 15, post_select_threshold: float = None, + disable_snapshot_metadata=False ) -> bool: """ Measures readout transients for the qubit in ground and excited state to indicate @@ -2429,11 +2460,12 @@ def calibrate_optimal_weights( if measure_transients_CCL_switched: transients = self.measure_transients_CCL_switched(MC=MC, analyze=analyze, - depletion_analysis=False) + depletion_analysis=False, + disable_snapshot_metadata=disable_snapshot_metadata) else: transients = self.measure_transients(MC=MC, analyze=analyze, depletion_analysis=False, - disable_metadata=disable_metadata) + disable_snapshot_metadata=disable_snapshot_metadata) if analyze: ma.Input_average_analysis(IF=self.ro_freq_mod()) @@ -2476,7 +2508,7 @@ def calibrate_optimal_weights( self._prep_ro_instantiate_detectors() ssro_dict = self.measure_ssro( no_figs=no_figs, update=update, - prepare=True, disable_metadata=disable_metadata, + prepare=True, disable_snapshot_metadata=disable_snapshot_metadata, nr_shots_per_case=nr_shots_per_case, post_select=post_select, post_select_threshold=post_select_threshold) @@ -2495,7 +2527,8 @@ def measure_heterodyne_spectroscopy( freqs, MC: Optional[MeasurementControl] = None, analyze=True, close_fig=True, - label='' + label='', + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py (via find_resonator_frequency) """ @@ -2536,7 +2569,7 @@ def measure_heterodyne_spectroscopy( self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Resonator_scan' + self.msmt_suffix + label) + MC.run(name='Resonator_scan' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) self.hal_acq_spec_mode_off() @@ -2550,7 +2583,8 @@ def measure_resonator_power( MC: Optional[MeasurementControl] = None, analyze: bool = True, close_fig: bool = True, - label: str = '' + label: str = '', + disable_snapshot_metadata=False ): """ Measures the readout resonator with UHFQC as a function of the pulse power. @@ -2588,7 +2622,7 @@ def measure_resonator_power( MC.set_sweep_points_2D(powers) self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Resonator_power_scan' + self.msmt_suffix + label, mode='2D') + MC.run(name='Resonator_power_scan' + self.msmt_suffix + label, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) if analyze: ma.TwoD_Analysis(label='Resonator_power_scan', @@ -2609,8 +2643,8 @@ def measure_ssro( SNR_detector: bool = False, shots_per_meas: int = 2 ** 16, vary_residual_excitation: bool = True, - disable_metadata: bool = False, - label: str = '' + disable_snapshot_metadata: bool = False, + label: str = '', ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -2691,8 +2725,7 @@ def measure_ssro( d = self.int_log_det d.nr_shots = np.min([shots_per_meas, nr_shots]) MC.set_detector_function(d) - MC.run('SSRO_{}{}'.format(label, self.msmt_suffix), - disable_snapshot_metadata=disable_metadata) + MC.run('SSRO_{}{}'.format(label, self.msmt_suffix), disable_snapshot_metadata=disable_snapshot_metadata) # restore settings MC.live_plot_enabled(old_plot_setting) @@ -2761,8 +2794,9 @@ def measure_ssro_after_fluxing( SNR_detector: bool = False, shots_per_meas: int = 2**16, vary_residual_excitation: bool = True, - disable_metadata: bool = False, - label: str = '' + disable_snapshot_metadata: bool = False, + label: str = '', + disable_snapshot_metadata=False ): """ Performs a number of single shot measurements with qubit in ground and excited state @@ -2841,8 +2875,7 @@ def measure_ssro_after_fluxing( d.nr_shots = np.min([shots_per_meas, nr_shots]) MC.set_detector_function(d) - MC.run('SSRO_{}{}'.format(label, self.msmt_suffix), - disable_snapshot_metadata=disable_metadata) + MC.run('SSRO_{}{}'.format(label, self.msmt_suffix), disable_snapshot_metadata=disable_snapshot_metadata) MC.live_plot_enabled(old_plot_setting) ###################################################################### @@ -2902,7 +2935,8 @@ def measure_spectroscopy( analyze=True, close_fig=True, label='', - prepare_for_continuous_wave=True + prepare_for_continuous_wave=True, + disable_snapshot_metadata=False ): """ Performs a two-tone spectroscopy experiment where one tone is kept @@ -2931,21 +2965,24 @@ def measure_spectroscopy( freqs=freqs, MC=MC, analyze=analyze, close_fig=close_fig, label=label, - prepare_for_continuous_wave=prepare_for_continuous_wave + prepare_for_continuous_wave=prepare_for_continuous_wave, + disable_snapshot_metadata=disable_snapshot_metadata ) elif mode == 'pulsed_marked': self._measure_spectroscopy_pulsed_marked( freqs=freqs, MC=MC, analyze=analyze, close_fig=close_fig, label=label, - prepare_for_continuous_wave=prepare_for_continuous_wave + prepare_for_continuous_wave=prepare_for_continuous_wave, + disable_snapshot_metadata=disable_snapshot_metadata ) elif mode == 'pulsed_mixer': self._measure_spectroscopy_pulsed_mixer( freqs=freqs, MC=MC, analyze=analyze, close_fig=close_fig, label=label, - prepare_for_timedomain=prepare_for_continuous_wave + prepare_for_timedomain=prepare_for_continuous_wave, + disable_snapshot_metadata=disable_snapshot_metadata ) else: logging.error(f'Mode {mode} not recognized. Available modes: "CW", "pulsed_marked", "pulsed_mixer"') @@ -2959,8 +2996,9 @@ def measure_transients( depletion_analysis: bool = True, depletion_analysis_plot: bool = True, depletion_optimization_window=None, - disable_metadata: bool = False, - plot_max_time=None + disable_snapshot_metadata: bool = False, + plot_max_time=None, + disable_snapshot_metadata=False ): # docstring from parent class if MC is None: @@ -3006,7 +3044,7 @@ def measure_transients( MC.set_detector_function(self.input_average_detector) data = MC.run( 'Measure_transients{}_{}'.format(self.msmt_suffix, i), - disable_snapshot_metadata=disable_metadata) + disable_snapshot_metadata=disable_snapshot_metadata) dset = data['dset'] transients.append(dset.T[1:]) if analyze: @@ -3029,7 +3067,8 @@ def measure_rabi( close_fig=True, real_imag=True, prepare_for_timedomain=True, - all_modules=False + all_modules=False, + disable_snapshot_metadata=False ): """ Perform a Rabi experiment in which amplitude of the MW pulse is sweeped @@ -3058,7 +3097,8 @@ def measure_rabi( close_fig, real_imag, prepare_for_timedomain, - all_modules + all_modules, + disable_snapshot_metadata ) else: self.measure_rabi_channel_amp( @@ -3067,7 +3107,8 @@ def measure_rabi( analyze, close_fig, real_imag, - prepare_for_timedomain + prepare_for_timedomain, + disable_snapshot_metadata ) def measure_rabi_vsm( @@ -3078,7 +3119,8 @@ def measure_rabi_vsm( close_fig=True, real_imag=True, prepare_for_timedomain=True, - all_modules=False + all_modules=False, + disable_snapshot_metadata=False ): """ Perform a Rabi experiment in which amplitude of the MW pulse is sweeped @@ -3128,7 +3170,7 @@ def measure_rabi_vsm( # real_imag is acutally not polar and as such works for opt weights self.int_avg_det_single._set_real_imag(real_imag) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='rabi_' + self.msmt_suffix) + MC.run(name='rabi_' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) ma.Rabi_Analysis(label='rabi_') return True @@ -3139,7 +3181,8 @@ def measure_rabi_channel_amp( analyze=True, close_fig=True, real_imag=True, - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ): """ Perform a Rabi experiment in which amplitude of the MW pulse is sweeped @@ -3171,7 +3214,7 @@ def measure_rabi_channel_amp( # real_imag is actually not polar and as such works for opt weights self.int_avg_det_single._set_real_imag(real_imag) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='rabi_' + self.msmt_suffix) + MC.run(name='rabi_' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) ma.Rabi_Analysis(label='rabi_') return True @@ -3181,7 +3224,8 @@ def measure_rabi_channel_amp_ramzz_measurement(self, meas_qubit, amps=np.linspace(0, 1, 31), analyze=True, close_fig=True, real_imag=True, - prepare_for_timedomain=True): + prepare_for_timedomain=True, + disable_snapshot_metadata=False): """ Perform a Rabi experiment in which amplitude of the MW pulse is sweeped while the drive frequency and pulse duration is kept fixed @@ -3218,14 +3262,15 @@ def measure_rabi_channel_amp_ramzz_measurement(self, meas_qubit, # real_imag is acutally not polar and as such works for opt weights self.int_avg_det_single._set_real_imag(real_imag) MC.set_detector_function(self.int_avg_det_single) - MC.run(name='rabi_'+self.name+'_ramzz_'+meas_qubit.name) + MC.run(name='rabi_'+self.name+'_ramzz_'+meas_qubit.name, disable_snapshot_metadata=disable_snapshot_metadata) ma.Rabi_Analysis(label='rabi_') return True def measure_depletion_allxy(self, MC=None, analyze=True, close_fig=True, prepare_for_timedomain=True, - label=''): + label='', + disable_snapshot_metadata=False): if MC is None: MC = self.instr_MC.get_instr() if prepare_for_timedomain: @@ -3238,7 +3283,7 @@ def measure_depletion_allxy(self, MC=None, MC.set_sweep_function(s) MC.set_sweep_points(np.arange(21*2*3)) MC.set_detector_function(d) - MC.run('Depletion_AllXY'+self.msmt_suffix+label) + MC.run('Depletion_AllXY'+self.msmt_suffix+label, disable_snapshot_metadata=disable_snapshot_metadata) ma2.mra.Depletion_AllXY_analysis(self.name, label='Depletion') def measure_allxy( @@ -3247,7 +3292,8 @@ def measure_allxy( label: str = '', analyze=True, close_fig=True, - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ) -> float: if MC is None: MC = self.instr_MC.get_instr() @@ -3262,7 +3308,7 @@ def measure_allxy( MC.set_sweep_points(np.arange(42)) d = self.int_avg_det MC.set_detector_function(d) - MC.run('AllXY' + label + self.msmt_suffix) + MC.run('AllXY' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma.AllXY_Analysis(close_main_fig=close_fig) @@ -3275,7 +3321,9 @@ def allxy_GBT( # FIXME: prefix with "measure_" analyze=True, close_fig=True, prepare_for_timedomain=True, - termination_opt=0.02): + termination_opt=0.02, + disable_snapshot_metadata=False + ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -3301,7 +3349,7 @@ def allxy_GBT( # FIXME: prefix with "measure_" MC.set_sweep_points(np.arange(42)) d = self.int_avg_det MC.set_detector_function(d) - MC.run('AllXY' + label + self.msmt_suffix) + MC.run('AllXY' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) self.ro_soft_avg(old_avg) a = ma.AllXY_Analysis(close_main_fig=close_fig) @@ -3322,6 +3370,7 @@ def measure_T1( close_fig=True, analyze=True, MC: Optional[MeasurementControl] = None, + disable_snapshot_metadata=False ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -3386,7 +3435,7 @@ def measure_T1( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('T1' + self.msmt_suffix) + MC.run('T1' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma.T1_Analysis(auto=True, close_fig=True) @@ -3398,7 +3447,9 @@ def measure_T1_ramzz(self, meas_qubit, ramzz_wait_time, times=None, MC=None, analyze=True, close_fig=True, update=True, nr_flux_dance: float = None, - prepare_for_timedomain=True): + prepare_for_timedomain=True, + disable_snapshot_metadata=False + ): # docstring from parent class # N.B. this is a good example for a generic timedomain experiment using # the CCL transmon. @@ -3436,7 +3487,7 @@ def measure_T1_ramzz(self, meas_qubit, ramzz_wait_time, MC.set_sweep_function(s) MC.set_sweep_points(times) MC.set_detector_function(d) - MC.run('T1_' + self.name + '_ramzz_' + meas_qubit.name) + MC.run('T1_' + self.name + '_ramzz_' + meas_qubit.name, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma.T1_Analysis(auto=True, close_fig=True) if update: @@ -3448,7 +3499,9 @@ def measure_T1_2nd_excited_state( times=None, MC: Optional[MeasurementControl] = None, analyze=True, close_fig=True, update=True, - prepare_for_timedomain=True): + prepare_for_timedomain=True, + disable_snapshot_metadata=False + ): """ Performs a T1 experiment on the 2nd excited state. @@ -3484,7 +3537,7 @@ def measure_T1_2nd_excited_state( MC.set_sweep_points(p.sweep_points) d = self.int_avg_det MC.set_detector_function(d) - MC.run('T1_2nd_exc_state_' + self.msmt_suffix) + MC.run('T1_2nd_exc_state_' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) a = ma.T1_Analysis(auto=True, close_fig=True) return a.T1 @@ -3502,7 +3555,8 @@ def measure_ramsey( update=True, detector=False, double_fit=False, - test_beating=True + test_beating=True, + disable_snapshot_metadata=False ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -3561,7 +3615,7 @@ def measure_ramsey( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('Ramsey' + label + self.msmt_suffix) + MC.run('Ramsey' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) # Restore old frequency value self.instr_LO_mw.get_instr().set('frequency', old_frequency) @@ -3606,7 +3660,8 @@ def measure_ramsey_ramzz(self, meas_qubit, ramzz_wait_time, analyze=True, close_fig=True, update=True, detector=False, double_fit=False, - test_beating=True): + test_beating=True, + disable_snapshot_metadata=False): # docstring from parent class # N.B. this is a good example for a generic timedomain experiment using # the CCL transmon. @@ -3661,7 +3716,7 @@ def measure_ramsey_ramzz(self, meas_qubit, ramzz_wait_time, d = self.int_avg_det MC.set_detector_function(d) - MC.run('Ramsey'+label+self.msmt_suffix) + MC.run('Ramsey'+label+self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) # Restore old frequency value self.instr_LO_mw.get_instr().set('frequency', old_frequency) @@ -3704,7 +3759,8 @@ def measure_complex_ramsey( analyze=True, close_fig=True, update=True, detector=False, double_fit=False, - test_beating=True + test_beating=True, + disable_snapshot_metadata=False ): if MC is None: MC = self.instr_MC.get_instr() @@ -3749,7 +3805,7 @@ def measure_complex_ramsey( d = self.int_avg_det MC.set_detector_function(d) - MC.run('complex_Ramsey' + label + self.msmt_suffix) + MC.run('complex_Ramsey' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) self.ro_acq_weight_type(old_ro_type) if analyze: @@ -3791,7 +3847,8 @@ def measure_echo( close_fig=True, update=True, label: str = '', - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -3862,7 +3919,7 @@ def measure_echo( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('echo' + label + self.msmt_suffix) + MC.run('echo' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: # N.B. v1.5 analysis @@ -3875,7 +3932,8 @@ def measure_echo( def measure_echo_ramzz(self, measure_qubit, ramzz_wait_time, times=None, MC=None, analyze=True, close_fig=True, update=True, - label: str = '', prepare_for_timedomain=True): + label: str = '', prepare_for_timedomain=True, + disable_snapshot_metadata=False): # docstring from parent class # N.B. this is a good example for a generic timedomain experiment using # the CCL transmon. @@ -3931,7 +3989,7 @@ def measure_echo_ramzz(self, measure_qubit, ramzz_wait_time, MC.set_sweep_function(s) MC.set_sweep_points(times) MC.set_detector_function(d) - MC.run('echo_'+label+self.name+'_ramzz_'+meas_qubit.name) + MC.run('echo_'+label+self.name+'_ramzz_'+meas_qubit.name, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: # N.B. v1.5 analysis a = ma.Echo_analysis_V15(label='echo', auto=True, close_fig=True) @@ -3946,7 +4004,8 @@ def measure_restless_ramsey( time=None, amount_of_shots=2**20, MC: Optional[MeasurementControl] = None, - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ): label = f"Restless_Ramsey_N={amount_of_repetitions}_tau={time}" @@ -3976,7 +4035,7 @@ def measure_restless_ramsey( d = self.int_log_det d.nr_shots = amount_of_shots # int(4094/nr_repetitions) * nr_repetitions MC.set_detector_function(d) - MC.run(label + self.msmt_suffix) + MC.run(label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) self.ro_acq_weight_type(old_weight_type) self.ro_acq_digitized(old_digitized) @@ -3991,7 +4050,9 @@ def measure_flipping( flip_ef=False, ax='x', angle='180', - label=''): + label='', + disable_snapshot_metadata=False + ): """ Measurement for fine-tuning of the pi and pi/2 pulse amplitudes. Executes sequence pi (repeated N-times) - pi/2 - measure @@ -4051,7 +4112,7 @@ def measure_flipping( MC.set_detector_function(d) if flip_ef: label = 'ef_rx12' - MC.run('flipping_'+ax+angle+label+self.msmt_suffix) + MC.run('flipping_'+ax+angle+label+self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma2.FlippingAnalysis( options_dict={'scan_label': 'flipping'}) @@ -4087,7 +4148,10 @@ def measure_flipping( return a - def flipping_GBT(self, nr_sequence: int = 7): # FIXME: prefix with "measure_" + def flipping_GBT(self, + nr_sequence: int = 7, + disable_snapshot_metadata=False + ): # FIXME: prefix with "measure_" # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs.py @@ -4098,7 +4162,7 @@ def flipping_GBT(self, nr_sequence: int = 7): # FIXME: prefix with "measure_" Later we can add a condition as a check. ''' for i in range(nr_sequence): - a = self.measure_flipping(update=True) + a = self.measure_flipping(update=True, disable_snapshot_metadata=disable_snapshot_metadata) scale_factor = a._get_scale_factor_line() if abs(1 - scale_factor) <= 0.0005: return True @@ -4111,7 +4175,8 @@ def measure_motzoi( prepare_for_timedomain: bool = True, MC: Optional[MeasurementControl] = None, analyze=True, - close_fig=True + close_fig=True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py (via calibrate_motzoi) """ @@ -4186,7 +4251,7 @@ def measure_motzoi( always_prepare=True ) MC.set_detector_function(d) - MC.run('Motzoi_XY' + self.msmt_suffix) + MC.run('Motzoi_XY' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: if self.ro_acq_weight_type() == 'optimal': @@ -4214,7 +4279,8 @@ def measure_photon_number_splitting( powers, MC: Optional[MeasurementControl] = None, analyze: bool = True, - close_fig: bool = True + close_fig: bool = True, + disable_snapshot_metadata=False ): """ Measures the CW qubit spectroscopy as a function of the RO pulse power @@ -4260,7 +4326,7 @@ def measure_photon_number_splitting( self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) label = 'Photon_number_splitting' - MC.run(name=label + self.msmt_suffix, mode='2D') + MC.run(name=label + self.msmt_suffix, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) spec_source.off() @@ -4276,7 +4342,8 @@ def measure_resonator_frequency_dac_scan( analyze: bool = True, close_fig: bool = True, fluxChan=None, - label='' + label='', + disable_snapshot_metadata=False ): """ Performs the resonator spectroscopy as a function of the current applied @@ -4339,7 +4406,7 @@ def measure_resonator_frequency_dac_scan( MC.set_sweep_points_2D(dac_values) self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Resonator_dac_scan' + self.msmt_suffix + label, mode='2D') + MC.run(name='Resonator_dac_scan' + self.msmt_suffix + label, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) if analyze: ma.TwoD_Analysis(label='Resonator_dac_scan', close_fig=close_fig) @@ -4355,7 +4422,8 @@ def measure_qubit_frequency_dac_scan( nested_resonator_calibration=False, nested_resonator_calibration_use_min=False, resonator_freqs=None, - trigger_idx=None + trigger_idx=None, + disable_snapshot_metadata=False ): """ Performs the qubit spectroscopy while changing the current applied @@ -4462,7 +4530,7 @@ def measure_qubit_frequency_dac_scan( self.int_avg_det_single._set_real_imag(False) # FIXME: changes state self.int_avg_det_single.always_prepare = True MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Qubit_dac_scan' + self.msmt_suffix, mode='2D') + MC.run(name='Qubit_dac_scan' + self.msmt_suffix, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) if analyze: return ma.TwoD_Analysis( @@ -4477,7 +4545,8 @@ def _measure_spectroscopy_CW( analyze=True, close_fig=True, label='', - prepare_for_continuous_wave=True): + prepare_for_continuous_wave=True, + disable_snapshot_metadata=False): """ Does a CW spectroscopy experiment by sweeping the frequency of a microwave source. @@ -4523,7 +4592,7 @@ def _measure_spectroscopy_CW( else: self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='CW_spectroscopy' + self.msmt_suffix + label) + MC.run(name='CW_spectroscopy' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) self.hal_acq_spec_mode_off() @@ -4538,7 +4607,8 @@ def _measure_spectroscopy_pulsed_marked( close_fig=True, label='', prepare_for_continuous_wave=True, - trigger_idx=None + trigger_idx=None, + disable_snapshot_metadata=False ): """ Performs a spectroscopy experiment by triggering the spectroscopy source @@ -4582,7 +4652,7 @@ def _measure_spectroscopy_pulsed_marked( else: self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='pulsed_marker_spectroscopy' + self.msmt_suffix + label) + MC.run(name='pulsed_marker_spectroscopy' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) self.hal_acq_spec_mode_off() @@ -4600,7 +4670,8 @@ def _measure_spectroscopy_pulsed_mixer( analyze=True, close_fig=True, label='', - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ): """ Performs pulsed spectroscopy by modulating a cw pulse with a square @@ -4660,7 +4731,7 @@ def _measure_spectroscopy_pulsed_mixer( # d = self.int_avg_det # MC.set_detector_function(d) - MC.run(name='pulsed_mixer_spectroscopy' + self.msmt_suffix + label) + MC.run(name='pulsed_mixer_spectroscopy' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) self.mw_channel_amp(old_channel_amp) @@ -4682,7 +4753,8 @@ def measure_anharmonicity( MC: Optional[MeasurementControl] = None, spec_source_2=None, mode='pulsed_marked', - step_size: int = 1e6 + step_size: int = 1e6, + disable_snapshot_metadata=False ): """ Measures the qubit spectroscopy as a function of frequency of the two @@ -4790,7 +4862,8 @@ def measure_anharmonicity_GBT( f_12_power=None, MC: Optional[MeasurementControl] = None, spec_source_2=None, - mode='pulsed_marked' + mode='pulsed_marked', + disable_snapshot_metadata=False ): """ Measures the qubit spectroscopy as a function of frequency of the two @@ -4898,7 +4971,8 @@ def measure_photon_nr_splitting_from_bus( freqs_01=None, powers=np.arange(-10, 10, 1), MC: Optional[MeasurementControl] = None, - spec_source_2=None + spec_source_2=None, + disable_snapshot_metadata=False ): """ Measures photon splitting of the qubit due to photons in the bus resonators. @@ -4960,7 +5034,8 @@ def measure_photon_nr_splitting_from_bus( def measure_ssro_vs_frequency_amplitude( self, freqs=None, amps_rel=np.linspace(0, 1, 11), nr_shots=4092 * 4, nested_MC: Optional[MeasurementControl] = None, analyze=True, - use_optimal_weights=False, label='SSRO_freq_amp_sweep'): + use_optimal_weights=False, label='SSRO_freq_amp_sweep', + disable_snapshot_metadata=False): """ Measures SNR and readout fidelities as a function of the readout pulse amplitude and frequency. Resonator depletion pulses are automatically scaled. @@ -5008,7 +5083,8 @@ def measure_ssro_vs_TWPA_frequency_power( powers, nr_shots=4092 * 4, nested_MC: Optional[MeasurementControl] = None, - analyze=True + analyze=True, + disable_snapshot_metadata=False ): """ Measures the SNR and readout fidelities as a function of the TWPA @@ -5046,7 +5122,7 @@ def measure_ssro_vs_TWPA_frequency_power( 'analyze': True, 'SNR_detector': True, 'cal_residual_excitation': True, 'prepare': False, - 'disable_metadata': True + 'disable_snapshot_metadata': True }, result_keys=['SNR', 'F_d', 'F_a'] ) @@ -5056,7 +5132,7 @@ def measure_ssro_vs_TWPA_frequency_power( nested_MC.set_sweep_function_2D(pump_source.power) nested_MC.set_sweep_points_2D(powers) label = 'SSRO_freq_amp_sweep' + self.msmt_suffix - nested_MC.run(label, mode='2D') + nested_MC.run(label, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) self.cfg_prepare_ro_awg(old_ro_prepare_state) @@ -5069,7 +5145,8 @@ def measure_ssro_vs_pulse_length( nr_shots=4092 * 4, nested_MC: Optional[MeasurementControl] = None, analyze=True, - label_suffix: str = '' + label_suffix: str = '', + disable_snapshot_metadata=False ): """ Measures the SNR and readout fidelities as a function of the duration @@ -5109,7 +5186,7 @@ def measure_ssro_vs_pulse_length( nested_MC.set_sweep_points(lengths) nested_MC.set_detector_function(d) label = 'SSRO_length_sweep' + self.msmt_suffix + label_suffix - nested_MC.run(label) + nested_MC.run(label, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: ma.MeasurementAnalysis(label=label, plot_all=False, auto=True) @@ -5122,7 +5199,8 @@ def measure_transients_CCL_switched( prepare: bool = True, depletion_analysis: bool = True, depletion_analysis_plot: bool = True, - depletion_optimization_window=None + depletion_optimization_window=None, + disable_snapshot_metadata=False ): if MC is None: MC = self.instr_MC.get_instr() @@ -5155,7 +5233,7 @@ def measure_transients_CCL_switched( MC.set_sweep_points(np.arange(self.input_average_detector.nr_samples) / sampling_rate) MC.set_detector_function(self.input_average_detector) - data = MC.run('Measure_transients{}_{}'.format(self.msmt_suffix, i)) + data = MC.run('Measure_transients{}_{}'.format(self.msmt_suffix, i), disable_snapshot_metadata=disable_snapshot_metadata) dset = data['dset'] transients.append(dset.T[1:]) if analyze: @@ -5174,13 +5252,14 @@ def measure_RO_QND( self, prepare_for_timedomain: bool = False, calibrate_optimal_weights: bool = False, + disable_snapshot_metadata=False ): # ensure readout settings are correct old_ro_type = self.ro_acq_weight_type() old_acq_type = self.ro_acq_digitized() if calibrate_optimal_weights: - self.calibrate_optimal_weights(prepare=False) + self.calibrate_optimal_weights(prepare=False, disable_snapshot_metadata=disable_snapshot_metadata) self.ro_acq_digitized(False) self.ro_acq_weight_type('optimal IQ') @@ -5205,7 +5284,7 @@ def measure_RO_QND( MC.set_sweep_function(s) MC.set_sweep_points(np.arange(int(uhfqc_max_avg/5)*5)) MC.set_detector_function(d) - MC.run(f"RO_QND_measurement_{self.name}") + MC.run(f"RO_QND_measurement_{self.name}", disable_snapshot_metadata=disable_snapshot_metadata) self.ro_acq_weight_type(old_ro_type) self.ro_acq_digitized(old_acq_type) @@ -5215,27 +5294,29 @@ def measure_RO_QND( def calibrate_RO_QND( self, amps: list, - calibrate_optimal_weights: bool = False + calibrate_optimal_weights: bool = False, + disable_snapshot_metadata=False ): s = self.ro_pulse_amp d = det.Function_Detector(self.measure_RO_QND, result_keys=['P_QND', 'P_QNDp'], value_names=['P_QND', 'P_QNDp'], value_units=['a.u.', 'a.u.'], - msmt_kw={'calibrate_optimal_weights': calibrate_optimal_weights} + msmt_kw={'calibrate_optimal_weights': calibrate_optimal_weights, 'disable_snapshot_metadata': disable_snapshot_metadata} ) nested_MC = self.instr_nested_MC.get_instr() nested_MC.set_detector_function(d) nested_MC.set_sweep_function(s) nested_MC.set_sweep_points(amps) - nested_MC.run(f"RO_QND_sweep_{self.name}") + nested_MC.run(f"RO_QND_sweep_{self.name}", disable_snapshot_metadata=disable_snapshot_metadata) def measure_dispersive_shift_pulsed( self, freqs=None, MC: Optional[MeasurementControl] = None, analyze: bool = True, prepare: bool = True, - Pulse_comb: list=['off', 'on'] + Pulse_comb: list=['off', 'on'], + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -5286,7 +5367,7 @@ def measure_dispersive_shift_pulsed( self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Resonator_scan_' + pulse_comb + self.msmt_suffix) + MC.run(name='Resonator_scan_' + pulse_comb + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: ma.MeasurementAnalysis() @@ -5315,7 +5396,8 @@ def measure_error_fraction( prepare: bool = True, feedback=False, depletion_time=None, - net_gate='pi' + net_gate='pi', + disable_snapshot_metadata=False ): """ This performs a multi round experiment, the repetition rate is defined @@ -5368,7 +5450,7 @@ def measure_error_fraction( depletion_time, self.ro_pulse_type(), feedback, net_gate) MC.run( 'RTE_{}_{}'.format(self.msmt_suffix, suffix), - exp_metadata=exp_metadata + exp_metadata=exp_metadata, disable_snapshot_metadata=disable_snapshot_metadata ) # restore parameters @@ -5397,7 +5479,8 @@ def measure_msmt_induced_dephasing( cross_target_qubits: list = None, multi_qubit_platf_cfg=None, target_qubit_excited=False, - extra_echo=False + extra_echo=False, + disable_snapshot_metadata=False ): # Refs: # Schuster PRL 94, 123602 (2005) @@ -5471,7 +5554,7 @@ def measure_msmt_induced_dephasing( MC.set_sweep_points(angles) d = self.int_avg_det MC.set_detector_function(d) - MC.run(sequence + label + self.msmt_suffix) + MC.run(sequence + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma.Ramsey_Analysis( @@ -5505,7 +5588,8 @@ def measure_CPMG( close_fig=True, update=False, label: str = '', - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ): if MC is None: MC = self.instr_MC.get_instr() @@ -5595,7 +5679,7 @@ def measure_CPMG( msmt_title = 'CPMG_order_' + str(orders) + label + self.msmt_suffix elif sweep == 'order': msmt_title = 'CPMG_tauN_' + str(times) + label + self.msmt_suffix - MC.run(msmt_title) + MC.run(msmt_title, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: # N.B. v1.5 analysis @@ -5619,7 +5703,8 @@ def measure_spin_locking_simple( label: str = '', prepare_for_timedomain=True, tomo=False, - mw_gate_duration: float = 40e-9 + mw_gate_duration: float = 40e-9, + disable_snapshot_metadata=False ): if MC is None: MC = self.instr_MC.get_instr() @@ -5679,7 +5764,7 @@ def measure_spin_locking_simple( MC.set_sweep_function(s) MC.set_sweep_points(times) MC.set_detector_function(d) - MC.run('spin_lock_simple' + label + self.msmt_suffix) + MC.run('spin_lock_simple' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma.T1_Analysis(label='spin_lock_simple', auto=True, close_fig=True) @@ -5694,7 +5779,8 @@ def measure_spin_locking_echo( close_fig=True, update=True, label: str = '', - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ): if MC is None: MC = self.instr_MC.get_instr() @@ -5743,7 +5829,7 @@ def measure_spin_locking_echo( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('spin_lock_echo' + label + self.msmt_suffix) + MC.run('spin_lock_echo' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma.T1_Analysis(label='spin_lock_echo', auto=True, close_fig=True) @@ -5760,7 +5846,8 @@ def measure_rabi_frequency( label: str = '', prepare_for_timedomain=True, tomo=False, - mw_gate_duration: float = 40e-9 + mw_gate_duration: float = 40e-9, + disable_snapshot_metadata=False ): if MC is None: MC = self.instr_MC.get_instr() @@ -5824,7 +5911,7 @@ def measure_rabi_frequency( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('rabi_frequency' + label + self.msmt_suffix) + MC.run('rabi_frequency' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma.Echo_analysis_V15(label='rabi_frequency', auto=True, close_fig=True) @@ -5840,7 +5927,8 @@ def measure_single_qubit_randomized_benchmarking( prepare_for_timedomain: bool = True, ignore_f_cal_pts: bool = False, compile_only: bool = False, - rb_tasks=None + rb_tasks=None, + disable_snapshot_metadata=False ): # USED_BY: inspire_dependency_graph.py, """ @@ -5960,7 +6048,7 @@ def send_rb_tasks(pool_): d.prepare_function_kwargs = prepare_function_kwargs d.nr_shots = reps_per_seed * len(sweep_points) MC.set_detector_function(d) - MC.run('RB_{}seeds'.format(nr_seeds) + self.msmt_suffix, exp_metadata={'bins': sweep_points}) + MC.run('RB_{}seeds'.format(nr_seeds) + self.msmt_suffix, exp_metadata={'bins': sweep_points}, disable_snapshot_metadata=disable_snapshot_metadata) a = ma2.RandomizedBenchmarking_SingleQubit_Analysis( label='RB_', @@ -5985,7 +6073,8 @@ def measure_randomized_benchmarking_old( close_fig=True, verbose: bool = True, upload=True, - update=True + update=True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs_v2.py, @@ -6034,7 +6123,7 @@ def measure_randomized_benchmarking_old( d.prepare_function_kwargs = prepare_function_kwargs d.nr_averages = 128 MC.set_detector_function(d) - MC.run('RB_{}seeds'.format(nr_seeds) + self.msmt_suffix) + MC.run('RB_{}seeds'.format(nr_seeds) + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if double_curves: a = ma.RB_double_curve_Analysis( @@ -6060,7 +6149,8 @@ def measure_ef_rabi_2D( label: str = '', analyze=True, close_fig=True, - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ): """ Measures a rabi oscillation of the ef/12 transition. @@ -6096,7 +6186,7 @@ def measure_ef_rabi_2D( MC.set_sweep_points_2D(anharmonicity) d = self.int_avg_det MC.set_detector_function(d) - MC.run('ef_rabi_2D' + label + self.msmt_suffix, mode='2D') + MC.run('ef_rabi_2D' + label + self.msmt_suffix, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a = ma.TwoD_Analysis() @@ -6111,7 +6201,8 @@ def measure_ef_rabi( label: str = '', analyze=True, close_fig=True, - prepare_for_timedomain=True + prepare_for_timedomain=True, + disable_snapshot_metadata=False ): """ Measures a rabi oscillation of the ef/12 transition. @@ -6146,7 +6237,7 @@ def measure_ef_rabi( MC.set_sweep_points(p.sweep_points) d = self.int_avg_det MC.set_detector_function(d) - MC.run('ef_rabi' + label + self.msmt_suffix) + MC.run('ef_rabi' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) if analyze: a2 = ma2.EFRabiAnalysis(close_figs=True, label='ef_rabi') @@ -6162,7 +6253,8 @@ def measure_gst_1Q( maxL: int = 256, MC: Optional[MeasurementControl] = None, recompile='as needed', - prepare_for_timedomain: bool = True + prepare_for_timedomain: bool = True, + disable_snapshot_metadata=False ): """ Performs single qubit Gate Set Tomography experiment of the StdXYI gateset. @@ -6237,7 +6329,7 @@ def measure_gst_1Q( MC.set_sweep_function(s) MC.set_sweep_points(shots) MC.set_detector_function(d) - MC.run('Single_qubit_GST_L{}_{}'.format(maxL, self.msmt_suffix), + MC.run('Single_qubit_GST_L{}_{}'.format(maxL, self.msmt_suffix), disable_snapshot_metadata=disable_snapshot_metadata, exp_metadata={'bins': sweep_points, 'gst_exp_list_filename': exp_list_fn}) a = ma2.GST_SingleQubit_DataExtraction(label='Single_qubit_GST') @@ -6250,7 +6342,8 @@ def measure_flux_arc_tracked_spectroscopy( polycoeffs=None, MC: Optional[MeasurementControl] = None, nested_MC: Optional[MeasurementControl] = None, - fluxChan=None + fluxChan=None, + disable_snapshot_metadata=False ): """ Creates a qubit DAC arc by fitting a polynomial function through qubit @@ -6327,7 +6420,7 @@ def measure_flux_arc_tracked_spectroscopy( MC.set_sweep_function(dac_par) MC.set_sweep_points(dac_values) MC.set_detector_function(d) - MC.run(name='Tracked_Spectroscopy') + MC.run(name='Tracked_Spectroscopy', disable_snapshot_metadata=disable_snapshot_metadata) def measure_msmt_induced_dephasing_sweeping_amps( @@ -6340,7 +6433,8 @@ def measure_msmt_induced_dephasing_sweeping_amps( verbose: bool = True, sequence='ramsey', target_qubit_excited=False, - extra_echo=False + extra_echo=False, + disable_snapshot_metadata=False ): if nested_MC is None: nested_MC = self.instr_nested_MC.get_instr() @@ -6428,7 +6522,7 @@ def measure_msmt_induced_dephasing_sweeping_amps( nested_MC.set_detector_function(d) label = 'ro_amp_sweep_dephasing' + self.msmt_suffix - nested_MC.run(label) + nested_MC.run(label, disable_snapshot_metadata=disable_snapshot_metadata) # Restore qubit objects parameters to previous settings self.ro_pulse_type(old_waveform_name) @@ -6446,7 +6540,8 @@ def measure_SNR_sweeping_amps( amps_rel, nr_shots=2 * 4094, nested_MC: Optional[MeasurementControl] = None, - analyze=True + analyze=True, + disable_snapshot_metadata=False ): """ Measures SNR and readout fidelities as a function of the readout pulse @@ -6495,7 +6590,7 @@ def measure_SNR_sweeping_amps( nested_MC.set_sweep_points(amps_rel) nested_MC.set_detector_function(d) label = 'ro_amp_sweep_SNR' + self.msmt_suffix - nested_MC.run(label) + nested_MC.run(label, disable_snapshot_metadata=disable_snapshot_metadata) # restore parameters self.cfg_prepare_ro_awg(old_ro_prepare_state) @@ -6510,7 +6605,8 @@ def measure_quantum_efficiency( nr_shots=2 * 4094, analyze=True, verbose=True, - dephasing_sequence='ramsey' + dephasing_sequence='ramsey', + disable_snapshot_metadata=False ): # requires the cc light to have the readout time configured equal # to the measurement and depletion time + 60 ns buffer @@ -6523,7 +6619,8 @@ def measure_quantum_efficiency( self.measure_msmt_induced_dephasing_sweeping_amps( amps_rel=amps_rel, analyze=False, - sequence=dephasing_sequence + sequence=dephasing_sequence, + disable_snapshot_metadata=disable_snapshot_metadata ) readout_pulse_length = self.ro_pulse_length() readout_pulse_length += self.ro_pulse_down_length0() @@ -6539,11 +6636,13 @@ def measure_quantum_efficiency( cal_residual_excitation=True, SNR_detector=True, nr_shots=nr_shots, - update_threshold=False + update_threshold=False, + disable_snapshot_metadata=disable_snapshot_metadata ) self.measure_SNR_sweeping_amps( amps_rel=amps_rel, - analyze=False + analyze=False, + disable_snapshot_metadata=disable_snapshot_metadata ) end_time = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") @@ -6589,7 +6688,8 @@ def bus_frequency_flux_sweep( close_fig=True, analyze=True, MC: Optional[MeasurementControl] = None, - prepare_for_continuous_wave=True + prepare_for_continuous_wave=True, + disable_snapshot_metadata=False ): """ Drive the qubit and sit at the spectroscopy peak while the bus is driven with @@ -6669,7 +6769,7 @@ def bus_frequency_flux_sweep( else: self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Bus_flux_sweep_' + self.msmt_suffix + label, mode='2D') + MC.run(name='Bus_flux_sweep_' + self.msmt_suffix + label, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) spec_source_bus.off() # FIXME: spec_source not touched @@ -6679,7 +6779,8 @@ def bus_frequency_flux_sweep( ma.TwoD_Analysis(label=self.msmt_suffix, close_fig=close_fig) - def check_qubit_spectroscopy(self, freqs=None, MC=None): + def check_qubit_spectroscopy(self, freqs=None, MC=None, + disable_snapshot_metadata=False): """ Check the qubit frequency with spectroscopy of 15 points. @@ -6697,7 +6798,8 @@ def check_qubit_spectroscopy(self, freqs=None, MC=None): freqs = np.linspace(freq_center - freq_span / 2, freq_center + freq_span / 2, 15) - self.measure_spectroscopy(MC=MC, freqs=freqs) + self.measure_spectroscopy(MC=MC, freqs=freqs, + disable_snapshot_metadata=disable_snapshot_metadata) label = 'spec' a = ma.Qubit_Spectroscopy_Analysis( @@ -6715,7 +6817,8 @@ def check_qubit_spectroscopy(self, freqs=None, MC=None): return result - def check_rabi(self, MC: Optional[MeasurementControl] = None, amps=None): + def check_rabi(self, MC: Optional[MeasurementControl] = None, amps=None, + disable_snapshot_metadata=False): """ Takes 5 equidistantly space points: 3 before channel amp, one at channel amp and one after. Compares them with the expected Rabi curve @@ -6724,12 +6827,14 @@ def check_rabi(self, MC: Optional[MeasurementControl] = None, amps=None): if amps is None: amps = np.linspace(0, 4 / 3 * self.mw_channel_amp(), 5) - amp = self.measure_rabi(MC=MC, amps=amps, analyze=False) + amp = self.measure_rabi(MC=MC, amps=amps, analyze=False, + disable_snapshot_metadata=disable_snapshot_metadata) old_amp = self.mw_channel_amp() return np.abs(amp - old_amp) - def check_ramsey(self, MC: Optional[MeasurementControl] = None, times=None, artificial_detuning=None): + def check_ramsey(self, MC: Optional[MeasurementControl] = None, times=None, artificial_detuning=None, + disable_snapshot_metadata=False): # USED_BY: device_dependency_graphs.py if artificial_detuning is None: @@ -6739,7 +6844,8 @@ def check_ramsey(self, MC: Optional[MeasurementControl] = None, times=None, arti times = np.linspace(0, 0.5 / artificial_detuning, 6) a = self.measure_ramsey(times=times, MC=MC, - artificial_detuning=artificial_detuning) + artificial_detuning=artificial_detuning, + disable_snapshot_metadata=disable_snapshot_metadata) freq = a['frequency'] check_result = (freq - self.freq_qubit()) / freq return check_result @@ -6750,7 +6856,8 @@ def create_ssro_detector( calibrate_optimal_weights: bool = False, prepare_function=None, prepare_function_kwargs: dict = None, - ssro_kwargs: dict = None + ssro_kwargs: dict = None, + disable_snapshot_metadata=False ): """ Wraps measure_ssro using the Function Detector. @@ -6763,7 +6870,7 @@ def create_ssro_detector( 'nr_shots_per_case': 8192, 'analyze': True, 'prepare': False, - 'disable_metadata': True + 'disable_snapshot_metadata': True } if not calibrate_optimal_weights: diff --git a/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py b/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py index 969f717305..a80875ae0d 100644 --- a/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py +++ b/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py @@ -553,7 +553,8 @@ def find_resonators( timeout=200, f_step=1e6, with_VNA=None, - verbose=True + verbose=True, + disable_snapshot_metadata=disable_snapshot_metadata ): # USED_BY: device_dependency_graphs.py, """ @@ -581,7 +582,7 @@ def find_resonators( raise NotImplementedError else: freqs = np.arange(start_freq, stop_freq + f_step, f_step) - self.measure_heterodyne_spectroscopy(freqs=freqs, analyze=False) + self.measure_heterodyne_spectroscopy(freqs=freqs, analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) result = ma2.sa.Initial_Resonator_Scan_Analysis() # Create resonator list @@ -1212,7 +1213,8 @@ def find_frequency( update=True, close_fig=True, MC=None, - label='' + label='', + disable_snapshot_metadata=disable_snapshot_metadata ): # USED_BY: device_dependency_graphs.py """ @@ -1268,7 +1270,7 @@ def find_frequency( # args here should be handed down from the top. self.measure_spectroscopy(freqs, mode=spec_mode, MC=MC, analyze=False, label = label, - close_fig=close_fig) + close_fig=close_fig, disable_snapshot_metadata=disable_snapshot_metadata) label = 'spec' analysis_spec = ma.Qubit_Spectroscopy_Analysis( @@ -1304,7 +1306,7 @@ def find_frequency( return self.calibrate_frequency_ramsey( steps=steps, artificial_periods=artificial_periods, verbose=verbose, update=update, - close_fig=close_fig) + close_fig=close_fig, disable_snapshot_metadata=disable_snapshot_metadata) return analysis_spec.fitted_freq def calibrate_spec_pow( @@ -1313,7 +1315,7 @@ def calibrate_spec_pow( start_power=-55, power_step=5, threshold=0.5, - verbose=True + verbose=True, disable_snapshot_metadata=disable_snapshot_metadata ): # USED_BY: device_dependency_graphs.py """ @@ -1333,7 +1335,7 @@ def calibrate_spec_pow( while w < (1 + threshold) * w0: self.spec_pow(power) self.measure_spectroscopy(freqs=freqs, analyze=False, - label='spec_pow_' + str(power) + '_dBm') + label='spec_pow_' + str(power) + '_dBm', disable_snapshot_metadata=disable_snapshot_metadata) a = ma.Qubit_Spectroscopy_Analysis(label=self.msmt_suffix, qb_name=self.name) @@ -1395,7 +1397,8 @@ def calibrate_frequency_ramsey( verbose: bool = True, update: bool = True, close_fig: bool = True, - test_beating: bool = True + test_beating: bool = True, + disable_snapshot_metadata=disable_snapshot_metadata ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -1427,7 +1430,8 @@ def calibrate_frequency_ramsey( freq_qubit=cur_freq, label='_{}pulse_sep'.format(n), analyze=False, - prepare_for_timedomain=True if 0 == i else False) + prepare_for_timedomain=True if 0 == i else False, + disable_snapshot_metadata=disable_snapshot_metadata) a = ma.Ramsey_Analysis(auto=True, close_fig=close_fig, freq_qubit=cur_freq, artificial_detuning=artificial_detuning, From 827d7a970266d0b8f45d0f41080532470b9bb6f5 Mon Sep 17 00:00:00 2001 From: Santiago Valles Sanclemente Date: Mon, 11 Jul 2022 16:33:29 +0200 Subject: [PATCH 02/12] Corrected some bugs introduced in previous commit --- .../qubit_objects/qubit_object.py | 55 ++++++++++++------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py b/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py index a80875ae0d..59f9d78349 100644 --- a/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py +++ b/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py @@ -554,7 +554,7 @@ def find_resonators( f_step=1e6, with_VNA=None, verbose=True, - disable_snapshot_metadata=disable_snapshot_metadata + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py, """ @@ -675,7 +675,8 @@ def find_resonator_frequency_initial( update=True, with_VNA=None, resonators=None, - look_for_missing=True + look_for_missing=True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py, """ @@ -750,7 +751,7 @@ def find_resonator_frequency_initial( return True else: print('Scanning all found resonators') - new_res = self.measure_individual_resonators(with_VNA=with_VNA) + new_res = self.measure_individual_resonators(with_VNA=with_VNA, disable_snapshot_metadata=disable_snapshot_metadata) device.resonators = new_res return True @@ -805,7 +806,7 @@ def find_resonator_frequency_initial( # res.freq = a.fit_results.params['f0'].value*1e9 # return True - def find_test_resonators(self, with_VNA=None, resonators=None): + def find_test_resonators(self, with_VNA=None, resonators=None, disable_snapshot_metadata=False): # USED_BY: device_dependency_graphs.py, """ Does a power sweep over the resonators to see if they have a qubit @@ -853,7 +854,8 @@ def find_test_resonators(self, with_VNA=None, resonators=None): continue freqs = np.arange(freq - 8e6, freq + 4e6, f_step) self.measure_resonator_power(freqs=freqs, powers=powers, - analyze=False, label=label) + analyze=False, label=label, + disable_snapshot_metadata=disable_snapshot_metadata) fit_res = ma.Resonator_Powerscan_Analysis_test(label='Resonator_power_scan', close_fig=True, @@ -890,7 +892,7 @@ def find_test_resonators(self, with_VNA=None, resonators=None): return True @deprecated(version='0.4', reason="not used anywhere") - def find_test_resonators_test(self, with_VNA=None, resonators=None): + def find_test_resonators_test(self, with_VNA=None, resonators=None, disable_snapshot_metadata=False): """ Does a power sweep over the resonators to see if they have a qubit attached or not, and changes the state in the resonator object @@ -937,7 +939,8 @@ def find_test_resonators_test(self, with_VNA=None, resonators=None): continue freqs = np.arange(freq - 6e6, freq + 3e6, f_step) self.measure_resonator_power(freqs=freqs, powers=powers, - analyze=False, label=label) + analyze=False, label=label, + disable_snapshot_metadata=disable_snapshot_metadata) fit_res = ma.Resonator_Powerscan_Analysis_test(label='Resonator_power_scan', close_fig=True, @@ -1036,7 +1039,8 @@ def find_qubit_resonator_fluxline(self, with_VNA=None, dac_values=None, dac_values=dac_values, fluxChan=fluxline, analyze=False, - label=label) + label=label, + disable_snapshot_metadata=disable_snapshot_metadata) fluxcurrent[fluxline](0) str_freq, unit = plt_tools.SI_val_to_msg_str(res.freq, 'Hz', float) @@ -1096,7 +1100,8 @@ def find_qubit_resonator_fluxline(self, with_VNA=None, dac_values=None, @deprecated(version='0.4', reason="not used anywhere") def find_resonator_sweetspot(self, freqs=None, dac_values=None, - fluxChan=None, update=True): + fluxChan=None, update=True, + disable_snapshot_metadata=disable_snapshot_metadata): """ Finds the resonator sweetspot current. TODO: - measure all FBL-resonator combinations @@ -1124,7 +1129,8 @@ def find_resonator_sweetspot(self, freqs=None, dac_values=None, self.measure_resonator_frequency_dac_scan(freqs=freqs, dac_values=dac_values, fluxChan=fluxChan, - analyze=False) + analyze=False, + disable_snapshot_metadata=disable_snapshot_metadata) if update: import pycqed.analysis_v2.spectroscopy_analysis as sa @@ -1143,7 +1149,8 @@ def find_resonator_frequency( update=True, freqs=None, MC=None, - close_fig=True + close_fig=True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py, """ @@ -1181,7 +1188,7 @@ def find_resonator_frequency( f_span = 10e6 f_step = 100e3 freqs = np.arange(f_center-f_span/2, f_center+f_span/2, f_step) - self.measure_heterodyne_spectroscopy(freqs, MC, analyze=False) + self.measure_heterodyne_spectroscopy(freqs, MC, analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) a = ma.Homodyne_Analysis(label=self.msmt_suffix, close_fig=close_fig) if use_min: @@ -1214,7 +1221,7 @@ def find_frequency( close_fig=True, MC=None, label='', - disable_snapshot_metadata=disable_snapshot_metadata + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py """ @@ -1315,7 +1322,8 @@ def calibrate_spec_pow( start_power=-55, power_step=5, threshold=0.5, - verbose=True, disable_snapshot_metadata=disable_snapshot_metadata + verbose=True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py """ @@ -1360,7 +1368,8 @@ def calibrate_motzoi( self, MC=None, verbose=True, - update=True + update=True, + disable_snapshot_metadata=False ): # USED_BY: device_dependency_graphs.py @@ -1398,7 +1407,7 @@ def calibrate_frequency_ramsey( update: bool = True, close_fig: bool = True, test_beating: bool = True, - disable_snapshot_metadata=disable_snapshot_metadata + disable_snapshot_metadata=False ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -1523,7 +1532,8 @@ def calculate_frequency(self, calc_method=None, I_per_phi0=None, I=None): @deprecated(version='0.4', reason="not used anywhere") def tune_freq_to_sweetspot(self, freqs=None, dac_values=None, verbose=True, - fit_phase=False, use_dips=False): + fit_phase=False, use_dips=False, + disable_snapshot_metadata=False): """ Tunes the qubit to the sweetspot """ @@ -1626,7 +1636,8 @@ def tune_freq_to(self, initial_flux_step: float = None, max_repetitions=15, resonator_use_min=True, - find_res=None): + find_res=None, + disable_snapshot_metadata=False): """ Iteratively tune the qubit frequency to a specific target frequency """ @@ -1671,18 +1682,20 @@ def tune_freq_to(self, def measure_qubit_freq_nested(target_frequency, steps=0.2e6, spans=[100e6, 400e6, 800e6, 1200e6, 1500e6], + disable_snapshot_metadata=False **kw): # measure freq if find_res: freq_res = self.find_resonator_frequency( MC=nested_MC, - use_min=resonator_use_min) + use_min=resonator_use_min, + disable_snapshot_metadata=disable_snapshot_metadata) else: freq_res = self.freq_res() spec_succes = False for span in spans: - spec_succes = self.find_frequency(f_span=span, MC=nested_MC) + spec_succes = self.find_frequency(f_span=span, MC=nested_MC, disable_snapshot_metadata=disable_snapshot_metadata) if spec_succes: break @@ -1712,4 +1725,4 @@ def measure_qubit_freq_nested(target_frequency, steps=0.2e6, MC.set_sweep_function(fluxpar) MC.set_detector_function(qubit_freq_det) MC.set_adaptive_function_parameters(ad_func_pars) - MC.run('Tune_to_freq', mode='adaptive') + MC.run('Tune_to_freq', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) From e6b6dbc1fc9d4ca339ef32e001657dac25770e16 Mon Sep 17 00:00:00 2001 From: savalless Date: Wed, 20 Jul 2022 19:53:16 +0200 Subject: [PATCH 03/12] Added analysis for Residual ZZ coupling experiment, with Ramiro method --- pycqed/analysis_v2/resZZ_analysis.py | 239 +++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 pycqed/analysis_v2/resZZ_analysis.py diff --git a/pycqed/analysis_v2/resZZ_analysis.py b/pycqed/analysis_v2/resZZ_analysis.py new file mode 100644 index 0000000000..bd36d8bf9d --- /dev/null +++ b/pycqed/analysis_v2/resZZ_analysis.py @@ -0,0 +1,239 @@ +import os +import matplotlib.pylab as pl +import matplotlib.pyplot as plt +from matplotlib.colors import LinearSegmentedColormap +import numpy as np +import pycqed.analysis_v2.base_analysis as ba +from pycqed.analysis.analysis_toolbox import get_datafilepath_from_timestamp +from pycqed.analysis.tools.plotting import set_xlabel, set_ylabel, \ + cmap_to_alpha, cmap_first_to_alpha +import pycqed.measurement.hdf5_data as h5d +from pycqed.analysis import analysis_toolbox as a_tools +import pandas as pd +from scipy import linalg +import cmath as cm +from pycqed.analysis import fitting_models as fit_mods +import lmfit +from copy import deepcopy +from pycqed.analysis import analysis_toolbox as a_tools +from pycqed.analysis.tools.plotting import SI_prefix_and_scale_factor + + +class ResZZAnalysis(ba.BaseDataAnalysis): + def __init__( + self, + ts: str = None, + label: str = "Residual_ZZ_", + data_file_path: str = None, + options_dict: dict = None, + extract_only: bool = False, + close_figs=True, + do_fitting: bool = True, + auto=True, + artificial_detuning: float = None + ): + super().__init__(t_start=ts, t_stop=ts, + label=label, + data_file_path=data_file_path, + options_dict=options_dict, + close_figs=close_figs, + extract_only=extract_only, do_fitting=do_fitting) + + # if artificial_detuning is None: + # artificial_detuning = 0 + # self.artificial_detuning = artificial_detuning + self.get_timestamps() + for ts in self.timestamps: + self.timestamp = ts + if auto: + self.run_analysis() + + def extract_data(self): + """ + Extracts the data from the hdf5 file and saves it in a dictionary under the key "data". + The dictionary self.raw_data_dict also contains entries for the timestamp, folder and value names. + """ + + data_fp = get_datafilepath_from_timestamp(self.timestamp) + param_spec = {'data': ('Experimental Data/Data', 'dset'), + 'value_names': ('Experimental Data', 'attr:value_names')} + + self.raw_data_dict = h5d.extract_pars_from_datafile( + data_fp, param_spec) + + # Parts added to be compatible with base analysis data requirements + self.raw_data_dict['timestamps'] = self.timestamps + self.raw_data_dict['folder'] = os.path.split(data_fp)[0] + + self.raw_data_dict["sweep_points"] = self.raw_data_dict['data'][:, 0] + + def process_data(self): + """ + Use the calibration points to rotate and normalise the data for both qubits. + """ + self.proc_data_dict = {} + for i in np.arange(1, int((len(self.raw_data_dict['value_names'])+1)), 2): + qubit_name = self.raw_data_dict['value_names'][i-1][-4:-2].decode('ascii') + self.proc_data_dict[qubit_name] = {} + self.proc_data_dict[qubit_name]['qubit_type'] = 'control' if i == 1 else 'spec' + self.proc_data_dict[qubit_name]['times'] = self.raw_data_dict['data'][:, 0] + self.proc_data_dict[qubit_name]['data_I'] = self.raw_data_dict['data'][:,i] + self.proc_data_dict[qubit_name]['data_Q'] = self.raw_data_dict['data'][:, i + 1] + + cal_zero_points = slice(-4, -3) + cal_one_points = slice(-2, -1) + + self.proc_data_dict[qubit_name]['normalised_data'] = ma.a_tools.rotate_and_normalize_data( + [self.proc_data_dict[qubit_name]['data_I'], self.proc_data_dict[qubit_name]['data_Q']], cal_zero_points, + cal_one_points)[0] + + def prepare_fitting(self): + """ + Create initial guess for the fits + :return: + """ + for qubit_name in self.proc_data_dict.keys(): + if self.proc_data_dict[qubit_name]['qubit_type'] is not 'control': + continue + + ft_of_data = np.fft.fft(self.proc_data_dict[qubit_name]['normalised_data'][:-4]) + index_of_fourier_maximum = np.argmax(np.abs( + ft_of_data[1:len(ft_of_data) // 2])) + 1 + max_delay = self.proc_data_dict[qubit_name]['times'][:-4][-1] - self.proc_data_dict[qubit_name]['times'][:-4][0] + + fft_axis_scaling = 1 / max_delay + freq_est = fft_axis_scaling * index_of_fourier_maximum + + if (np.average(self.proc_data_dict[qubit_name]['normalised_data'][:4]) > + np.average(self.proc_data_dict[qubit_name]['normalised_data'][4:8])): + phase_estimate = np.pi / 2 + else: + phase_estimate = - np.pi / 2 + + guess_dict = {} + guess_dict['amplitude'] = {'value': max(self.proc_data_dict[qubit_name]['normalised_data'][:-4]), + 'min': 0, + 'max':1, + 'vary': True} + guess_dict['oscillation_offset'] = {'value': 0, + 'vary': False} + guess_dict['n'] = {'value': 1, + 'vary': False} + guess_dict['exponential_offset'] = {'value': 0.5, + 'min': 0.4, + 'max': 0.6, + 'vary': True} + guess_dict['phase'] = {'value': phase_estimate, + 'min': phase_estimate-np.pi/4, + 'max': phase_estimate+np.pi/4, + 'vary': True} + guess_dict['frequency'] = {'value': freq_est, + 'min': (1/(100 * self.proc_data_dict[qubit_name]['times'][:-4][-1])), + 'max': (20/self.proc_data_dict[qubit_name]['times'][:-4][-1]), + 'vary': True} + guess_dict['tau'] = {'value': self.proc_data_dict[qubit_name]['times'][1]*10, + 'min': self.proc_data_dict[qubit_name]['times'][1], + 'max': self.proc_data_dict[qubit_name]['times'][1]*1000, + 'vary': True} + + self.fit_dicts['Residual_ZZ_fit'] = { + 'fit_fn': fit_mods.ExpDampOscFunc, + 'guess_dict': guess_dict, + 'fit_xvals': {'t': self.proc_data_dict[qubit_name]['times'][:-4]}, + 'fit_yvals': {'data': self.proc_data_dict[qubit_name]['normalised_data'][:-4]}, + 'fitting_type':'minimize' + } + + def prepare_plots(self): + """ + Create plots + :return: + """ + + self.raw_data_dict["xlabel"] = r'Idling time before $\pi$ pulse' + self.raw_data_dict["ylabel"] = "Excited state population" + self.raw_data_dict["xunit"] = 'us' + + control_qubit = [q for q in self.proc_data_dict.keys() if self.proc_data_dict[q]['qubit_type'] == 'control'][0] + spec_qubits = [q for q in self.proc_data_dict.keys() if self.proc_data_dict[q]['qubit_type'] == 'spec'] + self.raw_data_dict["measurementstring"] = f'Residual ZZ\necho: {control_qubit}\nspectators: {spec_qubits}' + + for qubit_name in self.proc_data_dict.keys(): + + if qubit_name == control_qubit: + plot_name = f"Control_{qubit_name}" + else: + plot_name = f"Spectator_{qubit_name}" + self.plot_dicts[plot_name] = { + "plotfn": self.plot_line, + "xvals": self.raw_data_dict["sweep_points"], + "xlabel": self.raw_data_dict["xlabel"], + "xunit": self.raw_data_dict["xunit"], # does not do anything yet + "yvals": self.proc_data_dict[qubit_name]["normalised_data"], + "ylabel": self.raw_data_dict["ylabel"] + f' {qubit_name}', + "yunit": "", + "setlabel": "Measured data", + "title": ( + self.raw_data_dict["timestamps"][0] + + " " + + self.raw_data_dict["measurementstring"] + ), + "do_legend": True, + "legend_pos": "upper right", + } + + self.plot_dicts['osc_exp_fit'] = { + 'ax_id': f"Control_{control_qubit}", + 'plotfn': self.plot_fit, + 'fit_res': self.fit_dicts['Residual_ZZ_fit']['fit_res'], + 'setlabel': 'Oscillation with exponential decay fit', + 'do_legend': True, + 'legend_pos': 'best'} + + fit_res_params = self.fit_dicts['Residual_ZZ_fit']['fit_res'].params + scale_frequency, unit_frequency = SI_prefix_and_scale_factor(fit_res_params['frequency'].value, 'Hz') + plot_frequency = fit_res_params['frequency'].value * scale_frequency + scale_amplitude, unit_amplitude = SI_prefix_and_scale_factor(fit_res_params['amplitude'].value) + plot_amplitude = fit_res_params['amplitude'].value * scale_amplitude + scale_tau, unit_tau = SI_prefix_and_scale_factor(fit_res_params['tau'].value, 's') + plot_tau = fit_res_params['tau'].value * scale_tau + scale_offset, unit_offset = SI_prefix_and_scale_factor(fit_res_params['exponential_offset'].value) + plot_offset = fit_res_params['exponential_offset'].value * scale_offset + scale_phase, unit_phase = SI_prefix_and_scale_factor(fit_res_params['phase'].value, 'rad') + plot_phase = fit_res_params['phase'].value * scale_phase + + if plot_phase >= 0: + self.resZZ = plot_frequency + else: + self.resZZ = -1*plot_frequency + + self.plot_dicts['ResZZ_box'] = { + 'ax_id': f"Control_{control_qubit}", + 'ypos': .7, + 'xpos': 1.04, + 'plotfn': self.plot_text, + 'dpi': 200, + 'box_props': 'fancy', + 'horizontalalignment': 'left', + # 'text_string': 'Chi = ' + str(self.fit_dicts['ExpGaussDecayCos']['fit_res'].chisqr), + 'text_string': 'Residual ZZ coupling = %.2f ' % (self.resZZ) + unit_frequency + } + + self.plot_dicts['Parameters'] = { + 'ax_id': f"Control_{control_qubit}", + 'ypos': .5, + 'xpos': 1.04, + 'plotfn': self.plot_text, + 'dpi': 200, + 'box_props': 'fancy', + 'horizontalalignment': 'left', + # 'text_string': 'Chi = ' + str(self.fit_dicts['ExpGaussDecayCos']['fit_res'].chisqr), + 'text_string': 'Fit results:' + '\n' + '\n' + + 'f = %.2f ' % (plot_frequency) + unit_frequency + '\n' + + '$\mathrm{\chi}^2$ = %.3f' % (self.fit_dicts['Residual_ZZ_fit']['fit_res'].chisqr) + '\n' + + '$\mathrm{T}$ = %.2f ' % (plot_tau) + unit_tau + '\n' + + 'A = %.2f ' % (plot_amplitude) + unit_amplitude + '\n' + + 'Offset = %.2f ' % (plot_offset) + unit_offset + '\n' + + 'Phase = %.2f ' % (plot_phase) + unit_phase + } + From d41394075ff15c8e13044026ea6915bf9e28b78a Mon Sep 17 00:00:00 2001 From: savalless Date: Wed, 20 Jul 2022 19:57:58 +0200 Subject: [PATCH 04/12] Fixed problem with calibration points for ResZZ experiment and modified comment to indicate that pi pulses are applied to spectator at the middle and at the end of the sequence --- pycqed/measurement/openql_experiments/multi_qubit_oql.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pycqed/measurement/openql_experiments/multi_qubit_oql.py b/pycqed/measurement/openql_experiments/multi_qubit_oql.py index e305b94877..27b0e840b2 100644 --- a/pycqed/measurement/openql_experiments/multi_qubit_oql.py +++ b/pycqed/measurement/openql_experiments/multi_qubit_oql.py @@ -484,8 +484,8 @@ def residual_coupling_sequence( Sequence to measure the residual (ZZ) interaction between two qubits. Procedure is described in M18TR. - (q0) --X90----(tau)---Y180-(tau)-Y90---RO - (qs) --[X180]-(tau)-[X180]-(tau)-------RO + (q0) --X90-(tau)--Y180--(tau)--Y90---RO + (qs) ------(tau)-[X180]-(tau)-[X180]---RO Input pars: times: the list of waiting times in s for each Echo element @@ -545,7 +545,7 @@ def residual_coupling_sequence( # adding the calibration points p.add_multi_q_cal_points( qubits=all_qubits, - combinations=['0' * n_qubits, '1' * n_qubits]) + combinations=['0' * n_qubits, '0' * n_qubits, '1' * n_qubits, '1' * n_qubits]) p.compile() return p From 40a374cd15a037a002bce83dce2f5d8409e177db Mon Sep 17 00:00:00 2001 From: savalless Date: Wed, 20 Jul 2022 20:00:40 +0200 Subject: [PATCH 05/12] All qubits are now prepared for readout at the beginning of the experiment and the detector function now measures all the qubits, not only the echo qubit. Changed the default state of the spectator qubit to 1. --- pycqed/instrument_drivers/meta_instrument/HAL_Device.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pycqed/instrument_drivers/meta_instrument/HAL_Device.py b/pycqed/instrument_drivers/meta_instrument/HAL_Device.py index 866f15a505..247281ff35 100644 --- a/pycqed/instrument_drivers/meta_instrument/HAL_Device.py +++ b/pycqed/instrument_drivers/meta_instrument/HAL_Device.py @@ -1371,7 +1371,7 @@ def measure_residual_ZZ_coupling( self, q0: str, q_spectators: list, - spectator_state="0", + spectator_state="1", times=np.linspace(0, 10e-6, 26), analyze: bool = True, close_fig: bool = True, @@ -1387,7 +1387,7 @@ def measure_residual_ZZ_coupling( all_qubits = [q0] + q_spectators if prepare_for_timedomain: self.prepare_for_timedomain(qubits=all_qubits, prepare_for_readout=False) - self.prepare_readout(qubits=[q0]) + self.prepare_readout(qubits=all_qubits) if MC is None: MC = self.instr_MC.get_instr() @@ -1409,7 +1409,7 @@ def measure_residual_ZZ_coupling( ) s = swf.OpenQL_Sweep(openql_program=p, CCL=self.instr_CC.get_instr()) - d = self.get_int_avg_det(qubits=[q0]) + d = self.get_int_avg_det(qubits=all_qubits) MC.set_sweep_function(s) MC.set_sweep_points(times_with_cal_points) MC.set_detector_function(d) From 36f77a855b9d43b30a4c9e56b69c2c098cd9331a Mon Sep 17 00:00:00 2001 From: savalless Date: Thu, 21 Jul 2022 11:02:38 +0200 Subject: [PATCH 06/12] Added automatic analysis to Residual ZZ experiment --- pycqed/instrument_drivers/meta_instrument/HAL_Device.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pycqed/instrument_drivers/meta_instrument/HAL_Device.py b/pycqed/instrument_drivers/meta_instrument/HAL_Device.py index 247281ff35..5f9986cac9 100644 --- a/pycqed/instrument_drivers/meta_instrument/HAL_Device.py +++ b/pycqed/instrument_drivers/meta_instrument/HAL_Device.py @@ -1420,7 +1420,8 @@ def measure_residual_ZZ_coupling( if analyze: a = ma.MeasurementAnalysis(close_main_fig=close_fig) - return a + a2 = ma2.ResZZAnalysis() + return a2 def measure_state_tomography( From b76bf7a257462ee1f9214e8d50be3f767ae7382b Mon Sep 17 00:00:00 2001 From: savalless Date: Thu, 21 Jul 2022 11:03:44 +0200 Subject: [PATCH 07/12] It is now possible to import the ResZZ analysis with import ma2.ResZZAnalysis() --- pycqed/analysis_v2/measurement_analysis.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pycqed/analysis_v2/measurement_analysis.py b/pycqed/analysis_v2/measurement_analysis.py index 850483e8ab..0af1d41ff9 100644 --- a/pycqed/analysis_v2/measurement_analysis.py +++ b/pycqed/analysis_v2/measurement_analysis.py @@ -144,3 +144,4 @@ Multi_T1_Analysis, plot_Multi_T1, Multi_Echo_Analysis, plot_Multi_Echo, Multi_Flipping_Analysis, Multi_Motzoi_Analysis) +from pycqed.analysis_v2.resZZ_analysis import ResZZAnalysis \ No newline at end of file From 3fb16bc1aa0fc1f27660412a8e69f02504d0b039 Mon Sep 17 00:00:00 2001 From: savalless Date: Thu, 21 Jul 2022 11:04:13 +0200 Subject: [PATCH 08/12] Added missing ma import in ResZZ analysis --- pycqed/analysis_v2/resZZ_analysis.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pycqed/analysis_v2/resZZ_analysis.py b/pycqed/analysis_v2/resZZ_analysis.py index bd36d8bf9d..e584bc3507 100644 --- a/pycqed/analysis_v2/resZZ_analysis.py +++ b/pycqed/analysis_v2/resZZ_analysis.py @@ -15,6 +15,7 @@ from pycqed.analysis import fitting_models as fit_mods import lmfit from copy import deepcopy +from pycqed.analysis import measurement_analysis as ma from pycqed.analysis import analysis_toolbox as a_tools from pycqed.analysis.tools.plotting import SI_prefix_and_scale_factor From a757f8bf9abfa9d4796f7777cce4d20289a82baa Mon Sep 17 00:00:00 2001 From: savalless Date: Wed, 24 Aug 2022 13:10:34 +0200 Subject: [PATCH 09/12] Revert "Corrected some bugs introduced in previous commit" This reverts commit 827d7a970266d0b8f45d0f41080532470b9bb6f5. --- .../qubit_objects/qubit_object.py | 55 +++++++------------ 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py b/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py index 59f9d78349..a80875ae0d 100644 --- a/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py +++ b/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py @@ -554,7 +554,7 @@ def find_resonators( f_step=1e6, with_VNA=None, verbose=True, - disable_snapshot_metadata=False + disable_snapshot_metadata=disable_snapshot_metadata ): # USED_BY: device_dependency_graphs.py, """ @@ -675,8 +675,7 @@ def find_resonator_frequency_initial( update=True, with_VNA=None, resonators=None, - look_for_missing=True, - disable_snapshot_metadata=False + look_for_missing=True ): # USED_BY: device_dependency_graphs.py, """ @@ -751,7 +750,7 @@ def find_resonator_frequency_initial( return True else: print('Scanning all found resonators') - new_res = self.measure_individual_resonators(with_VNA=with_VNA, disable_snapshot_metadata=disable_snapshot_metadata) + new_res = self.measure_individual_resonators(with_VNA=with_VNA) device.resonators = new_res return True @@ -806,7 +805,7 @@ def find_resonator_frequency_initial( # res.freq = a.fit_results.params['f0'].value*1e9 # return True - def find_test_resonators(self, with_VNA=None, resonators=None, disable_snapshot_metadata=False): + def find_test_resonators(self, with_VNA=None, resonators=None): # USED_BY: device_dependency_graphs.py, """ Does a power sweep over the resonators to see if they have a qubit @@ -854,8 +853,7 @@ def find_test_resonators(self, with_VNA=None, resonators=None, disable_snapshot_ continue freqs = np.arange(freq - 8e6, freq + 4e6, f_step) self.measure_resonator_power(freqs=freqs, powers=powers, - analyze=False, label=label, - disable_snapshot_metadata=disable_snapshot_metadata) + analyze=False, label=label) fit_res = ma.Resonator_Powerscan_Analysis_test(label='Resonator_power_scan', close_fig=True, @@ -892,7 +890,7 @@ def find_test_resonators(self, with_VNA=None, resonators=None, disable_snapshot_ return True @deprecated(version='0.4', reason="not used anywhere") - def find_test_resonators_test(self, with_VNA=None, resonators=None, disable_snapshot_metadata=False): + def find_test_resonators_test(self, with_VNA=None, resonators=None): """ Does a power sweep over the resonators to see if they have a qubit attached or not, and changes the state in the resonator object @@ -939,8 +937,7 @@ def find_test_resonators_test(self, with_VNA=None, resonators=None, disable_snap continue freqs = np.arange(freq - 6e6, freq + 3e6, f_step) self.measure_resonator_power(freqs=freqs, powers=powers, - analyze=False, label=label, - disable_snapshot_metadata=disable_snapshot_metadata) + analyze=False, label=label) fit_res = ma.Resonator_Powerscan_Analysis_test(label='Resonator_power_scan', close_fig=True, @@ -1039,8 +1036,7 @@ def find_qubit_resonator_fluxline(self, with_VNA=None, dac_values=None, dac_values=dac_values, fluxChan=fluxline, analyze=False, - label=label, - disable_snapshot_metadata=disable_snapshot_metadata) + label=label) fluxcurrent[fluxline](0) str_freq, unit = plt_tools.SI_val_to_msg_str(res.freq, 'Hz', float) @@ -1100,8 +1096,7 @@ def find_qubit_resonator_fluxline(self, with_VNA=None, dac_values=None, @deprecated(version='0.4', reason="not used anywhere") def find_resonator_sweetspot(self, freqs=None, dac_values=None, - fluxChan=None, update=True, - disable_snapshot_metadata=disable_snapshot_metadata): + fluxChan=None, update=True): """ Finds the resonator sweetspot current. TODO: - measure all FBL-resonator combinations @@ -1129,8 +1124,7 @@ def find_resonator_sweetspot(self, freqs=None, dac_values=None, self.measure_resonator_frequency_dac_scan(freqs=freqs, dac_values=dac_values, fluxChan=fluxChan, - analyze=False, - disable_snapshot_metadata=disable_snapshot_metadata) + analyze=False) if update: import pycqed.analysis_v2.spectroscopy_analysis as sa @@ -1149,8 +1143,7 @@ def find_resonator_frequency( update=True, freqs=None, MC=None, - close_fig=True, - disable_snapshot_metadata=False + close_fig=True ): # USED_BY: device_dependency_graphs.py, """ @@ -1188,7 +1181,7 @@ def find_resonator_frequency( f_span = 10e6 f_step = 100e3 freqs = np.arange(f_center-f_span/2, f_center+f_span/2, f_step) - self.measure_heterodyne_spectroscopy(freqs, MC, analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) + self.measure_heterodyne_spectroscopy(freqs, MC, analyze=False) a = ma.Homodyne_Analysis(label=self.msmt_suffix, close_fig=close_fig) if use_min: @@ -1221,7 +1214,7 @@ def find_frequency( close_fig=True, MC=None, label='', - disable_snapshot_metadata=False + disable_snapshot_metadata=disable_snapshot_metadata ): # USED_BY: device_dependency_graphs.py """ @@ -1322,8 +1315,7 @@ def calibrate_spec_pow( start_power=-55, power_step=5, threshold=0.5, - verbose=True, - disable_snapshot_metadata=False + verbose=True, disable_snapshot_metadata=disable_snapshot_metadata ): # USED_BY: device_dependency_graphs.py """ @@ -1368,8 +1360,7 @@ def calibrate_motzoi( self, MC=None, verbose=True, - update=True, - disable_snapshot_metadata=False + update=True ): # USED_BY: device_dependency_graphs.py @@ -1407,7 +1398,7 @@ def calibrate_frequency_ramsey( update: bool = True, close_fig: bool = True, test_beating: bool = True, - disable_snapshot_metadata=False + disable_snapshot_metadata=disable_snapshot_metadata ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -1532,8 +1523,7 @@ def calculate_frequency(self, calc_method=None, I_per_phi0=None, I=None): @deprecated(version='0.4', reason="not used anywhere") def tune_freq_to_sweetspot(self, freqs=None, dac_values=None, verbose=True, - fit_phase=False, use_dips=False, - disable_snapshot_metadata=False): + fit_phase=False, use_dips=False): """ Tunes the qubit to the sweetspot """ @@ -1636,8 +1626,7 @@ def tune_freq_to(self, initial_flux_step: float = None, max_repetitions=15, resonator_use_min=True, - find_res=None, - disable_snapshot_metadata=False): + find_res=None): """ Iteratively tune the qubit frequency to a specific target frequency """ @@ -1682,20 +1671,18 @@ def tune_freq_to(self, def measure_qubit_freq_nested(target_frequency, steps=0.2e6, spans=[100e6, 400e6, 800e6, 1200e6, 1500e6], - disable_snapshot_metadata=False **kw): # measure freq if find_res: freq_res = self.find_resonator_frequency( MC=nested_MC, - use_min=resonator_use_min, - disable_snapshot_metadata=disable_snapshot_metadata) + use_min=resonator_use_min) else: freq_res = self.freq_res() spec_succes = False for span in spans: - spec_succes = self.find_frequency(f_span=span, MC=nested_MC, disable_snapshot_metadata=disable_snapshot_metadata) + spec_succes = self.find_frequency(f_span=span, MC=nested_MC) if spec_succes: break @@ -1725,4 +1712,4 @@ def measure_qubit_freq_nested(target_frequency, steps=0.2e6, MC.set_sweep_function(fluxpar) MC.set_detector_function(qubit_freq_det) MC.set_adaptive_function_parameters(ad_func_pars) - MC.run('Tune_to_freq', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('Tune_to_freq', mode='adaptive') From 2b5d00e576d5005e616155c015f40b7800e6d761 Mon Sep 17 00:00:00 2001 From: savalless Date: Wed, 24 Aug 2022 13:12:28 +0200 Subject: [PATCH 10/12] Revert "Added disable metadata option to all single qubit experiments" This reverts commit d8ae06b6fcab2bf5c939e67931b42e68367e1319. --- .../qubit_objects/HAL_Transmon.py | 481 +++++++----------- .../qubit_objects/qubit_object.py | 22 +- 2 files changed, 196 insertions(+), 307 deletions(-) diff --git a/pycqed/instrument_drivers/meta_instrument/qubit_objects/HAL_Transmon.py b/pycqed/instrument_drivers/meta_instrument/qubit_objects/HAL_Transmon.py index 8bc0e2f082..db5ce49ee3 100644 --- a/pycqed/instrument_drivers/meta_instrument/qubit_objects/HAL_Transmon.py +++ b/pycqed/instrument_drivers/meta_instrument/qubit_objects/HAL_Transmon.py @@ -436,8 +436,7 @@ def find_frequency_adaptive( update=True, use_max=False, spec_mode='pulsed_marked', - verbose=True, - disable_snapshot_metadata=False + verbose=True ) -> bool: # USED_BY: device_dependency_graphs.py """ @@ -476,7 +475,7 @@ def find_frequency_adaptive( freqs = np.arange(f_center - f_span / 2, f_center + f_span / 2, f_step) self.measure_spectroscopy(MC=MC, freqs=freqs, mode=spec_mode, - analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) + analyze=False) label = 'spec' # Use 'try' because it can give a TypeError when no peak is found @@ -536,8 +535,7 @@ def find_qubit_sweetspot( set_to_sweetspot=True, method='DAC', fluxChan=None, - spec_mode='pulsed_marked', - disable_snapshot_metadata=False + spec_mode='pulsed_marked' ): # USED_BY: device_dependency_graphs.py """ @@ -577,8 +575,7 @@ def find_qubit_sweetspot( mode=spec_mode, nested_resonator_calibration=False, # nested_resonator_calibration_use_min=False, - resonator_freqs=np.arange(-5e6, 5e6, 0.2e6) + self.freq_res(), - disable_snapshot_metadata=disable_snapshot_metadata + resonator_freqs=np.arange(-5e6, 5e6, 0.2e6) + self.freq_res() ) timestamp = a_tools.get_timestamps_in_range( @@ -595,9 +592,9 @@ def find_qubit_sweetspot( for i, dac_value in enumerate(dac_values): self.instr_FluxCtrl.get_instr()[self.fl_dc_ch()](dac_value) if i == 0: - self.find_frequency(freqs=freqs, update=True, disable_snapshot_metadata=disable_snapshot_metadata) + self.find_frequency(freqs=freqs, update=True) else: - self.find_frequency(update=True, disable_snapshot_metadata=disable_snapshot_metadata) + self.find_frequency(update=True) t_end = time.strftime('%Y%m%d_%H%M%S') @@ -639,8 +636,7 @@ def find_qubit_sweetspot( return True - def find_qubit_sweetspot_1D(self, freqs=None, dac_values=None, - disable_snapshot_metadata=False): + def find_qubit_sweetspot_1D(self, freqs=None, dac_values=None): # self.spec_pow(-30) self.ro_acq_averages(2 ** 14) @@ -665,9 +661,9 @@ def find_qubit_sweetspot_1D(self, freqs=None, dac_values=None, self.instr_FluxCtrl.get_instr()[flux_channel](dac_value) # Find Resonator - self.find_resonator_frequency(freqs=np.arange(-5e6, 5.1e6, .1e6) + self.freq_res(), use_min=True, disable_snapshot_metadata=disable_snapshot_metadata) + self.find_resonator_frequency(freqs=np.arange(-5e6, 5.1e6, .1e6) + self.freq_res(), use_min=True) # Find Qubit frequency - self.find_frequency(freqs=freqs, disable_snapshot_metadata=disable_snapshot_metadata) + self.find_frequency(freqs=freqs) Qubit_frequency.append(self.freq_qubit()) Reson_frequency.append(self.freq_res()) @@ -679,9 +675,9 @@ def find_qubit_sweetspot_1D(self, freqs=None, dac_values=None, # Set Flux Current to sweetspot self.instr_FluxCtrl.get_instr()[flux_channel](sweetspot_current) self.find_resonator_frequency(freqs=np.arange(-5e6, 5.1e6, .1e6) + self.freq_res(), - use_min=True, disable_snapshot_metadata=disable_snapshot_metadata) + use_min=True) frequency_sweet_spot = self.find_frequency( - freqs=np.arange(-50e6, 50e6, .5e6) + self.freq_qubit(), disable_snapshot_metadata=disable_snapshot_metadata) + freqs=np.arange(-50e6, 50e6, .5e6) + self.freq_qubit()) return frequency_sweet_spot @@ -690,8 +686,7 @@ def find_anharmonicity_estimate( anharmonicity=None, mode='pulsed_marked', update=True, - power_12=10, - disable_snapshot_metadata=False + power_12=10 ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs.py @@ -716,7 +711,7 @@ def find_anharmonicity_estimate( old_spec_pow = self.spec_pow() self.spec_pow(self.spec_pow() + power_12) - self.measure_spectroscopy(freqs=freqs, mode=mode, analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) + self.measure_spectroscopy(freqs=freqs, mode=mode, analyze=False) a = ma.Qubit_Spectroscopy_Analysis(label=self.msmt_suffix, analyze_ef=True) @@ -736,8 +731,7 @@ def find_bus_frequency( close_fig=True, analyze=True, MC: Optional[MeasurementControl] = None, - prepare_for_continuous_wave=True, - disable_snapshot_metadata=False + prepare_for_continuous_wave=True ): """ Drive the qubit and sit at the spectroscopy peak while the bus is driven with @@ -801,7 +795,7 @@ def find_bus_frequency( else: self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Bus_spectroscopy_' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Bus_spectroscopy_' + self.msmt_suffix + label) spec_source_bus.off() self.hal_acq_spec_mode_off() @@ -815,8 +809,7 @@ def find_bus_frequency( # calibrate_ functions (HAL_Transmon specific) ########################################################################## - def calibrate_ro_pulse_amp_CW(self, freqs=None, powers=None, update=True, - disable_snapshot_metadata=False): + def calibrate_ro_pulse_amp_CW(self, freqs=None, powers=None, update=True): # USED_BY: device_dependency_graphs.py """ Does a resonator power scan and determines at which power the low power @@ -834,7 +827,7 @@ def calibrate_ro_pulse_amp_CW(self, freqs=None, powers=None, update=True, if powers is None: powers = np.arange(-40, 0.1, 8) - self.measure_resonator_power(freqs=freqs, powers=powers, analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) + self.measure_resonator_power(freqs=freqs, powers=powers, analyze=False) fit_res = ma.Resonator_Powerscan_Analysis(label='Resonator_power_scan', close_fig=True) if update: @@ -857,8 +850,7 @@ def calibrate_mw_pulse_amplitude_coarse( verbose=False, MC: Optional[MeasurementControl] = None, update=True, - all_modules=False, - disable_snapshot_metadata=False + all_modules=False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs.py @@ -875,7 +867,7 @@ def calibrate_mw_pulse_amplitude_coarse( else: amps = np.linspace(0, 1, 31) - self.measure_rabi(amps=amps, MC=MC, analyze=False, all_modules=all_modules, disable_snapshot_metadata=disable_snapshot_metadata) + self.measure_rabi(amps=amps, MC=MC, analyze=False, all_modules=all_modules) a = ma.Rabi_Analysis(close_fig=close_fig, label='rabi') @@ -963,8 +955,7 @@ def calibrate_mixer_skewness_drive( x0: list = [1.0, 0.0], cma_stds: list = [.15, 10], maxfevals: int = 250, - update: bool = True, - disable_snapshot_metadata=False + update: bool = True ) -> bool: # USED_BY: device_dependency_graphs.py """ @@ -1077,7 +1068,7 @@ def load_square(): MC.set_detector_function(detector) # sets test_detector MC.set_adaptive_function_parameters(ad_func_pars) MC.set_sweep_points(np.linspace(0, 2, 300)) - MC.run, disable_snapshot_metadata=disable_snapshot_metadata( + MC.run( name='Spurious_sideband_{}{}'.format( mixer_ch, self.msmt_suffix), mode='adaptive') @@ -1138,7 +1129,7 @@ def load_square(): # MC.set_sweep_functions([S1, S2]) # MC.set_detector_function(detector) # sets test_detector # MC.set_adaptive_function_parameters(ad_func_pars) - # MC.run(name='Spurious_sideband', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) + # MC.run(name='Spurious_sideband', mode='adaptive') # a = ma.OptimizationAnalysis(auto=True, label='Spurious_sideband') # alpha = a.optimization_result[0][0] # phi = a.optimization_result[0][1] @@ -1149,8 +1140,7 @@ def load_square(): # LutMan.mixer_alpha(alpha) # LutMan.mixer_phi(phi) - def calibrate_mixer_skewness_RO(self, update=True, - disable_snapshot_metadata=False): + def calibrate_mixer_skewness_RO(self, update=True): """ Calibrates the mixer skewness using mixer_skewness_cal_UHFQC_adaptive see calibration toolbox for details FIXME: outdated @@ -1201,7 +1191,7 @@ def calibrate_mixer_skewness_RO(self, update=True, MC.set_sweep_functions([S1, S2]) MC.set_detector_function(detector) # sets test_detector MC.set_adaptive_function_parameters(ad_func_pars) - MC.run(name='Spurious_sideband', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Spurious_sideband', mode='adaptive') a = ma.OptimizationAnalysis(auto=True, label='Spurious_sideband') alpha = a.optimization_result[0][0] phi = a.optimization_result[0][1] @@ -1214,8 +1204,7 @@ def calibrate_mixer_skewness_RO(self, update=True, def calibrate_mixer_offsets_RO( self, update: bool = True, - ftarget=-110, - disable_snapshot_metadata=False + ftarget=-110 ) -> bool: # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs.py @@ -1268,8 +1257,7 @@ def calibrate_mw_pulses_basic( kw_offsets={'ftarget': -120}, kw_skewness={}, kw_motzoi={'update': True}, - f_target_skewness=-120, - disable_snapshot_metadata=False + f_target_skewness=-120 ): """ @@ -1312,8 +1300,7 @@ def calibrate_ssro_coarse( freqs=None, amps=None, analyze: bool = True, - update: bool = True, - disable_snapshot_metadata=False + update: bool = True ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -1371,7 +1358,7 @@ def calibrate_ssro_coarse( msmt_kw={'prepare': True} ) nested_MC.set_detector_function(d) - nested_MC.run(name='RO_coarse_tuneup', mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(name='RO_coarse_tuneup', mode='2D') if analyze is True: # Analysis @@ -1402,8 +1389,7 @@ def calibrate_ssro_pulse_duration( use_adaptive: bool = True, n_points: int = 80, analyze: bool = True, - update: bool = True, - disable_snapshot_metadata=False + update: bool = True ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -1477,13 +1463,13 @@ def calibrate_ssro_pulse_duration( 'bounds': [(10e-9, 400e-9), amp_lim], 'minimize': False }) - nested_MC.run(name='RO_duration_tuneup_{}'.format(self.name), disable_snapshot_metadata=disable_snapshot_metadata, + nested_MC.run(name='RO_duration_tuneup_{}'.format(self.name), mode='adaptive') # Use standard 2D sweep else: nested_MC.set_sweep_points(times) nested_MC.set_sweep_points_2D(amps) - nested_MC.run(name='RO_duration_tuneup_{}'.format(self.name), disable_snapshot_metadata=disable_snapshot_metadata, + nested_MC.run(name='RO_duration_tuneup_{}'.format(self.name), mode='2D') ##################### # Analysis @@ -1510,8 +1496,7 @@ def calibrate_ssro_fine( optimize_threshold: float = .99, check_threshold: float = .90, analyze: bool = True, - update: bool = True, - disable_snapshot_metadata=False + update: bool = True ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -1539,7 +1524,7 @@ def calibrate_ssro_fine( ''' ## check single-qubit ssro first, if assignment fidelity below 92.5%, run optimizer - self.measure_ssro(post_select=True, disable_snapshot_metadata=disable_snapshot_metadata) + self.measure_ssro(post_select=True) if self.F_ssro() > check_threshold: return True @@ -1586,7 +1571,7 @@ def calibrate_ssro_fine( nested_MC.set_adaptive_function_parameters(ad_func_pars) nested_MC.set_optimization_method('nelder_mead') - nested_MC.run(name='RO_fine_tuneup', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(name='RO_fine_tuneup', mode='adaptive') if analyze is True: ma.OptimizationAnalysis(label='RO_fine_tuneup') @@ -1597,8 +1582,7 @@ def calibrate_ro_acq_delay( MC: Optional[MeasurementControl] = None, analyze: bool = True, prepare: bool = True, - disable_snapshot_metadata: bool = False, - disable_snapshot_metadata=False + disable_metadata: bool = False ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -1641,7 +1625,7 @@ def calibrate_ro_acq_delay( MC.set_sweep_points(np.arange(self.input_average_detector.nr_samples) / sampling_rate) MC.set_detector_function(self.input_average_detector) - MC.run(name=f'Measure_Acq_Delay_{self.msmt_suffix}', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name=f'Measure_Acq_Delay_{self.msmt_suffix}', disable_snapshot_metadata=disable_metadata) self.ro_pulse_amp(old_pow) @@ -1661,8 +1645,7 @@ def calibrate_mw_gates_restless( initial_steps: list = [0.05, 0.05, 1e6], nr_cliffords: int = 80, nr_seeds: int = 200, verbose: bool = True, update: bool = True, - prepare_for_timedomain: bool = True, - disable_snapshot_metadata=False + prepare_for_timedomain: bool = True ): """ Refs: @@ -1677,7 +1660,7 @@ def calibrate_mw_gates_restless( nr_cliffords=nr_cliffords, nr_seeds=nr_seeds, verbose=verbose, update=update, prepare_for_timedomain=prepare_for_timedomain, - method='restless', disable_snapshot_metadata=disable_snapshot_metadata) + method='restless') def calibrate_mw_gates_rb( self, @@ -1689,8 +1672,7 @@ def calibrate_mw_gates_rb( verbose: bool = True, update: bool = True, prepare_for_timedomain: bool = True, method: bool = None, - optimizer: str = 'NM', - disable_snapshot_metadata=False + optimizer: str = 'NM' ): """ Calibrates microwave pulses using a randomized benchmarking based @@ -1793,7 +1775,7 @@ def calibrate_mw_gates_rb( 'maxiter': 1500} MC.set_adaptive_function_parameters(ad_func_pars) - MC.run(name=msmt_string, disable_snapshot_metadata=disable_snapshot_metadata, + MC.run(name=msmt_string, mode='adaptive') a = ma.OptimizationAnalysis(label=msmt_string) @@ -1823,8 +1805,7 @@ def calibrate_mw_gates_allxy( start_values=None, initial_steps=None, parameter_list=None, - termination_opt=0.01, - disable_snapshot_metadata=False + termination_opt=0.01 ): # FIXME: this tuneup does not update the qubit object parameters # update: Fixed on the the pagani set-up @@ -1874,7 +1855,7 @@ def calibrate_mw_gates_allxy( nested_MC.set_adaptive_function_parameters(ad_func_pars) nested_MC.set_optimization_method('nelder_mead') - nested_MC.run(name='gate_tuneup_allxy', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(name='gate_tuneup_allxy', mode='adaptive') a2 = ma.OptimizationAnalysis(label='gate_tuneup_allxy') if a2.optimization_result[1][0] > termination_opt: @@ -1886,8 +1867,7 @@ def calibrate_mw_gates_allxy2( self, nested_MC: Optional[MeasurementControl] = None, start_values=None, - initial_steps=None, f_termination=0.01, - disable_snapshot_metadata=False + initial_steps=None, f_termination=0.01 ): ''' FIXME! Merge both calibrate allxy methods. @@ -1947,7 +1927,7 @@ def calibrate_mw_gates_allxy2( nested_MC.set_adaptive_function_parameters(ad_func_pars) nested_MC.set_optimization_method('nelder_mead') - nested_MC.run(name='gate_tuneup_allxy', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(name='gate_tuneup_allxy', mode='adaptive') a2 = ma.OptimizationAnalysis(label='gate_tuneup_allxy') self.ro_acq_averages(old_avg) # Open all vsm channels @@ -1967,8 +1947,7 @@ def calibrate_RO( nested_MC: Optional[MeasurementControl] = None, start_params=None, initial_step=None, - threshold=0.05, - disable_snapshot_metadata=False + threshold=0.05 ): ''' Optimizes the RO assignment fidelity using 2 parameters: @@ -2004,7 +1983,7 @@ def calibrate_RO( nested_MC.set_sweep_functions([self.ro_freq, self.ro_pulse_amp]) def wrap_func(): - error = 1 - self.calibrate_optimal_weights(disable_snapshot_metadata=disable_snapshot_metadata)['F_a'] + error = 1 - self.calibrate_optimal_weights()['F_a'] return error d = det.Function_Detector(wrap_func, @@ -2022,7 +2001,7 @@ def wrap_func(): nested_MC.set_adaptive_function_parameters(ad_func_pars) nested_MC.set_optimization_method('nelder_mead') - nested_MC.run(name='RO_tuneup', mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(name='RO_tuneup', mode='adaptive') a = ma.OptimizationAnalysis(label='RO_tuneup') @@ -2046,8 +2025,7 @@ def calibrate_depletion_pulse( use_RTE_cost_function=False, use_adaptive_optimizer=False, adaptive_loss_weight=5, - target_cost=0.02, - disable_snapshot_metadata=False + target_cost=0.02 ): """ this function automatically tunes up a two step, four-parameter @@ -2201,7 +2179,7 @@ def calibrate_depletion_pulse( optimizer_result = nested_MC.run( f"Depletion_tuneup_{self.name}_adaptive-{use_adaptive_optimizer}", - mode='adaptive', disable_snapshot_metadata=disable_snapshot_metadata) + mode='adaptive') a = ma.OptimizationAnalysis(label='Depletion_tuneup') return a.optimization_result, optimizer_result @@ -2215,8 +2193,7 @@ def calibrate_ef_rabi( analyze=True, close_fig=True, prepare_for_timedomain=True, - update=True, - disable_snapshot_metadata=False + update=True ): """ Calibrates the pi pulse of the ef/12 transition using @@ -2232,8 +2209,7 @@ def calibrate_ef_rabi( recovery_pulse=recovery_pulse, MC=MC, label=label, analyze=analyze, close_fig=close_fig, - prepare_for_timedomain=prepare_for_timedomain, - disable_snapshot_metadata=disable_snapshot_metadata + prepare_for_timedomain=prepare_for_timedomain ) if update: ef_pi_amp = a2.proc_data_dict['ef_pi_amp'] @@ -2243,12 +2219,7 @@ def calibrate_ef_rabi( # calibrate_ functions (overrides for class Qubit) ########################################################################## - def calibrate_motzoi(self, MC: Optional[MeasurementControl] = None, - verbose=True, - update=True, - motzois=None, - disable_snapshot_metadata=False - ): + def calibrate_motzoi(self, MC: Optional[MeasurementControl] = None, verbose=True, update=True, motzois=None): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, """ @@ -2264,7 +2235,7 @@ def calibrate_motzoi(self, MC: Optional[MeasurementControl] = None, motzois = gen_sweep_pts(center=0, span=.3, num=31) # large range - a = self.measure_motzoi(MC=MC, motzoi_amps=motzois, analyze=True, disable_snapshot_metadata=disable_snapshot_metadata) + a = self.measure_motzoi(MC=MC, motzoi_amps=motzois, analyze=True) opt_motzoi = a.get_intersect()[0] if opt_motzoi > max(motzois) or opt_motzoi < min(motzois): if verbose: @@ -2285,8 +2256,7 @@ def calibrate_mixer_offsets_drive( mixer_channels=['G', 'D'], update: bool = True, ftarget=-110, - maxiter=300, - disable_snapshot_metadata=False + maxiter=300 ) -> bool: # USED_BY: device_dependency_graphs.py """ @@ -2421,12 +2391,11 @@ def calibrate_optimal_weights( optimal_IQ: bool = False, measure_transients_CCL_switched: bool = False, prepare: bool = True, - disable_snapshot_metadata: bool = False, + disable_metadata: bool = False, nr_shots_per_case: int = 2 ** 13, post_select: bool = False, averages: int = 2 ** 15, post_select_threshold: float = None, - disable_snapshot_metadata=False ) -> bool: """ Measures readout transients for the qubit in ground and excited state to indicate @@ -2460,12 +2429,11 @@ def calibrate_optimal_weights( if measure_transients_CCL_switched: transients = self.measure_transients_CCL_switched(MC=MC, analyze=analyze, - depletion_analysis=False, - disable_snapshot_metadata=disable_snapshot_metadata) + depletion_analysis=False) else: transients = self.measure_transients(MC=MC, analyze=analyze, depletion_analysis=False, - disable_snapshot_metadata=disable_snapshot_metadata) + disable_metadata=disable_metadata) if analyze: ma.Input_average_analysis(IF=self.ro_freq_mod()) @@ -2508,7 +2476,7 @@ def calibrate_optimal_weights( self._prep_ro_instantiate_detectors() ssro_dict = self.measure_ssro( no_figs=no_figs, update=update, - prepare=True, disable_snapshot_metadata=disable_snapshot_metadata, + prepare=True, disable_metadata=disable_metadata, nr_shots_per_case=nr_shots_per_case, post_select=post_select, post_select_threshold=post_select_threshold) @@ -2527,8 +2495,7 @@ def measure_heterodyne_spectroscopy( freqs, MC: Optional[MeasurementControl] = None, analyze=True, close_fig=True, - label='', - disable_snapshot_metadata=False + label='' ): # USED_BY: device_dependency_graphs.py (via find_resonator_frequency) """ @@ -2569,7 +2536,7 @@ def measure_heterodyne_spectroscopy( self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Resonator_scan' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Resonator_scan' + self.msmt_suffix + label) self.hal_acq_spec_mode_off() @@ -2583,8 +2550,7 @@ def measure_resonator_power( MC: Optional[MeasurementControl] = None, analyze: bool = True, close_fig: bool = True, - label: str = '', - disable_snapshot_metadata=False + label: str = '' ): """ Measures the readout resonator with UHFQC as a function of the pulse power. @@ -2622,7 +2588,7 @@ def measure_resonator_power( MC.set_sweep_points_2D(powers) self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Resonator_power_scan' + self.msmt_suffix + label, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Resonator_power_scan' + self.msmt_suffix + label, mode='2D') if analyze: ma.TwoD_Analysis(label='Resonator_power_scan', @@ -2643,8 +2609,8 @@ def measure_ssro( SNR_detector: bool = False, shots_per_meas: int = 2 ** 16, vary_residual_excitation: bool = True, - disable_snapshot_metadata: bool = False, - label: str = '', + disable_metadata: bool = False, + label: str = '' ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -2725,7 +2691,8 @@ def measure_ssro( d = self.int_log_det d.nr_shots = np.min([shots_per_meas, nr_shots]) MC.set_detector_function(d) - MC.run('SSRO_{}{}'.format(label, self.msmt_suffix), disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('SSRO_{}{}'.format(label, self.msmt_suffix), + disable_snapshot_metadata=disable_metadata) # restore settings MC.live_plot_enabled(old_plot_setting) @@ -2794,9 +2761,8 @@ def measure_ssro_after_fluxing( SNR_detector: bool = False, shots_per_meas: int = 2**16, vary_residual_excitation: bool = True, - disable_snapshot_metadata: bool = False, - label: str = '', - disable_snapshot_metadata=False + disable_metadata: bool = False, + label: str = '' ): """ Performs a number of single shot measurements with qubit in ground and excited state @@ -2875,7 +2841,8 @@ def measure_ssro_after_fluxing( d.nr_shots = np.min([shots_per_meas, nr_shots]) MC.set_detector_function(d) - MC.run('SSRO_{}{}'.format(label, self.msmt_suffix), disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('SSRO_{}{}'.format(label, self.msmt_suffix), + disable_snapshot_metadata=disable_metadata) MC.live_plot_enabled(old_plot_setting) ###################################################################### @@ -2935,8 +2902,7 @@ def measure_spectroscopy( analyze=True, close_fig=True, label='', - prepare_for_continuous_wave=True, - disable_snapshot_metadata=False + prepare_for_continuous_wave=True ): """ Performs a two-tone spectroscopy experiment where one tone is kept @@ -2965,24 +2931,21 @@ def measure_spectroscopy( freqs=freqs, MC=MC, analyze=analyze, close_fig=close_fig, label=label, - prepare_for_continuous_wave=prepare_for_continuous_wave, - disable_snapshot_metadata=disable_snapshot_metadata + prepare_for_continuous_wave=prepare_for_continuous_wave ) elif mode == 'pulsed_marked': self._measure_spectroscopy_pulsed_marked( freqs=freqs, MC=MC, analyze=analyze, close_fig=close_fig, label=label, - prepare_for_continuous_wave=prepare_for_continuous_wave, - disable_snapshot_metadata=disable_snapshot_metadata + prepare_for_continuous_wave=prepare_for_continuous_wave ) elif mode == 'pulsed_mixer': self._measure_spectroscopy_pulsed_mixer( freqs=freqs, MC=MC, analyze=analyze, close_fig=close_fig, label=label, - prepare_for_timedomain=prepare_for_continuous_wave, - disable_snapshot_metadata=disable_snapshot_metadata + prepare_for_timedomain=prepare_for_continuous_wave ) else: logging.error(f'Mode {mode} not recognized. Available modes: "CW", "pulsed_marked", "pulsed_mixer"') @@ -2996,9 +2959,8 @@ def measure_transients( depletion_analysis: bool = True, depletion_analysis_plot: bool = True, depletion_optimization_window=None, - disable_snapshot_metadata: bool = False, - plot_max_time=None, - disable_snapshot_metadata=False + disable_metadata: bool = False, + plot_max_time=None ): # docstring from parent class if MC is None: @@ -3044,7 +3006,7 @@ def measure_transients( MC.set_detector_function(self.input_average_detector) data = MC.run( 'Measure_transients{}_{}'.format(self.msmt_suffix, i), - disable_snapshot_metadata=disable_snapshot_metadata) + disable_snapshot_metadata=disable_metadata) dset = data['dset'] transients.append(dset.T[1:]) if analyze: @@ -3067,8 +3029,7 @@ def measure_rabi( close_fig=True, real_imag=True, prepare_for_timedomain=True, - all_modules=False, - disable_snapshot_metadata=False + all_modules=False ): """ Perform a Rabi experiment in which amplitude of the MW pulse is sweeped @@ -3097,8 +3058,7 @@ def measure_rabi( close_fig, real_imag, prepare_for_timedomain, - all_modules, - disable_snapshot_metadata + all_modules ) else: self.measure_rabi_channel_amp( @@ -3107,8 +3067,7 @@ def measure_rabi( analyze, close_fig, real_imag, - prepare_for_timedomain, - disable_snapshot_metadata + prepare_for_timedomain ) def measure_rabi_vsm( @@ -3119,8 +3078,7 @@ def measure_rabi_vsm( close_fig=True, real_imag=True, prepare_for_timedomain=True, - all_modules=False, - disable_snapshot_metadata=False + all_modules=False ): """ Perform a Rabi experiment in which amplitude of the MW pulse is sweeped @@ -3170,7 +3128,7 @@ def measure_rabi_vsm( # real_imag is acutally not polar and as such works for opt weights self.int_avg_det_single._set_real_imag(real_imag) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='rabi_' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='rabi_' + self.msmt_suffix) ma.Rabi_Analysis(label='rabi_') return True @@ -3181,8 +3139,7 @@ def measure_rabi_channel_amp( analyze=True, close_fig=True, real_imag=True, - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ): """ Perform a Rabi experiment in which amplitude of the MW pulse is sweeped @@ -3214,7 +3171,7 @@ def measure_rabi_channel_amp( # real_imag is actually not polar and as such works for opt weights self.int_avg_det_single._set_real_imag(real_imag) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='rabi_' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='rabi_' + self.msmt_suffix) ma.Rabi_Analysis(label='rabi_') return True @@ -3224,8 +3181,7 @@ def measure_rabi_channel_amp_ramzz_measurement(self, meas_qubit, amps=np.linspace(0, 1, 31), analyze=True, close_fig=True, real_imag=True, - prepare_for_timedomain=True, - disable_snapshot_metadata=False): + prepare_for_timedomain=True): """ Perform a Rabi experiment in which amplitude of the MW pulse is sweeped while the drive frequency and pulse duration is kept fixed @@ -3262,15 +3218,14 @@ def measure_rabi_channel_amp_ramzz_measurement(self, meas_qubit, # real_imag is acutally not polar and as such works for opt weights self.int_avg_det_single._set_real_imag(real_imag) MC.set_detector_function(self.int_avg_det_single) - MC.run(name='rabi_'+self.name+'_ramzz_'+meas_qubit.name, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='rabi_'+self.name+'_ramzz_'+meas_qubit.name) ma.Rabi_Analysis(label='rabi_') return True def measure_depletion_allxy(self, MC=None, analyze=True, close_fig=True, prepare_for_timedomain=True, - label='', - disable_snapshot_metadata=False): + label=''): if MC is None: MC = self.instr_MC.get_instr() if prepare_for_timedomain: @@ -3283,7 +3238,7 @@ def measure_depletion_allxy(self, MC=None, MC.set_sweep_function(s) MC.set_sweep_points(np.arange(21*2*3)) MC.set_detector_function(d) - MC.run('Depletion_AllXY'+self.msmt_suffix+label, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('Depletion_AllXY'+self.msmt_suffix+label) ma2.mra.Depletion_AllXY_analysis(self.name, label='Depletion') def measure_allxy( @@ -3292,8 +3247,7 @@ def measure_allxy( label: str = '', analyze=True, close_fig=True, - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ) -> float: if MC is None: MC = self.instr_MC.get_instr() @@ -3308,7 +3262,7 @@ def measure_allxy( MC.set_sweep_points(np.arange(42)) d = self.int_avg_det MC.set_detector_function(d) - MC.run('AllXY' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('AllXY' + label + self.msmt_suffix) if analyze: a = ma.AllXY_Analysis(close_main_fig=close_fig) @@ -3321,9 +3275,7 @@ def allxy_GBT( # FIXME: prefix with "measure_" analyze=True, close_fig=True, prepare_for_timedomain=True, - termination_opt=0.02, - disable_snapshot_metadata=False - ): + termination_opt=0.02): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -3349,7 +3301,7 @@ def allxy_GBT( # FIXME: prefix with "measure_" MC.set_sweep_points(np.arange(42)) d = self.int_avg_det MC.set_detector_function(d) - MC.run('AllXY' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('AllXY' + label + self.msmt_suffix) self.ro_soft_avg(old_avg) a = ma.AllXY_Analysis(close_main_fig=close_fig) @@ -3370,7 +3322,6 @@ def measure_T1( close_fig=True, analyze=True, MC: Optional[MeasurementControl] = None, - disable_snapshot_metadata=False ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -3435,7 +3386,7 @@ def measure_T1( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('T1' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('T1' + self.msmt_suffix) if analyze: a = ma.T1_Analysis(auto=True, close_fig=True) @@ -3447,9 +3398,7 @@ def measure_T1_ramzz(self, meas_qubit, ramzz_wait_time, times=None, MC=None, analyze=True, close_fig=True, update=True, nr_flux_dance: float = None, - prepare_for_timedomain=True, - disable_snapshot_metadata=False - ): + prepare_for_timedomain=True): # docstring from parent class # N.B. this is a good example for a generic timedomain experiment using # the CCL transmon. @@ -3487,7 +3436,7 @@ def measure_T1_ramzz(self, meas_qubit, ramzz_wait_time, MC.set_sweep_function(s) MC.set_sweep_points(times) MC.set_detector_function(d) - MC.run('T1_' + self.name + '_ramzz_' + meas_qubit.name, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('T1_' + self.name + '_ramzz_' + meas_qubit.name) if analyze: a = ma.T1_Analysis(auto=True, close_fig=True) if update: @@ -3499,9 +3448,7 @@ def measure_T1_2nd_excited_state( times=None, MC: Optional[MeasurementControl] = None, analyze=True, close_fig=True, update=True, - prepare_for_timedomain=True, - disable_snapshot_metadata=False - ): + prepare_for_timedomain=True): """ Performs a T1 experiment on the 2nd excited state. @@ -3537,7 +3484,7 @@ def measure_T1_2nd_excited_state( MC.set_sweep_points(p.sweep_points) d = self.int_avg_det MC.set_detector_function(d) - MC.run('T1_2nd_exc_state_' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('T1_2nd_exc_state_' + self.msmt_suffix) a = ma.T1_Analysis(auto=True, close_fig=True) return a.T1 @@ -3555,8 +3502,7 @@ def measure_ramsey( update=True, detector=False, double_fit=False, - test_beating=True, - disable_snapshot_metadata=False + test_beating=True ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -3615,7 +3561,7 @@ def measure_ramsey( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('Ramsey' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('Ramsey' + label + self.msmt_suffix) # Restore old frequency value self.instr_LO_mw.get_instr().set('frequency', old_frequency) @@ -3660,8 +3606,7 @@ def measure_ramsey_ramzz(self, meas_qubit, ramzz_wait_time, analyze=True, close_fig=True, update=True, detector=False, double_fit=False, - test_beating=True, - disable_snapshot_metadata=False): + test_beating=True): # docstring from parent class # N.B. this is a good example for a generic timedomain experiment using # the CCL transmon. @@ -3716,7 +3661,7 @@ def measure_ramsey_ramzz(self, meas_qubit, ramzz_wait_time, d = self.int_avg_det MC.set_detector_function(d) - MC.run('Ramsey'+label+self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('Ramsey'+label+self.msmt_suffix) # Restore old frequency value self.instr_LO_mw.get_instr().set('frequency', old_frequency) @@ -3759,8 +3704,7 @@ def measure_complex_ramsey( analyze=True, close_fig=True, update=True, detector=False, double_fit=False, - test_beating=True, - disable_snapshot_metadata=False + test_beating=True ): if MC is None: MC = self.instr_MC.get_instr() @@ -3805,7 +3749,7 @@ def measure_complex_ramsey( d = self.int_avg_det MC.set_detector_function(d) - MC.run('complex_Ramsey' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('complex_Ramsey' + label + self.msmt_suffix) self.ro_acq_weight_type(old_ro_type) if analyze: @@ -3847,8 +3791,7 @@ def measure_echo( close_fig=True, update=True, label: str = '', - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -3919,7 +3862,7 @@ def measure_echo( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('echo' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('echo' + label + self.msmt_suffix) if analyze: # N.B. v1.5 analysis @@ -3932,8 +3875,7 @@ def measure_echo( def measure_echo_ramzz(self, measure_qubit, ramzz_wait_time, times=None, MC=None, analyze=True, close_fig=True, update=True, - label: str = '', prepare_for_timedomain=True, - disable_snapshot_metadata=False): + label: str = '', prepare_for_timedomain=True): # docstring from parent class # N.B. this is a good example for a generic timedomain experiment using # the CCL transmon. @@ -3989,7 +3931,7 @@ def measure_echo_ramzz(self, measure_qubit, ramzz_wait_time, MC.set_sweep_function(s) MC.set_sweep_points(times) MC.set_detector_function(d) - MC.run('echo_'+label+self.name+'_ramzz_'+meas_qubit.name, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('echo_'+label+self.name+'_ramzz_'+meas_qubit.name) if analyze: # N.B. v1.5 analysis a = ma.Echo_analysis_V15(label='echo', auto=True, close_fig=True) @@ -4004,8 +3946,7 @@ def measure_restless_ramsey( time=None, amount_of_shots=2**20, MC: Optional[MeasurementControl] = None, - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ): label = f"Restless_Ramsey_N={amount_of_repetitions}_tau={time}" @@ -4035,7 +3976,7 @@ def measure_restless_ramsey( d = self.int_log_det d.nr_shots = amount_of_shots # int(4094/nr_repetitions) * nr_repetitions MC.set_detector_function(d) - MC.run(label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(label + self.msmt_suffix) self.ro_acq_weight_type(old_weight_type) self.ro_acq_digitized(old_digitized) @@ -4050,9 +3991,7 @@ def measure_flipping( flip_ef=False, ax='x', angle='180', - label='', - disable_snapshot_metadata=False - ): + label=''): """ Measurement for fine-tuning of the pi and pi/2 pulse amplitudes. Executes sequence pi (repeated N-times) - pi/2 - measure @@ -4112,7 +4051,7 @@ def measure_flipping( MC.set_detector_function(d) if flip_ef: label = 'ef_rx12' - MC.run('flipping_'+ax+angle+label+self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('flipping_'+ax+angle+label+self.msmt_suffix) if analyze: a = ma2.FlippingAnalysis( options_dict={'scan_label': 'flipping'}) @@ -4148,10 +4087,7 @@ def measure_flipping( return a - def flipping_GBT(self, - nr_sequence: int = 7, - disable_snapshot_metadata=False - ): # FIXME: prefix with "measure_" + def flipping_GBT(self, nr_sequence: int = 7): # FIXME: prefix with "measure_" # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs.py @@ -4162,7 +4098,7 @@ def flipping_GBT(self, Later we can add a condition as a check. ''' for i in range(nr_sequence): - a = self.measure_flipping(update=True, disable_snapshot_metadata=disable_snapshot_metadata) + a = self.measure_flipping(update=True) scale_factor = a._get_scale_factor_line() if abs(1 - scale_factor) <= 0.0005: return True @@ -4175,8 +4111,7 @@ def measure_motzoi( prepare_for_timedomain: bool = True, MC: Optional[MeasurementControl] = None, analyze=True, - close_fig=True, - disable_snapshot_metadata=False + close_fig=True ): # USED_BY: device_dependency_graphs.py (via calibrate_motzoi) """ @@ -4251,7 +4186,7 @@ def measure_motzoi( always_prepare=True ) MC.set_detector_function(d) - MC.run('Motzoi_XY' + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('Motzoi_XY' + self.msmt_suffix) if analyze: if self.ro_acq_weight_type() == 'optimal': @@ -4279,8 +4214,7 @@ def measure_photon_number_splitting( powers, MC: Optional[MeasurementControl] = None, analyze: bool = True, - close_fig: bool = True, - disable_snapshot_metadata=False + close_fig: bool = True ): """ Measures the CW qubit spectroscopy as a function of the RO pulse power @@ -4326,7 +4260,7 @@ def measure_photon_number_splitting( self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) label = 'Photon_number_splitting' - MC.run(name=label + self.msmt_suffix, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name=label + self.msmt_suffix, mode='2D') spec_source.off() @@ -4342,8 +4276,7 @@ def measure_resonator_frequency_dac_scan( analyze: bool = True, close_fig: bool = True, fluxChan=None, - label='', - disable_snapshot_metadata=False + label='' ): """ Performs the resonator spectroscopy as a function of the current applied @@ -4406,7 +4339,7 @@ def measure_resonator_frequency_dac_scan( MC.set_sweep_points_2D(dac_values) self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Resonator_dac_scan' + self.msmt_suffix + label, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Resonator_dac_scan' + self.msmt_suffix + label, mode='2D') if analyze: ma.TwoD_Analysis(label='Resonator_dac_scan', close_fig=close_fig) @@ -4422,8 +4355,7 @@ def measure_qubit_frequency_dac_scan( nested_resonator_calibration=False, nested_resonator_calibration_use_min=False, resonator_freqs=None, - trigger_idx=None, - disable_snapshot_metadata=False + trigger_idx=None ): """ Performs the qubit spectroscopy while changing the current applied @@ -4530,7 +4462,7 @@ def measure_qubit_frequency_dac_scan( self.int_avg_det_single._set_real_imag(False) # FIXME: changes state self.int_avg_det_single.always_prepare = True MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Qubit_dac_scan' + self.msmt_suffix, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Qubit_dac_scan' + self.msmt_suffix, mode='2D') if analyze: return ma.TwoD_Analysis( @@ -4545,8 +4477,7 @@ def _measure_spectroscopy_CW( analyze=True, close_fig=True, label='', - prepare_for_continuous_wave=True, - disable_snapshot_metadata=False): + prepare_for_continuous_wave=True): """ Does a CW spectroscopy experiment by sweeping the frequency of a microwave source. @@ -4592,7 +4523,7 @@ def _measure_spectroscopy_CW( else: self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='CW_spectroscopy' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='CW_spectroscopy' + self.msmt_suffix + label) self.hal_acq_spec_mode_off() @@ -4607,8 +4538,7 @@ def _measure_spectroscopy_pulsed_marked( close_fig=True, label='', prepare_for_continuous_wave=True, - trigger_idx=None, - disable_snapshot_metadata=False + trigger_idx=None ): """ Performs a spectroscopy experiment by triggering the spectroscopy source @@ -4652,7 +4582,7 @@ def _measure_spectroscopy_pulsed_marked( else: self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='pulsed_marker_spectroscopy' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='pulsed_marker_spectroscopy' + self.msmt_suffix + label) self.hal_acq_spec_mode_off() @@ -4670,8 +4600,7 @@ def _measure_spectroscopy_pulsed_mixer( analyze=True, close_fig=True, label='', - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ): """ Performs pulsed spectroscopy by modulating a cw pulse with a square @@ -4731,7 +4660,7 @@ def _measure_spectroscopy_pulsed_mixer( # d = self.int_avg_det # MC.set_detector_function(d) - MC.run(name='pulsed_mixer_spectroscopy' + self.msmt_suffix + label, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='pulsed_mixer_spectroscopy' + self.msmt_suffix + label) self.mw_channel_amp(old_channel_amp) @@ -4753,8 +4682,7 @@ def measure_anharmonicity( MC: Optional[MeasurementControl] = None, spec_source_2=None, mode='pulsed_marked', - step_size: int = 1e6, - disable_snapshot_metadata=False + step_size: int = 1e6 ): """ Measures the qubit spectroscopy as a function of frequency of the two @@ -4862,8 +4790,7 @@ def measure_anharmonicity_GBT( f_12_power=None, MC: Optional[MeasurementControl] = None, spec_source_2=None, - mode='pulsed_marked', - disable_snapshot_metadata=False + mode='pulsed_marked' ): """ Measures the qubit spectroscopy as a function of frequency of the two @@ -4971,8 +4898,7 @@ def measure_photon_nr_splitting_from_bus( freqs_01=None, powers=np.arange(-10, 10, 1), MC: Optional[MeasurementControl] = None, - spec_source_2=None, - disable_snapshot_metadata=False + spec_source_2=None ): """ Measures photon splitting of the qubit due to photons in the bus resonators. @@ -5034,8 +4960,7 @@ def measure_photon_nr_splitting_from_bus( def measure_ssro_vs_frequency_amplitude( self, freqs=None, amps_rel=np.linspace(0, 1, 11), nr_shots=4092 * 4, nested_MC: Optional[MeasurementControl] = None, analyze=True, - use_optimal_weights=False, label='SSRO_freq_amp_sweep', - disable_snapshot_metadata=False): + use_optimal_weights=False, label='SSRO_freq_amp_sweep'): """ Measures SNR and readout fidelities as a function of the readout pulse amplitude and frequency. Resonator depletion pulses are automatically scaled. @@ -5083,8 +5008,7 @@ def measure_ssro_vs_TWPA_frequency_power( powers, nr_shots=4092 * 4, nested_MC: Optional[MeasurementControl] = None, - analyze=True, - disable_snapshot_metadata=False + analyze=True ): """ Measures the SNR and readout fidelities as a function of the TWPA @@ -5122,7 +5046,7 @@ def measure_ssro_vs_TWPA_frequency_power( 'analyze': True, 'SNR_detector': True, 'cal_residual_excitation': True, 'prepare': False, - 'disable_snapshot_metadata': True + 'disable_metadata': True }, result_keys=['SNR', 'F_d', 'F_a'] ) @@ -5132,7 +5056,7 @@ def measure_ssro_vs_TWPA_frequency_power( nested_MC.set_sweep_function_2D(pump_source.power) nested_MC.set_sweep_points_2D(powers) label = 'SSRO_freq_amp_sweep' + self.msmt_suffix - nested_MC.run(label, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(label, mode='2D') self.cfg_prepare_ro_awg(old_ro_prepare_state) @@ -5145,8 +5069,7 @@ def measure_ssro_vs_pulse_length( nr_shots=4092 * 4, nested_MC: Optional[MeasurementControl] = None, analyze=True, - label_suffix: str = '', - disable_snapshot_metadata=False + label_suffix: str = '' ): """ Measures the SNR and readout fidelities as a function of the duration @@ -5186,7 +5109,7 @@ def measure_ssro_vs_pulse_length( nested_MC.set_sweep_points(lengths) nested_MC.set_detector_function(d) label = 'SSRO_length_sweep' + self.msmt_suffix + label_suffix - nested_MC.run(label, disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(label) if analyze: ma.MeasurementAnalysis(label=label, plot_all=False, auto=True) @@ -5199,8 +5122,7 @@ def measure_transients_CCL_switched( prepare: bool = True, depletion_analysis: bool = True, depletion_analysis_plot: bool = True, - depletion_optimization_window=None, - disable_snapshot_metadata=False + depletion_optimization_window=None ): if MC is None: MC = self.instr_MC.get_instr() @@ -5233,7 +5155,7 @@ def measure_transients_CCL_switched( MC.set_sweep_points(np.arange(self.input_average_detector.nr_samples) / sampling_rate) MC.set_detector_function(self.input_average_detector) - data = MC.run('Measure_transients{}_{}'.format(self.msmt_suffix, i), disable_snapshot_metadata=disable_snapshot_metadata) + data = MC.run('Measure_transients{}_{}'.format(self.msmt_suffix, i)) dset = data['dset'] transients.append(dset.T[1:]) if analyze: @@ -5252,14 +5174,13 @@ def measure_RO_QND( self, prepare_for_timedomain: bool = False, calibrate_optimal_weights: bool = False, - disable_snapshot_metadata=False ): # ensure readout settings are correct old_ro_type = self.ro_acq_weight_type() old_acq_type = self.ro_acq_digitized() if calibrate_optimal_weights: - self.calibrate_optimal_weights(prepare=False, disable_snapshot_metadata=disable_snapshot_metadata) + self.calibrate_optimal_weights(prepare=False) self.ro_acq_digitized(False) self.ro_acq_weight_type('optimal IQ') @@ -5284,7 +5205,7 @@ def measure_RO_QND( MC.set_sweep_function(s) MC.set_sweep_points(np.arange(int(uhfqc_max_avg/5)*5)) MC.set_detector_function(d) - MC.run(f"RO_QND_measurement_{self.name}", disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(f"RO_QND_measurement_{self.name}") self.ro_acq_weight_type(old_ro_type) self.ro_acq_digitized(old_acq_type) @@ -5294,29 +5215,27 @@ def measure_RO_QND( def calibrate_RO_QND( self, amps: list, - calibrate_optimal_weights: bool = False, - disable_snapshot_metadata=False + calibrate_optimal_weights: bool = False ): s = self.ro_pulse_amp d = det.Function_Detector(self.measure_RO_QND, result_keys=['P_QND', 'P_QNDp'], value_names=['P_QND', 'P_QNDp'], value_units=['a.u.', 'a.u.'], - msmt_kw={'calibrate_optimal_weights': calibrate_optimal_weights, 'disable_snapshot_metadata': disable_snapshot_metadata} + msmt_kw={'calibrate_optimal_weights': calibrate_optimal_weights} ) nested_MC = self.instr_nested_MC.get_instr() nested_MC.set_detector_function(d) nested_MC.set_sweep_function(s) nested_MC.set_sweep_points(amps) - nested_MC.run(f"RO_QND_sweep_{self.name}", disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(f"RO_QND_sweep_{self.name}") def measure_dispersive_shift_pulsed( self, freqs=None, MC: Optional[MeasurementControl] = None, analyze: bool = True, prepare: bool = True, - Pulse_comb: list=['off', 'on'], - disable_snapshot_metadata=False + Pulse_comb: list=['off', 'on'] ): # USED_BY: device_dependency_graphs_v2.py, # USED_BY: device_dependency_graphs @@ -5367,7 +5286,7 @@ def measure_dispersive_shift_pulsed( self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Resonator_scan_' + pulse_comb + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Resonator_scan_' + pulse_comb + self.msmt_suffix) if analyze: ma.MeasurementAnalysis() @@ -5396,8 +5315,7 @@ def measure_error_fraction( prepare: bool = True, feedback=False, depletion_time=None, - net_gate='pi', - disable_snapshot_metadata=False + net_gate='pi' ): """ This performs a multi round experiment, the repetition rate is defined @@ -5450,7 +5368,7 @@ def measure_error_fraction( depletion_time, self.ro_pulse_type(), feedback, net_gate) MC.run( 'RTE_{}_{}'.format(self.msmt_suffix, suffix), - exp_metadata=exp_metadata, disable_snapshot_metadata=disable_snapshot_metadata + exp_metadata=exp_metadata ) # restore parameters @@ -5479,8 +5397,7 @@ def measure_msmt_induced_dephasing( cross_target_qubits: list = None, multi_qubit_platf_cfg=None, target_qubit_excited=False, - extra_echo=False, - disable_snapshot_metadata=False + extra_echo=False ): # Refs: # Schuster PRL 94, 123602 (2005) @@ -5554,7 +5471,7 @@ def measure_msmt_induced_dephasing( MC.set_sweep_points(angles) d = self.int_avg_det MC.set_detector_function(d) - MC.run(sequence + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(sequence + label + self.msmt_suffix) if analyze: a = ma.Ramsey_Analysis( @@ -5588,8 +5505,7 @@ def measure_CPMG( close_fig=True, update=False, label: str = '', - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ): if MC is None: MC = self.instr_MC.get_instr() @@ -5679,7 +5595,7 @@ def measure_CPMG( msmt_title = 'CPMG_order_' + str(orders) + label + self.msmt_suffix elif sweep == 'order': msmt_title = 'CPMG_tauN_' + str(times) + label + self.msmt_suffix - MC.run(msmt_title, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(msmt_title) if analyze: # N.B. v1.5 analysis @@ -5703,8 +5619,7 @@ def measure_spin_locking_simple( label: str = '', prepare_for_timedomain=True, tomo=False, - mw_gate_duration: float = 40e-9, - disable_snapshot_metadata=False + mw_gate_duration: float = 40e-9 ): if MC is None: MC = self.instr_MC.get_instr() @@ -5764,7 +5679,7 @@ def measure_spin_locking_simple( MC.set_sweep_function(s) MC.set_sweep_points(times) MC.set_detector_function(d) - MC.run('spin_lock_simple' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('spin_lock_simple' + label + self.msmt_suffix) if analyze: a = ma.T1_Analysis(label='spin_lock_simple', auto=True, close_fig=True) @@ -5779,8 +5694,7 @@ def measure_spin_locking_echo( close_fig=True, update=True, label: str = '', - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ): if MC is None: MC = self.instr_MC.get_instr() @@ -5829,7 +5743,7 @@ def measure_spin_locking_echo( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('spin_lock_echo' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('spin_lock_echo' + label + self.msmt_suffix) if analyze: a = ma.T1_Analysis(label='spin_lock_echo', auto=True, close_fig=True) @@ -5846,8 +5760,7 @@ def measure_rabi_frequency( label: str = '', prepare_for_timedomain=True, tomo=False, - mw_gate_duration: float = 40e-9, - disable_snapshot_metadata=False + mw_gate_duration: float = 40e-9 ): if MC is None: MC = self.instr_MC.get_instr() @@ -5911,7 +5824,7 @@ def measure_rabi_frequency( MC.set_sweep_points(times) d = self.int_avg_det MC.set_detector_function(d) - MC.run('rabi_frequency' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('rabi_frequency' + label + self.msmt_suffix) if analyze: a = ma.Echo_analysis_V15(label='rabi_frequency', auto=True, close_fig=True) @@ -5927,8 +5840,7 @@ def measure_single_qubit_randomized_benchmarking( prepare_for_timedomain: bool = True, ignore_f_cal_pts: bool = False, compile_only: bool = False, - rb_tasks=None, - disable_snapshot_metadata=False + rb_tasks=None ): # USED_BY: inspire_dependency_graph.py, """ @@ -6048,7 +5960,7 @@ def send_rb_tasks(pool_): d.prepare_function_kwargs = prepare_function_kwargs d.nr_shots = reps_per_seed * len(sweep_points) MC.set_detector_function(d) - MC.run('RB_{}seeds'.format(nr_seeds) + self.msmt_suffix, exp_metadata={'bins': sweep_points}, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('RB_{}seeds'.format(nr_seeds) + self.msmt_suffix, exp_metadata={'bins': sweep_points}) a = ma2.RandomizedBenchmarking_SingleQubit_Analysis( label='RB_', @@ -6073,8 +5985,7 @@ def measure_randomized_benchmarking_old( close_fig=True, verbose: bool = True, upload=True, - update=True, - disable_snapshot_metadata=False + update=True ): # USED_BY: device_dependency_graphs_v2.py, @@ -6123,7 +6034,7 @@ def measure_randomized_benchmarking_old( d.prepare_function_kwargs = prepare_function_kwargs d.nr_averages = 128 MC.set_detector_function(d) - MC.run('RB_{}seeds'.format(nr_seeds) + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('RB_{}seeds'.format(nr_seeds) + self.msmt_suffix) if double_curves: a = ma.RB_double_curve_Analysis( @@ -6149,8 +6060,7 @@ def measure_ef_rabi_2D( label: str = '', analyze=True, close_fig=True, - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ): """ Measures a rabi oscillation of the ef/12 transition. @@ -6186,7 +6096,7 @@ def measure_ef_rabi_2D( MC.set_sweep_points_2D(anharmonicity) d = self.int_avg_det MC.set_detector_function(d) - MC.run('ef_rabi_2D' + label + self.msmt_suffix, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('ef_rabi_2D' + label + self.msmt_suffix, mode='2D') if analyze: a = ma.TwoD_Analysis() @@ -6201,8 +6111,7 @@ def measure_ef_rabi( label: str = '', analyze=True, close_fig=True, - prepare_for_timedomain=True, - disable_snapshot_metadata=False + prepare_for_timedomain=True ): """ Measures a rabi oscillation of the ef/12 transition. @@ -6237,7 +6146,7 @@ def measure_ef_rabi( MC.set_sweep_points(p.sweep_points) d = self.int_avg_det MC.set_detector_function(d) - MC.run('ef_rabi' + label + self.msmt_suffix, disable_snapshot_metadata=disable_snapshot_metadata) + MC.run('ef_rabi' + label + self.msmt_suffix) if analyze: a2 = ma2.EFRabiAnalysis(close_figs=True, label='ef_rabi') @@ -6253,8 +6162,7 @@ def measure_gst_1Q( maxL: int = 256, MC: Optional[MeasurementControl] = None, recompile='as needed', - prepare_for_timedomain: bool = True, - disable_snapshot_metadata=False + prepare_for_timedomain: bool = True ): """ Performs single qubit Gate Set Tomography experiment of the StdXYI gateset. @@ -6329,7 +6237,7 @@ def measure_gst_1Q( MC.set_sweep_function(s) MC.set_sweep_points(shots) MC.set_detector_function(d) - MC.run('Single_qubit_GST_L{}_{}'.format(maxL, self.msmt_suffix), disable_snapshot_metadata=disable_snapshot_metadata, + MC.run('Single_qubit_GST_L{}_{}'.format(maxL, self.msmt_suffix), exp_metadata={'bins': sweep_points, 'gst_exp_list_filename': exp_list_fn}) a = ma2.GST_SingleQubit_DataExtraction(label='Single_qubit_GST') @@ -6342,8 +6250,7 @@ def measure_flux_arc_tracked_spectroscopy( polycoeffs=None, MC: Optional[MeasurementControl] = None, nested_MC: Optional[MeasurementControl] = None, - fluxChan=None, - disable_snapshot_metadata=False + fluxChan=None ): """ Creates a qubit DAC arc by fitting a polynomial function through qubit @@ -6420,7 +6327,7 @@ def measure_flux_arc_tracked_spectroscopy( MC.set_sweep_function(dac_par) MC.set_sweep_points(dac_values) MC.set_detector_function(d) - MC.run(name='Tracked_Spectroscopy', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Tracked_Spectroscopy') def measure_msmt_induced_dephasing_sweeping_amps( @@ -6433,8 +6340,7 @@ def measure_msmt_induced_dephasing_sweeping_amps( verbose: bool = True, sequence='ramsey', target_qubit_excited=False, - extra_echo=False, - disable_snapshot_metadata=False + extra_echo=False ): if nested_MC is None: nested_MC = self.instr_nested_MC.get_instr() @@ -6522,7 +6428,7 @@ def measure_msmt_induced_dephasing_sweeping_amps( nested_MC.set_detector_function(d) label = 'ro_amp_sweep_dephasing' + self.msmt_suffix - nested_MC.run(label, disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(label) # Restore qubit objects parameters to previous settings self.ro_pulse_type(old_waveform_name) @@ -6540,8 +6446,7 @@ def measure_SNR_sweeping_amps( amps_rel, nr_shots=2 * 4094, nested_MC: Optional[MeasurementControl] = None, - analyze=True, - disable_snapshot_metadata=False + analyze=True ): """ Measures SNR and readout fidelities as a function of the readout pulse @@ -6590,7 +6495,7 @@ def measure_SNR_sweeping_amps( nested_MC.set_sweep_points(amps_rel) nested_MC.set_detector_function(d) label = 'ro_amp_sweep_SNR' + self.msmt_suffix - nested_MC.run(label, disable_snapshot_metadata=disable_snapshot_metadata) + nested_MC.run(label) # restore parameters self.cfg_prepare_ro_awg(old_ro_prepare_state) @@ -6605,8 +6510,7 @@ def measure_quantum_efficiency( nr_shots=2 * 4094, analyze=True, verbose=True, - dephasing_sequence='ramsey', - disable_snapshot_metadata=False + dephasing_sequence='ramsey' ): # requires the cc light to have the readout time configured equal # to the measurement and depletion time + 60 ns buffer @@ -6619,8 +6523,7 @@ def measure_quantum_efficiency( self.measure_msmt_induced_dephasing_sweeping_amps( amps_rel=amps_rel, analyze=False, - sequence=dephasing_sequence, - disable_snapshot_metadata=disable_snapshot_metadata + sequence=dephasing_sequence ) readout_pulse_length = self.ro_pulse_length() readout_pulse_length += self.ro_pulse_down_length0() @@ -6636,13 +6539,11 @@ def measure_quantum_efficiency( cal_residual_excitation=True, SNR_detector=True, nr_shots=nr_shots, - update_threshold=False, - disable_snapshot_metadata=disable_snapshot_metadata + update_threshold=False ) self.measure_SNR_sweeping_amps( amps_rel=amps_rel, - analyze=False, - disable_snapshot_metadata=disable_snapshot_metadata + analyze=False ) end_time = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") @@ -6688,8 +6589,7 @@ def bus_frequency_flux_sweep( close_fig=True, analyze=True, MC: Optional[MeasurementControl] = None, - prepare_for_continuous_wave=True, - disable_snapshot_metadata=False + prepare_for_continuous_wave=True ): """ Drive the qubit and sit at the spectroscopy peak while the bus is driven with @@ -6769,7 +6669,7 @@ def bus_frequency_flux_sweep( else: self.int_avg_det_single._set_real_imag(False) # FIXME: changes state MC.set_detector_function(self.int_avg_det_single) - MC.run(name='Bus_flux_sweep_' + self.msmt_suffix + label, mode='2D', disable_snapshot_metadata=disable_snapshot_metadata) + MC.run(name='Bus_flux_sweep_' + self.msmt_suffix + label, mode='2D') spec_source_bus.off() # FIXME: spec_source not touched @@ -6779,8 +6679,7 @@ def bus_frequency_flux_sweep( ma.TwoD_Analysis(label=self.msmt_suffix, close_fig=close_fig) - def check_qubit_spectroscopy(self, freqs=None, MC=None, - disable_snapshot_metadata=False): + def check_qubit_spectroscopy(self, freqs=None, MC=None): """ Check the qubit frequency with spectroscopy of 15 points. @@ -6798,8 +6697,7 @@ def check_qubit_spectroscopy(self, freqs=None, MC=None, freqs = np.linspace(freq_center - freq_span / 2, freq_center + freq_span / 2, 15) - self.measure_spectroscopy(MC=MC, freqs=freqs, - disable_snapshot_metadata=disable_snapshot_metadata) + self.measure_spectroscopy(MC=MC, freqs=freqs) label = 'spec' a = ma.Qubit_Spectroscopy_Analysis( @@ -6817,8 +6715,7 @@ def check_qubit_spectroscopy(self, freqs=None, MC=None, return result - def check_rabi(self, MC: Optional[MeasurementControl] = None, amps=None, - disable_snapshot_metadata=False): + def check_rabi(self, MC: Optional[MeasurementControl] = None, amps=None): """ Takes 5 equidistantly space points: 3 before channel amp, one at channel amp and one after. Compares them with the expected Rabi curve @@ -6827,14 +6724,12 @@ def check_rabi(self, MC: Optional[MeasurementControl] = None, amps=None, if amps is None: amps = np.linspace(0, 4 / 3 * self.mw_channel_amp(), 5) - amp = self.measure_rabi(MC=MC, amps=amps, analyze=False, - disable_snapshot_metadata=disable_snapshot_metadata) + amp = self.measure_rabi(MC=MC, amps=amps, analyze=False) old_amp = self.mw_channel_amp() return np.abs(amp - old_amp) - def check_ramsey(self, MC: Optional[MeasurementControl] = None, times=None, artificial_detuning=None, - disable_snapshot_metadata=False): + def check_ramsey(self, MC: Optional[MeasurementControl] = None, times=None, artificial_detuning=None): # USED_BY: device_dependency_graphs.py if artificial_detuning is None: @@ -6844,8 +6739,7 @@ def check_ramsey(self, MC: Optional[MeasurementControl] = None, times=None, arti times = np.linspace(0, 0.5 / artificial_detuning, 6) a = self.measure_ramsey(times=times, MC=MC, - artificial_detuning=artificial_detuning, - disable_snapshot_metadata=disable_snapshot_metadata) + artificial_detuning=artificial_detuning) freq = a['frequency'] check_result = (freq - self.freq_qubit()) / freq return check_result @@ -6856,8 +6750,7 @@ def create_ssro_detector( calibrate_optimal_weights: bool = False, prepare_function=None, prepare_function_kwargs: dict = None, - ssro_kwargs: dict = None, - disable_snapshot_metadata=False + ssro_kwargs: dict = None ): """ Wraps measure_ssro using the Function Detector. @@ -6870,7 +6763,7 @@ def create_ssro_detector( 'nr_shots_per_case': 8192, 'analyze': True, 'prepare': False, - 'disable_snapshot_metadata': True + 'disable_metadata': True } if not calibrate_optimal_weights: diff --git a/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py b/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py index a80875ae0d..969f717305 100644 --- a/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py +++ b/pycqed/instrument_drivers/meta_instrument/qubit_objects/qubit_object.py @@ -553,8 +553,7 @@ def find_resonators( timeout=200, f_step=1e6, with_VNA=None, - verbose=True, - disable_snapshot_metadata=disable_snapshot_metadata + verbose=True ): # USED_BY: device_dependency_graphs.py, """ @@ -582,7 +581,7 @@ def find_resonators( raise NotImplementedError else: freqs = np.arange(start_freq, stop_freq + f_step, f_step) - self.measure_heterodyne_spectroscopy(freqs=freqs, analyze=False, disable_snapshot_metadata=disable_snapshot_metadata) + self.measure_heterodyne_spectroscopy(freqs=freqs, analyze=False) result = ma2.sa.Initial_Resonator_Scan_Analysis() # Create resonator list @@ -1213,8 +1212,7 @@ def find_frequency( update=True, close_fig=True, MC=None, - label='', - disable_snapshot_metadata=disable_snapshot_metadata + label='' ): # USED_BY: device_dependency_graphs.py """ @@ -1270,7 +1268,7 @@ def find_frequency( # args here should be handed down from the top. self.measure_spectroscopy(freqs, mode=spec_mode, MC=MC, analyze=False, label = label, - close_fig=close_fig, disable_snapshot_metadata=disable_snapshot_metadata) + close_fig=close_fig) label = 'spec' analysis_spec = ma.Qubit_Spectroscopy_Analysis( @@ -1306,7 +1304,7 @@ def find_frequency( return self.calibrate_frequency_ramsey( steps=steps, artificial_periods=artificial_periods, verbose=verbose, update=update, - close_fig=close_fig, disable_snapshot_metadata=disable_snapshot_metadata) + close_fig=close_fig) return analysis_spec.fitted_freq def calibrate_spec_pow( @@ -1315,7 +1313,7 @@ def calibrate_spec_pow( start_power=-55, power_step=5, threshold=0.5, - verbose=True, disable_snapshot_metadata=disable_snapshot_metadata + verbose=True ): # USED_BY: device_dependency_graphs.py """ @@ -1335,7 +1333,7 @@ def calibrate_spec_pow( while w < (1 + threshold) * w0: self.spec_pow(power) self.measure_spectroscopy(freqs=freqs, analyze=False, - label='spec_pow_' + str(power) + '_dBm', disable_snapshot_metadata=disable_snapshot_metadata) + label='spec_pow_' + str(power) + '_dBm') a = ma.Qubit_Spectroscopy_Analysis(label=self.msmt_suffix, qb_name=self.name) @@ -1397,8 +1395,7 @@ def calibrate_frequency_ramsey( verbose: bool = True, update: bool = True, close_fig: bool = True, - test_beating: bool = True, - disable_snapshot_metadata=disable_snapshot_metadata + test_beating: bool = True ): # USED_BY: inspire_dependency_graph.py, # USED_BY: device_dependency_graphs_v2.py, @@ -1430,8 +1427,7 @@ def calibrate_frequency_ramsey( freq_qubit=cur_freq, label='_{}pulse_sep'.format(n), analyze=False, - prepare_for_timedomain=True if 0 == i else False, - disable_snapshot_metadata=disable_snapshot_metadata) + prepare_for_timedomain=True if 0 == i else False) a = ma.Ramsey_Analysis(auto=True, close_fig=close_fig, freq_qubit=cur_freq, artificial_detuning=artificial_detuning, From d65b59394558643d558628c2812cd282a8387ef6 Mon Sep 17 00:00:00 2001 From: savalless Date: Wed, 24 Aug 2022 14:26:01 +0200 Subject: [PATCH 11/12] Fixed global -1 factor missing --- pycqed/analysis_v2/resZZ_analysis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pycqed/analysis_v2/resZZ_analysis.py b/pycqed/analysis_v2/resZZ_analysis.py index e584bc3507..4acba3196b 100644 --- a/pycqed/analysis_v2/resZZ_analysis.py +++ b/pycqed/analysis_v2/resZZ_analysis.py @@ -204,9 +204,9 @@ def prepare_plots(self): plot_phase = fit_res_params['phase'].value * scale_phase if plot_phase >= 0: - self.resZZ = plot_frequency - else: self.resZZ = -1*plot_frequency + else: + self.resZZ = plot_frequency self.plot_dicts['ResZZ_box'] = { 'ax_id': f"Control_{control_qubit}", From e7cf8327a8c08e943170f0a4a938c6bf0784e818 Mon Sep 17 00:00:00 2001 From: MiniSean <18538762+MiniSean@users.noreply.github.com> Date: Wed, 24 Aug 2022 15:12:52 +0200 Subject: [PATCH 12/12] Disabled code coverage report uploading as it fails workflow. Likely project token issue. --- .github/workflows/python_test.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/python_test.yml b/.github/workflows/python_test.yml index fdf6921889..d85f32b708 100644 --- a/.github/workflows/python_test.yml +++ b/.github/workflows/python_test.yml @@ -56,9 +56,9 @@ jobs: - name: Test with pytest run: | py.test pycqed/tests --cov=pycqed --cov-report xml --cov-report html --cov-config=.coveragerc - - name: Upload code coverage report - run: | - bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r coverage.xml - codecov - env: # set secrets as environmental variables - CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }} +# - name: Upload code coverage report +# run: | +# bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r coverage.xml +# codecov +# env: # set secrets as environmental variables +# CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}