Пример #1
0
    def __plot_peak(self, x, y):
        if x is None or y is None:
            return

        start, stop = self.axes.get_xlim()
        textX = ((stop - start) / 50.0) + x

        text = '{}\n{}'.format(*format_precision(self.settings, x, y,
                                                 fancyUnits=True))
        if matplotlib.__version__ < '1.3':
            self.axes.annotate(text,
                               xy=(x, y), xytext=(textX, y),
                               ha='left', va='top', size='x-small',
                               gid='peakText')
            self.axes.plot(x, y, marker='x', markersize=10, color='w',
                           mew=3, gid='peakShadow')
            self.axes.plot(x, y, marker='x', markersize=10, color='r',
                           gid='peak')
        else:
            effect = patheffects.withStroke(linewidth=2, foreground="w",
                                            alpha=0.75)
            self.axes.annotate(text,
                               xy=(x, y), xytext=(textX, y),
                               ha='left', va='top', size='x-small',
                               path_effects=[effect], gid='peakText')
            self.axes.plot(x, y, marker='x', markersize=10, color='r',
                           path_effects=[effect], gid='peak')
    def __format_loc(self, x, y):
        if None in [x, y]:
            return ""

        freq, level = format_precision(self.settings, x, y, units=False)

        return '{} MHz\n{}     dB/Hz'.format(freq, level)
Пример #3
0
    def __plot_peak(self, peakF, peakL, peakT):
        when = format_time(peakT)
        tPos = utc_to_mpl(peakT)

        text = '{}\n{}\n{when}'.format(*format_precision(self.settings,
                                                         peakF, peakL,
                                                         fancyUnits=True),
                                       when=when)
        if matplotlib.__version__ < '1.3':
            self.axes.text(peakF, tPos, peakL,
                           text,
                           ha='left', va='bottom', size='x-small', gid='peakText')
            self.axes.plot([peakF], [tPos], [peakL], marker='x', markersize=10,
                           mew=3, color='w', gid='peak')
            self.axes.plot([peakF], [tPos], [peakL], marker='x', markersize=10,
                           color='r', gid='peakShadow')
        else:
            effect = patheffects.withStroke(linewidth=2, foreground="w",
                                            alpha=0.75)
            self.axes.text(peakF, tPos, peakL,
                           text,
                           ha='left', va='bottom', size='x-small', gid='peakText',
                           path_effects=[effect])
            self.axes.plot([peakF], [tPos], [peakL], marker='x', markersize=10,
                           color='r', gid='peak', path_effects=[effect])
Пример #4
0
    def __plot_peak(self, peakF, peakL, peakT):
        self.__clear_markers()
        y = utc_to_mpl(peakT)

        start, stop = self.axes.get_xlim()
        textX = ((stop - start) / 50.0) + peakF
        when = format_time(peakT)

        text = '{}\n{}\n{when}'.format(*format_precision(self.settings,
                                                         peakF,
                                                         peakL,
                                                         fancyUnits=True),
                                       when=when)
        if matplotlib.__version__ < '1.3':
            self.axes.annotate(text,
                               xy=(peakF, y),
                               xytext=(textX, y),
                               ha='left',
                               va='bottom',
                               size='x-small',
                               color='w',
                               gid='peakText')
            self.axes.plot(peakF,
                           y,
                           marker='x',
                           markersize=10,
                           color='w',
                           mew=3,
                           gid='peakShadow')
            self.axes.plot(peakF,
                           y,
                           marker='x',
                           markersize=10,
                           color='r',
                           gid='peak')
        else:
            effect = patheffects.withStroke(linewidth=2,
                                            foreground="w",
                                            alpha=0.75)
            self.axes.annotate(text,
                               xy=(peakF, y),
                               xytext=(textX, y),
                               ha='left',
                               va='bottom',
                               size='x-small',
                               path_effects=[effect],
                               gid='peakText')
            self.axes.plot(peakF,
                           y,
                           marker='x',
                           markersize=10,
                           color='r',
                           path_effects=[effect],
                           gid='peak')
