<h1 align="center">
<img src="https://github.com/mscaudill/openseize/blob/master/docs/imgs/logo.png"
style="width:450px;height:auto;"/>
</h1>
<h2 align="center">
<i><font color='gray'>Digital Signal Processing for Big EEGs</font></i>
</h2>
<p align="center">
<a href="https://joss.theoj.org/papers/f737f4eb377a3bed6602dac51f6b13b4"><img
src="https://joss.theoj.org/papers/f737f4eb377a3bed6602dac51f6b13b4/status.svg"
alt="JOSS Review" />
</a>
<a href="https://github.com/mscaudill/openseize/blob/master/LICENSE"><img
src="https://img.shields.io/badge/License-BSD%203--Clause-teal"
alt="Openseize is released under the BSD 3-Clause license." />
</a>
<a href="https://pypi.org/project/openseize/"><img
src="https://img.shields.io/pypi/v/openseize?color=78437E&logo=pypi&logoColor=white"
alt="Openseize pypi release" />
</a>
<a href="https://github.com/mscaudill/openseize/tree/master#Dependencies"><img
src="https://img.shields.io/pypi/pyversions/openseize?logo=python&logoColor=gold"
alt="Python versions supported." />
</a>
<a href="https://github.com/mscaudill/openseize/actions/workflows/test.yml"><img
src="https://img.shields.io/github/actions/workflow/status/mscaudill/openseize/test.yml?label=CI&logo=github"
alt="Openseize's test status" />
</a>
<a href="https://github.com/mscaudill/openseize/pulls"><img
src="https://img.shields.io/badge/PRs-welcome-F8A3A3"
alt="Pull Request Welcomed!" />
</a>
</p>
<p align="center" style="font-size: 20px">
<a href="#Key-Features">Key Features</a> |
<a href="#Installation">Installation</a> |
<a href="#Dependencies">Dependencies</a> |
<a href="#Documentation">Documentation</a> |
<a href="#Attribution">Attribution</a> |
<a href="#Contributions">Contributions</a> |
<a href="#Issues">Issues</a> |
<a href="#License">License</a> |
<a href="#Acknowledgements">Acknowledgements</a>
</p>
<hr>
* **Source Code:** <a href=https://github.com/mscaudill/openseize
target=_blank>https://github.com/mscaudill/opensieze
</a>
* **White Paper:** <a href="https://github.com/mscaudill/opensieze">
LINK</a>
<hr>
# Key Features
Recent innovations in EEG recording technologies make it possible to perform
high channel count recordings at high sampling frequencies spanning many
days. This results in big EEG data sets that are often not addressable to
virtual memory. Worse yet, current digital signal processing (DSP)
packages that rely on Matlab© or Scipy's DSP routines require the data
to be a contiguous in-memory array. <b><a
href=https://github.com/mscaudill/openseize target=_blank>Openseize</a> is
a fully iterative DSP Python package that can scale to the largest of EEG
data sets.</b> It accomplishes this by storing DSP operations, such as
filtering, as on-the-fly iterables that "produce" DSP results one fragment
of the data at a time. Additionally, Openseize is built using time-tested
software design principles that support extensions while maintaining
a simple interface. Finally, Openseize's <a
href=https://mscaudill.github.io/openseize/ target=_blank>documentation</a>
features in-depth discussions of iterative DSP processing and its
implementation.
<font color='black'>
<ul style="background-color:#DEF5E8;">
<li>Construct sequences of DSP steps that operate completely 'out-of-core'
to process data too large to fit into memory.</li>
<li>DSP pipelines are constructed using a familiar Scipy-like API, so you
can start quickly without sweating the details.</li>
<li> Supports processing of data from multiple file types including the
popular European Data Format (EDF).</li>
<li>Supports 'masking' to filter data sections by artifacts, behavioral
states or any externally measured signals or annotations.</li>
<li> Efficiently process large data using the amount of memory <u>you</u>
choose to use.</li>
<li> DSP tools currently include a large number of FIR & IIR Filters,
polyphase decomposition resamplers, and spectral estimation tools for both
stationary and non-stationary data.</li>
<li> Built using a developer-friendly object-oriented approach to support
extensibility.</li>
</ul>
</font>
# Installation
For each installation guide below, we **strongly** recommend creating a
virtual environment. This environment will isolate external dependencies
that may conflict with packages you already have installed on your system.
Python comes installed with a virtual environment manager called `venv`.
Additionally, there are environment managers like `conda` that can check
for package conflicts when the environment is created or updated. For more
information please see:
* <a href=https://realpython.com/python-virtual-environments-a-primer/
target=_blank>Python Virtual Environments</a>
* <a
href=https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html target=_blank>Conda Environments</a>
### Python Virtual Environment
1. Create your virtual environment, Here we name it `my_venv`.
```Shell
$ python3 -m venv my_venv
```
2. Activate your 'my_venv' environment
```Shell
$ source my_venv/bin/activate
```
3. Install openseize into your virtual environment
```Shell
(my_venv)$ pip install openseize
```
### Conda
The `conda` environment manager is more advanced than `venv`. When a `conda`
environment is updated, `conda` *simultaneously* looks at all the packages
to be installed to reduce package conflicts. Having said that, `conda` and
`pip`, the tool used to install Openseize from pypi, do not always work
well together. The developers of `conda` recommend installing all possible
packages from conda repositories before installing non-conda packages using
`pip`. To ensure this order of installs, Openseize's source code includes an
environment configuration file (yml) that will build an openseize `conda`
environment. Once built you can then use `pip` to install the openseize
package into this environment. Here are the steps:
1. Download the openseize environment <a
href=https://github.com/mscaudill/openseize/blob/master/environment.yml
target=_blank>configuration yaml</a>
2. Create a conda openseize environment.
```Shell
$ conda env create --file environment.yml
```
3. Activate the `openseize` environment.
```Shell
$ conda activate openseize
```
4. Install openseize from pypi into your openseize environment.
```Shell
(openseize)$ pip install openseize
```
### From Source
If you would like to develop Openseize further, you'll need the source code
and all development dependencies. Here are the steps:
1. Create a virtual environment with latest pip version.
```Shell
$ python3 -m venv env
$ source env/bin/activate
$ pip install --upgrade pip
```
2. Get the source code
```Shell
$ git clone https://github.com/mscaudill/openseize.git
```
3. CD into the directory containing the pyproject.toml and create an
editable install with `pip`
```Shell
$ pip install -e .[dev]
```
# Dependencies
Openseize requires <b>Python <span>≥</span> 3.8</b> and has the
following dependencies:
<table>
<tr>
<th>package</th>
<th>pypi</th>
<th>conda</th>
</tr>
<tr>
<td><a href="https://requests.readthedocs.io/en/latest/"
target=_blank>requests</a></td>
<td>https://pypi.org/project/requests/</td>
<td align='center'><span>✓</span></td>
</tr>
<tr>
<td>wget</td>
<td>https://pypi.org/project/wget/</td>
<td align='center'><span>✓</span></td>
</tr>
<tr>
<td><a href="https://numpy.org/doc/stable/index.html#"
target=_blank>numpy</a></td>
<td>https://pypi.org/project/numpy/</td>
<td align='center'><span>✓</span></td>
</tr>
<tr>
<td><a href="https://scipy.org/"
target=_blank>scipy</a></td>
<td>https://pypi.org/project/scipy/</td>
<td align='center'><span>✓</span></td>
</tr>
<tr>
<td><a href="https://matplotlib.org/"
target=_blank>matplotlib</a></td>
<td>https://pypi.org/project/matplotlib/</td>
<td align='center'><span>✓</span></td>
</tr>
<tr>
<td><a href="https://ipython.org/"
target=_blank>ipython</a></td>
<td>https://pypi.org/project/ipython/</td>
<td align='center'><span>✓</span></td>
</tr>
<tr>
<td><a href=https://jupyter.org/
target=_blank>notebook</a></td>
<td>https://pypi.org/project/jupyter/</td>
<td align='center'><span>✓</span></td>
</tr>
<tr>
<td><a href=https://docs.pytest.org/
target=_blank>pytest</a></td>
<td>https://pypi.org/project/pytest/</td>
<td align='center'><span>✓</span></td>
</tr>
<tr>
<td><a href=https://psutil.readthedocs.io/en/latest/
target=_blank>psutil</a></td>
<td>https://pypi.org/project/psutil/</td>
<td align='center'><span>✓</span></td>
</tr>
</table>
# Documentation
Openseize documentation site has a [quickstart guide](
https://mscaudill.github.io/openseize/quickstart/), [extensive tutorials](
https://mscaudill.github.io/openseize/tutorials/producers/) and [
reference pages](https://mscaudill.github.io/openseize/producer/producer/)
for all publicly available modules, classes and functions.
# Attribution
```
Citation to be added
```
And if you really like Openseize, you can star the <a
href=https://github.com/mscaudill/openseize>repository</a>
<span>⭐</span>!
# Contributions
Contributions are what makes open-source fun and we would love for you to
contribute. Please check out our [contribution guide](
https://github.com/mscaudill/openseize/blob/master/.github/CONTRIBUTING.md)
to get started.
# Issues
Openseize provides custom issue templates for filing bugs, requesting
feature enhancements, suggesting documentation changes, or just asking
questions. *Ready to discuss?* File an issue <a
href=https://github.com/mscaudill/openseize/issues/new/choose>here</a>.
# License
Openseize is licensed under the terms of the 3-Clause BSD License.
# Acknowledgements
**This work was generously supported through the Ting Tsung and Wei Fong Chao
Foundation.**
Raw data
{
"_id": null,
"home_page": "",
"name": "openseize",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "EEG,signal analysis,digital signal processing,seizure,big data",
"author": "",
"author_email": "Matthew Caudill <mscaudill@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/b3/48/e205e2bc0e5e329cfac7ca989f6d76c698fc47f64ea126b26c876b6a95fb/openseize-1.2.0.tar.gz",
"platform": null,
"description": "<h1 align=\"center\">\n <img src=\"https://github.com/mscaudill/openseize/blob/master/docs/imgs/logo.png\" \n style=\"width:450px;height:auto;\"/>\n</h1>\n\n<h2 align=\"center\">\n <i><font color='gray'>Digital Signal Processing for Big EEGs</font></i>\n</h2>\n\n<p align=\"center\">\n <a href=\"https://joss.theoj.org/papers/f737f4eb377a3bed6602dac51f6b13b4\"><img \n src=\"https://joss.theoj.org/papers/f737f4eb377a3bed6602dac51f6b13b4/status.svg\" \n alt=\"JOSS Review\" />\n </a>\n <a href=\"https://github.com/mscaudill/openseize/blob/master/LICENSE\"><img\n src=\"https://img.shields.io/badge/License-BSD%203--Clause-teal\" \n alt=\"Openseize is released under the BSD 3-Clause license.\" />\n </a>\n <a href=\"https://pypi.org/project/openseize/\"><img \n src=\"https://img.shields.io/pypi/v/openseize?color=78437E&logo=pypi&logoColor=white\" \n alt=\"Openseize pypi release\" />\n </a>\n <a href=\"https://github.com/mscaudill/openseize/tree/master#Dependencies\"><img \n src=\"https://img.shields.io/pypi/pyversions/openseize?logo=python&logoColor=gold\" \n alt=\"Python versions supported.\" />\n </a>\n <a href=\"https://github.com/mscaudill/openseize/actions/workflows/test.yml\"><img \n src=\"https://img.shields.io/github/actions/workflow/status/mscaudill/openseize/test.yml?label=CI&logo=github\" \n alt=\"Openseize's test status\" />\n </a>\n <a href=\"https://github.com/mscaudill/openseize/pulls\"><img \n src=\"https://img.shields.io/badge/PRs-welcome-F8A3A3\"\n alt=\"Pull Request Welcomed!\" />\n </a>\n</p>\n\n\n<p align=\"center\" style=\"font-size: 20px\">\n<a href=\"#Key-Features\">Key Features</a> | \n<a href=\"#Installation\">Installation</a> | \n<a href=\"#Dependencies\">Dependencies</a> | \n<a href=\"#Documentation\">Documentation</a> | \n<a href=\"#Attribution\">Attribution</a> | \n<a href=\"#Contributions\">Contributions</a> | \n<a href=\"#Issues\">Issues</a> | \n<a href=\"#License\">License</a> |\n<a href=\"#Acknowledgements\">Acknowledgements</a> \n</p>\n\n<hr>\n\n* **Source Code:** <a href=https://github.com/mscaudill/openseize\n target=_blank>https://github.com/mscaudill/opensieze\n </a>\n* **White Paper:** <a href=\"https://github.com/mscaudill/opensieze\">\nLINK</a>\n\n<hr>\n\n# Key Features\n\nRecent innovations in EEG recording technologies make it possible to perform\nhigh channel count recordings at high sampling frequencies spanning many\ndays. This results in big EEG data sets that are often not addressable to\nvirtual memory. Worse yet, current digital signal processing (DSP)\npackages that rely on Matlab© or Scipy's DSP routines require the data\nto be a contiguous in-memory array. <b><a\nhref=https://github.com/mscaudill/openseize target=_blank>Openseize</a> is\na fully iterative DSP Python package that can scale to the largest of EEG\ndata sets.</b> It accomplishes this by storing DSP operations, such as\nfiltering, as on-the-fly iterables that \"produce\" DSP results one fragment\nof the data at a time. Additionally, Openseize is built using time-tested\nsoftware design principles that support extensions while maintaining\na simple interface. Finally, Openseize's <a\nhref=https://mscaudill.github.io/openseize/ target=_blank>documentation</a>\nfeatures in-depth discussions of iterative DSP processing and its\nimplementation.\n\n<font color='black'>\n<ul style=\"background-color:#DEF5E8;\">\n <li>Construct sequences of DSP steps that operate completely 'out-of-core' \n to process data too large to fit into memory.</li>\n <li>DSP pipelines are constructed using a familiar Scipy-like API, so you \n can start quickly without sweating the details.</li>\n <li> Supports processing of data from multiple file types including the \n popular European Data Format (EDF).</li>\n <li>Supports 'masking' to filter data sections by artifacts, behavioral \n states or any externally measured signals or annotations.</li>\n <li> Efficiently process large data using the amount of memory <u>you</u>\n choose to use.</li>\n <li> DSP tools currently include a large number of FIR & IIR Filters,\n polyphase decomposition resamplers, and spectral estimation tools for both\n stationary and non-stationary data.</li>\n <li> Built using a developer-friendly object-oriented approach to support\n extensibility.</li>\n</ul>\n</font>\n\n# Installation\n\nFor each installation guide below, we **strongly** recommend creating a \nvirtual environment. This environment will isolate external dependencies \nthat may conflict with packages you already have installed on your system. \nPython comes installed with a virtual environment manager called `venv`. \nAdditionally, there are environment managers like `conda` that can check \nfor package conflicts when the environment is created or updated. For more\ninformation please see:\n\n* <a href=https://realpython.com/python-virtual-environments-a-primer/\n target=_blank>Python Virtual Environments</a> \n* <a \nhref=https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html target=_blank>Conda Environments</a> \n\n\n### Python Virtual Environment\n\n1. Create your virtual environment, Here we name it `my_venv`. \n```Shell\n$ python3 -m venv my_venv\n```\n\n2. Activate your 'my_venv' environment\n```Shell\n$ source my_venv/bin/activate\n```\n\n3. Install openseize into your virtual environment\n```Shell\n(my_venv)$ pip install openseize\n```\n\n### Conda\n\nThe `conda` environment manager is more advanced than `venv`. When a `conda`\nenvironment is updated, `conda` *simultaneously* looks at all the packages\nto be installed to reduce package conflicts. Having said that, `conda` and\n`pip`, the tool used to install Openseize from pypi, do not always work\nwell together. The developers of `conda` recommend installing all possible\npackages from conda repositories before installing non-conda packages using\n`pip`. To ensure this order of installs, Openseize's source code includes an\nenvironment configuration file (yml) that will build an openseize `conda`\nenvironment. Once built you can then use `pip` to install the openseize\npackage into this environment. Here are the steps:\n\n1. Download the openseize environment <a\nhref=https://github.com/mscaudill/openseize/blob/master/environment.yml \ntarget=_blank>configuration yaml</a> \n\n\n2. Create a conda openseize environment.\n```Shell\n$ conda env create --file environment.yml\n```\n\n3. Activate the `openseize` environment.\n```Shell\n$ conda activate openseize\n```\n\n4. Install openseize from pypi into your openseize environment.\n```Shell\n(openseize)$ pip install openseize\n```\n\n### From Source\n\nIf you would like to develop Openseize further, you'll need the source code\nand all development dependencies. Here are the steps:\n\n1. Create a virtual environment with latest pip version.\n```Shell\n$ python3 -m venv env\n$ source env/bin/activate\n$ pip install --upgrade pip\n```\n\n2. Get the source code\n```Shell\n$ git clone https://github.com/mscaudill/openseize.git\n```\n\n3. CD into the directory containing the pyproject.toml and create an \neditable install with `pip`\n```Shell\n$ pip install -e .[dev]\n```\n\n# Dependencies\n\nOpenseize requires <b>Python <span>≥</span> 3.8</b> and has the\nfollowing dependencies:\n\n<table>\n\n<tr>\n <th>package</th>\n <th>pypi</th>\n <th>conda</th>\n </tr>\n\n<tr>\n <td><a href=\"https://requests.readthedocs.io/en/latest/\" \n target=_blank>requests</a></td>\n <td>https://pypi.org/project/requests/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n<tr>\n <td>wget</td>\n <td>https://pypi.org/project/wget/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n<tr>\n <td><a href=\"https://numpy.org/doc/stable/index.html#\" \n target=_blank>numpy</a></td>\n <td>https://pypi.org/project/numpy/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n<tr>\n <td><a href=\"https://scipy.org/\" \n target=_blank>scipy</a></td>\n <td>https://pypi.org/project/scipy/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n<tr>\n <td><a href=\"https://matplotlib.org/\" \n target=_blank>matplotlib</a></td>\n <td>https://pypi.org/project/matplotlib/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n<tr>\n <td><a href=\"https://ipython.org/\" \n target=_blank>ipython</a></td>\n <td>https://pypi.org/project/ipython/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n<tr>\n <td><a href=https://jupyter.org/ \n target=_blank>notebook</a></td>\n <td>https://pypi.org/project/jupyter/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n<tr>\n <td><a href=https://docs.pytest.org/ \n target=_blank>pytest</a></td>\n <td>https://pypi.org/project/pytest/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n<tr>\n <td><a href=https://psutil.readthedocs.io/en/latest/ \n target=_blank>psutil</a></td>\n <td>https://pypi.org/project/psutil/</td>\n <td align='center'><span>✓</span></td>\n </tr>\n\n</table>\n\n# Documentation\n\nOpenseize documentation site has a [quickstart guide](\nhttps://mscaudill.github.io/openseize/quickstart/), [extensive tutorials](\nhttps://mscaudill.github.io/openseize/tutorials/producers/) and [\nreference pages](https://mscaudill.github.io/openseize/producer/producer/)\nfor all publicly available modules, classes and functions.\n\n# Attribution\n\n```\nCitation to be added\n```\n\nAnd if you really like Openseize, you can star the <a\nhref=https://github.com/mscaudill/openseize>repository</a> \n<span>⭐</span>!\n\n# Contributions\n\nContributions are what makes open-source fun and we would love for you to\ncontribute. Please check out our [contribution guide](\nhttps://github.com/mscaudill/openseize/blob/master/.github/CONTRIBUTING.md)\nto get started.\n\n# Issues\n\nOpenseize provides custom issue templates for filing bugs, requesting\nfeature enhancements, suggesting documentation changes, or just asking\nquestions. *Ready to discuss?* File an issue <a\nhref=https://github.com/mscaudill/openseize/issues/new/choose>here</a>. \n\n# License\n\nOpenseize is licensed under the terms of the 3-Clause BSD License.\n\n# Acknowledgements\n\n**This work was generously supported through the Ting Tsung and Wei Fong Chao \nFoundation.**\n\n\n\n",
"bugtrack_url": null,
"license": "",
"summary": "Digital Signal Processing for Big EEG Datasets",
"version": "1.2.0",
"split_keywords": [
"eeg",
"signal analysis",
"digital signal processing",
"seizure",
"big data"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "dc54dfb38cff8831c68350900b8d7a794b868598c6c296927f9f23abc611cecb",
"md5": "e624acd0671fe4821868e3abcee0bab7",
"sha256": "04b515f0bb2e1b6c72493e89581c24f82984c693690db325328f50425b085519"
},
"downloads": -1,
"filename": "openseize-1.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e624acd0671fe4821868e3abcee0bab7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 76627,
"upload_time": "2023-03-23T19:27:29",
"upload_time_iso_8601": "2023-03-23T19:27:29.638594Z",
"url": "https://files.pythonhosted.org/packages/dc/54/dfb38cff8831c68350900b8d7a794b868598c6c296927f9f23abc611cecb/openseize-1.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b348e205e2bc0e5e329cfac7ca989f6d76c698fc47f64ea126b26c876b6a95fb",
"md5": "aae81bf12538d64242aa9a92c63d7b10",
"sha256": "b9318844b5f7afc5c8a4675bf83ee6b27cabfa4f4ea9bf36299de5fc4b638453"
},
"downloads": -1,
"filename": "openseize-1.2.0.tar.gz",
"has_sig": false,
"md5_digest": "aae81bf12538d64242aa9a92c63d7b10",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 82551,
"upload_time": "2023-03-23T19:27:31",
"upload_time_iso_8601": "2023-03-23T19:27:31.790611Z",
"url": "https://files.pythonhosted.org/packages/b3/48/e205e2bc0e5e329cfac7ca989f6d76c698fc47f64ea126b26c876b6a95fb/openseize-1.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-03-23 19:27:31",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "openseize"
}