Пример #1
0
    def set_band_range(self, current_signal=None):
        """Highlight the signal's band labels.

        If no signal is selected remove all highlights.
        """
        if current_signal is not None and not is_undef_freq(current_signal):
            lower_freq = safe_cast(
                current_signal.at[Signal.INF_FREQ], int
            )
            upper_freq = safe_cast(
                current_signal.at[Signal.SUP_FREQ], int
            )
            zipped = list(zip(Constants.BANDS, self.band_labels))
            for i, w in enumerate(zipped):
                band, band_label = w
                if lower_freq >= band.lower and lower_freq < band.upper:
                    self.activate_band_category(band_label)
                    for uband, uband_label in zipped[i + 1:]:
                        if upper_freq > uband.lower:
                            self.activate_band_category(uband_label)
                        else:
                            self.activate_band_category(uband_label, False)
                    break
                else:
                    self.activate_band_category(band_label, False)
        else:
            for band_label in self.band_labels:
                self.activate_band_category(band_label, False)
Пример #2
0
    def _ok(self, signal_name):
        """Evalaute if the signal matches the band filters."""
        if not self.apply_remove_btn.isChecked():
            return True
        undef_band = is_undef_band(self._owner.db.loc[signal_name])
        if undef_band:
            if self._owner.include_undef_bands.isChecked():
                return True
            else:
                return False

        signal_bands = (
            safe_cast(self._owner.db.at[signal_name, Signal.INF_BAND], int),
            safe_cast(self._owner.db.at[signal_name, Signal.SUP_BAND], int)
        )

        lower_limit_ok = True
        upper_limit_ok = True
        if self._owner.activate_low_band_filter_btn.isChecked():
            if not signal_bands[1] >= filters_limit(self._owner.lower_band_spinbox,
                                                    self._owner.lower_band_filter_unit,
                                                    self._owner.lower_band_confidence, -1):
                lower_limit_ok = False
        if self._owner.activate_up_band_filter_btn.isChecked():
            if not signal_bands[0] < filters_limit(self._owner.upper_band_spinbox,
                                                   self._owner.upper_band_filter_unit,
                                                   self._owner.upper_band_confidence):
                upper_limit_ok = False
        return lower_limit_ok and upper_limit_ok
Пример #3
0
    def _ok(self, signal_name):
        """Evalaute if the signal matches the frequency filters."""
        if not self.apply_remove_btn.isChecked():
            return True
        undef_freq = is_undef_freq(self._owner.db.loc[signal_name])
        if undef_freq:
            if self._owner.include_undef_freqs.isChecked():
                return True
            else:
                return False

        signal_freqs = (safe_cast(
            self._owner.db.at[signal_name, Signal.INF_FREQ], int),
                        safe_cast(
                            self._owner.db.at[signal_name, Signal.SUP_FREQ],
                            int))

        band_filter_ok = False
        any_checked = False
        for btn, band_limits in zip(self._frequency_filters_btns,
                                    Constants.BANDS):
            if btn.isChecked():
                any_checked = True
                if signal_freqs[0] < band_limits.upper and signal_freqs[
                        1] >= band_limits.lower:
                    band_filter_ok = True
        lower_limit_ok = True
        upper_limit_ok = True
        if self._owner.activate_low_freq_filter_btn.isChecked():
            if not signal_freqs[1] >= filters_limit(
                    self._owner.lower_freq_spinbox,
                    self._owner.lower_freq_filter_unit,
                    self._owner.lower_freq_confidence, -1):
                lower_limit_ok = False
        if self._owner.activate_up_freq_filter_btn.isChecked():
            if not signal_freqs[0] < filters_limit(
                    self._owner.upper_freq_spinbox,
                    self._owner.upper_freq_filter_unit,
                    self._owner.upper_freq_confidence):
                upper_limit_ok = False
        if any_checked:
            return band_filter_ok and lower_limit_ok and upper_limit_ok
        else:
            return lower_limit_ok and upper_limit_ok
Пример #4
0
 def _set_labels_values(self, labels_table):
     """Set all the labels values."""
     for lbl_list, table in zip(self._all_lbls, labels_table):
         for lbl, row in zip(lbl_list, table):
             lbl.switch_off()
             value = _get_lbl_value(*row)
             lbl.level = safe_cast(value, int)
             if not isinstance(lbl, MultiColorSwitchableLabel):
                 value += '%'
             lbl.setText(value)
             lbl.switch_on()