Пример #5
0
    def set_selected(self, spectrum, start, end):
        self.spectrum = spectrum
        if start is None:
            return

        self.measure = Measure(spectrum, start, end)
        if not self.measure.is_valid():
            self.clear_measurement()
            return

        minF, maxF = self.measure.get_f()
        minP = self.measure.get_min_p()
        maxP = self.measure.get_max_p()
        avgP = self.measure.get_avg_p()
        gMeanP = self.measure.get_gmean_p()
        flatness = self.measure.get_flatness()
        hbw = self.measure.get_hpw()
        obw = self.measure.get_obw()

        self.__set_measure_value(
            'start', format_precision(self.settings, minF, units=False))
        self.__set_measure_value(
            'end', format_precision(self.settings, maxF, units=False))
        self.__set_measure_value(
            'deltaF', format_precision(self.settings, maxF - minF,
                                       units=False))
        self.__set_measure_value(
            'minFP', format_precision(self.settings, minP[0], units=False))
        self.__set_measure_value(
            'maxFP', format_precision(self.settings, maxP[0], units=False))
        self.__set_measure_value(
            'deltaFP',
            format_precision(self.settings, maxP[0] - minP[0], units=False))
        self.__set_measure_value(
            'minP', format_precision(self.settings, level=minP[1],
                                     units=False))
        self.__set_measure_value(
            'maxP', format_precision(self.settings, level=maxP[1],
                                     units=False))
        self.__set_measure_value(
            'deltaP',
            format_precision(self.settings,
                             level=maxP[1] - minP[1],
                             units=False))
        self.__set_measure_value(
            'avg', format_precision(self.settings, level=avgP, units=False))
        self.__set_measure_value(
            'gmean', format_precision(self.settings, level=gMeanP,
                                      units=False))
        self.__set_measure_value('flat', "{0:.4f}".format(flatness))

        if hbw[0] is not None:
            text = format_precision(self.settings, hbw[0], units=False)
        else:
            text = ''
        self.__set_measure_value('hbwstart', text)
        if hbw[1] is not None:
            text = format_precision(self.settings, hbw[1], units=False)
        else:
            text = ''
        self.__set_measure_value('hbwend', text)
        if hbw[0] is not None and hbw[1] is not None:
            text = format_precision(self.settings,
                                    hbw[1] - hbw[0],
                                    units=False)
        else:
            text = ''
        self.__set_measure_value('hbwdelta', text)

        if obw[0] is not None:
            text = format_precision(self.settings, obw[0], units=False)
        else:
            text = ''
        self.__set_measure_value('obwstart', text)
        if obw[1] is not None:
            text = text = format_precision(self.settings, obw[1], units=False)
        else:
            text = ''
        self.__set_measure_value('obwend', text)
        if obw[0] is not None and obw[1] is not None:
            text = text = format_precision(self.settings,
                                           obw[1] - obw[0],
                                           units=False)
        else:
            text = ''
        self.__set_measure_value('obwdelta', text)

        self.update_measure()
