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