一键导入
neuralynx
Neuralynx (.ncs / .nse / .nev / .ntt) — tetrode-era ephys with rich event/spike sidecars
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Neuralynx (.ncs / .nse / .nev / .ntt) — tetrode-era ephys with rich event/spike sidecars
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Neurodata Without Borders (.nwb) — the de-facto standard for in-vivo electrophysiology (Neuropixels / AIBS / DANDI / IBL)
Index of L0 data-format loader skills by family
Index of all L2 paradigm skills by group + analysis_goal → paradigm matrix
Two-phase BCI data preprocessing pipeline: deep-inspect → plan → propose → user confirm → automated code/execute/QC/export
BIDS-iEEG sidecar (*_channels.tsv / *_electrodes.tsv / *_coordsystem.json / *_ieeg.json) — clinical sEEG / ECoG standard
Multiscale Electrophysiology Format v3 (Mayo Clinic) — long-duration encrypted sEEG
| name | neuralynx |
| description | Neuralynx (.ncs / .nse / .nev / .ntt) — tetrode-era ephys with rich event/spike sidecars |
| layer | L0 |
| group | spike_ephys |
| metadata | {"tags":["io","neuralynx","ncs","nse","nev","ntt","tetrode"],"formats":[".ncs",".nse",".nev",".ntt"],"modalities":["spike","lfp"]} |
Neuralynx Cheetah acquisition writes one file per channel per data type. Common in tetrode-era and many modern rodent labs.
session/
CSC1.ncs CSC2.ncs ... # one continuous file per channel
Sc1.nse Sc1.ntt ... # spike events / tetrode-packed spikes
Events.nev # behavioral / TTL events
VT1.nvt # video tracking (optional)
Each .ncs carries a 16 KB ASCII header (sample rate, channel name, ADC
range) + binary records of 512 samples.
| Priority | Library |
|---|---|
| Primary | neo.rawio.NeuralynxRawIO |
| Secondary | neuralynx-io PyPI |
lazy_deps key io.neuralynx → neo==0.13.4.
Spike (tetrode + single-channel), LFP, events.
.ntt. Each spike record has 4 waveforms; unpacking
to per-channel needs care.import neo
def load_neuralynx(dir_path: str) -> dict:
reader = neo.rawio.NeuralynxRawIO(dirname=dir_path)
reader.parse_header()
return {"n_channels": reader.signal_channels_count(),
"sfreq": float(reader.get_signal_sampling_rate(0))}
from typing import Any, Dict
def operator_load_neuralynx(
data_dict: Dict[str, Any], *, path: str,
) -> Dict[str, Any]:
"""Neuralynx loader.
Parameters
----------
data_dict : dict
path : str
Directory path.
Returns
-------
dict — populated OperatorIO.
Raises
------
EasyBCIOperatorError
recoverable=False on missing path / bad headers.
Modality coverage
-----------------
Spike / LFP (tetrode + single-channel rodent ephys): yes.
References
----------
Neuralynx Cheetah manual; neo.rawio docs.
Notes
-----
L0 IO operator (Rule 12 exempt).
"""
import time
# easybci-allow: file-io # L0 IO operator
from easybci_lib.tools.neural_processing.operator_errors import EasyBCIOperatorError
if not path:
raise EasyBCIOperatorError(
operator="load_neuralynx", reason="path required", recoverable=False,
)
t0 = time.monotonic()
try:
import neo
import numpy as np
reader = neo.rawio.NeuralynxRawIO(dirname=path)
reader.parse_header()
sfreq = float(reader.get_signal_sampling_rate(stream_index=0))
sig = reader.get_analogsignal_chunk(block_index=0, seg_index=0, channel_indexes=None)
gains = reader.header["signal_channels"]["gain"].astype(np.float32)
offsets = reader.header["signal_channels"]["offset"].astype(np.float32)
data = sig.astype(np.float32).T * gains[:, None] + offsets[:, None]
except Exception as exc:
raise EasyBCIOperatorError(
operator="load_neuralynx", reason=f"load failed: {exc}", recoverable=False,
) from exc
elapsed = time.monotonic() - t0
n_t = data.shape[1]
return {
"data": data,
"channels": [f"ch{i}" for i in range(data.shape[0])],
"frequency": sfreq, "duration": n_t / sfreq, "elapsed_s": elapsed,
"meta": {"modality": "spike" if sfreq >= 20000 else "lfp",
"load_neuralynx": {"path": path}},
}
blackrock: clinical UEA; Neuralynx = rodent tetrode legacy.spikeglx / openephys: modern Neuropixels rigs.nwb: archive deposit format.