NoFitter

class NoFitter(settings: Optional[dict] = None)

Bases: MetaEventFitter

Abstract base class to analyze and flag the start and end times of regions of interest in a timeseries for further analysis.

Public Methods

NoFitter.close_resources(channel: int | None = None) → None

Perform any actions necessary to gracefully close resources before app exit

Parameters:

channel (Optional[int]) – the channel identifier

NoFitter.construct_fitted_event(channel: int, index: int) → ndarray[tuple[int, ...], dtype[float64]] | None

Construct an array of data corresponding to the fit for the specified event

Parameters:
  • channel (int) – analyze only events from this channel

  • index (int) – the index of the target event

Returns:

numpy array of fitted data for the event, or None if fitting is not complete or the event was rejected

Return type:

Optional[npt.NDArray[np.float64]]

Raises:

AttributeError – if this instance is not linked to a MetaEventLoader

NoFitter.get_empty_settings(globally_available_plugins: Dict[str, List[str]] | None = None, standalone: bool = False) → Dict[str, Dict[str, Any]]

Declare the settings this event fitter exposes, on top of the base contract.

Called by poriscope when the plugin is instantiated or reconfigured, to build the settings dialog and to sanity-check whatever the user enters; the accepted values are then readable through self.settings. See get_empty_settings() for the structure of the dict and what Type, Value, Min, Max, Options and Units mean in it, and for the reserved keys the GUI builds file pickers from.

The super() call supplies the mandatory "MetaEventLoader" key, which is how this plugin is wired to its data source.

The keys this plugin adds:

  • None. This fitter deliberately adds no settings: it records each event as a single sublevel so that events can be written to a database without a fit being imposed on them, which is what makes it the baseline case the other fitters are compared against.

Parameters:
  • globally_available_plugins (Optional[ Dict[str, List[str]]]) – a dict containing all data plugins that exist to date, keyed by metaclass. Must include “MetaEventLoader” as a key, with explicitly set Type MetaEventLoader.

  • standalone (bool) – False if this is called as part of a GUI, True otherwise. Default False

Returns:

the dict that must be filled in to initialize the filter

Return type:

Dict[str, Dict[str, Any]]

Private Methods

NoFitter._define_event_metadata_types() → Dict[str, Type[int | float | str | bool]]

Build a dict of metadata along with associated datatypes for use by the database writer downstream. Keys must match columns defined in _populate_event_metadata() All of this metadata must be populated during fitting. Options for dtypes are int, float, str, bool

Returns:

a dict of metadata keys and associated base dtypes

Return type:

Dict[str, Type[Union[int, float, str, bool]]]

NoFitter._define_event_metadata_units() → Dict[str, str | None]

Build a dict of metadata units, or None if unitless. Keys must match columns defined in _populate_event_metadata() All of this metadata must be populated during fitting.

Returns:

a dict of metadata keys and associated units

Return type:

Dict[str, Optional[str]]

NoFitter._define_sublevel_metadata_types() → Dict[str, Type[int | float | str | bool]]

Build a dict of sublevel metadata along with associated datatypes for use by the database writer downstream. Keys must match columns defined in _populate_sublevel_metadata() All of this metadata must be populated during fitting. Options for dtypes are int, float, str, bool. Note that this is the type of entries in the associated list, it should not include the list element

Returns:

a dict of metadata keys and associated base dtypes

Return type:

Dict[str, Type[Union[int, float, str, bool]]]

NoFitter._define_sublevel_metadata_units() → Dict[str, str | None]

Build a dict of sublevel metadata units , or None if unitless. Keys must match columns defined in _populate_sublevel_metadata() All of this metadata must be populated during fitting. it should not include the list element

Returns:

a dict of metadata keys and associated base dtypes

Return type:

Dict[str, Optional[str]]

NoFitter._init() → None

called at the start of base class initialization

