MountainSort5: expose `pca_seed` / `random_seed` sorter param (pair with MS5 configurable PCA seed)

Open
#4,919 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
43/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
python
Domain
data

Research direction

Start with src/spikeinterface/sorters/external/mountainsort5.py, especially the whitening_seed parameter and _params_description; check the current MountainSort5 Scheme parameter objects and issue #69 to confirm seed support before forwarding it. Then review the sorter documentation and existing MountainSort5 tests to identify where to document and check reproducibility. Done means a seed parameter is passed through, its distinction from whitening_seed and threading caveats are documented, and a small seeded-run test is added.

Written by the indexing model from the issue text.

Description

Summary

si.run_sorter('mountainsort5', ...) already accepts whitening_seed and forwards it to whiten(seed=...) (#4600). There is no analogous parameter for MountainSort5's internal PCA / clustering RNG.

Callers who need deterministic, seed-controlled sorts currently set process-global np.random.seed / random.seed before run_sorter, force n_jobs=1 + single-threaded BLAS, and hope MS5 / sklearn honor the ambient RNG. That is fragile:

  • On mountainsort5 < 0.5.9, unseeded PCA() can follow the ambient NumPy RNG.
  • On mountainsort5 ≥ 0.5.9, PCA hardcodes random_state=0, so ambient seeding no longer changes PCA output.

Proposal

Depends on exposing a seed in MountainSort5 itself (https://github.com/flatironinstitute/mountainsort5/issues/69).

  1. Add a sorter param next to whitening_seed in src/spikeinterface/sorters/external/mountainsort5.py (suggested name: pca_seed or random_seed; default matching MS5, likely 0).
  2. Forward it into the Scheme1/Scheme2(/3) parameter objects once MS5 supports it.
  3. Document in _params_description and the sorter docs that:
    • this controls MS5 PCA / classifier PCA RNG;
    • whitening_seed is separate (SI whitening before MS5);
    • n_jobs > 1 / multi-threaded BLAS can void bit-identical reproducibility.
  4. Add a small test: two runs with the same seed agree on spike trains (or unit count + spike counts on a tiny recording); a different seed can differ (if feasible in CI time).
Optional follow-ups (not required for this PR)
  • Persist the effective seed into sorting-folder / provenance metadata.
  • A top-level seed= on run_sorter that fans out to sorter-specific kwargs when supported.
  • A short “deterministic sorting” recipe in the docs (seed + spawn/mp_context + threadpool_limits(1)).

I can open a PR once the MS5 parameter lands (or against a known MS5 commit if maintainers prefer).

Context

We rely on reproducible MS5 sorts for parameter sweeps and for re-running a chosen configuration with a content fingerprint of the spike trains. An explicit sorter kwarg would make that a supported SpikeInterface path instead of ambient RNG.

Dominant language
Python
Stars
870
Forks
284
Avg merge
3d 1h
Merged PRs (30d)
41

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from SpikeInterface/spikeinterface

All issues in SpikeInterface/spikeinterface

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.