关于 neuropixels-analysis
neuropixels-analysis 是面向神经科学研究者的 Neuropixels 记录分析技能,覆盖从数据预处理到单元筛选与导出。内容结合 SpikeInterface 流程,并包含漂移校正、质量评估和报告生成。
主要功能
- 01读取 SpikeGLX、Open Ephys 和 NWB 数据
- 02预处理并检测异常通道
- 03估算并校正记录漂移
- 04运行脉冲排序与质量指标计算
- 05筛选单元并导出到 Phy 或 NWB
适用场景
- 01处理原始 Neuropixels 记录
- 02比较并筛选排序后的单元
- 03生成分析报告和可视化图表
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ crazymsn/ academic-skills --skill neuropixels-analysis安装后在 Claude Code 中输入/neuropixels-analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/analysis_template.pyreferences/AI_CURATION.mdANALYSIS.mdapi_reference.mdAUTOMATED_CURATION.mdMOTION_CORRECTION.mdplotting_guide.mdPREPROCESSING.mdQUALITY_METRICS.mdSPIKE_SORTING.mdstandard_workflow.mdscripts/compute_metrics.pyexplore_recording.pyexport_to_phy.pyneuropixels_pipeline.pypreprocess_recording.pyrun_sorting.py详细介绍
Neuropixels 数据分析
概述
使用 SpikeInterface、Allen Institute 和 International Brain Laboratory (IBL) 当前的最佳实践,分析 Neuropixels 高密度神经记录的综合工具包。支持从原始数据到可用于发表的整理后神经元单元的完整工作流。
何时使用此技能
在以下情况下应使用此技能:
- 处理 Neuropixels 记录(.ap.bin、.lf.bin、.meta 文件)
- 从 SpikeGLX、Open Ephys 或 NWB 格式加载数据
- 预处理神经记录(滤波、CAR、坏通道检测)
- 检测并校正记录中的运动/漂移
- 运行尖峰分选(Kilosort4、SpykingCircus2、Mountainsort5)
- 计算质量指标(SNR、ISI 违例、存在率)
- 使用 Allen/IBL 标准整理神经元单元
- 创建神经数据可视化
- 将结果导出为 Phy 或 NWB
支持的硬件和格式
| 探针 | 电极数 | 通道数 | 备注 |
|---|---|---|---|
| Neuropixels 1.0 | 960 | 384 | 需要进行 phase_shift 校正 |
| Neuropixels 2.0(单探针) | 1280 | 384 | 几何结构更密集 |
| Neuropixels 2.0(4 探针柄) | 5120 | 384 | 多区域记录 |
| 格式 | 扩展名 | 读取器 |
|---|---|---|
| SpikeGLX | .ap.bin、.lf.bin、.meta | si.read_spikeglx() |
| Open Ephys | .continuous、.oebin | si.read_openephys() |
| NWB | .nwb | si.read_nwb() |
快速入门
基本导入和设置
import spikeinterface.full as si
import neuropixels_analysis as npa
# Configure parallel processing
job_kwargs = dict(n_jobs=-1, chunk_duration='1s', progress_bar=True)
加载数据
# SpikeGLX (most common)
recording = si.read_spikeglx('/path/to/data', stream_id='imec0.ap')
# Open Ephys (common for many labs)
recording = si.read_openephys('/path/to/Record_Node_101/')
# Check available streams
streams, ids = si.get_neo_streams('spikeglx', '/path/to/data')
print(streams) # ['imec0.ap', 'imec0.lf', 'nidq']
# For testing with subset of data
recording = recording.frame_slice(0, int(60 * recording.get_sampling_frequency()))
完整流程(单条命令)
# Run full analysis pipeline
results = npa.run_pipeline(
recording,
output_dir='output/',
sorter='kilosort4',
curation_method='allen',
)
# Access results
sorting = results['sorting']
metrics = results['metrics']
labels = results['labels']
标准分析工作流
1. 预处理
# Recommended preprocessing chain
rec = si.highpass_filter(recording, freq_min=400)
rec = si.phase_shift(rec) # Required for Neuropixels 1.0
bad_ids, _ = si.detect_bad_channels(rec)
rec = rec.remove_channels(bad_ids)
rec = si.common_reference(rec, operator='median')
# Or use our wrapper
rec = npa.preprocess(recording)
2. 检查并校正漂移
# Check for drift (always do this!)
motion_info = npa.estimate_motion(rec, preset='kilosort_like')
npa.plot_drift(rec, motion_info, output='drift_map.png')
# Apply correction if needed
if motion_info['motion'].max() > 10: # microns
rec = npa.correct_motion(rec, preset='nonrigid_accurate')
3. 尖峰分选
# Kilosort4 (recommended, requires GPU)
sorting = si.run_sorter('kilosort4', rec, folder='ks4_output')
# CPU alternatives
sorting = si.run_sorter('tridesclous2', rec, folder='tdc2_output')
sorting = si.run_sorter('spykingcircus2', rec, folder='sc2_output')
sorting = si.run_sorter('mountainsort5', rec, folder='ms5_output')
# Check available sorters
print(si.installed_sorters())
4. 后处理
# Create analyzer and compute all extensions
analyzer = si.create_sorting_analyzer(sorting, rec, sparse=True)
analyzer.compute('random_spikes', max_spikes_per_unit=500)
analyzer.compute('waveforms', ms_before=1.0, ms_after=2.0)
analyzer.compute('templates', operators=['average', 'std'])
analyzer.compute('spike_amplitudes')
analyzer.compute('correlograms', window_ms=50.0, bin_ms=1.0)
analyzer.compute('unit_locations', method='monopolar_triangulation')
analyzer.compute('quality_metrics')
metrics = analyzer.get_extension('quality_metrics').get_data()
5. 整理
# Allen Institute criteria (conservative)
good_units = metrics.query("""
presence_ratio > 0.9 and
isi_violations_ratio < 0.5 and
amplitude_cutoff < 0.1
""").index.tolist()
# Or use automated curation
labels = npa.curate(metrics, method='allen') # 'allen', 'ibl', 'strict'
6. AI 辅助整理(用于不确定的神经元单元)
在 Claude Code 中使用此技能时,Claude 可以直接分析波形图并提供专业的整理决策。程序化 API 访问方式如下:
from anthropic import Anthropic
# Setup API client
client = Anthropic()
# Analyze uncertain units visually
uncertain = metrics.query('snr > 3 and snr < 8').index.tolist()
for unit_id in uncertain:
result = npa.analyze_unit_visually(analyzer, unit_id, api_client=client)
print(f"Unit {unit_id}: {result['classification']}")
print(f" Reasoning: {result['reasoning'][:100]}...")
Claude Code 集成:在 Claude Code 中运行时,可让 Claude 直接检查波形图/自相关图——无需设置 API。
7. 生成分析报告
# Generate comprehensive HTML report with visualizations
report_dir = npa.generate_analysis_report(results, 'output/')
# Opens report.html with summary stats, figures, and unit table
# Print formatted summary to console
npa.print_analysis_summary(results)
8. 导出结果
# Export to Phy for manual review
si.export_to_phy(analyzer, output_folder='phy_export/',
compute_pc_features=True, compute_amplitudes=True)
# Export to NWB
from spikeinterface.exporters import export_to_nwb
export_to_nwb(rec, sorting, 'output.nwb')
# Save quality metrics
metrics.to_csv('quality_metrics.csv')
常见问题和最佳实践
- 尖峰分选前务必检查漂移——漂移超过 10μm 会显著影响质量
- Neuropixels 1.0 探针应使用 phase_shift(2.0 无需使用)
- 保存预处理数据以避免重复计算——使用
rec.save(folder='preprocessed/') - Kilosort4 应使用 GPU——速度比 CPU 方案快 10-50 倍
- 手动检查不确定的神经元单元——自动整理只是起点
- 结合指标与 AI——明确的情况使用指标,临界情况使用 AI
- 记录所用阈值——不同分析可能需要不同标准
- 关键实验应导出到 Phy——人工监督很有价值
需要调整的关键参数
预处理
freq_min:高通截止频率(通常为 300-400 Hz)detect_threshold:坏通道检测灵敏度
运动校正
preset:'kilosort_like'(快速)或 'nonrigid_accurate'(适用于严重漂移)
尖峰分选(Kilosort4)
batch_size:每批样本数(默认 30000)nblocks:漂移区块数(长时间记录时应增加)Th_learned:检测阈值(越低 = 尖峰越多)
质量指标
snr_threshold:信噪比截止值(通常为 3-5)isi_violations_ratio:不应期违例(0.01-0.5)presence_ratio:记录覆盖率(0.5-0.95)
附带资源
scripts/preprocess_recording.py
自动预处理脚本:
python scripts/preprocess_recording.py /path/to/data --output preprocessed/
scripts/run_sorting.py
运行尖峰分选:
python scripts/run_sorting.py preprocessed/ --sorter kilosort4 --output sorting/
scripts/compute_metrics.py
计算质量指标并应用整理:
python scripts/compute_metrics.py sorting/ preprocessed/ --output metrics/ --curation allen
scripts/export_to_phy.py
导出到 Phy 以进行手动整理:
python scripts/export_to_phy.py metrics/analyzer --output phy_export/
assets/analysis_template.py
完整的分析模板。复制并自定义:
cp assets/analysis_template.py my_analysis.py
# Edit parameters and run
python my_analysis.py
references/standard_workflow.md
详细的分步工作流,并对每个阶段进行说明。
references/api_reference.md
按模块整理的快速函数参考。
references/plotting_guide.md
全面的可视化指南,助你创建适合发表的图表。
详细参考指南
安装
# Core packages
pip install spikeinterface[full] probeinterface neo
# Spike sorters
pip install kilosort # Kilosort4 (GPU required)
pip install spykingcircus # SpykingCircus2 (CPU)
pip install mountainsort5 # Mountainsort5 (CPU)
# Our toolkit
pip install neuropixels-analysis
# Optional: AI curation
pip install anthropic
# Optional: IBL tools
pip install ibl-neuropixel ibllib
项目结构
project/
├── raw_data/
│ └── recording_g0/
│ └── recording_g0_imec0/
│ ├── recording_g0_t0.imec0.ap.bin
│ └── recording_g0_t0.imec0.ap.meta
├── preprocessed/ # Saved preprocessed recording
├── motion/ # Motion estimation results
├── sorting_output/ # Spike sorter output
├── analyzer/ # SortingAnalyzer (waveforms, metrics)
├── phy_export/ # For manual curation
├── ai_curation/ # AI analysis reports
└── results/
├── quality_metrics.csv
├── curation_labels.json
└── output.nwb
其他资源
- SpikeInterface 文档:https://spikeinterface.readthedocs.io/
- Neuropixels 教程:https://spikeinterface.readthedocs.io/en/stable/how_to/analyze_neuropixels.html
- Kilosort4 GitHub:https://github.com/MouseLand/Kilosort
- IBL Neuropixel 工具:https://github.com/int-brain-lab/ibl-neuropixel
- Allen Institute ecephys:https://github.com/AllenInstitute/ecephys_spike_sorting
- Bombcell(自动 QC):https://github.com/Julie-Fabre/bombcell
- SpikeAgent(AI 整理):https://github.com/SpikeAgent/SpikeAgent
评论
支持 Markdown