def test_Qubit_spectroscopy_analysis_one_peak(self): a = ma.Qubit_Spectroscopy_Analysis(timestamp='20170929_175516') self.assertAlmostEqual(a.fit_res.values['f0'] / 1e9, 6.11181, places=2) self.assertAlmostEqual(a.fit_res.values['kappa'] / 1e6, 0.332, places=2)
def test_Qubit_spectroscopy_analysis_two_peaks(self): a = ma.Qubit_Spectroscopy_Analysis( timestamp='20170929_144754', analyze_ef=True) self.assertAlmostEqual(a.fit_res.values['f0']/1e9, 6.11089, places=2) self.assertAlmostEqual(a.fit_res.values['kappa']/1e6, 17, places=0) self.assertAlmostEqual( a.fit_res.values['f0_gf_over_2']/1e9, 5.998, places=2) self.assertAlmostEqual( a.fit_res.values['kappa_gf_over_2']/1e6, 1.6, places=1)
def measure_pulsed_spectroscopy(self, freqs, MC=None, analyze=True, return_detector=False, close_fig=True, upload=True, update=True, use_max=False): """ Measure pulsed spec with the qubit. Accepts a manual sequence parameters, which has to be a call to a pulse generation allowing for alternative sequences to be played instead of the standard one """ self.prepare_for_pulsed_spec() self.heterodyne_instr.get_instr()._disable_auto_seq_loading = True self.cw_source.get_instr().pulsemod_state.set('On') self.cw_source.get_instr().power.set(self.spec_pow_pulsed.get()) self.cw_source.get_instr().on() if MC is None: MC = self.MC.get_instr() spec_pars, RO_pars = self.get_spec_pars() # Upload the AWG sequence sq.Pulsed_spec_seq(spec_pars, RO_pars) self.AWG.get_instr().start() if return_detector: return det.Heterodyne_probe(self.heterodyne_instr.get_instr()) else: MC.set_sweep_function(pw.wrap_par_to_swf( self.cw_source.get_instr().frequency, retrieve_value=True)) MC.set_sweep_points(freqs) MC.set_detector_function( det.Heterodyne_probe(self.heterodyne_instr.get_instr())) MC.run(name='pulsed-spec'+self.msmt_suffix) if analyze or update: ma_obj = ma.Qubit_Spectroscopy_Analysis( auto=True, label='pulsed', close_fig=close_fig) if use_max: f_qubit = ma_obj.peaks['peak'] else: f_qubit = ma_obj.fitted_freq if update: self.f_qubit(f_qubit) self.cw_source.get_instr().off() return f_qubit
def find_frequency(self, method='spectroscopy', pulsed=False, steps=[1, 3, 10, 30, 100, 300, 1000], freqs=None, f_span=100e6, use_max=False, f_step=1e6, verbose=True, update=True, close_fig=True): """ Finds the qubit frequency using either the spectroscopy or the Ramsey method. Frequency prediction is done using """ if method.lower() == 'spectroscopy': if freqs is None: f_qubit_estimate = self.calculate_frequency() freqs = np.arange(f_qubit_estimate - f_span / 2, f_qubit_estimate + f_span / 2, f_step) # args here should be handed down from the top. self.measure_spectroscopy(freqs, pulsed=pulsed, MC=None, analyze=True, close_fig=close_fig) if pulsed: label = 'pulsed-spec' else: label = 'spectroscopy' analysis_spec = ma.Qubit_Spectroscopy_Analysis(label=label, close_fig=True) if update: if use_max: self.f_qubit(analysis_spec.peaks['peak']) else: self.f_qubit(analysis_spec.fitted_freq) # TODO: add updating and fitting elif method.lower() == 'ramsey': return self.calibrate_frequency_ramsey(steps=steps, verbose=verbose, update=update, close_fig=close_fig) return self.f_qubit()
def setUpClass(self): self.datadir = os.path.join(pq.__path__[0], 'tests', 'test_data') ma.a_tools.datadir = self.datadir self.a_pk = ma.Qubit_Spectroscopy_Analysis(timestamp='20170412_163359')