SpikeInterface 0.101.0 release notes

19th July 2024

Main changes:

  • Implementation of SortingAnalyzer (#2398)

  • Improved auto-merging functions and enable SortingAnalyzer to merge units and extensions (#3043, #3154, #3203, #3208)

  • Added framework for hybrid recording generation (#2436, #2769, #2857)

  • Refactored motion correction with the Motion class and the DREDGE AP and LFP methods (#2915, #3062)

  • Extendeded benchmarking of sortingcomponents (#2501, #2518, #2586, #2811, #2959)

  • Added a powerful drift generator module (#2683)

core:

  • Implement a simple system to have backward compatibility for Analyzer extension (#3215)

  • Units aggregation preserve unit ids of aggregated sorters (#3180)

  • Better error message for BaseExtractor.load() (#3170)

  • Saving provenance with paths relative to folder (#3165)

  • Fix segment start/end frame None in concatenate_recordings (#3161)

  • Implement apply_merges_to_sorting() (#3154)

  • More explicit consistency checks for Channel aggregation (#3151)

  • Fix serializability in save function and InjectDriftingTemplatesRecording (#3130)

  • Fix t_starts not propagated to save_to_memory (#3120)

  • Round instead of int for time_to_sample_index (#3119)

  • Add time vector case to get_durations (#3118)

  • Reordering recording, sorting args (#3094)

  • extractor_dict_iterator for solving path detection in object kwargs (#3089)

  • Check start_frame/end_frame in BaseRecording.get_traces() (#3059)

  • Relax numpy (#3056)

  • Add scale_to_uV preprocessing (#3053)

  • Add more helpful error when a non-existent id is passed to extractors (#3052)

  • Propagate FrameSlice default behavior to frame_slice and time_slice (#3051)

  • fix spike_vector_to_indices() (#3048)

  • Skip loading info.json into ext.data (#3047)

  • Proposal to implement a sorting_analyzer.merge_units() syntax (#3043)

  • add recording.time_slice like recording.frame_slice (#3034)

  • Numpy 2.0 cap Fix most egregorious deprecated behavior and cap version (#3032)

  • Avoid redirection to not implemented method in BaseRecording.select_channels (#3002)

  • Add documentation to frame_slice in recording and drop redundant inheritance (#3001)

  • Add select chanel and select unit method for template objects (#2989)

  • Missed has_scaled (#2979)

  • Fixed select_channels (#2977)

  • Make _set_probes private (#2949)

  • Add limit for n_jobs with a max of os.cpu_count() (#2940)

  • API: switch has_scaled -> has_scaleable_traces (#2924)

  • Making chunk_size=None behavior for n_jobs=1 explicit (#2902)

  • Fix remaining verbose clashing (#2901)

  • Remove verbose from job_kwargs (#2898)

  • Put get_extension (to trigger auto-import) before get_children_dependencies for deleting Analyzer extensions to prevent KeyError (#2888)

  • Add peak_to_peak mode to get_templates_amplitude (#2885)

  • Protect zarr properties of type object (#2884)

  • Avoid returning std when asking for only mean/average with templates extension (#2868)

  • Add binary suffixes to job tools memory specification (e.g. 1GiB vs 1GB) (#2858)

  • Possible fix for #2837 (#2854)

  • Load is_scaled in from zarr Template representation (#2852)

  • Use the is_scaled attribute inside of template_tools functions (#2848)

  • Add extra check in fix_job_kwargs (#2829)

  • Zarr: extract time vector once and for all! (#2828)

  • Add html representation for recording objects (#2803)

  • Remove SharedMemory from SortingAnalyzer and use NumpySorting instead. (#2801)

  • Channel aggregation preserves names (#2797)

  • Only assign memmap within boundaries for write_binary (#2796)

  • Improve verbose of ChunkRecordingExecutor (#2795)

  • Add select_channels method to base recording (#2786)

  • Analyzer set recording (#2785)

  • Add name as an extractor attribute for __repr__ purposes (#2784)

  • Compute quality metrics after pipeline nodes (#2773)

  • Check for SortingAnalyzer return_scaled in template_tools (#2752)

  • Template amplitude should not be returned as absolute value (#2750)

  • Fix performance issue for aggregate_channels (#2736)

  • Multiple verbose arguments fix (#2728)

  • Fix pipelining of extensions (#2715)

  • Seepd up random_spikes_selection() and put “all” method in it (#2700)

  • Extend compute for extension kwargs and pipeline nodes (#2693)

  • Add ‘all’ method for random_spikes (#2691)

  • Move “return_scaled” options global to SortingAnalyzer. (#2684)

  • Extend zarr compression options (#2643)

  • Fast templates: compute std with and extend to widgets (#2623)

  • SortingAnalyzer: get_extension_default_params (#2616)

  • Load pca from waveform extractor and waveform from Zarr (#2613)

  • Seeding silence periods (#2611)

  • Implement get_parent() function (#2610)

  • Fix analyzer sampling frequency check (#2606)

  • Proposal to inject anisotropy while creating fake templates (#2600)

  • Fix for sorting from_peaks with lexsort (handling multi segments) (#2594)

  • Save extension class info. (#2585)

  • Fix to impose sorting of the peaks in from_peaks() (#2584)

  • Extension delete on recompute (#2579)

  • Proposal for auto import extensions module. (#2571)

  • Add check_json to zarr for SortingAnalyzer for sorting_provenance file writing (#2559)

  • Add more backwards compatibly for MockWaveformExtractor (#2546)

  • Make binary recording memmap efficient III (Avoiding spikes by only reserving memory equal to the trace) (#1781)

  • Implementation of SortingAnalyzer (#2398)

preprocessing:

  • Update doc handle drift + better preset (#3232)

  • Remove name class attribute in preprocessing module (#3200)

  • Add option to use ref_channel_ids in global common reference (#3139)

  • Adding option to overwrite while doing correct_motion and saving to a folder (#3088)

  • Docstrings preprocessing update, fix PR01 and PR02 (#3016)

  • Fix deepinterpolation tests (#2971)

  • Improve phase shift memory efficiency (#2946)

  • Fix highpass-spatial-filter return dtype (#2864)

  • Update detect_bad_channels docs (#2783)

  • Regularize whitening (#2744)

  • Seeding silence periods (#2611)

  • Added round option to recording.astype (#2513)

  • Small bug fix in zscore : gain / offset must be reset (#2510)

extractors:

  • Fix naming when all_annotations=True in neo base extractors (#3198)

  • Propagate option for using neo channel names as ids in all neo extractors without changing the deafult behavior (#3195)

  • Update nwbextractors docstring (#3179)

  • Build extractor dicts automatically (#3169)

  • Remove unused legacy class name/mode from extractors (#3153)

  • Improved conditions for closing nwb when using hdf5 backend (#3150)

  • Use names as channel ids in plexon2 (#3065)

  • Fix intan kwargs (#3054)

  • Remove scipy upper bound for streaming extractors (#3023)

  • Fix timestamps access in NWB extractor (#2993)

  • Mcsh5 offsets and proper scaling in uV for return_scaled (#2988)

  • Fix bug with nan values (#2970)

  • Add argument to IntanRecordingExtractor for opening files with discontinous timestamps (#2969)

  • Add extractors for SiNAPS Research Platform (#2952)

  • Add zarr.open kwargs to fetch_available_electrical_series_paths in NWBRecordingExtractor (#2909)

  • Undefined variable IBL extractor (#2906)

  • Remove unused argument in nwb extractors read_file_from_backend (#2904)

  • Add static method to NWBRecordingExtractor to fetch the available electrical series (#2903)

  • Remove unused extractor attribute extractor_name (#2874)

  • Avoid duplicating channel names as property in neo base extractor when all_annotations=True (#2845)

  • Fix EID in IBL (#2714)

  • Deprecate ros3 as a streaming method (#2662)

  • Fix channel gains in NwbRecordingExtractor with backend (#2661)

  • Open Ephys: Use discovered recording ids to load sync timestamps (#2655)

  • ADD: Neuropixels ProbeGroup to SpikeGadgetsRecordingExtractor. (#2641)

  • Add extra_requirements for nwb extractors (#2637)

  • Remove lazy typing in nwb (#2635)

  • Add supportfor IntanRecordingExtractor “one-file-per-signal” and “one-file-per-channel” formats (#2630)

  • IBL extractors revived (#2617)

  • Add strict_gap_mode in read_neuralynx to reflect neo. (#2550)

  • Use has_channel_location instead of get_property(“contact_vector”) (#2475)

  • Implementing read_spikeglx_event() (#2442)

sorters:

  • Patch for SC2 after release AND bugs in auto merge (#3213)

  • Improve error log to json in run_sorter (#3057)

  • Add support for kilosort>=4.0.12 (#3055)

  • Make sure we check is_filtered() rather than bound method during run basesorter (#3037)

  • Add more container dependency checks in run_sorter (#3024)

  • whiteningRange added as Kilosort 2.5 parameter (#2997)

  • Patch for regularizing folder arguments (#2968)

  • Regularize folder argument for user in run_sorter options (#2917)

  • Update tridesclous2 (#2860)

  • Benchmark sorting components + Tridesclous2 improvement (#2811)

  • Update KS4 parameters (#2810)

  • Add parameter for irc1 (#2809)

  • Fix KS4 for v>=4.0.5 and simplify skip correction (#2774)

  • Improvements for circus 2 (#2768)

  • Remove separate default job_kwarg n_jobs for sorters (#2712)

  • Update ks4 wrapper for v4.0.3 (#2701)

  • Improve caching of MS5 sorter (#2690)

  • Add whitening before peeler TDC2 SC2 (#2679)

  • add option to kilosort4 to force cpu even if cuda is available when small gpu (#2647)

  • Add batch size to KS4 wrapper (#2592)

  • Fix for template matching in circus (#2583)

  • Use GPU in Kilosort4Sorter (#2577)

  • Circus2 improvements (#2574)

  • Simple sorter better params (#2547)

  • Kilosort4 Wrapper (#2529)

  • Fix singularity issue in deleting py_user_folder (#2493)

  • Tridesclous2 update (#2267)

postprocessing:

  • Fix pca transform error (#3178, #3224)

  • Fix spike_vector_to_indices() (#3048)

  • Remove un-used argument (#3021)

  • Optimize numba cross-correlation and extend correlograms.py docstrings and tests (#3017)

  • Moving unit_localization into unit_locations for consistency (#2992)

  • Template similarity lags (#2941)

  • Fix isi_histograms when using numba (#2632)

  • Revert change in set_params for unit locations (#2624)

qualitymetrics:

  • Fix nn pca_metric computation and update tests (#3138)

  • Add peak_to_peak mode to SNR (#3009)

  • Add test to check unit structure in quality metric calculator output (#2973)

  • Fix math error in sd_ratio (#2964)

  • Remove “waveforms” dependency for compute_quality_metrics() (#2707)

  • compute_synchrony_metrics update (#2605)

curation:

  • Add apply_curation() (#3208)

  • Port auto-merge changes and refactor (#3203)

  • Implement apply_merges_to_sorting() (#3154)

  • Proposal of format to hold the manual curation information (#2933)

  • Provide useful message if sorting used instead of analyzer for remove_duplicate_units (#2790)

  • Fix split in more than 2 units and extend curation docs and tests (#2775)

  • Enhancing curation : get_potential_auto_merge() (#2753)

  • Make sure has_exceeding_spikes also checks for negative spikes. (#2727)

  • Allow for remove_excess_spikes to remove negative spike times (#2716)

  • Add function in addition to class option for MergeUnitsSorting, SplitUnitSorting, and CurationSorting (#2659)

  • Allow auto_merge to work with fast_templates (#2551)

widgets:

  • Channel ids sortingview (#3205)

  • Since the gui now has curation we should allow users to set curation when making sorting summary (#3104)

  • Add plot_drift_raster_map widget (#3068)

  • Fix bug in plot_potential_merges (#3044)

  • Add peaks_on_probe widget. (#3022)

  • Plot potential merges (#3003)

  • Fix the new way of handling cmap in matpltolib. This fix the matplotib 3.9 problem related to this. (#2891)

  • Extend plot waveforms/templates to Templates object (#2856)

  • Fix bug in plot templates (#2850)

  • Add errors to ensure functions in Base of widgets (#2791)

  • Add color_channels option in in plot_probe_map (#2740)

  • Extend capabilities of plot_traces and spikes_on_traces (#2737)

  • Enable waveform-less plot templates (#2692)

  • Fix depth location in spikes on traces map (#2676)

  • Improve spikes on traces (#2646)

generation:

  • Remove unit_params_range from generate.py (#3121)

  • Out-of-place multiply needed when using amplitude scaling in the drifty hybrid recording (#3115)

  • Update tests against template library (#3000)

  • Add select channel and select unit method for template objects (#2989)

  • Template fetching methods (#2857)

  • Load is_scaled in from zarr Template representation (#2852)

  • Add is_scaled to Templates object (#2842)

  • Add template generate_recording_from_template_database (#2769)

  • Add a missing seed in generator (#2706)

  • Generate drift (#2683)

  • Changing the generation of fake template with a decaying exponential and fix torch locally exclusive (#2674)

  • Proposal to inject anisotropy while creating fake templates (#2600)

  • Fix scaling of inject templates with copy (#2521)

  • Tools for Generation of Hybrid recordings (#2436)

  • Remove default values used as expressions in generate.py. (#2345)

sortingcomponents:

  • Fix estimate_motion when time_vector is set (#3218)

  • Fix select peaks (#3132)

  • Dredge lfp and dredge ap (#3062)

  • Use “available” for memory caching (#3008)

  • get_spike_prototype can have NaN sometimes (#2980)

  • Benchmarks components: plotting utils (#2959)

  • Internal motion API, aka Motion object (#2915)

  • Components of SC2 (#2870)

  • Benchmark sorting components + Tridesclous2 improvement (#2811)

  • Change “idw” to “kriging” in spatial_interpolation_kernel parameters (#2708)

  • Benchmarks for sorting components (#2586)

  • Fix for template matching in circus (#2583)

  • Circus2 improvements (#2574)

  • Matched filtering to enhance peak detection (#2259)

  • Benchmark matching (#2518)

  • Initial benchmark components refactor (#2502)

  • Remove WaveformExtractor from Templates matching (#2485)

documentation:

  • Analyzer docstring cleanup (#3220)

  • Eradicate sphinx warnings (#3188)

  • Convert doc references from wf_extractor -> sorting_analyzer (#3185)

  • Add explainer of compute always computing in the analyzer (vs WaveformExtractor behavior) documentation (#3173)

  • Extend docs and API for generation module (#3167)

  • analyse -> analyze in Neuropixels docs (#3143)

  • Add pooch to docs extra (#3124)

  • Docstrings extractors update, fix PR01 and PR02 #3016 (#3076)

  • Unify compute_isi_violation docs and add UltraMegaSort2000 citation (#3070)

  • Correct docs and docstrings for compute_template_metric units (#3066)

  • Add bool type hint to functions in core module (#3064)

  • Fix the probe handling tutorial (#3063)

  • Add more helpful error when a non-existent id is passed to extractors (#3052)

  • Docstrings preprocessing update, fix PR01 and PR02 (#3016)

  • Add documentation to frame_slice in recording and drop redundant inheritance (#3001)

  • Add a jQuery extension to enable search (#2962)

  • Standardize colon spacing in docstrings (#2950)

  • Make a how to loading data into a Sorting manually (#2944)

  • Add references to documentation page (#2938)

  • Standardise qualitymetrics docstrings to numpydocs standard (#2935)

  • Add _params_descriptions for simple sorter (#2894)

  • Extend docstrings for amplitude scaling and collisions (#2893)

  • Improve save_to_folder docstring (#2873)

  • Unpin sphinx and add networkx dependency. (#2861)

  • Switch Visualise to Visualize (#2830)

  • Add typing to write_binary_recording (#2794)

  • Update detect_bad_channels docs (#2783)

  • Reorganising documentation into Getting Started, Tutorial and How To (#2778)

  • Switch exporters docs to SortingAnalyzer (#2762)

  • Update amplitude cutoff documentation (#2756)

  • Update SortingAnalyzer docs (see #2711) (#2719)

  • Add basic repr to Templates object (#2718)

  • Fix example broken by #2684 (#2717)

  • Add a “how to” for combining recordings (#2713)

  • Fix SortingAnalyzer tutorial (#2648)

  • Sync documentation with bug fixes (#2645)

  • WaveformExtractor -> SortingAnalyzer doc page (#2633)

  • Update get_started.rst with info for reloading saved binaries (#2622)

  • Analyzer core extension: improve docstrings (#2608)

  • Improve documentation for excess spikes error in FrameSliceSorting. (#2604)

  • Put SortingAnalyzer in get started (#2582)

  • Clarify status of main and Sortinganalyzer (#2580)

  • Add note about recommendation not to change batch size in Kilosort1-3 (#2564)

  • SortingAnalyzer core documentation (#2563)

  • Cleanup of modules gallery docs (post SorterAnalyzer) (#2552)

  • Add note to explain that Command Prompt is currently the only officially supported shell for Windows (#2494)

  • Add documentation of preprocessing and sorting split by channel group. (#2316)

  • SortingAnalyzer in “how to” analyze neuropixels (#2520)

continuous integration:

  • Add test_extractors to full test with codecov (#3141)

  • Add plexon2 tests action for install wine and drop full (linux only) tests (#3101)

  • Add machinery to run test only on changed files (#3084)

  • Remove cached dependencies (#3080)

  • Add macos and windows to cache cron jobs (#3075)

  • Update cron job for installation_tips (#3038)

  • Improve profile imports test (#2955)

  • Modify CI for new dev version criteria (#2636)

  • update all CI actions (#2460)

packaging:

  • Add ibllib to test requirements (#3090)

  • Relax numpy (#3056)

  • Set DEV=True until release (#3036)

  • Remove neo top level imports (#2991)

  • Improve import times with full (#2983)

  • Remove upper bound in scipy dependency for full install (#2956)

  • Improve profile imports test (#2955)

  • Fix marker collection to work on windows (#2947)

  • Remove numba type signature to prevent compilation of numba functions at import (#2932)

  • Switch calculate_pc_metrics to compute_pc_metrics for api consistency (#2925)

  • Regularised the API from parent_recording to recording in zero_channel_pad (#2923)

  • Update curation module to use sorting argument rather than parent_sorting (#2922)

  • Fix the new way of handling cmap in matpltolib. This fix the matplotib 3.9 problem related to this. (#2891)

  • Protect hdbscan import in TdCClustering (#2876)

  • Pin matplotlib dependency (#2866)

  • Unpin sphinx and add networkx dependency. (#2861)

  • Add safeguard for probeinterface use of read_spikegadgets (#2833)

  • Update codecov badge (#2481)

testing:

  • Add a couple of seeds in tests (#3189)

  • Add test_extractors to full test with codecov (#3141)

  • Add streaming extractor tests to main test script (#3129)

  • Add plexon2 tests action for install wine and drop full (linux only) tests (#3101)

  • Mark failing sorter test on Windows*Python3.12 as xfail (#3091)

  • Add macos and windows to cache cron jobs (#3075)

  • Remove duplicate function from common test suite. (#3058)

  • Numpy 2.0 cap Fix most egregorious deprecated behavior and cap version (#3032)

  • Remove unittest from postprocessing (#2984)

  • Fix deepinterpolation tests (#2971)

  • Make easier env vars for local testing (#2951)

  • Fix marker collection to work on windows (#2947)

  • Remove unused imports in ibl test (#2939)

  • Add tests for windows and mac (#2937)

  • Add Mac skip for plexon2 Neo test (#2931)

  • Remove mearec from testing functions (#2930)

  • Remove cache folder (#2927)

  • Remove toy_example from test codebase (2) (#2920)

  • Remove toy example from test codebase (1) (#2916)

  • Fix codecov testing (#2777)

  • Speed up test_sorting_s3_nwb_zarr (#2767)

  • Fix full tests (#2665)

  • Fix typo in fast templates test (#2651)

  • update all CI actions (#2460)

Contributors:

  • @AnujVader

  • @Ashkees

  • @Djoels

  • @DradeAW

  • @HDClark94

  • @JoeZiminski

  • @NinelK

  • @RobertoDF

  • @alejoe91

  • @bagibence

  • @chrishalcrow

  • @cwindolf

  • @gkBCCN

  • @h-mayorquin

  • @jakeswann1

  • @jsiegle

  • @khl02007

  • @manimoh

  • @naterenegar

  • @nikhilchandra

  • @paulrignanese

  • @remi-pr

  • @samuelgarcia

  • @yger

  • @zm711