def save_adjustment_template(self): if self.adjustment is None: print('measured, saving template') self.adjustment = [{ 'p_lo': p['p_lo'], 'f_lo': p['f_lo'], 'p_rf': p['p_rf'], 'f_rf': p['f_rf'], 'k_loss': 0, } for p in self._processed] pprint_to_file('adjust.ini', self.adjustment)
def saveConfigs(self): pprint_to_file('params.ini', self.secondaryParams)
def _calibrateRF(self, token, secondary): print('run calibrate RF with', secondary) gen_rf = self._instruments['P RF'] sa = self._instruments['Анализатор'] secondary = self.secondaryParams pow_rf = secondary['Prf'] freq_rf_start = secondary['Frf_min'] freq_rf_end = secondary['Frf_max'] freq_rf_step = secondary['Frf_delta'] freq_rf_values = [ round(x, 3) for x in np.arange(start=freq_rf_start, stop=freq_rf_end + 0.0001, step=freq_rf_step) ] sa.send(':CAL:AUTO OFF') sa.send(':SENS:FREQ:SPAN 1MHz') sa.send(f'DISP:WIND:TRAC:Y:RLEV 10') sa.send(f'DISP:WIND:TRAC:Y:PDIV 5') # gen_rf.send(f':OUTP:MOD:STAT OFF') gen_rf.send(f'SOUR:POW {pow_rf}dbm') sa.send(':CALC:MARK1:MODE POS') result = {} for freq in freq_rf_values: if token.cancelled: gen_rf.send(f'OUTP:STAT OFF') time.sleep(0.5) gen_rf.send(f'SOUR:POW {pow_rf}dbm') gen_rf.send(f'SOUR:FREQ {freq_rf_start}GHz') raise RuntimeError('calibration cancelled') gen_rf.send(f'SOUR:FREQ {freq}GHz') gen_rf.send(f'OUTP:STAT ON') if not mock_enabled: time.sleep(0.35) sa.send(f':SENSe:FREQuency:CENTer {freq}GHz') sa.send(f':CALCulate:MARKer1:X:CENTer {freq}GHz') if not mock_enabled: time.sleep(0.35) pow_read = float(sa.query(':CALCulate:MARKer:Y?')) loss = abs(pow_rf - pow_read) if mock_enabled: loss = 10 print('loss: ', loss) result[freq] = loss pprint_to_file('cal_rf.ini', result) gen_rf.send(f'OUTP:STAT OFF') sa.send(':CAL:AUTO ON') self._calibrated_pows_rf = result return True
def _calibrateLO(self, token, secondary): print('run calibrate LO with', secondary) gen_lo = self._instruments['P LO'] sa = self._instruments['Анализатор'] secondary = self.secondaryParams pow_lo_start = secondary['Plo_min'] pow_lo_end = secondary['Plo_max'] pow_lo_step = secondary['Plo_delta'] freq_lo_start = secondary['Flo_min'] freq_lo_end = secondary['Flo_max'] freq_lo_step = secondary['Flo_delta'] freq_lo_x2 = secondary['is_Flo_x2'] pow_lo_values = [round(x, 3) for x in np.arange(start=pow_lo_start, stop=pow_lo_end + 0.002, step=pow_lo_step)] \ if pow_lo_start != pow_lo_end else [pow_lo_start] freq_lo_values = [ round(x, 3) for x in np.arange(start=freq_lo_start, stop=freq_lo_end + 0.0001, step=freq_lo_step) ] sa.send(':CAL:AUTO OFF') sa.send(':SENS:FREQ:SPAN 1MHz') sa.send(f'DISP:WIND:TRAC:Y:RLEV 10') sa.send(f'DISP:WIND:TRAC:Y:PDIV 5') gen_lo.send(f':OUTP:MOD:STAT OFF') sa.send(':CALC:MARK1:MODE POS') result = defaultdict(dict) for pow_lo in pow_lo_values: gen_lo.send(f'SOUR:POW {pow_lo}dbm') for freq in freq_lo_values: if freq_lo_x2: freq *= 2 if token.cancelled: gen_lo.send(f'OUTP:STAT OFF') time.sleep(0.5) gen_lo.send(f'SOUR:POW {pow_lo}dbm') gen_lo.send(f'SOUR:FREQ {freq_lo_start}GHz') raise RuntimeError('calibration cancelled') gen_lo.send(f'SOUR:FREQ {freq}GHz') gen_lo.send(f'OUTP:STAT ON') if not mock_enabled: time.sleep(0.35) sa.send(f':SENSe:FREQuency:CENTer {freq}GHz') sa.send(f':CALCulate:MARKer1:X:CENTer {freq}GHz') if not mock_enabled: time.sleep(0.35) pow_read = float(sa.query(':CALCulate:MARKer:Y?')) loss = abs(pow_lo - pow_read) if mock_enabled: loss = 10 print('loss: ', loss) result[pow_lo][freq] = loss result = {k: v for k, v in result.items()} pprint_to_file('cal_lo.ini', result) gen_lo.send(f'OUTP:STAT OFF') sa.send(':CAL:AUTO ON') self._calibrated_pows_lo = result return True