neuropixels-analysis

End-to-end Neuropixels extracellular electrophysiology analysis (SpikeGLX/Open Ephys/NWB) including preprocessing, motion correction, Kilosort4 spike sorting, QC metrics, and Allen/IBL-style curation; use when processing Neuropixels recordings or when users mention Neuropixels, SpikeGLX, Open Ephys, Kilosort, quality metrics, drift/motion correction, or unit curation.

53 stars

Best use case

neuropixels-analysis is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

End-to-end Neuropixels extracellular electrophysiology analysis (SpikeGLX/Open Ephys/NWB) including preprocessing, motion correction, Kilosort4 spike sorting, QC metrics, and Allen/IBL-style curation; use when processing Neuropixels recordings or when users mention Neuropixels, SpikeGLX, Open Ephys, Kilosort, quality metrics, drift/motion correction, or unit curation.

Teams using neuropixels-analysis should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/neuropixels-analysis/SKILL.md --create-dirs "https://raw.githubusercontent.com/aipoch/medical-research-skills/main/scientific-skills/Data Analysis/neuropixels-analysis/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/neuropixels-analysis/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How neuropixels-analysis Compares

Feature / Agentneuropixels-analysisStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

End-to-end Neuropixels extracellular electrophysiology analysis (SpikeGLX/Open Ephys/NWB) including preprocessing, motion correction, Kilosort4 spike sorting, QC metrics, and Allen/IBL-style curation; use when processing Neuropixels recordings or when users mention Neuropixels, SpikeGLX, Open Ephys, Kilosort, quality metrics, drift/motion correction, or unit curation.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