Пример #6
0
    def __on_motion(self, event):
        axes = self.plot.get_axes()
        axesBar = self.plot.get_axes_bar()
        xpos = event.xdata
        ypos = event.ydata
        text = ""

        if (xpos is None or ypos is None or self.spectrum is None
                or event.inaxes is None):
            spectrum = None
        elif event.inaxes == axesBar:
            spectrum = None
            level = self.plot.get_bar().norm.inverse(ypos)
            text = "{}".format(format_precision(self.settings, level=level))
        elif self.settings.display == Display.PLOT:
            timeStamp = max(self.spectrum)
            spectrum = self.spectrum[timeStamp]
        elif self.settings.display == Display.SPECT:
            timeStamp = num2epoch(ypos)
            if timeStamp in self.spectrum:
                spectrum = self.spectrum[timeStamp]
            else:
                nearest = min(self.spectrum.keys(),
                              key=lambda k: abs(k - timeStamp))
                spectrum = self.spectrum[nearest]
        elif self.settings.display == Display.SURFACE:
            spectrum = None
            coords = axes.format_coord(event.xdata, event.ydata)
            match = re.match('x=([-|0-9|\.]+).*y=([0-9|\:]+).*z=([-|0-9|\.]+)',
                             coords)
            if match is not None and match.lastindex == 3:
                freq = float(match.group(1))
                level = float(match.group(3))
                text = "{}, {}".format(
                    *format_precision(self.settings, freq, level))
        else:
            spectrum = None

        if spectrum is not None and len(spectrum) > 0:
            x = min(spectrum.keys(), key=lambda freq: abs(freq - xpos))
            if min(spectrum.keys(), key=float) <= xpos <= max(spectrum.keys(),
                                                              key=float):
                y = spectrum[x]
                text = "{}, {}".format(*format_precision(self.settings, x, y))
            else:
                text = format_precision(self.settings, xpos)

            markers = find_artists(self.figure, 'peak')
            markers.extend(find_artists(self.figure, 'peakThres'))
            hit = False
            for marker in markers:
                if isinstance(marker, Line2D):
                    location = marker.get_path().vertices[0]
                    markX, markY = axes.transData.transform(location)
                    dist = abs(math.hypot(event.x - markX, event.y - markY))
                    if dist <= 5:
                        if self.settings.display == Display.PLOT:
                            tip = "{}, {}".format(*format_precision(
                                self.settings, location[0], location[1]))
                        else:
                            tip = "{}".format(
                                format_precision(self.settings, location[0]))
                        self.toolTip.SetTip(tip)
                        hit = True
                        break
            self.toolTip.Enable(hit)

        self.status.set_info(text, level=None)
Пример #7
0
    def run(self):
        self.parent.clear_plots()
        if self.data is None:
            length, tMin, tMax, fMin, fMax, lMin, lMax, peakF, peakL, peakT = (
                '-', ) * 10
        else:
            length = len(self.data)
            tMin = format_time(self.extent.tMin, True)
            tMax = format_time(self.extent.tMax, True)
            fMin = format_precision(self.settings,
                                    freq=self.extent.fMin,
                                    fancyUnits=True)
            fMax = format_precision(self.settings,
                                    freq=self.extent.fMax,
                                    fancyUnits=True)
            lMin = format_precision(self.settings,
                                    level=self.extent.lMin,
                                    fancyUnits=True)
            lMax = format_precision(self.settings,
                                    level=self.extent.lMax,
                                    fancyUnits=True)
            peak = self.extent.get_peak_flt()
            peakF = format_precision(self.settings,
                                     freq=peak[0],
                                     fancyUnits=True)
            peakL = format_precision(self.settings,
                                     level=peak[1],
                                     fancyUnits=True)
            peakT = format_time(peak[2], True)

        text = [
            ['Sweeps', '', length],
            ['Extent', '', ''],
            ['', 'Start', tMin],
            ['', 'End', tMax],
            ['', 'Min frequency', fMin],
            ['', 'Max frequency', fMax],
            ['', 'Min level', lMin],
            ['', 'Max level', lMax],
            ['Peak', '', ''],
            ['', 'Level', peakL],
            ['', 'Frequency', peakF],
            ['', 'Time', peakT],
        ]

        table = Table(self.axes, loc='center')
        table.set_gid('table')

        rows = len(text)
        cols = len(text[0])
        fontProperties = FontProperties()
        fontProperties.set_weight('semibold')
        for row in xrange(rows):
            for col in xrange(cols):
                fp = fontProperties if col == 0 else None
                table.add_cell(row,
                               col,
                               text=text[row][col],
                               fontproperties=fp,
                               width=1.0 / cols,
                               height=1.0 / rows)

        if self.settings.grid:
            colour = 'LightGray'
        else:
            colour = 'w'
        set_table_colour(table, colour)

        for i in range(2):
            table.auto_set_column_width(i)

        self.axes.add_table(table)
        self.parent.redraw_plot()

        self.parent.threadPlot = None