Module pyspecan.controller.WEB.plots.base

WEB base plots: compute plot data, the browser only draws it

Classes

class FreqPlot (parent, **kwargs)
Expand source code
class FreqPlot(_Plot):
    def __init__(self, parent, **kwargs):
        super().__init__(parent)
        self.window = kwargs.get("window", "blackman")
        self.vbw = kwargs.get("vbw", 10.0)
        self.scale = kwargs.get("scale_div", 10.0)
        self.ref_level = kwargs.get("ref_level", "auto")

    def calc_psd(self, samps):
        vbw = self.vbw if self.vbw > 0 else None
        return psd(samps, self.parent.model.get_fs().raw, vbw, self.window)

    @property
    def y_top(self):
        """Plot maximum amplitude"""
        return self.ref_level
    @property
    def y_btm(self):
        """Plot minimum amplitude"""
        return self.ref_level - (10*self.scale)

    def set_scale(self, scale):
        scale = float(scale)
        if scale <= 0:
            raise ValueError("scale must be positive")
        self.scale = scale

    def set_ref_level(self, ref):
        self.ref_level = "auto" if ref == "auto" else float(ref)

    def set_vbw(self, vbw):
        self.vbw = max(float(vbw), 0.0)

    def set_window(self, window):
        from ....utils.window import WindowLUT
        if window not in WindowLUT:
            raise ValueError(f"unknown window {window}")
        self.window = window

    def _calc_ref_level(self, _psd, mul=0.1):
        pmax = np.max(_psd)
        return int(pmax * (1-mul)) if pmax < 0 else int(pmax * (1+mul))

    def settings(self):
        return {
            **super().settings(),
            "window": self.window, "vbw": self.vbw, "scale_div": self.scale,
            "ref_level": self.ref_level,
        }

base plot

Ancestors

  • pyspecan.controller.WEB.plots.base._Plot

Subclasses

Instance variables

prop y_btm
Expand source code
@property
def y_btm(self):
    """Plot minimum amplitude"""
    return self.ref_level - (10*self.scale)

Plot minimum amplitude

prop y_top
Expand source code
@property
def y_top(self):
    """Plot maximum amplitude"""
    return self.ref_level

Plot maximum amplitude

Methods

def calc_psd(self, samps)
Expand source code
def calc_psd(self, samps):
    vbw = self.vbw if self.vbw > 0 else None
    return psd(samps, self.parent.model.get_fs().raw, vbw, self.window)
def set_ref_level(self, ref)
Expand source code
def set_ref_level(self, ref):
    self.ref_level = "auto" if ref == "auto" else float(ref)
def set_scale(self, scale)
Expand source code
def set_scale(self, scale):
    scale = float(scale)
    if scale <= 0:
        raise ValueError("scale must be positive")
    self.scale = scale
def set_vbw(self, vbw)
Expand source code
def set_vbw(self, vbw):
    self.vbw = max(float(vbw), 0.0)
def set_window(self, window)
Expand source code
def set_window(self, window):
    from ....utils.window import WindowLUT
    if window not in WindowLUT:
        raise ValueError(f"unknown window {window}")
    self.window = window
def settings(self)
Expand source code
def settings(self):
    return {
        **super().settings(),
        "window": self.window, "vbw": self.vbw, "scale_div": self.scale,
        "ref_level": self.ref_level,
    }

Return the current settings