spikeinterface 0.103.0__tar.gz → 0.103.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {spikeinterface-0.103.0/src/spikeinterface.egg-info → spikeinterface-0.103.2}/PKG-INFO +7 -6
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/pyproject.toml +7 -6
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_base.py +1 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_clustering.py +18 -3
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_matching.py +13 -2
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_motion_estimation.py +21 -2
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_peak_detection.py +53 -30
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_peak_localization.py +8 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_peak_selection.py +1 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_plot_tools.py +164 -51
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_sorter.py +13 -2
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/analyzer_extension_core.py +12 -4
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/base.py +1 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/generate.py +26 -24
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/job_tools.py +4 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/node_pipeline.py +0 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/recording_tools.py +14 -27
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/sorting_tools.py +10 -7
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/sortinganalyzer.py +60 -15
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/sparsity.py +12 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/template_tools.py +0 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/waveform_tools.py +50 -9
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/__init__.py +1 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/auto_merge.py +27 -8
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/curation_format.py +45 -68
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/curation_model.py +47 -24
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/curation_tools.py +1 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/model_based_curation.py +1 -6
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/train_manual_curation.py +19 -11
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/__init__.py +1 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neobaseextractor.py +13 -5
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/openephys.py +235 -41
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/plexon2.py +8 -2
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neuropixels_utils.py +20 -19
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/phykilosortextractors.py +27 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/drift_tools.py +2 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/drifting_generator.py +16 -6
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/splitting_tools.py +4 -4
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/spike_locations.py +1 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/template_similarity.py +87 -41
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/detect_bad_channels.py +20 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/motion.py +16 -11
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/misc_metrics.py +51 -85
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/quality_metric_calculator.py +26 -7
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/quality_metric_list.py +12 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/utils.py +23 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort4.py +30 -4
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/pykilosort.py +1 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/rt_sort.py +1 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/simplesorter.py +4 -2
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/spyking_circus2.py +165 -177
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/tridesclous2.py +66 -66
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/misc.py +6 -6
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/__init__.py +5 -0
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/clustering_tools.py → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/cleaning_tools.py +4 -3
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/dummy.py +3 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/graph_clustering.py +54 -56
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/isosplit_isocut.py +653 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/iterative_hdbscan.py +170 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/iterative_isosplit.py +454 -0
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/split.py → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/itersplit_tools.py +50 -26
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/main.py +18 -10
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/merging_tools.py +644 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/method_list.py +27 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/positions.py +59 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/random_projections.py +165 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/tools.py +42 -39
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/base.py +2 -2
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/circus.py +46 -52
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/matching/main.py +116 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/method_list.py +6 -7
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/matching/nearest.py +194 -0
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/matching/tdc.py → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/matching/tdc_peeler.py +112 -24
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/wobble.py +40 -16
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/dredge.py +12 -4
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/medicine.py +4 -2
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/motion_estimation.py +1 -2
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/__init__.py +2 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/by_channel.py +313 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/iterative.py +210 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/locally_exclusive.py +513 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/main.py +116 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/matched_filtering.py +217 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/method_list.py +18 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/__init__.py +6 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/base.py +20 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/center_of_mass.py +69 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/grid.py +172 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/main.py +175 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/method_list.py +6 -0
- spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/monopolar.py +109 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/tools.py +74 -39
- {spikeinterface-0.103.0/src/spikeinterface/sortingcomponents → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/waveforms}/features_from_peaks.py +7 -4
- {spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/waveforms}/peak_svd.py +11 -4
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/temporal_pca.py +2 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/collision.py +1 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/metrics.py +71 -24
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/traces.py +8 -1
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_locations.py +16 -8
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_summary.py +7 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/utils.py +7 -4
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/utils_ipywidgets.py +46 -6
- {spikeinterface-0.103.0 → spikeinterface-0.103.2/src/spikeinterface.egg-info}/PKG-INFO +7 -6
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface.egg-info/SOURCES.txt +25 -21
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface.egg-info/requires.txt +5 -4
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/__init__.py +0 -5
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/circus.py +0 -269
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/clean.py +0 -45
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/isocut5.py +0 -211
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/merge.py +0 -836
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/method_list.py +0 -37
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/position.py +0 -80
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/position_and_features.py +0 -193
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/position_and_pca.py +0 -243
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/position_ptp_scaled.py +0 -100
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/random_projections.py +0 -189
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/sliding_hdbscan.py +0 -539
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/sliding_nn.py +0 -657
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/tdc.py +0 -217
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/triage.py +0 -26
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/matching/main.py +0 -86
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/matching/naive.py +0 -74
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/matching/tools.py +0 -138
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/peak_detection.py +0 -1327
- spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/peak_localization.py +0 -483
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/LICENSE +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/README.md +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/setup.cfg +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_merging.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_motion_interpolation.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_sorter_without_gt.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/residual_analysis.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/basecomparison.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/collision.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/comparisontools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/correlogram.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/groundtruthstudy.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/hybrid.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/multicomparisons.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/paircomparisons.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/baseevent.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/baserecording.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/baserecordingsnippets.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/basesnippets.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/basesorting.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/binaryfolder.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/binaryrecordingextractor.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/channelsaggregationrecording.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/channelslice.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/core_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/datasets.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/frameslicerecording.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/frameslicesorting.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/globals.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/loading.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/motion.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/npyfoldersnippets.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/npysnippetsextractor.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/npzfolder.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/npzsortingextractor.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/numpyextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/old_api_utils.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/segmentutils.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/snippets_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/sortingfolder.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/template.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/testing.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/testing_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/unitsaggregationsorting.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/unitsselectionsorting.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/waveforms_extractor_backwards_compatibility.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/zarrextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/zarrrecordingextractor.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/curationsorting.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/mergeunitssorting.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/remove_duplicated_spikes.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/remove_excess_spikes.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/remove_redundant.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/sortingview_curation.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/splitunitsorting.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/report.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/to_ibl.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/to_phy.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/to_pynapple.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/alfsortingextractor.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/bids.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/cbin_ibl.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/cellexplorersortingextractor.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/combinatoextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/extractor_classes.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/hdsortextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/herdingspikesextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/iblextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/klustaextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/matlabhelpers.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/mclustextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/mcsh5extractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/mdaextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/alphaomega.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/axon.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/axona.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/biocam.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/blackrock.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/ced.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/edf.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/intan.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/maxwell.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/mcsraw.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/mearec.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neo_utils.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neuralynx.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neuroexplorer.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neuronexus.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neuroscope.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/nix.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/plexon.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/spike2.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/spikegadgets.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/spikeglx.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/tdt.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/nwbextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/shybridextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/sinapsrecordingextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/spykingcircusextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/toy_example.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/tridesclousextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/waveclussnippetstextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/waveclustextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/whitematterrecordingextractor.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/yassextractors.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/full.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/hybrid_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/noise_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/template_database.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/alignsorting.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/amplitude_scalings.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/correlograms.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/isi.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/localization_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/noise_level.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/principal_component.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/spike_amplitudes.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/template_metrics.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/unit_locations.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/align_snippets.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/astype.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/average_across_direction.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/basepreprocessor.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/clip.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/common_reference.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/correct_lsb.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/decimate.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/deepinterpolation.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/generators.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/tf_utils.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/train.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/depth_order.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/directional_derivative.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/filter.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/filter_gaussian.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/filter_opencl.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/highpass_spatial_filter.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/interpolate_bad_channels.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/normalize_scale.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/phase_shift.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/pipeline.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/preprocessing_classes.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/preprocessing_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/rectify.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/remove_artifacts.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/resample.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/scale.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/silence_periods.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/unsigned_to_signed.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/whiten.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/zero_channel_pad.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/pca_metrics.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/basesorter.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/container_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/combinato.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/hdsort.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/hdsort_master.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/herdingspikes.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/ironclust.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort2.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort2_5.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort2_5_master.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort2_master.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort3.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort3_master.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort_master.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosortbase.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/klusta.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/klusta_config_default.prm +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/mountainsort4.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/mountainsort5.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/sc_config_default.params +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/spyking_circus.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/tridesclous.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/waveclus.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/waveclus_master.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/waveclus_snippets.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/waveclus_snippets_master.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/yass.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/yass_config_default.yaml +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/si_based.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/launcher.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/runsorter.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/sorterlist.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/constructNPYheader.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/shellscript.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/writeNPY.m +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/graph_tools.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/decentralized.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/iterative_template.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/motion_cleaner.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/motion_interpolation.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/motion_utils.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/peak_selection.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/hanning_filter.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/neural_network_denoiser.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/savgol_denoiser.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/waveform_thresholder.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/waveform_utils.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/__init__.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/all_amplitudes_distributions.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/amplitudes.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/autocorrelograms.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/base.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/comparison.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/crosscorrelograms.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/drift_templates.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/gtstudy.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/isi_distribution.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/motion.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/multicomparison.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/peak_activity.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/peaks_on_probe.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/potential_merges.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/probe_map.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/quality_metrics.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/rasters.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/sorting_summary.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/spike_locations.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/spike_locations_by_time.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/spikes_on_traces.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/template_metrics.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/template_similarity.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_depths.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_presence.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_probe_map.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_templates.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_waveforms.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_waveforms_density_map.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/utils_matplotlib.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/utils_sortingview.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/widget_list.py +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface.egg-info/dependency_links.txt +0 -0
- {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spikeinterface
|
|
3
|
-
Version: 0.103.
|
|
3
|
+
Version: 0.103.2
|
|
4
4
|
Summary: Python toolkit for analysis, visualization, and comparison of spike sorting output
|
|
5
5
|
Author-email: Alessio Buccino <alessiop.buccino@gmail.com>, Samuel Garcia <sam.garcia.die@gmail.com>
|
|
6
6
|
Project-URL: homepage, https://github.com/SpikeInterface/spikeinterface
|
|
@@ -14,7 +14,7 @@ Classifier: Operating System :: POSIX :: Linux
|
|
|
14
14
|
Classifier: Operating System :: Microsoft :: Windows
|
|
15
15
|
Classifier: Operating System :: MacOS
|
|
16
16
|
Classifier: Operating System :: OS Independent
|
|
17
|
-
Requires-Python:
|
|
17
|
+
Requires-Python: >=3.9
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: numpy>=1.20; python_version < "3.13"
|
|
@@ -22,8 +22,8 @@ Requires-Dist: numpy>=2.0.0; python_version >= "3.13"
|
|
|
22
22
|
Requires-Dist: threadpoolctl>=3.0.0
|
|
23
23
|
Requires-Dist: tqdm
|
|
24
24
|
Requires-Dist: zarr<3,>=2.18
|
|
25
|
-
Requires-Dist: neo>=0.14.
|
|
26
|
-
Requires-Dist: probeinterface>=0.3.
|
|
25
|
+
Requires-Dist: neo>=0.14.3
|
|
26
|
+
Requires-Dist: probeinterface>=0.3.1
|
|
27
27
|
Requires-Dist: packaging
|
|
28
28
|
Requires-Dist: pydantic
|
|
29
29
|
Requires-Dist: numcodecs<0.16.0
|
|
@@ -57,7 +57,7 @@ Requires-Dist: scikit-learn; extra == "full"
|
|
|
57
57
|
Requires-Dist: networkx; extra == "full"
|
|
58
58
|
Requires-Dist: distinctipy; extra == "full"
|
|
59
59
|
Requires-Dist: matplotlib>=3.6; extra == "full"
|
|
60
|
-
Requires-Dist: cuda-python; platform_system != "Darwin" and extra == "full"
|
|
60
|
+
Requires-Dist: cuda-python>=11.8.6; platform_system != "Darwin" and extra == "full"
|
|
61
61
|
Requires-Dist: numba>=0.59; extra == "full"
|
|
62
62
|
Requires-Dist: skops; extra == "full"
|
|
63
63
|
Requires-Dist: huggingface_hub; extra == "full"
|
|
@@ -100,12 +100,13 @@ Requires-Dist: huggingface_hub; extra == "test"
|
|
|
100
100
|
Requires-Dist: pytest-mock; extra == "test"
|
|
101
101
|
Provides-Extra: docs
|
|
102
102
|
Requires-Dist: Sphinx; extra == "docs"
|
|
103
|
+
Requires-Dist: ipython; extra == "docs"
|
|
103
104
|
Requires-Dist: sphinx_rtd_theme>=1.2; extra == "docs"
|
|
104
105
|
Requires-Dist: sphinx-gallery; extra == "docs"
|
|
105
106
|
Requires-Dist: sphinx-design; extra == "docs"
|
|
106
107
|
Requires-Dist: numpydoc; extra == "docs"
|
|
107
|
-
Requires-Dist: ipython; extra == "docs"
|
|
108
108
|
Requires-Dist: sphinxcontrib-jquery; extra == "docs"
|
|
109
|
+
Requires-Dist: autodoc_pydantic; extra == "docs"
|
|
109
110
|
Requires-Dist: MEArec; extra == "docs"
|
|
110
111
|
Requires-Dist: pandas; extra == "docs"
|
|
111
112
|
Requires-Dist: hdbscan>=0.8.33; extra == "docs"
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "spikeinterface"
|
|
3
|
-
version = "0.103.
|
|
3
|
+
version = "0.103.2"
|
|
4
4
|
authors = [
|
|
5
5
|
{ name="Alessio Buccino", email="alessiop.buccino@gmail.com" },
|
|
6
6
|
{ name="Samuel Garcia", email="sam.garcia.die@gmail.com" },
|
|
7
7
|
]
|
|
8
8
|
description = "Python toolkit for analysis, visualization, and comparison of spike sorting output"
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.9
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
11
|
classifiers = [
|
|
12
12
|
"Programming Language :: Python :: 3 :: Only",
|
|
13
13
|
"License :: OSI Approved :: MIT License",
|
|
@@ -25,8 +25,8 @@ dependencies = [
|
|
|
25
25
|
"threadpoolctl>=3.0.0",
|
|
26
26
|
"tqdm",
|
|
27
27
|
"zarr>=2.18,<3",
|
|
28
|
-
"neo>=0.14.
|
|
29
|
-
"probeinterface>=0.3.
|
|
28
|
+
"neo>=0.14.3",
|
|
29
|
+
"probeinterface>=0.3.1",
|
|
30
30
|
"packaging",
|
|
31
31
|
"pydantic",
|
|
32
32
|
"numcodecs<0.16.0", # For supporting zarr < 3
|
|
@@ -100,7 +100,7 @@ full = [
|
|
|
100
100
|
"networkx",
|
|
101
101
|
"distinctipy",
|
|
102
102
|
"matplotlib>=3.6", # matplotlib.colormaps
|
|
103
|
-
"cuda-python; platform_system != 'Darwin'",
|
|
103
|
+
"cuda-python>=11.8.6; platform_system != 'Darwin'",
|
|
104
104
|
"numba>=0.59",
|
|
105
105
|
"skops",
|
|
106
106
|
"huggingface_hub"
|
|
@@ -194,12 +194,13 @@ test = [
|
|
|
194
194
|
|
|
195
195
|
docs = [
|
|
196
196
|
"Sphinx",
|
|
197
|
+
"ipython",
|
|
197
198
|
"sphinx_rtd_theme>=1.2",
|
|
198
199
|
"sphinx-gallery",
|
|
199
200
|
"sphinx-design",
|
|
200
201
|
"numpydoc",
|
|
201
|
-
"ipython",
|
|
202
202
|
"sphinxcontrib-jquery",
|
|
203
|
+
"autodoc_pydantic",
|
|
203
204
|
|
|
204
205
|
# for notebooks in the gallery
|
|
205
206
|
"MEArec", # Use as an example
|
{spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_base.py
RENAMED
|
@@ -431,7 +431,7 @@ class BenchmarkStudy:
|
|
|
431
431
|
if verbose:
|
|
432
432
|
print("### Compute result", key, "###")
|
|
433
433
|
benchmark = self.benchmarks[key]
|
|
434
|
-
assert benchmark is not None
|
|
434
|
+
assert benchmark is not None, f"Benchmkark for key {key} has not been run yet!"
|
|
435
435
|
benchmark.compute_result(**result_params)
|
|
436
436
|
benchmark.save_result(self.folder / "results" / self.key_to_str(key))
|
|
437
437
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from spikeinterface.sortingcomponents.clustering import
|
|
3
|
+
from spikeinterface.sortingcomponents.clustering import find_clusters_from_peaks
|
|
4
4
|
from spikeinterface.core import NumpySorting
|
|
5
5
|
from spikeinterface.comparison import GroundTruthComparison
|
|
6
6
|
from spikeinterface.widgets import (
|
|
@@ -30,8 +30,8 @@ class ClusteringBenchmark(Benchmark):
|
|
|
30
30
|
self.result = {}
|
|
31
31
|
|
|
32
32
|
def run(self, **job_kwargs):
|
|
33
|
-
labels, peak_labels =
|
|
34
|
-
self.recording, self.peaks, method=self.method, method_kwargs=self.method_kwargs,
|
|
33
|
+
labels, peak_labels = find_clusters_from_peaks(
|
|
34
|
+
self.recording, self.peaks, method=self.method, method_kwargs=self.method_kwargs, job_kwargs=job_kwargs
|
|
35
35
|
)
|
|
36
36
|
self.result["peak_labels"] = peak_labels
|
|
37
37
|
|
|
@@ -95,6 +95,16 @@ class ClusteringBenchmark(Benchmark):
|
|
|
95
95
|
|
|
96
96
|
|
|
97
97
|
class ClusteringStudy(BenchmarkStudy, MixinStudyUnitCount):
|
|
98
|
+
"""
|
|
99
|
+
Benchmark study to compare clustering methods.
|
|
100
|
+
|
|
101
|
+
The ground truth sorting objects must be given and method outputs
|
|
102
|
+
will be compared to them.
|
|
103
|
+
|
|
104
|
+
The input of methods are the detected peaks. Because the clustering
|
|
105
|
+
can be performed on only a subset of the detected peaks, then selected peak
|
|
106
|
+
must be also given as index of all spikes.
|
|
107
|
+
"""
|
|
98
108
|
|
|
99
109
|
benchmark_class = ClusteringBenchmark
|
|
100
110
|
|
|
@@ -182,6 +192,11 @@ class ClusteringStudy(BenchmarkStudy, MixinStudyUnitCount):
|
|
|
182
192
|
|
|
183
193
|
return plot_performances_vs_snr(self, **kwargs)
|
|
184
194
|
|
|
195
|
+
def plot_performances_vs_firing_rate(self, **kwargs):
|
|
196
|
+
from .benchmark_plot_tools import plot_performances_vs_firing_rate
|
|
197
|
+
|
|
198
|
+
return plot_performances_vs_firing_rate(self, **kwargs)
|
|
199
|
+
|
|
185
200
|
def plot_performances_comparison(self, *args, **kwargs):
|
|
186
201
|
from .benchmark_plot_tools import plot_performances_comparison
|
|
187
202
|
|
{spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_matching.py
RENAMED
|
@@ -21,13 +21,14 @@ class MatchingBenchmark(Benchmark):
|
|
|
21
21
|
self.recording = recording
|
|
22
22
|
self.gt_sorting = gt_sorting
|
|
23
23
|
self.method = params["method"]
|
|
24
|
-
self.templates = params["method_kwargs"]["templates"]
|
|
24
|
+
# self.templates = params["method_kwargs"]["templates"]
|
|
25
|
+
self.templates = params["templates"]
|
|
25
26
|
self.method_kwargs = params["method_kwargs"]
|
|
26
27
|
self.result = {}
|
|
27
28
|
|
|
28
29
|
def run(self, **job_kwargs):
|
|
29
30
|
spikes = find_spikes_from_templates(
|
|
30
|
-
self.recording, method=self.method, method_kwargs=self.method_kwargs,
|
|
31
|
+
self.recording, self.templates, method=self.method, method_kwargs=self.method_kwargs, job_kwargs=job_kwargs
|
|
31
32
|
)
|
|
32
33
|
unit_ids = self.templates.unit_ids
|
|
33
34
|
sorting = np.zeros(spikes.size, dtype=minimum_spike_dtype)
|
|
@@ -56,6 +57,16 @@ class MatchingBenchmark(Benchmark):
|
|
|
56
57
|
|
|
57
58
|
|
|
58
59
|
class MatchingStudy(BenchmarkStudy, MixinStudyUnitCount):
|
|
60
|
+
"""
|
|
61
|
+
Benchmark study to compare template matchong methods.
|
|
62
|
+
|
|
63
|
+
The ground truth sorting objects must be given and method outputs
|
|
64
|
+
will be compared to them.
|
|
65
|
+
|
|
66
|
+
Templates must be also given. Note that the full template can be given but also
|
|
67
|
+
only a partial catalogue can be given to challenge the template matching
|
|
68
|
+
methods when catalogue is not entirely known.
|
|
69
|
+
"""
|
|
59
70
|
|
|
60
71
|
benchmark_class = MatchingBenchmark
|
|
61
72
|
|
|
@@ -89,7 +89,9 @@ class MotionEstimationBenchmark(Benchmark):
|
|
|
89
89
|
noise_levels = get_noise_levels(self.recording, return_in_uV=False, **job_kwargs)
|
|
90
90
|
|
|
91
91
|
t0 = time.perf_counter()
|
|
92
|
-
|
|
92
|
+
detect_kwargs = p["detect_kwargs"].copy()
|
|
93
|
+
detect_kwargs["noise_levels"] = noise_levels
|
|
94
|
+
peaks = detect_peaks(self.recording, method_kwargs=detect_kwargs, job_kwargs=job_kwargs)
|
|
93
95
|
t1 = time.perf_counter()
|
|
94
96
|
if p["select_kwargs"] is not None:
|
|
95
97
|
selected_peaks = select_peaks(self.peaks, **p["select_kwargs"], **job_kwargs)
|
|
@@ -97,7 +99,9 @@ class MotionEstimationBenchmark(Benchmark):
|
|
|
97
99
|
selected_peaks = peaks
|
|
98
100
|
|
|
99
101
|
t2 = time.perf_counter()
|
|
100
|
-
peak_locations = localize_peaks(
|
|
102
|
+
peak_locations = localize_peaks(
|
|
103
|
+
self.recording, selected_peaks, method_kwargs=p["localize_kwargs"], job_kwargs=job_kwargs
|
|
104
|
+
)
|
|
101
105
|
t3 = time.perf_counter()
|
|
102
106
|
motion = estimate_motion(self.recording, selected_peaks, peak_locations, **p["estimate_motion_kwargs"])
|
|
103
107
|
t4 = time.perf_counter()
|
|
@@ -151,6 +155,15 @@ class MotionEstimationBenchmark(Benchmark):
|
|
|
151
155
|
|
|
152
156
|
|
|
153
157
|
class MotionEstimationStudy(BenchmarkStudy):
|
|
158
|
+
"""
|
|
159
|
+
Benchmark study to compare motion estimation methods.
|
|
160
|
+
|
|
161
|
+
The ground truth displaements of all units must be known and method outputs
|
|
162
|
+
will be compared to them.
|
|
163
|
+
|
|
164
|
+
See also :py:func:`~spikeinterface.generation.generate_drifting_recording`,
|
|
165
|
+
for generation drifting recording.
|
|
166
|
+
"""
|
|
154
167
|
|
|
155
168
|
benchmark_class = MotionEstimationBenchmark
|
|
156
169
|
|
|
@@ -240,6 +253,8 @@ class MotionEstimationStudy(BenchmarkStudy):
|
|
|
240
253
|
|
|
241
254
|
# ax0.set_ylim()
|
|
242
255
|
|
|
256
|
+
return fig
|
|
257
|
+
|
|
243
258
|
def plot_errors(self, case_keys=None, figsize=None, lim=None):
|
|
244
259
|
import matplotlib.pyplot as plt
|
|
245
260
|
|
|
@@ -305,6 +320,8 @@ class MotionEstimationStudy(BenchmarkStudy):
|
|
|
305
320
|
if lim is not None:
|
|
306
321
|
ax.set_ylim(0, lim)
|
|
307
322
|
|
|
323
|
+
return fig
|
|
324
|
+
|
|
308
325
|
def plot_summary_errors(self, case_keys=None, show_legend=True, figsize=(15, 5)):
|
|
309
326
|
import matplotlib.pyplot as plt
|
|
310
327
|
|
|
@@ -368,6 +385,8 @@ class MotionEstimationStudy(BenchmarkStudy):
|
|
|
368
385
|
|
|
369
386
|
despine(ax2)
|
|
370
387
|
|
|
388
|
+
return fig
|
|
389
|
+
|
|
371
390
|
# ax1.sharey(ax0)
|
|
372
391
|
# ax2.sharey(ax0)
|
|
373
392
|
|
|
@@ -33,7 +33,7 @@ class PeakDetectionBenchmark(Benchmark):
|
|
|
33
33
|
self.result = {}
|
|
34
34
|
|
|
35
35
|
def run(self, **job_kwargs):
|
|
36
|
-
peaks = detect_peaks(self.recording, self.method,
|
|
36
|
+
peaks = detect_peaks(self.recording, self.method, method_kwargs=self.params, job_kwargs=job_kwargs)
|
|
37
37
|
self.result["peaks"] = peaks
|
|
38
38
|
|
|
39
39
|
def compute_result(self, **result_params):
|
|
@@ -57,7 +57,7 @@ class PeakDetectionBenchmark(Benchmark):
|
|
|
57
57
|
spikes, self.recording.sampling_frequency, unit_ids=self.recording.channel_ids
|
|
58
58
|
)
|
|
59
59
|
|
|
60
|
-
self.result["
|
|
60
|
+
self.result["gt_comparison_by_channels"] = GroundTruthComparison(
|
|
61
61
|
self.result["gt_on_channels"], self.result["peak_on_channels"], exhaustive_gt=self.exhaustive_gt
|
|
62
62
|
)
|
|
63
63
|
|
|
@@ -82,41 +82,47 @@ class PeakDetectionBenchmark(Benchmark):
|
|
|
82
82
|
sorting["segment_index"] = peaks[detected_matches]["segment_index"]
|
|
83
83
|
order = np.lexsort((sorting["sample_index"], sorting["segment_index"]))
|
|
84
84
|
sorting = sorting[order]
|
|
85
|
-
self.result["
|
|
85
|
+
self.result["matched_sorting"] = NumpySorting(
|
|
86
86
|
sorting, self.recording.sampling_frequency, self.gt_sorting.unit_ids
|
|
87
87
|
)
|
|
88
|
-
self.result["
|
|
89
|
-
self.gt_sorting, self.result["
|
|
88
|
+
self.result["gt_comparison"] = GroundTruthComparison(
|
|
89
|
+
self.gt_sorting, self.result["matched_sorting"], exhaustive_gt=self.exhaustive_gt
|
|
90
90
|
)
|
|
91
91
|
|
|
92
92
|
ratio = 100 * len(gt_matches) / len(times2)
|
|
93
93
|
print("Only {0:.2f}% of gt peaks are matched to detected peaks".format(ratio))
|
|
94
94
|
|
|
95
95
|
sorting_analyzer = create_sorting_analyzer(
|
|
96
|
-
self.result["
|
|
96
|
+
self.result["matched_sorting"], self.recording, format="memory", sparse=False, **job_kwargs
|
|
97
97
|
)
|
|
98
98
|
sorting_analyzer.compute("random_spikes")
|
|
99
99
|
sorting_analyzer.compute("templates", **job_kwargs)
|
|
100
100
|
|
|
101
|
-
self.result["
|
|
101
|
+
self.result["matched_templates"] = sorting_analyzer.get_extension("templates").get_data()
|
|
102
102
|
|
|
103
103
|
_run_key_saved = [("peaks", "npy")]
|
|
104
104
|
|
|
105
105
|
_result_key_saved = [
|
|
106
|
+
("gt_comparison_by_channels", "pickle"),
|
|
107
|
+
("matched_sorting", "sorting"),
|
|
106
108
|
("gt_comparison", "pickle"),
|
|
107
|
-
("sliced_gt_sorting", "sorting"),
|
|
108
|
-
("sliced_gt_comparison", "pickle"),
|
|
109
|
-
("sliced_gt_sorting", "sorting"),
|
|
110
109
|
("peak_on_channels", "sorting"),
|
|
111
110
|
("gt_on_channels", "sorting"),
|
|
112
111
|
("matches", "pickle"),
|
|
113
|
-
("
|
|
112
|
+
("matched_templates", "npy"),
|
|
114
113
|
("gt_amplitudes", "npy"),
|
|
115
114
|
("gt_templates", "npy"),
|
|
116
115
|
]
|
|
117
116
|
|
|
118
117
|
|
|
119
118
|
class PeakDetectionStudy(BenchmarkStudy):
|
|
119
|
+
"""
|
|
120
|
+
Benchmark study to compare peak detection methods.
|
|
121
|
+
|
|
122
|
+
The ground truth sorting must be given.
|
|
123
|
+
Peak detected by methods will be compared to the ground truth to estimate the
|
|
124
|
+
recall.
|
|
125
|
+
"""
|
|
120
126
|
|
|
121
127
|
benchmark_class = PeakDetectionBenchmark
|
|
122
128
|
|
|
@@ -128,6 +134,11 @@ class PeakDetectionStudy(BenchmarkStudy):
|
|
|
128
134
|
benchmark = PeakDetectionBenchmark(recording, gt_sorting, params, **init_kwargs)
|
|
129
135
|
return benchmark
|
|
130
136
|
|
|
137
|
+
def plot_performances_vs_snr(self, **kwargs):
|
|
138
|
+
from .benchmark_plot_tools import plot_performances_vs_snr
|
|
139
|
+
|
|
140
|
+
return plot_performances_vs_snr(self, **kwargs)
|
|
141
|
+
|
|
131
142
|
def plot_agreements_by_channels(self, case_keys=None, figsize=(15, 15)):
|
|
132
143
|
if case_keys is None:
|
|
133
144
|
case_keys = list(self.cases.keys())
|
|
@@ -138,7 +149,7 @@ class PeakDetectionStudy(BenchmarkStudy):
|
|
|
138
149
|
for count, key in enumerate(case_keys):
|
|
139
150
|
ax = axs[0, count]
|
|
140
151
|
ax.set_title(self.cases[key]["label"])
|
|
141
|
-
plot_agreement_matrix(self.get_result(key)["
|
|
152
|
+
plot_agreement_matrix(self.get_result(key)["gt_comparison_by_channels"], ax=ax)
|
|
142
153
|
|
|
143
154
|
def plot_agreements_by_units(self, case_keys=None, figsize=(15, 15)):
|
|
144
155
|
if case_keys is None:
|
|
@@ -150,37 +161,49 @@ class PeakDetectionStudy(BenchmarkStudy):
|
|
|
150
161
|
for count, key in enumerate(case_keys):
|
|
151
162
|
ax = axs[0, count]
|
|
152
163
|
ax.set_title(self.cases[key]["label"])
|
|
153
|
-
plot_agreement_matrix(self.get_result(key)["
|
|
164
|
+
plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax)
|
|
154
165
|
|
|
155
|
-
def
|
|
166
|
+
def plot_detected_amplitude_distributions(
|
|
167
|
+
self, case_keys=None, show_legend=True, detect_threshold=None, figsize=(15, 5), ax=None
|
|
168
|
+
):
|
|
156
169
|
|
|
157
170
|
if case_keys is None:
|
|
158
171
|
case_keys = list(self.cases.keys())
|
|
159
172
|
import matplotlib.pyplot as plt
|
|
160
173
|
|
|
161
|
-
if
|
|
162
|
-
fig,
|
|
174
|
+
if ax is None:
|
|
175
|
+
fig, ax = plt.subplots(figsize=figsize)
|
|
163
176
|
else:
|
|
164
|
-
fig =
|
|
165
|
-
|
|
177
|
+
fig = ax.get_figure()
|
|
178
|
+
|
|
179
|
+
# plot only the first key for gt amplitude
|
|
180
|
+
# TODO make a loop for all of then
|
|
181
|
+
key0 = case_keys[0]
|
|
182
|
+
data2 = self.get_result(key0)["gt_amplitudes"]
|
|
183
|
+
bins = np.linspace(data2.min(), data2.max(), 100)
|
|
184
|
+
ax.hist(data2, bins=bins, alpha=0.1, label="gt", color="k")
|
|
166
185
|
|
|
167
186
|
for count, key in enumerate(case_keys):
|
|
168
|
-
ax = axs[count]
|
|
169
187
|
despine(ax)
|
|
170
188
|
data1 = self.get_result(key)["peaks"]["amplitude"]
|
|
171
|
-
|
|
189
|
+
|
|
172
190
|
color = self.get_colors()[key]
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
ax.hist(
|
|
176
|
-
|
|
191
|
+
|
|
192
|
+
label = self.cases[key]["label"]
|
|
193
|
+
ax.hist(data1, bins=bins, label=label, histtype="step", color=color, linewidth=2)
|
|
194
|
+
|
|
177
195
|
# ax.set_title(self.cases[key]["label"])
|
|
196
|
+
|
|
197
|
+
ax.set_yscale("log")
|
|
198
|
+
|
|
199
|
+
if detect_threshold is not None:
|
|
200
|
+
noise_levels = get_noise_levels(self.benchmarks[key].recording, return_in_uV=False).mean()
|
|
201
|
+
ymin, ymax = ax.get_ylim()
|
|
202
|
+
abs_threshold = -detect_threshold * noise_levels
|
|
203
|
+
ax.plot([abs_threshold, abs_threshold], [ymin, ymax], "k--")
|
|
204
|
+
|
|
205
|
+
if show_legend:
|
|
178
206
|
ax.legend()
|
|
179
|
-
if detect_threshold is not None:
|
|
180
|
-
noise_levels = get_noise_levels(self.benchmarks[key].recording, return_in_uV=False).mean()
|
|
181
|
-
ymin, ymax = ax.get_ylim()
|
|
182
|
-
abs_threshold = -detect_threshold * noise_levels
|
|
183
|
-
ax.plot([abs_threshold, abs_threshold], [ymin, ymax], "k--")
|
|
184
207
|
|
|
185
208
|
return fig
|
|
186
209
|
|
|
@@ -266,7 +289,7 @@ class PeakDetectionStudy(BenchmarkStudy):
|
|
|
266
289
|
import sklearn.metrics
|
|
267
290
|
|
|
268
291
|
gt_templates = self.get_result(key)["gt_templates"]
|
|
269
|
-
found_templates = self.get_result(key)["
|
|
292
|
+
found_templates = self.get_result(key)["matched_templates"]
|
|
270
293
|
num_templates = len(gt_templates)
|
|
271
294
|
distances = np.zeros(num_templates)
|
|
272
295
|
|
|
@@ -199,6 +199,14 @@ class UnitLocalizationBenchmark(Benchmark):
|
|
|
199
199
|
|
|
200
200
|
|
|
201
201
|
class UnitLocalizationStudy(BenchmarkStudy):
|
|
202
|
+
"""
|
|
203
|
+
Benchmark study to compare peaks localization methods.
|
|
204
|
+
|
|
205
|
+
The ground truth position of units must be known and method outputs
|
|
206
|
+
will be compared to them.
|
|
207
|
+
|
|
208
|
+
See also UnitLocalizationStudy.
|
|
209
|
+
"""
|
|
202
210
|
|
|
203
211
|
benchmark_class = UnitLocalizationBenchmark
|
|
204
212
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from spikeinterface.sortingcomponents.clustering import
|
|
3
|
+
from spikeinterface.sortingcomponents.clustering import find_clusters_from_peaks
|
|
4
4
|
from spikeinterface.core import NumpySorting
|
|
5
5
|
from spikeinterface.comparison import GroundTruthComparison
|
|
6
6
|
from spikeinterface.comparison.comparisontools import make_matching_events
|