NoFitter._locate_sublevel_transitions(data: ndarray[tuple[int, ...], dtype[float64]], samplerate: float, padding_before: int | None, padding_after: int | None, baseline_mean: float | None, baseline_std: float | None) → List[Any] | None

Performs no changepoint search: locates a single baseline crossing by walking backward from padding_before until the signal crosses baseline_mean, and returns that point as the event’s only sublevel edge. Returned indices are pre-pended with 0 if 0 is not already the first entry.

Parameters:
  • data (npt.NDArray[np.float64]) – an array of data from which to extract the locations of sublevel transitions

  • samplerate (float) – the sampling rate

  • padding_before (Optional[int]) – the number of data points before the estimated start of the event in the chunk

  • padding_after (Optional[int]) – the number of data points after the estimated end of the event in the chunk

  • baseline_mean (Optional[float]) – the local mean value of the baseline current

  • baseline_std (Optional[float]) – the local standard deviation of the baseline current

Returns:

(index, rise_time) for each sublevel boundary - 0, the baseline crossing, the end of the event proper and len(data) - where rise_time is this event’s walk-back from padding_before to the crossing, carried to _populate_sublevel_metadata() in the list rather than on the instance.

Return type:

Optional[List[Any]]

Raises:

ValueError – if the event is rejected. Note that ValueError will skip and reject the event but will not stop processing of the rest of the dataset

NoFitter._populate_event_metadata(data: ndarray[tuple[int, ...], dtype[float64]], samplerate: float, baseline_mean: float | None, baseline_std: float | None, sublevel_metadata: Dict[str, List[int | float | number]]) → Dict[str, int | float | str | bool]

Assemble a list of metadata to save in the event database later. Note that keys ‘start_time_s’ and ‘index’ are already handled in the base class and should not be touched here.

Parameters:
  • data (npt.NDArray[np.float64]) – an array of data from which to extract the locations of sublevel transitions

  • samplerate (float) – the sampling rate

  • baseline_mean (Optional[float]) – the local mean value of the baseline current

  • baseline_std (Optional[float]) – the local standard deviation of the baseline current

  • sublevel_metadata (Dict[str, List[Numeric]]) – the dict of sublevel metadata built by self._populate_sublevel_metadata()

Returns:

a dict of event metadata values

Return type:

Dict[str, Union[int, float, str, bool]]

NoFitter._populate_sublevel_metadata(data: ndarray[tuple[int, ...], dtype[float64]], samplerate: float, baseline_mean: float | None, baseline_std: float | None, sublevel_starts: List[Any]) → Dict[str, ndarray[tuple[int, ...], dtype[int | float | number]]]

Build a dict of lists of sublevel metadata with whatever arbitrary keys you want to consider in your event fitter. Every list must have one value per sublevel - one fewer than the entries in sublevel_starts, whose last entry is the terminal boundary. Note that ‘index’ is already handled in the base class

Parameters:
  • data (npt.NDArray[np.float64]) – an array of data from which to extract the locations of sublevel transitions

  • samplerate (float) – the sampling rate

  • baseline_mean (Optional[float]) – the local mean value of the baseline current

  • baseline_std (Optional[float]) – the local standard deviation of the baseline current

  • sublevel_starts (List[Any]) – the list of sublevel start indices located in self._locate_sublevel_transitions()

Returns:

a dict of lists of sublevel metadata values, one list entry per sublevel for each piece of metadata

Return type:

Dict[str, npt.NDArray[Numeric]]

Raises:

ValueError – if baseline_std is None, or if the sublevel current at the start and end of the event differ by more than twice the local baseline standard deviation (baseline mismatch)

NoFitter._post_process_events(channel: int) → None
Parameters:

channel (int) – the index of the channel to postprocess

NoFitter._pre_process_events(channel: int) → None
Parameters:

channel (int) – the channel to preprocess

NoFitter._validate_settings(settings: dict) → None

Validate that the settings dict contains the correct information for use by the subclass.

Parameters:

settings (dict) – Parameters for event detection.