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)
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])
def __annotate_plot(self): f, l, t = self.extent.get_peak_flt() when = format_time(t) tPos = utc_to_mpl(t) text = '{}\n{}\n{when}'.format(*format_precision(self.settings, f, l, fancyUnits=True), when=when) if matplotlib.__version__ < '1.3': self.axes.text(f, tPos, l, text, ha='left', va='bottom', size='x-small', gid='peak') self.axes.plot([f], [tPos], [l], marker='x', markersize=10, mew=3, color='w', gid='peak') self.axes.plot([f], [tPos], [l], marker='x', markersize=10, color='r', gid='peak') else: effect = patheffects.withStroke(linewidth=2, foreground="w", alpha=0.75) self.axes.text(f, tPos, l, text, ha='left', va='bottom', size='x-small', gid='peak', path_effects=[effect]) self.axes.plot([f], [tPos], [l], marker='x', markersize=10, color='r', gid='peak', path_effects=[effect])
def __annotate_plot(self, x, y): self.__clear_markers() 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='peak') self.axes.plot(x, y, marker='x', markersize=10, color='w', mew=3, gid='peak') 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='peak') self.axes.plot(x, y, marker='x', markersize=10, color='r', path_effects=[effect], gid='peak')
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')
def __annotate_plot(self, x, y): self.__clear_markers() 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='peak') self.axes.plot(x, y, marker='x', markersize=10, color='w', mew=3, gid='peak') 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='peak') self.axes.plot(x, y, marker='x', markersize=10, color='r', path_effects=[effect], gid='peak')
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], ["Extents", "", ""], ["", "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]) for row in xrange(rows): for col in xrange(cols): table.add_cell(row, col, text=text[row][col], 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(3): table.auto_set_column_width(i) self.axes.add_table(table) self.parent.redraw_plot() self.parent.threadPlot = None
def run(self): self.parent.clear_plots() if self.data is None: self.parent.threadPlot = None return 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', '', len(self.data)], ['Extents', '', ''], ['', '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', gid='table') rows = len(text) cols = len(text[0]) for row in xrange(rows): for col in xrange(cols): table.add_cell(row, col, text=text[row][col], 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(3): table.auto_set_column_width(i) self.axes.add_table(table) noData = find_artists(self.axes, 'noData') noData[0].set_alpha(0) self.parent.redraw_plot() self.parent.threadPlot = None
def __on_motion(self, event): xpos = event.xdata ypos = event.ydata text = "" if xpos is None or ypos is None or self.spectrum is None: return if 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 = self.plot.get_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) self.status.set_info(text, level=None) axes = self.figure.get_axes()[0] 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)
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], ['Extents', '', ''], ['', '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]) for row in xrange(rows): for col in xrange(cols): table.add_cell(row, col, text=text[row][col], 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(3): table.auto_set_column_width(i) self.axes.add_table(table) self.parent.redraw_plot() self.parent.threadPlot = None
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
def set_selected(self, spectrum, start, end): 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()