> **Source**: [https://github.com/aipoch/medical-research-skills](https://github.com/aipoch/medical-research-skills)

## When to Use

Use this skill in any of the following situations:

1. **You need to load and standardize Neuropixels recordings** from SpikeGLX (`.ap.bin/.lf.bin/.meta`), Open Ephys (`.continuous/.oebin`), or NWB (`.nwb`) into a consistent analysis pipeline.
2. **You are preparing raw extracellular data for spike sorting**, including high-pass filtering, phase shift correction (NP1.0), bad channel detection/removal, and common average referencing (CAR).
3. **You suspect probe drift or tissue motion** and need to estimate and correct motion before sorting (especially when drift is > ~10 µm).
4. **You want to run spike sorting** (Kilosort4 recommended; CPU alternatives supported) and then compute post-processing products (waveforms, templates, amplitudes, correlograms, unit locations).
5. **You need quality control and curation** using Allen/IBL-style thresholds, plus optional AI-assisted visual review for borderline units, and exports to Phy/NWB.

## Key Features

- **Multi-format ingestion**: SpikeGLX, Open Ephys, and NWB readers via SpikeInterface.
- **Neuropixels-aware preprocessing**:
  - High-pass filtering for spike band
  - **Phase shift correction for Neuropixels 1.0**
  - Bad channel detection and removal
  - Median CAR / referencing
- **Motion/drift workflow**:
  - Motion estimation presets (e.g., “Kilosort-like”)
  - Optional rigid/non-rigid correction presets
  - Drift visualization outputs
- **Spike sorting orchestration**:
  - Kilosort4 (GPU) recommended
  - CPU alternatives (e.g., SpykingCircus2, Mountainsort5, Tridesclous2)
- **Post-processing and QC**:
  - SortingAnalyzer-based computation of waveforms, templates, amplitudes, correlograms, unit locations, and quality metrics
- **Curation**:
  - Allen/IBL-style automated labeling
  - Optional AI-assisted visual analysis for uncertain units
- **Reporting and export**:
  - HTML report generation
  - Export to **Phy** and **NWB**
  - Save metrics tables (CSV)

Reference guides (if present in the repository) can be used for deeper explanations:
- `reference/standard_workflow.md`
- `reference/api_reference.md`
- `reference/plotting_guide.md`
- `reference/PREPROCESSING.md`, `reference/MOTION_CORRECTION.md`, `reference/SPIKE_SORTING.md`
- `reference/QUALITY_METRICS.md`, `reference/AUTOMATED_CURATION.md`, `reference/AI_CURATION.md`

## Dependencies

Python dependencies (typical versions known to work; adjust to your environment):

- `python >= 3.9`
- `spikeinterface[full] >= 0.99`
- `probeinterface >= 0.2`
- `neo >= 0.13`
- Spike sorters (optional, depending on what you run):
  - `kilosort >= 4.0` (Kilosort4; GPU required)
  - `spykingcircus >= 1.1` (SpykingCircus2; CPU)
  - `mountainsort5 >= 0.5` (CPU)
- Optional (AI-assisted curation):
  - `anthropic >= 0.20`
- Optional (IBL tooling):
  - `ibllib >= 2.0`
  - `ibl-neuropixel >= 1.0`

## Example Usage

The following example is designed to be a complete, runnable script (assuming dependencies and a valid dataset path). It loads SpikeGLX data, preprocesses, estimates/corrects motion, runs Kilosort4, computes metrics, curates units, generates a report, and exports to Phy and NWB.

```python
import spikeinterface.full as si
import neuropixels_analysis as npa

def main():
    # Parallelization / chunking settings used by SpikeInterface functions
    job_kwargs = dict(n_jobs=-1, chunk_duration="1s", progress_bar=True)

    # 1) Load data (SpikeGLX example)
    # For Open Ephys: si.read_openephys("/path/to/Record_Node_101/")
    # For NWB:        si.read_nwb("/path/to/file.nwb")
    recording = si.read_spikeglx("/path/to/spikeglx_folder", stream_id="imec0.ap")

    # Optional: slice first 60 seconds for a quick test
    fs = recording.get_sampling_frequency()
    recording = recording.frame_slice(0, int(60 * fs))

    # 2) Preprocess (recommended chain; wrapper may include the same steps)
    # Note: phase_shift is mandatory for Neuropixels 1.0 and not needed for 2.0.
    rec = npa.preprocess(recording)

    # 3) Estimate drift/motion and correct if needed
    motion_info = npa.estimate_motion(rec, preset="kilosort_like", **job_kwargs)
    npa.plot_drift(rec, motion_info, output="drift_map.png")

    # Example threshold: correct if max drift exceeds 10 µm
    if float(motion_info["motion"].max()) > 10.0:
        rec = npa.correct_motion(rec, preset="nonrigid_accurate", **job_kwargs)

    # 4) Spike sorting (Kilosort4 recommended; requires GPU)
    sorting = si.run_sorter("kilosort4", rec, folder="ks4_output", **job_kwargs)

    # 5) Post-processing + metrics
    analyzer = si.create_sorting_analyzer(sorting, rec, sparse=True)

    analyzer.compute("random_spikes", max_spikes_per_unit=500, **job_kwargs)
    analyzer.compute("waveforms", ms_before=1.0, ms_after=2.0, **job_kwargs)
    analyzer.compute("templates", operators=["average", "std"], **job_kwargs)
    analyzer.compute("spike_amplitudes", **job_kwargs)
    analyzer.compute("correlograms", window_ms=50.0, bin_ms=1.0, **job_kwargs)
    analyzer.compute("unit_locations", method="monopolar_triangulation", **job_kwargs)
    analyzer.compute("quality_metrics", **job_kwargs)

    metrics = analyzer.get_extension("quality_metrics").get_data()
    metrics.to_csv("quality_metrics.csv")

    # 6) Automated curation (Allen/IBL-style)
    labels = npa.curate(metrics, method="allen")  # e.g., "allen", "ibl", "strict"

    # 7) Report
    results = {"sorting": sorting, "metrics": metrics, "labels": labels, "analyzer": analyzer}
    npa.generate_analysis_report(results, "output_report/")
    npa.print_analysis_summary(results)

    # 8) Export
    si.export_to_phy(
        analyzer,
        output_folder="phy_export/",
        compute_pc_features=True,
        compute_amplitudes=True,
    )

    from spikeinterface.exporters import export_to_nwb
    export_to_nwb(rec, sorting, "output.nwb")

if __name__ == "__main__":
    main()
```

## Implementation Details

### 1) Data I/O and supported formats

- **SpikeGLX**: `si.read_spikeglx(path, stream_id="imec0.ap")`
- **Open Ephys**: `si.read_openephys(path)`
- **NWB**: `si.read_nwb(path)`

Neuropixels probe types commonly encountered:
- **Neuropixels 1.0**: requires **phase shift correction** to align channels.
- **Neuropixels 2.0**: denser geometries; phase shift correction typically not required.

### 2) Preprocessing chain (typical)

A standard spike-band preprocessing sequence is:

1. **High-pass filter** (commonly 300–400 Hz) to isolate spikes.
2. **Phase shift correction** (`si.phase_shift`) for **NP1.0**.
3. **Bad channel detection** (`si.detect_bad_channels`) and removal.
4. **Common reference** (often median CAR) to reduce shared noise.

Key parameters:
- `freq_min` (high-pass cutoff): typical **300–400 Hz**
- bad channel detection sensitivity (implementation-dependent; often exposed as thresholds/presets)

### 3) Motion estimation and correction

- Motion/drift can strongly degrade sorting quality; a practical rule is to **inspect drift before sorting**.
- Presets:
  - `preset="kilosort_like"`: faster estimation aligned with common sorter assumptions
  - `preset="nonrigid_accurate"`: more robust correction for severe drift

Operational threshold often used in practice:
- If estimated drift exceeds **~10 µm**, apply correction before sorting.

### 4) Spike sorting

- **Kilosort4** is recommended for Neuropixels due to speed and quality, but requires a GPU.
- CPU alternatives can be used when GPU is unavailable (at the cost of runtime and sometimes quality).

Sorter parameters to tune (Kilosort4 examples):
- `batch_size`: samples per batch (often ~30000 by default)
- `nblocks`: number of drift blocks (increase for long recordings)
- `Th_learned`: detection threshold (lower → more spikes, potentially more false positives)

### 5) Post-processing and quality metrics

Using `SortingAnalyzer`, the pipeline typically computes:
- waveforms (window: `ms_before`, `ms_after`)
- templates (average/std)
- spike amplitudes
- correlograms (e.g., `window_ms=50`, `bin_ms=1`)
- unit locations (e.g., `monopolar_triangulation`)
- quality metrics (e.g., SNR, ISI violations, presence ratio, amplitude cutoff)

Common QC thresholds (dataset-dependent; document your choices):
- `snr_threshold`: often **3–5**
- `isi_violations_ratio`: often **0.01–0.5**
- `presence_ratio`: often **0.5–0.95**

### 6) Curation logic (Allen/IBL-style)

A conservative “good unit” selection often combines:
- high presence ratio (stable across recording)
- low ISI violations (refractory period respected)
- low amplitude cutoff (less truncation / missed spikes)

Example rule (illustrative):
- `presence_ratio > 0.9`
- `isi_violations_ratio < 0.5`
- `amplitude_cutoff < 0.1`

### 7) AI-assisted visual analysis (optional)

For borderline units (e.g., moderate SNR), AI-assisted review can be used to interpret:
- waveform shape consistency
- refractory period evidence in autocorrelograms
- amplitude stability and drift effects
- multi-unit contamination indicators

If your repository provides `npa.analyze_unit_visually(...)`, it can be integrated with an API client (e.g., `anthropic`) to generate structured curation suggestions.

Related Skills

research-hotspot-analysis

53
from aipoch/medical-research-skills

Analyzes research hotspots and recommends literature based on a disease or topic. Use when the user wants to identify current research trends, hot topics, or get literature recommendations for a specific medical field or disease.

survival-analysis-km

53
from aipoch/medical-research-skills

Kaplan-Meier survival analysis tool for clinical and biological research. Generates publication-ready survival curves with statistical tests.

statistical-analysis

53
from aipoch/medical-research-skills

Guided statistical analysis for test selection, assumption checks, power analysis, and APA-style reporting. Use when you need to choose an appropriate statistical test for your data and produce publication-ready results (including effect sizes and diagnostics).

statistical-analysis-advisor

53
from aipoch/medical-research-skills

Recommends appropriate statistical methods (T-test vs ANOVA, etc.) based.

experimental-data-analysis

53
from aipoch/medical-research-skills

Statistical analysis and reporting for experimental datasets; use when you need to interpret experimental results, test significance (t-tests/ANOVA), or generate reproducible reports.

meta-results-sensitivity-analysis

53
from aipoch/medical-research-skills

Generates the "Results" section for meta-analysis sensitivity analysis based on statistical tables and titles. Use when the user wants to describe sensitivity analysis results or format sensitivity tables for a meta-analysis paper.

meta-analysis-methods-generator

53
from aipoch/medical-research-skills

Generates the Methods section for a meta-analysis paper, including search strategy, screening, quality assessment, data extraction, and statistical analysis.

skill-auditor

53
from aipoch/medical-research-skills

A comprehensive auditor for any agent skill — including Manus, OpenClaw/ClawHub, Claude, LobeHub, or custom SKILL.md-based skills. Use this skill whenever a user wants to evaluate, audit, review, score, or quality-check an agent skill before publishing, updating, or deploying. Covers two hard veto gates (structural redlines + research integrity redlines), static quality scoring across 25 criteria (ISO 25010 + OpenSSF + Agent), dynamic test input generation, multi-mode execution testing, multi-layer output evaluation with five specialized category rubrics (Evidence Insight / Protocol Design / Data Analysis / Academic Writing / Other), a Research Veto that applies to all four research categories, human eval viewer generation, actionable P0/P1/P2 optimization recommendations, and automatic skill improvement that outputs a polished, production-ready SKILL.md. Also use whenever a user says "audit my skill", "evaluate my skill", "improve my skill", or wants a corrected version after evaluation.

two-sample-mr-research-planner

53
from aipoch/medical-research-skills

Generates complete two-sample Mendelian randomization (MR) research designs from a user-provided research direction. Use when users want to design, plan, or build a study using two-sample MR to test causal relationships. Triggers:"design a two-sample MR study", "build a publishable MR paper", "test whether this biomarker causally affects this disease", "generate Lite/Standard/Advanced MR plans", "screen multiple exposures with MR", "bidirectional MR design", "causal inference using GWAS summary statistics", or "I want to study X and Y using MR". Always outputs four workload configurations (Lite / Standard / Advanced / Publication+) with a recommended primary plan, step-by-step workflow, figure plan, validation strategy, minimal executable version, and publication upgrade path.

research-proposal-generator

53
from aipoch/medical-research-skills

Generates a comprehensive research proposal design based on input literature, including hypothesis, mechanism verification, and budget. Use when the user wants to design a research project from a paper.

research-grants

53
from aipoch/medical-research-skills

Write competitive research proposals for NSF, NIH, DOE, DARPA, and Taiwan's NSTC when you need agency-compliant narratives, budgets, and review-criteria alignment for a specific solicitation/FOA/BAA.

protocol-standardization

53
from aipoch/medical-research-skills

Standardize fragmented experimental steps into reproducible protocol documents when you need method organization, lab SOP drafting, or cross-operator reproducibility; missing parameters must be explicitly marked as "To be supplemented/Not provided".