Пример #5
0
    def _update_space_weather(self, status_ok):
        """Update the space weather screen after a successful download.

        If the download was not successful throw a warning. In any case remove
        the downloaded data.
        """
        self._owner.update_now_bar.set_idle()
        if status_ok:
            xray_long = safe_cast(self._owner.space_weather_data.xray[-1][7],
                                  float)

            def format_text(letter, power):
                return letter + f"{xray_long * 10**power:.1f}"

            if xray_long < 1e-8 and xray_long != -1.00e+05:
                self._owner.peak_flux_lbl.setText(format_text("<A", 8))
            elif xray_long >= 1e-8 and xray_long < 1e-7:
                self._owner.peak_flux_lbl.setText(format_text("A", 8))
            elif xray_long >= 1e-7 and xray_long < 1e-6:
                self._owner.peak_flux_lbl.setText(format_text("B", 7))
            elif xray_long >= 1e-6 and xray_long < 1e-5:
                self._owner.peak_flux_lbl.setText(format_text("C", 6))
            elif xray_long >= 1e-5 and xray_long < 1e-4:
                self._owner.peak_flux_lbl.setText(format_text("M", 5))
            elif xray_long >= 1e-4:
                self._owner.peak_flux_lbl.setText(format_text("X", 4))
            elif xray_long == -1.00e+05:
                self._owner.peak_flux_lbl.setText("No Data")

            if xray_long < 1e-5 and xray_long != -1.00e+05:
                self._switchable_r_labels.switch_on(self._owner.r0_now_lbl)
            elif xray_long >= 1e-5 and xray_long < 5e-5:
                self._switchable_r_labels.switch_on(self._owner.r1_now_lbl)
            elif xray_long >= 5e-5 and xray_long < 1e-4:
                self._switchable_r_labels.switch_on(self._owner.r2_now_lbl)
            elif xray_long >= 1e-4 and xray_long < 1e-3:
                self._switchable_r_labels.switch_on(self._owner.r3_now_lbl)
            elif xray_long >= 1e-3 and xray_long < 2e-3:
                self._switchable_r_labels.switch_on(self._owner.r4_now_lbl)
            elif xray_long >= 2e-3:
                self._switchable_r_labels.switch_on(self._owner.r5_now_lbl)
            elif xray_long == -1.00e+05:
                self._switchable_r_labels.switch_off_all()

            pro10 = safe_cast(self._owner.space_weather_data.prot_el[-1][8],
                              float)
            if pro10 < 10 and pro10 != -1.00e+05:
                self._switchable_s_labels.switch_on(self._owner.s0_now_lbl)
            elif pro10 >= 10 and pro10 < 100:
                self._switchable_s_labels.switch_on(self._owner.s1_now_lbl)
            elif pro10 >= 100 and pro10 < 1000:
                self._switchable_s_labels.switch_on(self._owner.s2_now_lbl)
            elif pro10 >= 1000 and pro10 < 10000:
                self._switchable_s_labels.switch_on(self._owner.s3_now_lbl)
            elif pro10 >= 10000 and pro10 < 100000:
                self._switchable_s_labels.switch_on(self._owner.s4_now_lbl)
            elif pro10 >= 100000:
                self._switchable_s_labels.switch_on(self._owner.s5_now_lbl)
            elif pro10 == -1.00e+05:
                self._switchable_s_labels.switch_off_all()

            k_index = safe_cast(
                self._owner.space_weather_data.ak_index[8][11].replace(
                    '.', ''), int)
            self._owner.k_index_lbl.setText(str(k_index))
            a_index = safe_cast(
                self._owner.space_weather_data.ak_index[7][7].replace('.', ''),
                int)
            self._owner.a_index_lbl.setText(str(a_index))

            if k_index == 0:
                self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl)
                self._k_storm_labels.switch_on(self.k_inactive_lbl)
                self._owner.expected_noise_lbl.setText(
                    "  S0 - S1 (<-120 dBm)  ")
            elif k_index == 1:
                self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl)
                self._k_storm_labels.switch_on(self._owner.k_very_quiet_lbl)
                self._owner.expected_noise_lbl.setText(
                    "  S0 - S1 (<-120 dBm)  ")
            elif k_index == 2:
                self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl)
                self._k_storm_labels.switch_on(self._owner.k_quiet_lbl)
                self._owner.expected_noise_lbl.setText(
                    "  S1 - S2 (-115 dBm)  ")
            elif k_index == 3:
                self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl)
                self._k_storm_labels.switch_on(self._owner.k_unsettled_lbl)
                self._owner.expected_noise_lbl.setText(
                    "  S2 - S3 (-110 dBm)  ")
            elif k_index == 4:
                self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl)
                self._k_storm_labels.switch_on(self._owner.k_active_lbl)
                self._owner.expected_noise_lbl.setText(
                    "  S3 - S4 (-100 dBm)  ")
            elif k_index == 5:
                self._switchable_g_now_labels.switch_on(self._owner.g1_now_lbl)
                self._k_storm_labels.switch_on(self._owner.k_min_storm_lbl)
                self._owner.expected_noise_lbl.setText("  S4 - S6 (-90 dBm)  ")
            elif k_index == 6:
                self._switchable_g_now_labels.switch_on(self._owner.g2_now_lbl)
                self._k_storm_labels.switch_on(self._owner.k_maj_storm_lbl)
                self._owner.expected_noise_lbl.setText("  S6 - S9 (-80 dBm)  ")
            elif k_index == 7:
                self._switchable_g_now_labels.switch_on(self._owner.g3_now_lbl)
                self._k_storm_labels.switch_on(self._owner.k_sev_storm_lbl)
                self._owner.expected_noise_lbl.setText(
                    "  S9 - S20 (>-60 dBm)  ")
            elif k_index == 8:
                self._switchable_g_now_labels.switch_on(self._owner.g4_now_lbl)
                self._k_storm_labels.switch_on(
                    self._owner.k_very_sev_storm_lbl)
                self._owner.expected_noise_lbl.setText(
                    "  S20 - S30 (>-60 dBm)  ")
            elif k_index == 9:
                self._switchable_g_now_labels.switch_on(self._owner.g5_now_lbl)
                self._k_storm_labels.switch_on(self._owner.k_ex_sev_storm_lbl)
                self._owner.expected_noise_lbl.setText("  S30+ (>>-60 dBm)  ")
            self._owner.expected_noise_lbl.switch_on()

            if a_index >= 0 and a_index < 8:
                self._a_storm_labels.switch_on(self._owner.a_quiet_lbl)
            elif a_index >= 8 and a_index < 16:
                self._a_storm_labels.switch_on(self._owner.a_unsettled_lbl)
            elif a_index >= 16 and a_index < 30:
                self._a_storm_labels.switch_on(self._owner.a_active_lbl)
            elif a_index >= 30 and a_index < 50:
                self._a_storm_labels.switch_on(self._owner.a_min_storm_lbl)
            elif a_index >= 50 and a_index < 100:
                self._a_storm_labels.switch_on(self._owner.a_maj_storm_lbl)
            elif a_index >= 100 and a_index < 400:
                self._a_storm_labels.switch_on(self._owner.a_sev_storm_lbl)

            index = self._owner.space_weather_data.geo_storm[6].index(
                "was") + 1
            k_index_24_hmax = safe_cast(
                self._owner.space_weather_data.geo_storm[6][index], int)
            if k_index_24_hmax == 0:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g0_today_lbl)
            elif k_index_24_hmax == 1:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g0_today_lbl)
            elif k_index_24_hmax == 2:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g0_today_lbl)
            elif k_index_24_hmax == 3:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g0_today_lbl)
            elif k_index_24_hmax == 4:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g0_today_lbl)
            elif k_index_24_hmax == 5:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g1_today_lbl)
            elif k_index_24_hmax == 6:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g2_today_lbl)
            elif k_index_24_hmax == 7:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g3_today_lbl)
            elif k_index_24_hmax == 8:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g4_today_lbl)
            elif k_index_24_hmax == 9:
                self._switchable_g_today_labels.switch_on(
                    self._owner.g5_today_lbl)

            val = safe_cast(
                self._owner.space_weather_data.ak_index[7][2].replace('.', ''),
                int)
            self._owner.sfi_lbl.setText(f"{val}")
            val = safe_cast([
                x[4] for x in self._owner.space_weather_data.sgas if "SSN" in x
            ][0], int)
            self._owner.sn_lbl.setText(f"{val:d}")

            for label, pixmap in zip(self.space_weather_labels,
                                     self._owner.space_weather_data.images):
                label.pixmap = pixmap
                label.make_transparent()
                label.apply_pixmap()
        elif not self._owner.closing:
            pop_up(self._owner,
                   title=Messages.BAD_DOWNLOAD,
                   text=Messages.BAD_DOWNLOAD_MSG).show()
        self._owner.space_weather_data.remove_data()