Module audian.analyzer
Analyze a selected region.
- class
Analyzer
: Base class for analyzing selected regions. - class
PlainAnalyzer
: Implementation of an Analyzer that stores the analysis window into the table.
Classes
class Analyzer (browser, name, source_name)
-
Base class for analyzing selected regions.
Classes inheriting the
Analyzer
class need to reimplement theanalyze()
function. Their constructor takes an instance of the DataBrowser as the only argument. See classPlainAnalyzer
as an example.The constructor adds columns to the table where analysis results are stored (
make_column()
function) and initializes event markers to be plotted on top of traces or into specific panels (make_trace_events()
andmake_panel_events()
functions).The
analyze()
function then stores analysis results into the table (store()
function) and plots event markers (set_events()
andadd_events()
functions).Parameters
browser
:DataBrowser
- Instance of the data browser.
name
:str
- Name of the analyzer implementation.
source_name
:str
- Source trace on which the analyzer will work on.
Attributes
browser
:DataBrowser
- Instance of the data browser.
name
:str
- Name of the analyzer implementation.
source_name
:str
- Source trace on which the analyzer will work on.
source
:BufferedData
- Trace on which the analyzer will work on.
You rarely need to access the full source trace, since
analyze()
provides all the traces of the selected region. data
:thunderlab.TableData
- The table storing the analysis results.
events
:dict
oflist
ofpyqtgraph.ScatterPlotItem
- Dictionary of the plot items for plotting event markers.
Methods
analyze()
: Analysis function.traces()
: Names of all available data traces.trace()
: Full data trace of a given namemake_column()
: Make a column for the table collecting the analysis results.store()
: Store analysis results in table.make_trace_events()
: Prepare events for plotting on top of a specific trace.make_panel_events()
: Prepare events for plotting in a specific panel.set_events()
: Plot event markers.add_events()
: Plot additional event markers.
Expand source code
class Analyzer(object): """Base class for analyzing selected regions. Classes inheriting the `Analyzer` class need to reimplement the `analyze()` function. Their constructor takes an instance of the DataBrowser as the only argument. See class `PlainAnalyzer` as an example. The constructor adds columns to the table where analysis results are stored (`make_column()` function) and initializes event markers to be plotted on top of traces or into specific panels (`make_trace_events()` and `make_panel_events()` functions). The `analyze()` function then stores analysis results into the table (`store()` function) and plots event markers (`set_events()` and `add_events()` functions). Parameters ---------- browser: DataBrowser Instance of the data browser. name: str Name of the analyzer implementation. source_name: str Source trace on which the analyzer will work on. Attributes ---------- browser: DataBrowser Instance of the data browser. name: str Name of the analyzer implementation. source_name: str Source trace on which the analyzer will work on. source: BufferedData Trace on which the analyzer will work on. You rarely need to access the full source trace, since `analyze()` provides all the traces of the selected region. data: thunderlab.TableData The table storing the analysis results. events: dict of list of pyqtgraph.ScatterPlotItem Dictionary of the plot items for plotting event markers. Methods ------- - `analyze()`: Analysis function. - `traces()`: Names of all available data traces. - `trace()`: Full data trace of a given name - `make_column()`: Make a column for the table collecting the analysis results. - `store()`: Store analysis results in table. - `make_trace_events()`: Prepare events for plotting on top of a specific trace. - `make_panel_events()`: Prepare events for plotting in a specific panel. - `set_events()`: Plot event markers. - `add_events()`: Plot additional event markers. """ def __init__(self, browser, name, source_name): self.browser = browser self.name = name self.source_name = source_name self.source = self.trace(self.source_name) self.data = TableData() self.events = {} self.browser.add_analyzer(self) def clear(self): """Clear the data table and the markers. """ self.data.clear_data() for name in self.events: for c in range(len(self.events[name])): self.events[name][c].clear() def analyze(self, t0, t1, channel, traces): """Analysis function. This function is called whenever a region is selected for analysis. Reimplement it for your purposes. Parameters ---------- t0: float Start time of the selected region. t1: float End time of the selected region. channel: int Channel of the selected region. traces: dict of arrays Dictionary with all data traces cut out between `t0` and `t1`. Keys are the names of the data traces. """ pass def traces(self): """Names of all available data traces. Returns ------- traces: list of str Names of all available data traces. """ return self.browser.data.keys() def trace(self, name): """Full data trace of a given name. Parameters ---------- name: str Name of the requested data trace. Returns ------- trace: BufferedData or None Full data trace or None if name was not found. """ if name in self.browser.data: return self.browser.data[name] else: return None def make_column(self, label, unit=None, formats=None): """Make a column for the table collecting the analysis results. Analysis results are stored in a table. Each Analyzer can add columns to this table in its constructor using this function. Parameters ---------- label: str Label of the column. unit: str Unit of the values stored in this column. formats: str Format string for the values stored in this column. """ self.data.append(label, unit, formats) def store(self, *args): """Store analysis results in table. Call this function once in `analyze()` with as many arguments as columns generated using `make_column()`. Parameters ---------- *args: float, int, or str Values to be stored in the table. As many values as columns generated using `make_column()`. """ self.data.append_data(args, 0) def make_trace_events(self, name, trace_name, symbol, color, size): """Prepare events for plotting on top of a specific trace. Call this function in the constructor if your `analyze()` function wants to plot some event markers onto a trace using the `set_events()` or àdd_events()` functions. Parameters ---------- name: str Name identifying the events. trace_name: str Name of the trace on which the event markers should be plotted. symbol: str Symbol to be used for plotting event markers. See [pyqtgraph.ScatterPlotItem.setSymbol()](https://pyqtgraph.readthedocs.io/en/latest/api_reference/graphicsItems/scatterplotitem.html) for options. color: pyqtgraph color specifier Color of the marker symbol. size: int or float Size of the event marker. """ self.events[name] = [] for c in range(self.browser.data.data.channels): spi = pg.ScatterPlotItem() spi.setSymbol(symbol) spi.setBrush(color) spi.setSize(size) self.events[name].append(spi) self.browser.add_to_panel_trace(trace_name, c, spi) def make_panel_events(self, name, panel_name, symbol, color, size): """Prepare events for plotting in a specific panel. Call this function in the constructor if your `analyze()` function wants to plot some event markers in a specific panel using the `set_events()` or àdd_events()` functions. Parameters ---------- name: str Name identifying the events. panel_name: str Name of the panel on which the event markers should be plotted. symbol: str Symbol to be used for plotting event markers. See [pyqtgraph.ScatterPlotItem.setSymbol()](https://pyqtgraph.readthedocs.io/en/latest/api_reference/graphicsItems/scatterplotitem.html) for options. color: pyqtgraph color specifier Color of the marker symbol. size: int or float Size of the event marker. """ self.events[name] = [] panel = self.browser.panels[panel_name] for ax in panel.axs: spi = pg.ScatterPlotItem() spi.setSymbol(symbol) spi.setBrush(color) spi.setSize(size) self.events[name].append(spi) ax.add_item(spi) def set_events(self, name, channel, x, y): """Plot event markers. Call this function from the analyze() function for plotting event markers. Previously plotted event markers are erased. Parameters ---------- name: str Name identifying the events. This is the name that has been used when calling `make_trace_events()` or `make_panel_events()` channel: int Channel where to plot the data. If negative, plot them on all channels. x: array of float x-coordinates of the event marker. y: array of float y-coordinates of the event marker. """ for c in range(self.browser.data.data.channels): if c == channel or channel < 0: self.events[name][c].setData(x, y) else: self.events[name][c].clear() def add_events(self, name, channel, x, y): """Plot additional event markers. Call this function from the analyze() function for plotting event markers. Previously plotted event markers are not erased. Parameters ---------- name: str Name identifying the events. This is the name that has been used when calling `make_trace_events()` or `make_panel_events()` channel: int Channel where to plot the data. If negative, plot them on all channels. x: array of float x-coordinates of the event marker. y: array of float y-coordinates of the event marker. """ for c in range(self.browser.data.data.channels): if c == channel or channel < 0: self.events[name][c].addPoints(x, y)
Subclasses
Methods
def clear(self)
-
Clear the data table and the markers.
def analyze(self, t0, t1, channel, traces)
-
Analysis function.
This function is called whenever a region is selected for analysis. Reimplement it for your purposes.
Parameters
t0
:float
- Start time of the selected region.
t1
:float
- End time of the selected region.
channel
:int
- Channel of the selected region.
traces
:dict
ofarrays
- Dictionary with all data traces cut out between
t0
andt1
. Keys are the names of the data traces.
def traces(self)
-
Names of all available data traces.
Returns
traces
:list
ofstr
- Names of all available data traces.
def trace(self, name)
-
Full data trace of a given name.
Parameters
name
:str
- Name of the requested data trace.
Returns
trace
:BufferedData
orNone
- Full data trace or None if name was not found.
def make_column(self, label, unit=None, formats=None)
-
Make a column for the table collecting the analysis results.
Analysis results are stored in a table. Each Analyzer can add columns to this table in its constructor using this function.
Parameters
label
:str
- Label of the column.
unit
:str
- Unit of the values stored in this column.
formats
:str
- Format string for the values stored in this column.
def store(self, *args)
-
Store analysis results in table.
Call this function once in
analyze()
with as many arguments as columns generated usingmake_column()
.Parameters
*args
:float, int,
orstr
- Values to be stored in the table.
As many values as columns generated using
make_column()
.
def make_trace_events(self, name, trace_name, symbol, color, size)
-
Prepare events for plotting on top of a specific trace.
Call this function in the constructor if your
analyze()
function wants to plot some event markers onto a trace using theset_events()
or àdd_events()` functions.Parameters
name
:str
- Name identifying the events.
trace_name
:str
- Name of the trace on which the event markers should be plotted.
symbol
:str
-
Symbol to be used for plotting event markers.
See pyqtgraph.ScatterPlotItem.setSymbol() for options.
color
:pyqtgraph color specifier
- Color of the marker symbol.
size
:int
orfloat
- Size of the event marker.
def make_panel_events(self, name, panel_name, symbol, color, size)
-
Prepare events for plotting in a specific panel.
Call this function in the constructor if your
analyze()
function wants to plot some event markers in a specific panel using theset_events()
or àdd_events()` functions.Parameters
name
:str
- Name identifying the events.
panel_name
:str
- Name of the panel on which the event markers should be plotted.
symbol
:str
-
Symbol to be used for plotting event markers.
See pyqtgraph.ScatterPlotItem.setSymbol() for options.
color
:pyqtgraph color specifier
- Color of the marker symbol.
size
:int
orfloat
- Size of the event marker.
def set_events(self, name, channel, x, y)
-
Plot event markers.
Call this function from the analyze() function for plotting event markers. Previously plotted event markers are erased.
Parameters
name
:str
- Name identifying the events.
This is the name that has been used when calling
make_trace_events()
ormake_panel_events()
channel
:int
- Channel where to plot the data. If negative, plot them on all channels.
x
:array
offloat
- x-coordinates of the event marker.
y
:array
offloat
- y-coordinates of the event marker.
def add_events(self, name, channel, x, y)
-
Plot additional event markers.
Call this function from the analyze() function for plotting event markers. Previously plotted event markers are not erased.
Parameters
name
:str
- Name identifying the events.
This is the name that has been used when calling
make_trace_events()
ormake_panel_events()
channel
:int
- Channel where to plot the data. If negative, plot them on all channels.
x
:array
offloat
- x-coordinates of the event marker.
y
:array
offloat
- y-coordinates of the event marker.
class PlainAnalyzer (browser)
-
Implementation of an Analyzer that stores the analysis window into the table.
This analyzer is name 'plain' and simply stores start and end time of the slected region, the duration of the selected time interval, and the channel into the table.
Parameters
browser
:DataBrowser
- Instance of the data browser.
Methods
analyze()
: Analysis function.
Expand source code
class PlainAnalyzer(Analyzer): """Implementation of an Analyzer that stores the analysis window into the table. This analyzer is name 'plain' and simply stores start and end time of the slected region, the duration of the selected time interval, and the channel into the table. Parameters ---------- browser: DataBrowser Instance of the data browser. Methods ------- - `analyze()`: Analysis function. """ def __init__(self, browser): super().__init__(browser, 'plain', 'data') nd = int(floor(-log10(1/self.source.rate))) if nd < 0: nd = 0 self.make_column('tstart', 's', f'%.{nd}f') self.make_column('tend', 's', f'%.{nd}f') self.make_column('duration', 's', f'%.{nd}f') self.make_column('channel', '', '%.0f') def analyze(self, t0, t1, channel, traces): """Analyze the selected region. """ self.store(t0, t1, t1 - t0, channel)
Ancestors
Methods
def analyze(self, t0, t1, channel, traces)
-
Analyze the selected region.
Inherited members