def go(self): if self.liveplot_enabled: self.plotter.clear() print("Prep Instruments") self.readout.set_output(True) self.readout.set_power(self.cfg['readout']['power']) self.readout.set_ext_pulse(mod=False) try: self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) except: print("error in setting digital attenuator") self.readout.set_frequency(self.cfg['readout']['frequency']) self.readout_shifter.set_phase((self.cfg['readout']['start_phase'])%360, self.cfg['readout']['frequency']) self.drive.set_output(True) self.drive.set_power(self.cfg['drive']['power']) self.drive.set_ext_pulse(mod=False) try: self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'],self.cfg[self.expt_cfg_name]['iq_offsets']) except: print("error in setting awg") print("Prep Card") adc = Alazar(self.cfg['alazar']) for freq in self.expt_pts: self.drive.set_frequency(freq) expt_data_ch1 = None expt_data_ch2 = None expt_data_mag = None for ii in tqdm(arange(max(1, self.cfg[self.expt_cfg_name]['averages'] / 100))): tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts ** 2 + ch2_pts ** 2) if expt_data_ch1 is None: expt_data_ch1 = ch1_pts expt_data_ch2 = ch2_pts else: expt_data_ch1 = (expt_data_ch1 * ii + ch1_pts) / (ii + 1.0) expt_data_ch2 = (expt_data_ch2 * ii + ch2_pts) / (ii + 1.0) expt_mag = sqrt(expt_data_ch1 ** 2 + expt_data_ch2 ** 2) if self.liveplot_enabled: self.plotter.append_xy('readout_avg_freq_scan1', freq, mean(expt_data_ch1[0:])) self.plotter.append_xy('readout_avg_freq_scan2', freq, mean(expt_data_ch2[0:])) self.plotter.append_xy('readout_avg_freq_scan_mag', freq, mean(expt_mag[0:])) self.plotter.append_z('scope1', expt_data_ch1) self.plotter.append_z('scope2', expt_data_ch2) self.plotter.append_z('scope_mag', expt_mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean(expt_data_ch1[0:])) f.append_pt('ch2_mean', mean(expt_data_ch2[0:])) f.append_pt('mag_mean', mean(expt_mag[0:]))
def go(self): self.plotter.clear() print("Prep Instruments") self.readout.set_output(True) self.readout.set_power(self.cfg['readout']['power']) if (self.cfg[self.expt_cfg_name]['pulsed']): self.readout.set_ext_pulse(mod=True) else: self.readout.set_ext_pulse(mod=False) if (self.cfg[self.expt_cfg_name]['pi_pulse']): self.drive.set_output(True) self.drive.set_ext_pulse(mod=True) else: self.drive.set_output(False) self.drive.set_ext_pulse(mod=False) # self.drive.set_ext_pulse(mod=False) self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'], self.cfg['cal']['iq_offsets']) self.awg.run() print("Prep Card") adc = Alazar(self.cfg['alazar']) for freq in self.expt_pts: self.readout.set_frequency(freq) self.readout_shifter.set_phase( (self.cfg['readout']['start_phase'] + self.cfg['readout']['phase_slope'] * (freq - self.cfg['readout']['frequency'])) % 360, freq) # print self.readout_shifter.get_phase() tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts**2 + ch2_pts**2) self.plotter.append_xy('readout_avg_freq_scan1', freq, mean(ch1_pts[0:])) self.plotter.append_xy('readout_avg_freq_scan2', freq, mean(ch2_pts[0:])) self.plotter.append_xy('readout_avg_freq_scan_mag', freq, mean(mag[0:])) self.plotter.append_z('scope1', ch1_pts) self.plotter.append_z('scope2', ch2_pts) self.plotter.append_z('scope_mag', mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean(ch1_pts[0:])) f.append_pt('ch2_mean', mean(ch2_pts[0:])) f.append_pt('mag_mean', mean(mag[0:]))
def go(self): self.plotter.clear() print("Prep Instruments") self.readout.set_output(True) self.readout.set_power(self.cfg['readout']['power']) if (self.cfg[self.expt_cfg_name]['pulsed']): self.readout.set_ext_pulse(mod=True) else: self.readout.set_ext_pulse(mod=False) if (self.cfg[self.expt_cfg_name]['pi_pulse']): self.drive.set_output(True) self.drive.set_ext_pulse(mod=True) else: self.drive.set_output(False) self.drive.set_ext_pulse(mod=False) # self.drive.set_ext_pulse(mod=False) self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'], self.cfg['cal']['iq_offsets']) self.awg.run() print("Prep Card") adc = Alazar(self.cfg['alazar']) for freq in self.expt_pts: self.readout.set_frequency(freq) self.readout_shifter.set_phase((self.cfg['readout']['start_phase'] + self.cfg['readout']['phase_slope'] * (freq - self.cfg['readout']['frequency']))%360, freq) # print self.readout_shifter.get_phase() tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts**2+ch2_pts**2) self.plotter.append_xy('readout_avg_freq_scan1', freq, mean(ch1_pts[0:])) self.plotter.append_xy('readout_avg_freq_scan2', freq, mean(ch2_pts[0:])) self.plotter.append_xy('readout_avg_freq_scan_mag', freq, mean(mag[0:])) self.plotter.append_z('scope1',ch1_pts) self.plotter.append_z('scope2',ch2_pts) self.plotter.append_z('scope_mag',mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean(ch1_pts[0:])) f.append_pt('ch2_mean', mean(ch2_pts[0:])) f.append_pt('mag_mean', mean(mag[0:]))
def go(self): self.plotter.clear() # self.save_config() print "Prep Instruments" self.readout.set_frequency(self.cfg['readout']['frequency']) self.readout.set_power(self.cfg['readout']['power']) self.readout.set_ext_pulse(mod=True) self.readout_shifter.set_phase(self.cfg['readout']['start_phase']%360, self.cfg['readout']['frequency']) self.drive.set_power(self.cfg['drive']['power']) self.drive.set_ext_pulse(mod=True) self.drive.set_output(True) self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'], self.cfg['cal']['iq_offsets']) self.awg.run() print "Prep Card" adc = Alazar(self.cfg['alazar']) for freq in self.expt_pts: self.drive.set_frequency(freq) tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts**2+ch2_pts**2) self.plotter.append_xy('avg_pulse_probe_freq_scan1', freq, mean(ch1_pts[0:])) self.plotter.append_xy('avg_pulse_probe_freq_scan2', freq, mean(ch2_pts[0:])) self.plotter.append_xy('avg_pulse_probe_freq_mag', freq, mean(mag[0:])) self.plotter.append_z('scope1',ch1_pts) self.plotter.append_z('scope2',ch2_pts) self.plotter.append_z('scope_mag',mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean(ch1_pts[0:])) f.append_pt('ch2_mean', mean(ch2_pts[0:])) f.append_pt('mag_mean', mean(mag[0:]))
def go(self): self.plotter.clear() print "Prep Instruments" self.readout.set_output(True) self.readout.set_power(self.cfg["readout"]["power"]) self.readout.set_ext_pulse(mod=False) self.readout_atten.set_attenuator(self.cfg["readout"]["dig_atten"]) self.readout.set_frequency(self.cfg["readout"]["frequency"]) self.readout_shifter.set_phase((self.cfg["readout"]["start_phase"]) % 360, self.cfg["readout"]["frequency"]) self.drive.set_output(True) self.drive.set_power(self.cfg["drive"]["power"]) self.drive.set_ext_pulse(mod=False) self.awg.set_amps_offsets(self.cfg["cal"]["iq_amps"], self.cfg[self.expt_cfg_name]["iq_offsets"]) print "Prep Card" adc = Alazar(self.cfg["alazar"]) for freq in self.expt_pts: self.drive.set_frequency(freq) tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts ** 2 + ch2_pts ** 2) self.plotter.append_xy("avg_cw_drive_freq_scan1", freq, mean(ch1_pts[0:])) self.plotter.append_xy("avg_cw_drive_freq_scan2", freq, mean(ch2_pts[0:])) self.plotter.append_xy("avg_cw_drive_freq_scan_mag", freq, mean(mag[0:])) self.plotter.append_z("scope1", ch1_pts) self.plotter.append_z("scope2", ch2_pts) self.plotter.append_z("scope_mag", mag) with self.datafile() as f: f.append_pt("freq", freq) f.append_pt("ch1_mean", mean(ch1_pts[0:])) f.append_pt("ch2_mean", mean(ch2_pts[0:])) f.append_pt("mag_mean", mean(mag[0:]))
def go(self): if self.liveplot_enabled: self.plotter.clear() # self.save_config() print("Prep Instruments") self.readout.set_frequency(self.cfg['readout']['frequency']-self.cfg['readout']['heterodyne_freq']) self.readout.set_power(self.cfg['readout']['power']) self.readout.set_ext_pulse(mod=self.cfg['readout']['mod']) self.readout.set_output(True) self.readout_shifter.set_phase(self.cfg['readout']['start_phase']%360, self.cfg['readout']['frequency']) self.drive.set_power(self.cfg['drive']['power']) self.drive.set_ext_pulse(mod=self.cfg['drive']['mod']) self.drive.set_output(True) try: self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) except: print("error in setting digital attenuator") try: self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'], self.cfg['cal']['iq_offsets']) self.awg.run() except: print("error in setting awg") print("Prep Card") adc = Alazar(self.cfg['alazar']) for freq in self.expt_pts: self.drive.set_frequency(freq-self.cfg[self.expt_cfg_name]['iq_freq']) expt_data_ch1 = None expt_data_ch2 = None expt_data_mag = None for ii in tqdm(arange(max(1, self.cfg[self.expt_cfg_name]['averages'] / 100))): tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts ** 2 + ch2_pts ** 2) if expt_data_ch1 is None: expt_data_ch1 = ch1_pts expt_data_ch2 = ch2_pts else: expt_data_ch1 = (expt_data_ch1 * ii + ch1_pts) / (ii + 1.0) expt_data_ch2 = (expt_data_ch2 * ii + ch2_pts) / (ii + 1.0) expt_mag = sqrt(expt_data_ch1 ** 2 + expt_data_ch2 ** 2) if self.liveplot_enabled: self.plotter.append_xy('readout_avg_freq_scan1', freq, mean(expt_data_ch1[0:])) self.plotter.append_xy('readout_avg_freq_scan2', freq, mean(expt_data_ch2[0:])) self.plotter.append_xy('readout_avg_freq_scan_mag', freq, mean(expt_mag[0:])) self.plotter.append_z('scope1', expt_data_ch1) self.plotter.append_z('scope2', expt_data_ch2) self.plotter.append_z('scope_mag', expt_mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean(expt_data_ch1[0:])) f.append_pt('ch2_mean', mean(expt_data_ch2[0:])) f.append_pt('mag_mean', mean(expt_mag[0:]))
def go(self): if self.liveplot_enabled: self.plotter.clear() print("Prep Instruments") self.readout.set_output(True) self.readout.set_power(self.cfg['readout']['power']) if (self.cfg[self.expt_cfg_name]['pulsed']): self.readout.set_ext_pulse(mod=True) else: self.readout.set_ext_pulse(mod=False) try: self.drive.set_frequency( self.cfg['qubit']['frequency'] - self.cfg['pulse_info'][self.pulse_type]['iq_freq']) self.drive.set_power(self.cfg['drive']['power']) self.drive.set_ext_pulse(mod=self.cfg['drive']['mod']) if (self.cfg[self.expt_cfg_name]['pi_pulse']): self.drive.set_output(True) else: self.drive.set_output(False) print("Drive set successfully..") except: print("No drive found") self.drive.set_ext_pulse(mod=False) try: self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) except: print("Error in setting digital attenuator.") try: self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'], self.cfg['cal']['iq_offsets']) self.awg.run() except: print("error in setting self.awg") print("Prep Card") adc = Alazar(self.cfg['alazar']) for freq in self.expt_pts: self.readout.set_frequency(freq - self.cfg['readout']['heterodyne_freq']) self.readout_shifter.set_phase( (self.cfg['readout']['start_phase'] + self.cfg['readout']['phase_slope'] * (freq - self.cfg['readout']['frequency'])) % 360, freq) # print self.readout_shifter.get_phase() expt_data_ch1 = None expt_data_ch2 = None expt_data_mag = None for ii in tqdm( arange( max(1, self.cfg[self.expt_cfg_name]['averages'] / 100))): tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts**2 + ch2_pts**2) if expt_data_ch1 is None: expt_data_ch1 = ch1_pts expt_data_ch2 = ch2_pts else: expt_data_ch1 = (expt_data_ch1 * ii + ch1_pts) / (ii + 1.0) expt_data_ch2 = (expt_data_ch2 * ii + ch2_pts) / (ii + 1.0) expt_mag = sqrt(expt_data_ch1**2 + expt_data_ch2**2) # todo: fix heterodyne - need to take cos/sin of one channel # todo: & excise window if self.cfg['readout']['heterodyne_freq'] == 0: # homodyne mean_ch1 = mean(expt_data_ch1) mean_ch2 = mean(expt_data_ch2) mean_mag = mean(expt_mag) else: # heterodyne heterodyne_freq = self.cfg['readout']['heterodyne_freq'] # ifft by numpy default has the correct 1/N normalization fft_ch1 = np.abs(np.fft.ifft(expt_data_ch1)) fft_ch2 = np.abs(np.fft.ifft(expt_data_ch2)) fft_mag = np.abs(np.fft.ifft(expt_mag)) hetero_f_ind = int(round(heterodyne_freq * tpts.size * 1e-9)) # position in ifft # todo: single freq v.s. finite freq window (latter: more robust but noisier and with distortion) # expt_avg_data = np.average(expt_data_fft_amp[:, (hetero_f_ind - 1):(hetero_f_ind + 1)], axis=1) mean_ch1 = fft_ch1[hetero_f_ind] mean_ch2 = fft_ch2[hetero_f_ind] mean_mag = fft_mag[hetero_f_ind] if self.liveplot_enabled: self.plotter.append_xy('readout_avg_freq_scan1', freq, mean_ch1) self.plotter.append_xy('readout_avg_freq_scan2', freq, mean_ch2) self.plotter.append_xy('readout_avg_freq_scan_mag', freq, mean_mag) self.plotter.append_z('scope1', expt_data_ch1) self.plotter.append_z('scope2', expt_data_ch2) self.plotter.append_z('scope_mag', expt_mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean_ch1) f.append_pt('ch2_mean', mean_ch2) f.append_pt('mag_mean', mean_mag) f.append_line('expt_2d_ch1', expt_data_ch1) f.append_line('expt_2d_ch2', expt_data_ch2)
def go(self): # self.plotter.clear() print("Prep Instruments") self.readout.set_output(True) self.readout.set_power(self.cfg['readout']['power']) if (self.cfg[self.expt_cfg_name]['pulsed']): self.readout.set_ext_pulse(mod=True) else: self.readout.set_ext_pulse(mod=False) if (self.cfg[self.expt_cfg_name]['pi_pulse']): self.drive.set_output(True) self.drive.set_ext_pulse(mod=True) else: self.drive.set_output(False) self.drive.set_ext_pulse(mod=False) # self.drive.set_ext_pulse(mod=False) self.trigger_period = self.cfg['expt_trigger']['period'] self.trigger.set_period(self.trigger_period) self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'], self.cfg['cal']['iq_offsets']) self.awg.run() print("Prep Card") adc = Alazar(self.cfg['alazar']) for freq in self.expt_pts: self.readout.set_frequency(freq) # self.readout_shifter.set_phase((self.cfg['readout']['start_phase'] + self.cfg['readout']['phase_slope'] * (freq - self.cfg['readout']['frequency']))%360, freq) # print self.readout_shifter.get_phase() tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() expt_data_ch1 = None expt_data_ch2 = None expt_data_mag = None for ii in tqdm(arange(max(1, self.cfg[self.expt_cfg_name]['averages'] / 100))): tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts ** 2 + ch2_pts ** 2) if expt_data_ch1 is None: expt_data_ch1 = ch1_pts expt_data_ch2 = ch2_pts else: expt_data_ch1 = (expt_data_ch1 * ii + ch1_pts) / (ii + 1.0) expt_data_ch2 = (expt_data_ch2 * ii + ch2_pts) / (ii + 1.0) expt_mag = sqrt(expt_data_ch1 ** 2 + expt_data_ch2 ** 2) # self.plotter.append_xy('readout_avg_freq_scan1', freq, mean(ch1_pts[0:])) # self.plotter.append_xy('readout_avg_freq_scan2', freq, mean(ch2_pts[0:])) # self.plotter.append_xy('readout_avg_freq_scan_mag', freq, mean(mag[0:])) # self.plotter.append_z('scope1',ch1_pts) # self.plotter.append_z('scope2',ch2_pts) # self.plotter.append_z('scope_mag',mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean(expt_data_ch1[0:])) f.append_pt('ch2_mean', mean(expt_data_ch2[0:])) f.append_pt('mag_mean', mean(expt_mag[0:]))
def go(self): if self.liveplot_enabled: self.plotter.clear() print("Prep Instruments") self.readout.set_output(True) self.readout.set_power(self.cfg['readout']['power']) if (self.cfg[self.expt_cfg_name]['pulsed']): self.readout.set_ext_pulse(mod=True) else: self.readout.set_ext_pulse(mod=False) if (self.cfg[self.expt_cfg_name]['pi_pulse']): self.drive.set_output(True) self.drive.set_ext_pulse(mod=False) else: self.drive.set_output(False) self.drive.set_ext_pulse(mod=False) # self.drive.set_output(True) # self.drive.set_ext_pulse(mod=False) # # self.drive.set_ext_pulse(mod=False) try: self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) except: print("Error in setting digital attenuator.") try: self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'], self.cfg['cal']['iq_offsets']) self.awg.run() except: print("error in setting self.awg") for freq in self.expt_pts: self.readout.set_frequency(freq) self.readout_shifter.set_phase((self.cfg['readout']['start_phase'] + self.cfg['readout']['phase_slope'] * (freq - self.cfg['readout']['frequency']))%360, freq) print(self.readout_shifter.get_phase()) expt_data_ch1 = None expt_data_ch2 = None expt_data_mag = None if self.cfg['readout']['adc'] == 'redpitaya': num_experiments = 1 ch1_pts, ch2_pts = setup_redpitaya_adc(num_experiments=num_experiments, window=self.cfg['readout']['window'], shots=self.cfg[self.expt_cfg_name][ 'averages'], plot_data=False, start_function=self.awg_run, stop_function=self.awg_prep) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', ch1_pts) f.append_pt('ch2_mean', ch2_pts) else: print("Prep Card") adc = Alazar(self.cfg['alazar']) for ii in tqdm(arange(max(1, self.cfg[self.expt_cfg_name]['averages'] / 100))): tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts ** 2 + ch2_pts ** 2) if expt_data_ch1 is None: expt_data_ch1 = ch1_pts expt_data_ch2 = ch2_pts else: expt_data_ch1 = (expt_data_ch1 * ii + ch1_pts) / (ii + 1.0) expt_data_ch2 = (expt_data_ch2 * ii + ch2_pts) / (ii + 1.0) expt_mag = sqrt(expt_data_ch1 ** 2 + expt_data_ch2 ** 2) if self.liveplot_enabled: self.plotter.append_xy('readout_avg_freq_scan1', freq, mean(expt_data_ch1[0:])) self.plotter.append_xy('readout_avg_freq_scan2', freq, mean(expt_data_ch2[0:])) self.plotter.append_xy('readout_avg_freq_scan_mag', freq, mean(expt_mag[0:])) self.plotter.append_z('scope1',expt_data_ch1) self.plotter.append_z('scope2',expt_data_ch2) self.plotter.append_z('scope_mag',expt_mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean(expt_data_ch1[0:])) f.append_pt('ch2_mean', mean(expt_data_ch2[0:])) f.append_pt('mag_mean', mean(expt_mag[0:])) print(cfg['readout']['start_phase'])
def go(self): if self.liveplot_enabled: self.plotter.clear() print("Prep Instruments") self.readout.set_output(True) self.readout.set_power(self.cfg['readout']['power']) if (self.cfg[self.expt_cfg_name]['pulsed']): self.readout.set_ext_pulse(mod=True) else: self.readout.set_ext_pulse(mod=False) try: self.drive.set_frequency( self.cfg['qubit']['frequency'] - self.cfg['pulse_info'][self.pulse_type]['iq_freq']) self.drive.set_power(self.cfg['drive']['power']) self.drive.set_ext_pulse(mod=self.cfg['drive']['mod']) if (self.cfg[self.expt_cfg_name]['pi_pulse']): self.drive.set_output(True) else: self.drive.set_output(False) print("Drive set successfully..") except: print("No drive found") self.drive.set_ext_pulse(mod=False) try: self.readout_atten.set_attenuator(self.cfg['readout']['dig_atten']) except: print("Error in setting digital attenuator.") try: self.awg.set_amps_offsets(self.cfg['cal']['iq_amps'], self.cfg['cal']['iq_offsets']) self.awg.run() except: print("error in setting self.awg") print("Prep Card") adc = Alazar(self.cfg['alazar']) for freq in self.expt_pts: self.readout.set_frequency(freq-self.cfg['readout']['heterodyne_freq']) self.readout_shifter.set_phase((self.cfg['readout']['start_phase'] + self.cfg['readout']['phase_slope'] * (freq - self.cfg['readout']['frequency']))%360, freq) # print self.readout_shifter.get_phase() expt_data_ch1 = None expt_data_ch2 = None expt_data_mag = None for ii in tqdm(arange(max(1, self.cfg[self.expt_cfg_name]['averages'] / 100))): tpts, ch1_pts, ch2_pts = adc.acquire_avg_data() mag = sqrt(ch1_pts ** 2 + ch2_pts ** 2) if expt_data_ch1 is None: expt_data_ch1 = ch1_pts expt_data_ch2 = ch2_pts else: expt_data_ch1 = (expt_data_ch1 * ii + ch1_pts) / (ii + 1.0) expt_data_ch2 = (expt_data_ch2 * ii + ch2_pts) / (ii + 1.0) expt_mag = sqrt(expt_data_ch1 ** 2 + expt_data_ch2 ** 2) # todo: fix heterodyne - need to take cos/sin of one channel # todo: & excise window if self.cfg['readout']['heterodyne_freq'] == 0: # homodyne mean_ch1 = mean(expt_data_ch1) mean_ch2 = mean(expt_data_ch2) mean_mag = mean(expt_mag) else: # heterodyne heterodyne_freq = self.cfg['readout']['heterodyne_freq'] # ifft by numpy default has the correct 1/N normalization fft_ch1 = np.abs(np.fft.ifft(expt_data_ch1)) fft_ch2 = np.abs(np.fft.ifft(expt_data_ch2)) fft_mag = np.abs(np.fft.ifft(expt_mag)) hetero_f_ind = int(round(heterodyne_freq * tpts.size * 1e-9)) # position in ifft # todo: single freq v.s. finite freq window (latter: more robust but noisier and with distortion) # expt_avg_data = np.average(expt_data_fft_amp[:, (hetero_f_ind - 1):(hetero_f_ind + 1)], axis=1) mean_ch1 = fft_ch1[hetero_f_ind] mean_ch2 = fft_ch2[hetero_f_ind] mean_mag = fft_mag[hetero_f_ind] if self.liveplot_enabled: self.plotter.append_xy('readout_avg_freq_scan1', freq, mean_ch1) self.plotter.append_xy('readout_avg_freq_scan2', freq, mean_ch2) self.plotter.append_xy('readout_avg_freq_scan_mag', freq, mean_mag) self.plotter.append_z('scope1',expt_data_ch1) self.plotter.append_z('scope2',expt_data_ch2) self.plotter.append_z('scope_mag',expt_mag) with self.datafile() as f: f.append_pt('freq', freq) f.append_pt('ch1_mean', mean_ch1) f.append_pt('ch2_mean', mean_ch2) f.append_pt('mag_mean', mean_mag) f.append_line('expt_2d_ch1', expt_data_ch1) f.append_line('expt_2d_ch2', expt_data_ch2)