ripple-detection


Nameripple-detection JSON
Version 1.7.0 PyPI version JSON
download
home_pageNone
SummaryTools for finding sharp-wave ripple events (150-250 Hz) from local field potentials.
upload_time2025-10-17 12:29:04
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT License Copyright (c) 2017 Eric Denovellis Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords lfp hippocampus neuroscience ripple sharp-wave
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ripple_detection

[![PyPI version](https://badge.fury.io/py/ripple-detection.svg)](https://badge.fury.io/py/ripple-detection)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Test, Build, and Publish](https://github.com/Eden-Kramer-Lab/ripple_detection/actions/workflows/release.yml/badge.svg)](https://github.com/Eden-Kramer-Lab/ripple_detection/actions/workflows/release.yml)
[![codecov](https://codecov.io/gh/Eden-Kramer-Lab/ripple_detection/branch/master/graph/badge.svg)](https://codecov.io/gh/Eden-Kramer-Lab/ripple_detection)

A Python package for detecting [sharp-wave ripple](https://en.wikipedia.org/wiki/Sharp_waves_and_ripples) events (150-250 Hz) from local field potentials (LFPs) in neuroscience research.

## Features

- **Multiple Detection Algorithms**
  - `Kay_ripple_detector` - Multi-channel consensus approach (Kay et al. 2016)
  - `Karlsson_ripple_detector` - Per-channel detection with merging (Karlsson et al. 2009)
  - `Roumis_ripple_detector` - Alternative detection method
  - `multiunit_HSE_detector` - High Synchrony Event detection from multiunit activity

- **Comprehensive Event Statistics**
  - Temporal metrics (start time, end time, duration)
  - Z-score metrics (mean, median, max, min, sustained threshold)
  - Signal metrics (area under curve, total energy)
  - Movement metrics (speed during event)

- **Flexible Signal Processing**
  - Bandpass filtering (150-250 Hz)
  - Envelope extraction via Hilbert transform
  - Gaussian smoothing with configurable parameters
  - Movement exclusion based on speed thresholds

- **Simulation Tools**
  - Generate synthetic LFPs with embedded ripples
  - Multiple noise types (white, pink, brown)
  - Useful for testing and validation

## Installation

### From PyPI

```bash
pip install ripple_detection
```

### From Conda

```bash
conda install -c edeno ripple_detection
```

### From Source

```bash
# Clone the repository
git clone https://github.com/Eden-Kramer-Lab/ripple_detection.git
cd ripple_detection

# Install with optional dependencies
pip install -e .[dev,examples]
```

## Requirements

- Python >= 3.10
- numpy >= 1.23.0
- scipy >= 1.9.0
- pandas >= 1.5.0

## Quick Start

### Basic Usage

```python
from ripple_detection import Kay_ripple_detector
import numpy as np

# Your data
time = np.arange(0, 10, 0.001)  # 10 seconds at 1000 Hz
LFPs = np.random.randn(len(time), 4)  # 4 channels of LFP data
speed = np.abs(np.random.randn(len(time)))  # Animal speed
sampling_frequency = 1000  # Hz

# Detect ripples
ripple_times = Kay_ripple_detector(
    time, LFPs, speed, sampling_frequency,
    speed_threshold=4.0,        # cm/s
    minimum_duration=0.015,     # seconds
    zscore_threshold=2.0
)

print(ripple_times)
```

### Advanced Usage

```python
from ripple_detection import Karlsson_ripple_detector

# Detect ripples with custom parameters
ripples = Karlsson_ripple_detector(
    time, LFPs, speed, sampling_frequency,
    speed_threshold=4.0,
    minimum_duration=0.015,
    zscore_threshold=3.0,
    smoothing_sigma=0.004,
    close_ripple_threshold=0.0
)

# Access detailed statistics
print(f"Detected {len(ripples)} ripple events")
print(f"Mean duration: {ripples['duration'].mean():.3f} seconds")
print(f"Mean z-score: {ripples['mean_zscore'].mean():.2f}")
```

## Output Format

All detectors return a pandas DataFrame with comprehensive event statistics:

| Column | Description |
|--------|-------------|
| `start_time` | Event start time |
| `end_time` | Event end time |
| `duration` | Event duration (seconds) |
| `max_thresh` | Maximum sustained threshold |
| `mean_zscore` | Mean z-score during event |
| `median_zscore` | Median z-score during event |
| `max_zscore` | Maximum z-score during event |
| `min_zscore` | Minimum z-score during event |
| `area` | Integral of z-score over time |
| `total_energy` | Integral of squared z-score |
| `speed_at_start` | Animal speed at event start |
| `speed_at_end` | Animal speed at event end |
| `max_speed` | Maximum speed during event |
| `min_speed` | Minimum speed during event |
| `median_speed` | Median speed during event |
| `mean_speed` | Mean speed during event |

## Examples

See the [examples](examples/) directory for Jupyter notebooks demonstrating:

- [Detection Examples](examples/detection_examples.ipynb) - Using different detectors
- [Algorithm Components](examples/test_individual_algorithm_components.ipynb) - Testing individual components

## Troubleshooting

### Common Errors

#### "axis 1 is out of bounds" or "must be a 2D array"

Your LFP data must be 2D with shape `(n_time, n_channels)`. Even for a single channel, the array must be 2D.

```python
# Wrong - 1D array
lfps = np.random.randn(1000)  # Shape: (1000,)

# Correct - 2D array with single channel
lfps = np.random.randn(1000, 1)  # Shape: (1000, 1)
# OR reshape existing 1D array:
lfps = lfps.reshape(-1, 1)
```

#### "Array length mismatch detected"

Your `time`, `LFPs`, and `speed` arrays must have the same length. Check dimensions:

```python
print(f"time: {len(time)}, LFPs: {len(lfps)}, speed: {len(speed)}")
```

Make sure all arrays cover the same time period and sampling rate.

#### "Sampling frequency is too low for the pre-computed filter"

The built-in `filter_ripple_band()` function uses a pre-computed filter designed for 1500 Hz sampling. For other sampling rates, generate a custom filter:

```python
from ripple_detection import ripple_bandpass_filter
from scipy.signal import filtfilt

# Generate custom filter for your sampling rate
filter_num, filter_denom = ripple_bandpass_filter(sampling_frequency)
filtered_lfps = filtfilt(filter_num, filter_denom, raw_lfps, axis=0)
```

#### No ripples detected (empty DataFrame)

If detection returns no events, try adjusting parameters:

```python
ripples = Kay_ripple_detector(
    time, filtered_lfps, speed, sampling_frequency,
    zscore_threshold=1.5,      # Lower from default 2.0
    minimum_duration=0.010,    # Lower from default 0.015
    speed_threshold=10.0       # Increase if too restrictive (default 4.0)
)
```

**Diagnostic steps:**
1. Check if your LFPs actually contain ripples (150-250 Hz oscillations)
2. Verify speed is in cm/s (not m/s)
3. Plot the filtered LFP to visually inspect for ripple events
4. Try different detector algorithms (Kay, Karlsson, Roumis)

### Parameter Selection Guide

| Parameter | Default | Description | When to Adjust |
|-----------|---------|-------------|----------------|
| `speed_threshold` | 4.0 cm/s | Maximum speed for ripple detection | Increase if too many events excluded during slow movement |
| `minimum_duration` | 0.015 s | Minimum ripple duration (15 ms) | Decrease to 0.010 for shorter ripples; increase to 0.020 for stricter detection |
| `zscore_threshold` | 2.0 (Kay/Roumis)<br>3.0 (Karlsson) | Detection sensitivity | Decrease for more detections; increase for fewer, higher-confidence events |
| `smoothing_sigma` | 0.004 s | Gaussian smoothing window (4 ms) | Rarely needs adjustment; increase for noisier data |

### Getting Help

- **Issues**: [GitHub Issues](https://github.com/Eden-Kramer-Lab/ripple_detection/issues)
- **Discussions**: For questions about usage and parameter selection
- **Email**: [edeno@bu.edu](mailto:edeno@bu.edu)

## Documentation

For detailed documentation on the detection algorithms and signal processing pipeline, see [CLAUDE.md](CLAUDE.md).

## Algorithm Comparison

| Algorithm | Approach | Best For |
|-----------|----------|----------|
| **Kay** | Multi-channel consensus (sum of squared envelopes) | High-density electrode arrays |
| **Karlsson** | Per-channel detection with merging | Independent channel analysis |
| **Roumis** | Averaged square-root of squared envelopes | Balanced multi-channel approach |

## Development

### Setup Development Environment

```bash
# Create conda environment
conda env create -f environment.yml
conda activate ripple_detection

# Install in editable mode with dev dependencies
pip install -e .[dev,examples]
```

### Run Tests

The package has comprehensive test coverage (98%) across 107 tests organized in 4 modules:

```bash
# Run all tests with coverage
pytest --cov=ripple_detection --cov-report=term-missing tests/

# Run specific test modules
pytest tests/test_core.py          # Core signal processing tests (52 tests)
pytest tests/test_detectors.py     # Detector integration tests (25 tests)
pytest tests/test_simulate.py      # Simulation module tests (40 tests)

# Run specific test
pytest tests/test_core.py::TestSegmentBooleanSeries::test_single_segment

# Generate HTML coverage report
pytest --cov=ripple_detection --cov-report=html tests/
# Open htmlcov/index.html in browser
```

**Test Coverage:**
- `core.py`: 100%
- `detectors.py`: 100%
- `simulate.py`: 92%
- **Overall: 98%**

### Code Quality

```bash
# Format code with black
black ripple_detection/ tests/

# Lint code with flake8
flake8 ripple_detection/ tests/

# Check formatting without modifying
black --check ripple_detection/ tests/
```

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

## Citation

If you use this package in your research, please cite the original papers:

### Karlsson Method

```bibtex
@article{karlsson2009awake,
  title={Awake replay of remote experiences in the hippocampus},
  author={Karlsson, Mattias P and Frank, Loren M},
  journal={Nature neuroscience},
  volume={12},
  number={7},
  pages={913--918},
  year={2009},
  publisher={Nature Publishing Group}
}
```

### Kay Method

```bibtex
@article{kay2016hippocampal,
  title={A hippocampal network for spatial coding during immobility and sleep},
  author={Kay, Kenneth and Sosa, Marielena and Chung, Jason E and Karlsson, Mattias P and Larkin, Margaret C and Frank, Loren M},
  journal={Nature},
  volume={531},
  number={7593},
  pages={185--190},
  year={2016},
  publisher={Nature Publishing Group}
}
```

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Authors

- **Eric Denovellis** - [edeno@bu.edu](mailto:edeno@bu.edu)

## Acknowledgments

- Frank Lab for the pre-computed ripple filter
- Original algorithm implementations by Karlsson et al. and Kay et al.

## Support

- **Issues**: [GitHub Issues](https://github.com/Eden-Kramer-Lab/ripple_detection/issues)
- **Discussions**: For questions and discussions about usage
- **Email**: [edeno@bu.edu](mailto:edeno@bu.edu)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ripple-detection",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "LFP, hippocampus, neuroscience, ripple, sharp-wave",
    "author": null,
    "author_email": "Eric Denovellis <edeno@bu.edu>",
    "download_url": "https://files.pythonhosted.org/packages/d2/dd/40ccb603a338c042465e1c01b225973a4b086ecc361c0aad542beef826bf/ripple_detection-1.7.0.tar.gz",
    "platform": null,
    "description": "# ripple_detection\n\n[![PyPI version](https://badge.fury.io/py/ripple-detection.svg)](https://badge.fury.io/py/ripple-detection)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Test, Build, and Publish](https://github.com/Eden-Kramer-Lab/ripple_detection/actions/workflows/release.yml/badge.svg)](https://github.com/Eden-Kramer-Lab/ripple_detection/actions/workflows/release.yml)\n[![codecov](https://codecov.io/gh/Eden-Kramer-Lab/ripple_detection/branch/master/graph/badge.svg)](https://codecov.io/gh/Eden-Kramer-Lab/ripple_detection)\n\nA Python package for detecting [sharp-wave ripple](https://en.wikipedia.org/wiki/Sharp_waves_and_ripples) events (150-250 Hz) from local field potentials (LFPs) in neuroscience research.\n\n## Features\n\n- **Multiple Detection Algorithms**\n  - `Kay_ripple_detector` - Multi-channel consensus approach (Kay et al. 2016)\n  - `Karlsson_ripple_detector` - Per-channel detection with merging (Karlsson et al. 2009)\n  - `Roumis_ripple_detector` - Alternative detection method\n  - `multiunit_HSE_detector` - High Synchrony Event detection from multiunit activity\n\n- **Comprehensive Event Statistics**\n  - Temporal metrics (start time, end time, duration)\n  - Z-score metrics (mean, median, max, min, sustained threshold)\n  - Signal metrics (area under curve, total energy)\n  - Movement metrics (speed during event)\n\n- **Flexible Signal Processing**\n  - Bandpass filtering (150-250 Hz)\n  - Envelope extraction via Hilbert transform\n  - Gaussian smoothing with configurable parameters\n  - Movement exclusion based on speed thresholds\n\n- **Simulation Tools**\n  - Generate synthetic LFPs with embedded ripples\n  - Multiple noise types (white, pink, brown)\n  - Useful for testing and validation\n\n## Installation\n\n### From PyPI\n\n```bash\npip install ripple_detection\n```\n\n### From Conda\n\n```bash\nconda install -c edeno ripple_detection\n```\n\n### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/Eden-Kramer-Lab/ripple_detection.git\ncd ripple_detection\n\n# Install with optional dependencies\npip install -e .[dev,examples]\n```\n\n## Requirements\n\n- Python >= 3.10\n- numpy >= 1.23.0\n- scipy >= 1.9.0\n- pandas >= 1.5.0\n\n## Quick Start\n\n### Basic Usage\n\n```python\nfrom ripple_detection import Kay_ripple_detector\nimport numpy as np\n\n# Your data\ntime = np.arange(0, 10, 0.001)  # 10 seconds at 1000 Hz\nLFPs = np.random.randn(len(time), 4)  # 4 channels of LFP data\nspeed = np.abs(np.random.randn(len(time)))  # Animal speed\nsampling_frequency = 1000  # Hz\n\n# Detect ripples\nripple_times = Kay_ripple_detector(\n    time, LFPs, speed, sampling_frequency,\n    speed_threshold=4.0,        # cm/s\n    minimum_duration=0.015,     # seconds\n    zscore_threshold=2.0\n)\n\nprint(ripple_times)\n```\n\n### Advanced Usage\n\n```python\nfrom ripple_detection import Karlsson_ripple_detector\n\n# Detect ripples with custom parameters\nripples = Karlsson_ripple_detector(\n    time, LFPs, speed, sampling_frequency,\n    speed_threshold=4.0,\n    minimum_duration=0.015,\n    zscore_threshold=3.0,\n    smoothing_sigma=0.004,\n    close_ripple_threshold=0.0\n)\n\n# Access detailed statistics\nprint(f\"Detected {len(ripples)} ripple events\")\nprint(f\"Mean duration: {ripples['duration'].mean():.3f} seconds\")\nprint(f\"Mean z-score: {ripples['mean_zscore'].mean():.2f}\")\n```\n\n## Output Format\n\nAll detectors return a pandas DataFrame with comprehensive event statistics:\n\n| Column | Description |\n|--------|-------------|\n| `start_time` | Event start time |\n| `end_time` | Event end time |\n| `duration` | Event duration (seconds) |\n| `max_thresh` | Maximum sustained threshold |\n| `mean_zscore` | Mean z-score during event |\n| `median_zscore` | Median z-score during event |\n| `max_zscore` | Maximum z-score during event |\n| `min_zscore` | Minimum z-score during event |\n| `area` | Integral of z-score over time |\n| `total_energy` | Integral of squared z-score |\n| `speed_at_start` | Animal speed at event start |\n| `speed_at_end` | Animal speed at event end |\n| `max_speed` | Maximum speed during event |\n| `min_speed` | Minimum speed during event |\n| `median_speed` | Median speed during event |\n| `mean_speed` | Mean speed during event |\n\n## Examples\n\nSee the [examples](examples/) directory for Jupyter notebooks demonstrating:\n\n- [Detection Examples](examples/detection_examples.ipynb) - Using different detectors\n- [Algorithm Components](examples/test_individual_algorithm_components.ipynb) - Testing individual components\n\n## Troubleshooting\n\n### Common Errors\n\n#### \"axis 1 is out of bounds\" or \"must be a 2D array\"\n\nYour LFP data must be 2D with shape `(n_time, n_channels)`. Even for a single channel, the array must be 2D.\n\n```python\n# Wrong - 1D array\nlfps = np.random.randn(1000)  # Shape: (1000,)\n\n# Correct - 2D array with single channel\nlfps = np.random.randn(1000, 1)  # Shape: (1000, 1)\n# OR reshape existing 1D array:\nlfps = lfps.reshape(-1, 1)\n```\n\n#### \"Array length mismatch detected\"\n\nYour `time`, `LFPs`, and `speed` arrays must have the same length. Check dimensions:\n\n```python\nprint(f\"time: {len(time)}, LFPs: {len(lfps)}, speed: {len(speed)}\")\n```\n\nMake sure all arrays cover the same time period and sampling rate.\n\n#### \"Sampling frequency is too low for the pre-computed filter\"\n\nThe built-in `filter_ripple_band()` function uses a pre-computed filter designed for 1500 Hz sampling. For other sampling rates, generate a custom filter:\n\n```python\nfrom ripple_detection import ripple_bandpass_filter\nfrom scipy.signal import filtfilt\n\n# Generate custom filter for your sampling rate\nfilter_num, filter_denom = ripple_bandpass_filter(sampling_frequency)\nfiltered_lfps = filtfilt(filter_num, filter_denom, raw_lfps, axis=0)\n```\n\n#### No ripples detected (empty DataFrame)\n\nIf detection returns no events, try adjusting parameters:\n\n```python\nripples = Kay_ripple_detector(\n    time, filtered_lfps, speed, sampling_frequency,\n    zscore_threshold=1.5,      # Lower from default 2.0\n    minimum_duration=0.010,    # Lower from default 0.015\n    speed_threshold=10.0       # Increase if too restrictive (default 4.0)\n)\n```\n\n**Diagnostic steps:**\n1. Check if your LFPs actually contain ripples (150-250 Hz oscillations)\n2. Verify speed is in cm/s (not m/s)\n3. Plot the filtered LFP to visually inspect for ripple events\n4. Try different detector algorithms (Kay, Karlsson, Roumis)\n\n### Parameter Selection Guide\n\n| Parameter | Default | Description | When to Adjust |\n|-----------|---------|-------------|----------------|\n| `speed_threshold` | 4.0 cm/s | Maximum speed for ripple detection | Increase if too many events excluded during slow movement |\n| `minimum_duration` | 0.015 s | Minimum ripple duration (15 ms) | Decrease to 0.010 for shorter ripples; increase to 0.020 for stricter detection |\n| `zscore_threshold` | 2.0 (Kay/Roumis)<br>3.0 (Karlsson) | Detection sensitivity | Decrease for more detections; increase for fewer, higher-confidence events |\n| `smoothing_sigma` | 0.004 s | Gaussian smoothing window (4 ms) | Rarely needs adjustment; increase for noisier data |\n\n### Getting Help\n\n- **Issues**: [GitHub Issues](https://github.com/Eden-Kramer-Lab/ripple_detection/issues)\n- **Discussions**: For questions about usage and parameter selection\n- **Email**: [edeno@bu.edu](mailto:edeno@bu.edu)\n\n## Documentation\n\nFor detailed documentation on the detection algorithms and signal processing pipeline, see [CLAUDE.md](CLAUDE.md).\n\n## Algorithm Comparison\n\n| Algorithm | Approach | Best For |\n|-----------|----------|----------|\n| **Kay** | Multi-channel consensus (sum of squared envelopes) | High-density electrode arrays |\n| **Karlsson** | Per-channel detection with merging | Independent channel analysis |\n| **Roumis** | Averaged square-root of squared envelopes | Balanced multi-channel approach |\n\n## Development\n\n### Setup Development Environment\n\n```bash\n# Create conda environment\nconda env create -f environment.yml\nconda activate ripple_detection\n\n# Install in editable mode with dev dependencies\npip install -e .[dev,examples]\n```\n\n### Run Tests\n\nThe package has comprehensive test coverage (98%) across 107 tests organized in 4 modules:\n\n```bash\n# Run all tests with coverage\npytest --cov=ripple_detection --cov-report=term-missing tests/\n\n# Run specific test modules\npytest tests/test_core.py          # Core signal processing tests (52 tests)\npytest tests/test_detectors.py     # Detector integration tests (25 tests)\npytest tests/test_simulate.py      # Simulation module tests (40 tests)\n\n# Run specific test\npytest tests/test_core.py::TestSegmentBooleanSeries::test_single_segment\n\n# Generate HTML coverage report\npytest --cov=ripple_detection --cov-report=html tests/\n# Open htmlcov/index.html in browser\n```\n\n**Test Coverage:**\n- `core.py`: 100%\n- `detectors.py`: 100%\n- `simulate.py`: 92%\n- **Overall: 98%**\n\n### Code Quality\n\n```bash\n# Format code with black\nblack ripple_detection/ tests/\n\n# Lint code with flake8\nflake8 ripple_detection/ tests/\n\n# Check formatting without modifying\nblack --check ripple_detection/ tests/\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.\n\n## Citation\n\nIf you use this package in your research, please cite the original papers:\n\n### Karlsson Method\n\n```bibtex\n@article{karlsson2009awake,\n  title={Awake replay of remote experiences in the hippocampus},\n  author={Karlsson, Mattias P and Frank, Loren M},\n  journal={Nature neuroscience},\n  volume={12},\n  number={7},\n  pages={913--918},\n  year={2009},\n  publisher={Nature Publishing Group}\n}\n```\n\n### Kay Method\n\n```bibtex\n@article{kay2016hippocampal,\n  title={A hippocampal network for spatial coding during immobility and sleep},\n  author={Kay, Kenneth and Sosa, Marielena and Chung, Jason E and Karlsson, Mattias P and Larkin, Margaret C and Frank, Loren M},\n  journal={Nature},\n  volume={531},\n  number={7593},\n  pages={185--190},\n  year={2016},\n  publisher={Nature Publishing Group}\n}\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Authors\n\n- **Eric Denovellis** - [edeno@bu.edu](mailto:edeno@bu.edu)\n\n## Acknowledgments\n\n- Frank Lab for the pre-computed ripple filter\n- Original algorithm implementations by Karlsson et al. and Kay et al.\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/Eden-Kramer-Lab/ripple_detection/issues)\n- **Discussions**: For questions and discussions about usage\n- **Email**: [edeno@bu.edu](mailto:edeno@bu.edu)\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2017 Eric Denovellis\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.",
    "summary": "Tools for finding sharp-wave ripple events (150-250 Hz) from local field potentials.",
    "version": "1.7.0",
    "project_urls": {
        "Homepage": "https://github.com/Eden-Kramer-Lab/ripple_detection",
        "Issues": "https://github.com/Eden-Kramer-Lab/ripple_detection/issues",
        "Repository": "https://github.com/Eden-Kramer-Lab/ripple_detection"
    },
    "split_keywords": [
        "lfp",
        " hippocampus",
        " neuroscience",
        " ripple",
        " sharp-wave"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6d9e4e47791c804df1fdc85a1e727fad1ceeffb403a1a841b38fe89f3845acc7",
                "md5": "6dafbd844731e9594d0b1b76f6b52adc",
                "sha256": "7668de33dc7f494afc6b6c249d92f8e2077ba9be1bd69b1de8ac072833a27e23"
            },
            "downloads": -1,
            "filename": "ripple_detection-1.7.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6dafbd844731e9594d0b1b76f6b52adc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 28240,
            "upload_time": "2025-10-17T12:29:03",
            "upload_time_iso_8601": "2025-10-17T12:29:03.025345Z",
            "url": "https://files.pythonhosted.org/packages/6d/9e/4e47791c804df1fdc85a1e727fad1ceeffb403a1a841b38fe89f3845acc7/ripple_detection-1.7.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d2dd40ccb603a338c042465e1c01b225973a4b086ecc361c0aad542beef826bf",
                "md5": "8967627bbb8cbf20d5f3c212fd75342a",
                "sha256": "5a92ec36bbffd8383dbc0954fefcf7527fa00b6d0b0e400018da5594dce33db2"
            },
            "downloads": -1,
            "filename": "ripple_detection-1.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "8967627bbb8cbf20d5f3c212fd75342a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 2280271,
            "upload_time": "2025-10-17T12:29:04",
            "upload_time_iso_8601": "2025-10-17T12:29:04.430294Z",
            "url": "https://files.pythonhosted.org/packages/d2/dd/40ccb603a338c042465e1c01b225973a4b086ecc361c0aad542beef826bf/ripple_detection-1.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-17 12:29:04",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Eden-Kramer-Lab",
    "github_project": "ripple_detection",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ripple-detection"
}
        
Elapsed time: 1.90581s