spikeinterface 0.101.2__tar.gz → 0.102.0__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.101.2/src/spikeinterface.egg-info → spikeinterface-0.102.0}/PKG-INFO +16 -10
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/pyproject.toml +17 -9
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/__init__.py +1 -4
- spikeinterface-0.102.0/src/spikeinterface/benchmark/__init__.py +7 -0
- spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/benchmark/benchmark_tools.py → spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_base.py +11 -33
- {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_clustering.py +11 -40
- {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_matching.py +14 -99
- {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_motion_estimation.py +17 -3
- {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_motion_interpolation.py +1 -1
- {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_peak_detection.py +1 -2
- {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_peak_localization.py +1 -1
- {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_peak_selection.py +1 -7
- spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_plot_tools.py +305 -0
- spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_sorter.py +144 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/__init__.py +2 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/collision.py +74 -70
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/comparisontools.py +480 -8
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/correlogram.py +48 -45
- spikeinterface-0.102.0/src/spikeinterface/comparison/groundtruthstudy.py +21 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/multicomparisons.py +2 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/paircomparisons.py +82 -54
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/__init__.py +10 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/analyzer_extension_core.py +61 -32
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/base.py +9 -103
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/baserecording.py +87 -19
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/baserecordingsnippets.py +4 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/basesorting.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/core_tools.py +1 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/generate.py +8 -5
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/globals.py +3 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/job_tools.py +287 -84
- spikeinterface-0.102.0/src/spikeinterface/core/loading.py +302 -0
- spikeinterface-0.102.0/src/spikeinterface/core/motion.py +303 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/node_pipeline.py +236 -93
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/recording_tools.py +182 -55
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/sorting_tools.py +0 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/sortinganalyzer.py +28 -36
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/sortingfolder.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/template.py +2 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/template_tools.py +6 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/waveform_tools.py +82 -103
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/waveforms_extractor_backwards_compatibility.py +7 -7
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/zarrextractors.py +69 -11
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/__init__.py +5 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/auto_merge.py +373 -177
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/curation_format.py +24 -16
- spikeinterface-0.102.0/src/spikeinterface/curation/model_based_curation.py +435 -0
- spikeinterface-0.102.0/src/spikeinterface/curation/train_manual_curation.py +843 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/exporters/report.py +4 -4
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/cbin_ibl.py +22 -10
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/extractorlist.py +9 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/mdaextractors.py +4 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/__init__.py +2 -0
- spikeinterface-0.102.0/src/spikeinterface/extractors/neoextractors/neuronexus.py +66 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/openephys.py +1 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/plexon2.py +25 -3
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neuropixels_utils.py +28 -21
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/nwbextractors.py +384 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/full.py +1 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/hybrid_tools.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/correlograms.py +93 -3
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/localization_tools.py +63 -10
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/principal_component.py +13 -13
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/template_metrics.py +84 -46
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/template_similarity.py +152 -50
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/unit_locations.py +2 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/average_across_direction.py +3 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/decimate.py +14 -13
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/motion.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/silence_periods.py +5 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/whiten.py +83 -39
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/__init__.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/misc_metrics.py +17 -16
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/pca_metrics.py +35 -17
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/quality_metric_calculator.py +47 -14
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/quality_metric_list.py +41 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/basesorter.py +7 -6
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort4.py +2 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosortbase.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/internal/si_based.py +2 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/internal/spyking_circus2.py +102 -62
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/internal/tridesclous2.py +2 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/launcher.py +2 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/runsorter.py +5 -5
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/circus.py +85 -45
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/clean.py +0 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/clustering_tools.py +11 -15
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/dummy.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/main.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/merge.py +6 -6
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/method_list.py +3 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/position.py +2 -3
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/position_and_features.py +6 -15
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/position_and_pca.py +4 -7
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/position_ptp_scaled.py +2 -3
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/random_projections.py +36 -23
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/sliding_hdbscan.py +7 -8
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/sliding_nn.py +6 -7
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/split.py +83 -45
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/tdc.py +2 -12
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/tools.py +0 -4
- spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/base.py +48 -0
- spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/circus.py +761 -0
- spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/main.py +62 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/matching/method_list.py +8 -0
- spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/naive.py +74 -0
- spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/tdc.py +696 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/matching/wobble.py +147 -135
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/__init__.py +0 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/decentralized.py +2 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/dredge.py +6 -7
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/iterative_template.py +2 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/motion_estimation.py +1 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/motion_interpolation.py +49 -21
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/motion_utils.py +0 -231
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/peak_detection.py +69 -80
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/peak_localization.py +4 -4
- spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/tools.py +319 -0
- spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/waveforms/__init__.py +0 -0
- spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/waveforms/hanning_filter.py +50 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/autocorrelograms.py +7 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/crosscorrelograms.py +2 -1
- spikeinterface-0.102.0/src/spikeinterface/widgets/gtstudy.py +206 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/motion.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/sorting_summary.py +57 -13
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/traces.py +5 -2
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_summary.py +55 -47
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_waveforms.py +1 -1
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/utils.py +90 -0
- spikeinterface-0.102.0/src/spikeinterface/widgets/utils_sortingview.py +106 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0/src/spikeinterface.egg-info}/PKG-INFO +16 -10
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface.egg-info/SOURCES.txt +19 -9
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface.egg-info/requires.txt +12 -7
- spikeinterface-0.101.2/src/spikeinterface/comparison/groundtruthstudy.py +0 -441
- spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/benchmark/__init__.py +0 -6
- spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/matching/circus.py +0 -811
- spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/matching/main.py +0 -158
- spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/matching/naive.py +0 -121
- spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/matching/tdc.py +0 -390
- spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/tools.py +0 -153
- spikeinterface-0.101.2/src/spikeinterface/widgets/gtstudy.py +0 -344
- spikeinterface-0.101.2/src/spikeinterface/widgets/utils_sortingview.py +0 -154
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/LICENSE +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/README.md +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/setup.cfg +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/setup.py +0 -0
- /spikeinterface-0.101.2/src/spikeinterface/sorters/external/__init__.py → /spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_tools.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/basecomparison.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/hybrid.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/baseevent.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/basesnippets.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/binaryfolder.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/binaryrecordingextractor.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/channelsaggregationrecording.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/channelslice.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/datasets.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/frameslicerecording.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/frameslicesorting.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/npyfoldersnippets.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/npysnippetsextractor.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/npzfolder.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/npzsortingextractor.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/numpyextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/old_api_utils.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/segmentutils.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/snippets_tools.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/sparsity.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/testing.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/testing_tools.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/unitsaggregationsorting.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/unitsselectionsorting.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/zarrrecordingextractor.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/curation_tools.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/curationsorting.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/mergeunitssorting.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/remove_duplicated_spikes.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/remove_excess_spikes.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/remove_redundant.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/sortingview_curation.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/splitunitsorting.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/exporters/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/exporters/to_phy.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/alfsortingextractor.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/bids.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/cellexplorersortingextractor.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/combinatoextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/hdsortextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/herdingspikesextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/iblextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/klustaextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/matlabhelpers.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/mclustextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/mcsh5extractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/alphaomega.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/axona.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/biocam.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/blackrock.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/ced.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/edf.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/intan.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/maxwell.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/mcsraw.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/mearec.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neo_utils.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neobaseextractor.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neuralynx.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neuroexplorer.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neuroscope.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/nix.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/plexon.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/spike2.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/spikegadgets.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/spikeglx.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/tdt.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/phykilosortextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/shybridextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/sinapsrecordingextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/spykingcircusextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/toy_example.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/tridesclousextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/waveclussnippetstextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/waveclustextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/yassextractors.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/drift_tools.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/drifting_generator.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/noise_tools.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/template_database.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/alignsorting.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/amplitude_scalings.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/isi.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/noise_level.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/spike_amplitudes.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/spike_locations.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/align_snippets.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/astype.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/basepreprocessor.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/clip.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/common_reference.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/correct_lsb.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/deepinterpolation.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/generators.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/tf_utils.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/train.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/depth_order.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/detect_bad_channels.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/directional_derivative.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/filter.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/filter_gaussian.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/filter_opencl.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/highpass_spatial_filter.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/interpolate_bad_channels.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/normalize_scale.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/phase_shift.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/preprocessing_tools.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/preprocessinglist.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/rectify.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/remove_artifacts.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/resample.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/scale.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/unsigned_to_signed.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/zero_channel_pad.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/utils.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/container_tools.py +0 -0
- {spikeinterface-0.101.2/src/spikeinterface/sorters/internal → spikeinterface-0.102.0/src/spikeinterface/sorters/external}/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/combinato.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/hdsort.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/hdsort_master.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/herdingspikes.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/ironclust.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort2.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort2_5.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort2_5_master.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort2_master.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort3.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort3_master.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort_master.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/klusta.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/klusta_config_default.prm +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/mountainsort4.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/mountainsort5.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/pykilosort.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/sc_config_default.params +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/spyking_circus.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/tridesclous.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/waveclus.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/waveclus_master.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/waveclus_snippets.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/waveclus_snippets_master.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/yass.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/yass_config_default.yaml +0 -0
- {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/waveforms → spikeinterface-0.102.0/src/spikeinterface/sorters/internal}/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/internal/simplesorter.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/sorterlist.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/constructNPYheader.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/misc.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/shellscript.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/writeNPY.m +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/isocut5.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/triage.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/features_from_peaks.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/matching/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/motion_cleaner.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/peak_pipeline.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/peak_selection.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/neural_network_denoiser.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/savgol_denoiser.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/temporal_pca.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/waveform_thresholder.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/waveform_utils.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/__init__.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/all_amplitudes_distributions.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/amplitudes.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/base.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/collision.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/comparison.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/isi_distribution.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/metrics.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/multicomparison.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/peak_activity.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/peaks_on_probe.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/potential_merges.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/probe_map.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/quality_metrics.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/rasters.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/spike_locations.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/spikes_on_traces.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/template_metrics.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/template_similarity.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_depths.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_locations.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_presence.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_probe_map.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_templates.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_waveforms_density_map.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/utils_ipywidgets.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/utils_matplotlib.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/widget_list.py +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface.egg-info/dependency_links.txt +0 -0
- {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: spikeinterface
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.102.0
|
|
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,21 +14,21 @@ 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.13,>=3.9
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
|
-
Requires-Dist: numpy
|
|
20
|
+
Requires-Dist: numpy>=1.20
|
|
21
21
|
Requires-Dist: threadpoolctl>=3.0.0
|
|
22
22
|
Requires-Dist: tqdm
|
|
23
|
-
Requires-Dist: zarr<2.18
|
|
24
|
-
Requires-Dist: neo>=0.
|
|
23
|
+
Requires-Dist: zarr<3,>=2.18
|
|
24
|
+
Requires-Dist: neo>=0.14.0
|
|
25
25
|
Requires-Dist: probeinterface>=0.2.23
|
|
26
26
|
Requires-Dist: packaging
|
|
27
27
|
Provides-Extra: extractors
|
|
28
28
|
Requires-Dist: MEArec>=1.8; extra == "extractors"
|
|
29
29
|
Requires-Dist: pynwb>=2.6.0; extra == "extractors"
|
|
30
|
-
Requires-Dist: hdmf-zarr>=0.
|
|
31
|
-
Requires-Dist: pyedflib
|
|
30
|
+
Requires-Dist: hdmf-zarr>=0.11.0; extra == "extractors"
|
|
31
|
+
Requires-Dist: pyedflib<0.1.39,>=0.1.30; extra == "extractors"
|
|
32
32
|
Requires-Dist: sonpy; python_version < "3.10" and extra == "extractors"
|
|
33
33
|
Requires-Dist: lxml; extra == "extractors"
|
|
34
34
|
Requires-Dist: scipy; extra == "extractors"
|
|
@@ -37,13 +37,13 @@ Requires-Dist: ibllib>=2.36.0; extra == "extractors"
|
|
|
37
37
|
Requires-Dist: pymatreader>=0.0.32; extra == "extractors"
|
|
38
38
|
Requires-Dist: zugbruecke>=0.2; sys_platform != "win32" and extra == "extractors"
|
|
39
39
|
Provides-Extra: streaming-extractors
|
|
40
|
-
Requires-Dist: ONE-api
|
|
40
|
+
Requires-Dist: ONE-api<2.10.0,>=2.7.0; extra == "streaming-extractors"
|
|
41
41
|
Requires-Dist: ibllib>=2.36.0; extra == "streaming-extractors"
|
|
42
42
|
Requires-Dist: pynwb>=2.6.0; extra == "streaming-extractors"
|
|
43
43
|
Requires-Dist: fsspec; extra == "streaming-extractors"
|
|
44
44
|
Requires-Dist: aiohttp; extra == "streaming-extractors"
|
|
45
45
|
Requires-Dist: requests; extra == "streaming-extractors"
|
|
46
|
-
Requires-Dist: hdmf-zarr>=0.
|
|
46
|
+
Requires-Dist: hdmf-zarr>=0.11.0; extra == "streaming-extractors"
|
|
47
47
|
Requires-Dist: remfile; extra == "streaming-extractors"
|
|
48
48
|
Requires-Dist: s3fs; extra == "streaming-extractors"
|
|
49
49
|
Provides-Extra: preprocessing
|
|
@@ -58,6 +58,8 @@ Requires-Dist: distinctipy; extra == "full"
|
|
|
58
58
|
Requires-Dist: matplotlib>=3.6; extra == "full"
|
|
59
59
|
Requires-Dist: cuda-python; platform_system != "Darwin" and extra == "full"
|
|
60
60
|
Requires-Dist: numba; extra == "full"
|
|
61
|
+
Requires-Dist: skops; extra == "full"
|
|
62
|
+
Requires-Dist: huggingface_hub; extra == "full"
|
|
61
63
|
Provides-Extra: widgets
|
|
62
64
|
Requires-Dist: matplotlib; extra == "widgets"
|
|
63
65
|
Requires-Dist: ipympl; extra == "widgets"
|
|
@@ -92,6 +94,8 @@ Requires-Dist: tridesclous>=1.6.8; extra == "test"
|
|
|
92
94
|
Requires-Dist: pymde; extra == "test"
|
|
93
95
|
Requires-Dist: torch; extra == "test"
|
|
94
96
|
Requires-Dist: pynndescent; extra == "test"
|
|
97
|
+
Requires-Dist: skops; extra == "test"
|
|
98
|
+
Requires-Dist: huggingface_hub; extra == "test"
|
|
95
99
|
Provides-Extra: docs
|
|
96
100
|
Requires-Dist: Sphinx; extra == "docs"
|
|
97
101
|
Requires-Dist: sphinx_rtd_theme>=1.2; extra == "docs"
|
|
@@ -105,6 +109,8 @@ Requires-Dist: pandas; extra == "docs"
|
|
|
105
109
|
Requires-Dist: hdbscan>=0.8.33; extra == "docs"
|
|
106
110
|
Requires-Dist: numba; extra == "docs"
|
|
107
111
|
Requires-Dist: networkx; extra == "docs"
|
|
112
|
+
Requires-Dist: skops; extra == "docs"
|
|
113
|
+
Requires-Dist: scikit-learn; extra == "docs"
|
|
108
114
|
Requires-Dist: pooch>=1.8.2; extra == "docs"
|
|
109
115
|
Requires-Dist: datalad>=1.0.2; extra == "docs"
|
|
110
116
|
Provides-Extra: dev
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "spikeinterface"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.102.0"
|
|
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,<3.13"
|
|
11
11
|
classifiers = [
|
|
12
12
|
"Programming Language :: Python :: 3 :: Only",
|
|
13
13
|
"License :: OSI Approved :: MIT License",
|
|
@@ -20,11 +20,11 @@ classifiers = [
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
dependencies = [
|
|
23
|
-
"numpy>=1.20
|
|
23
|
+
"numpy>=1.20",
|
|
24
24
|
"threadpoolctl>=3.0.0",
|
|
25
25
|
"tqdm",
|
|
26
|
-
"zarr>=2.
|
|
27
|
-
"neo>=0.
|
|
26
|
+
"zarr>=2.18,<3",
|
|
27
|
+
"neo>=0.14.0",
|
|
28
28
|
"probeinterface>=0.2.23",
|
|
29
29
|
"packaging",
|
|
30
30
|
]
|
|
@@ -61,8 +61,8 @@ changelog = "https://spikeinterface.readthedocs.io/en/latest/whatisnew.html"
|
|
|
61
61
|
extractors = [
|
|
62
62
|
"MEArec>=1.8",
|
|
63
63
|
"pynwb>=2.6.0",
|
|
64
|
-
"hdmf-zarr>=0.
|
|
65
|
-
"pyedflib>=0.1.30",
|
|
64
|
+
"hdmf-zarr>=0.11.0",
|
|
65
|
+
"pyedflib>=0.1.30,<0.1.39",
|
|
66
66
|
"sonpy;python_version<'3.10'",
|
|
67
67
|
"lxml", # lxml for neuroscope
|
|
68
68
|
"scipy",
|
|
@@ -73,14 +73,14 @@ extractors = [
|
|
|
73
73
|
]
|
|
74
74
|
|
|
75
75
|
streaming_extractors = [
|
|
76
|
-
"ONE-api>=2.7.0", # alf sorter and streaming IBL
|
|
76
|
+
"ONE-api>=2.7.0,<2.10.0", # alf sorter and streaming IBL
|
|
77
77
|
"ibllib>=2.36.0", # streaming IBL
|
|
78
78
|
# Following dependencies are for streaming with nwb files
|
|
79
79
|
"pynwb>=2.6.0",
|
|
80
80
|
"fsspec",
|
|
81
81
|
"aiohttp",
|
|
82
82
|
"requests",
|
|
83
|
-
"hdmf-zarr>=0.
|
|
83
|
+
"hdmf-zarr>=0.11.0",
|
|
84
84
|
"remfile",
|
|
85
85
|
"s3fs"
|
|
86
86
|
]
|
|
@@ -101,6 +101,8 @@ full = [
|
|
|
101
101
|
"matplotlib>=3.6", # matplotlib.colormaps
|
|
102
102
|
"cuda-python; platform_system != 'Darwin'",
|
|
103
103
|
"numba",
|
|
104
|
+
"skops",
|
|
105
|
+
"huggingface_hub"
|
|
104
106
|
]
|
|
105
107
|
|
|
106
108
|
widgets = [
|
|
@@ -171,6 +173,10 @@ test = [
|
|
|
171
173
|
"torch",
|
|
172
174
|
"pynndescent",
|
|
173
175
|
|
|
176
|
+
# curation
|
|
177
|
+
"skops",
|
|
178
|
+
"huggingface_hub",
|
|
179
|
+
|
|
174
180
|
# for github test : probeinterface and neo from master
|
|
175
181
|
# for release we need pypi, so this need to be commented
|
|
176
182
|
# "probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
|
|
@@ -192,6 +198,8 @@ docs = [
|
|
|
192
198
|
"hdbscan>=0.8.33", # For sorters spykingcircus2 + tridesclous
|
|
193
199
|
"numba", # For many postprocessing functions
|
|
194
200
|
"networkx",
|
|
201
|
+
"skops", # For auotmated curation
|
|
202
|
+
"scikit-learn", # For auotmated curation
|
|
195
203
|
# Download data
|
|
196
204
|
"pooch>=1.8.2",
|
|
197
205
|
"datalad>=1.0.2",
|
|
@@ -11,7 +11,7 @@ import time
|
|
|
11
11
|
|
|
12
12
|
from spikeinterface.core import SortingAnalyzer
|
|
13
13
|
|
|
14
|
-
from spikeinterface import
|
|
14
|
+
from spikeinterface import load, create_sorting_analyzer, load_sorting_analyzer
|
|
15
15
|
from spikeinterface.widgets import get_some_colors
|
|
16
16
|
|
|
17
17
|
|
|
@@ -131,7 +131,7 @@ class BenchmarkStudy:
|
|
|
131
131
|
|
|
132
132
|
return cls(study_folder)
|
|
133
133
|
|
|
134
|
-
def create_benchmark(self):
|
|
134
|
+
def create_benchmark(self, key):
|
|
135
135
|
raise NotImplementedError
|
|
136
136
|
|
|
137
137
|
def scan_folder(self):
|
|
@@ -150,13 +150,13 @@ class BenchmarkStudy:
|
|
|
150
150
|
analyzer = load_sorting_analyzer(folder)
|
|
151
151
|
self.analyzers[key] = analyzer
|
|
152
152
|
# the sorting is in memory here we take the saved one because comparisons need to pickle it later
|
|
153
|
-
sorting =
|
|
153
|
+
sorting = load(analyzer.folder / "sorting")
|
|
154
154
|
self.datasets[key] = analyzer.recording, sorting
|
|
155
155
|
|
|
156
156
|
# for rec_file in (self.folder / "datasets" / "recordings").glob("*.pickle"):
|
|
157
157
|
# key = rec_file.stem
|
|
158
|
-
# rec =
|
|
159
|
-
# gt_sorting =
|
|
158
|
+
# rec = load(rec_file)
|
|
159
|
+
# gt_sorting = load(self.folder / f"datasets" / "gt_sortings" / key)
|
|
160
160
|
# self.datasets[key] = (rec, gt_sorting)
|
|
161
161
|
|
|
162
162
|
with open(self.folder / "cases.pickle", "rb") as f:
|
|
@@ -208,10 +208,11 @@ class BenchmarkStudy:
|
|
|
208
208
|
for key in case_keys:
|
|
209
209
|
|
|
210
210
|
result_folder = self.folder / "results" / self.key_to_str(key)
|
|
211
|
+
sorter_folder = self.folder / "sorters" / self.key_to_str(key)
|
|
211
212
|
|
|
212
213
|
if keep and result_folder.exists():
|
|
213
214
|
continue
|
|
214
|
-
elif not keep and result_folder.exists():
|
|
215
|
+
elif not keep and (result_folder.exists() or sorter_folder.exists()):
|
|
215
216
|
self.remove_benchmark(key)
|
|
216
217
|
job_keys.append(key)
|
|
217
218
|
|
|
@@ -258,25 +259,9 @@ class BenchmarkStudy:
|
|
|
258
259
|
return df
|
|
259
260
|
|
|
260
261
|
def plot_run_times(self, case_keys=None):
|
|
261
|
-
|
|
262
|
-
case_keys = list(self.cases.keys())
|
|
263
|
-
run_times = self.get_run_times(case_keys=case_keys)
|
|
264
|
-
|
|
265
|
-
colors = self.get_colors()
|
|
266
|
-
import matplotlib.pyplot as plt
|
|
262
|
+
from .benchmark_plot_tools import plot_run_times
|
|
267
263
|
|
|
268
|
-
|
|
269
|
-
labels = []
|
|
270
|
-
for i, key in enumerate(case_keys):
|
|
271
|
-
labels.append(self.cases[key]["label"])
|
|
272
|
-
rt = run_times.at[key, "run_times"]
|
|
273
|
-
ax.bar(i, rt, width=0.8, color=colors[key])
|
|
274
|
-
ax.set_xticks(np.arange(len(case_keys)))
|
|
275
|
-
ax.set_xticklabels(labels, rotation=45.0)
|
|
276
|
-
return fig
|
|
277
|
-
|
|
278
|
-
# ax = run_times.plot(kind="bar")
|
|
279
|
-
# return ax.figure
|
|
264
|
+
return plot_run_times(self, case_keys=case_keys)
|
|
280
265
|
|
|
281
266
|
def compute_results(self, case_keys=None, verbose=False, **result_params):
|
|
282
267
|
if case_keys is None:
|
|
@@ -443,9 +428,9 @@ class Benchmark:
|
|
|
443
428
|
elif format == "sorting":
|
|
444
429
|
from spikeinterface.core import load_extractor
|
|
445
430
|
|
|
446
|
-
result[k] =
|
|
431
|
+
result[k] = load(folder / k)
|
|
447
432
|
elif format == "Motion":
|
|
448
|
-
from spikeinterface.
|
|
433
|
+
from spikeinterface.core.motion import Motion
|
|
449
434
|
|
|
450
435
|
result[k] = Motion.load(folder / k)
|
|
451
436
|
elif format == "zarr_templates":
|
|
@@ -462,10 +447,3 @@ class Benchmark:
|
|
|
462
447
|
def compute_result(self):
|
|
463
448
|
# run becnhmark result
|
|
464
449
|
raise NotImplementedError
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
def _simpleaxis(ax):
|
|
468
|
-
ax.spines["top"].set_visible(False)
|
|
469
|
-
ax.spines["right"].set_visible(False)
|
|
470
|
-
ax.get_xaxis().tick_bottom()
|
|
471
|
-
ax.get_yaxis().tick_left()
|
|
@@ -11,8 +11,7 @@ from spikeinterface.widgets import (
|
|
|
11
11
|
|
|
12
12
|
import numpy as np
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
from .benchmark_tools import BenchmarkStudy, Benchmark
|
|
14
|
+
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
16
15
|
from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
|
|
17
16
|
from spikeinterface.core.template_tools import get_template_extremum_channel
|
|
18
17
|
|
|
@@ -161,49 +160,21 @@ class ClusteringStudy(BenchmarkStudy):
|
|
|
161
160
|
|
|
162
161
|
return count_units
|
|
163
162
|
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
# plotting by methods
|
|
164
|
+
def plot_unit_counts(self, **kwargs):
|
|
165
|
+
from .benchmark_plot_tools import plot_unit_counts
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
return plot_unit_counts(self, **kwargs)
|
|
168
168
|
|
|
169
|
-
def
|
|
170
|
-
|
|
171
|
-
case_keys = list(self.cases.keys())
|
|
172
|
-
import pylab as plt
|
|
169
|
+
def plot_agreement_matrix(self, **kwargs):
|
|
170
|
+
from .benchmark_plot_tools import plot_agreement_matrix
|
|
173
171
|
|
|
174
|
-
|
|
172
|
+
return plot_agreement_matrix(self, **kwargs)
|
|
175
173
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
ax.set_title(self.cases[key]["label"])
|
|
179
|
-
plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax)
|
|
174
|
+
def plot_performances_vs_snr(self, **kwargs):
|
|
175
|
+
from .benchmark_plot_tools import plot_performances_vs_snr
|
|
180
176
|
|
|
181
|
-
return
|
|
182
|
-
|
|
183
|
-
def plot_performances_vs_snr(self, case_keys=None, figsize=(15, 15)):
|
|
184
|
-
if case_keys is None:
|
|
185
|
-
case_keys = list(self.cases.keys())
|
|
186
|
-
import pylab as plt
|
|
187
|
-
|
|
188
|
-
fig, axes = plt.subplots(ncols=1, nrows=3, figsize=figsize)
|
|
189
|
-
|
|
190
|
-
for count, k in enumerate(("accuracy", "recall", "precision")):
|
|
191
|
-
|
|
192
|
-
ax = axes[count]
|
|
193
|
-
for key in case_keys:
|
|
194
|
-
label = self.cases[key]["label"]
|
|
195
|
-
|
|
196
|
-
analyzer = self.get_sorting_analyzer(key)
|
|
197
|
-
metrics = analyzer.get_extension("quality_metrics").get_data()
|
|
198
|
-
x = metrics["snr"].values
|
|
199
|
-
y = self.get_result(key)["gt_comparison"].get_performance()[k].values
|
|
200
|
-
ax.scatter(x, y, marker=".", label=label)
|
|
201
|
-
ax.set_title(k)
|
|
202
|
-
|
|
203
|
-
if count == 2:
|
|
204
|
-
ax.legend()
|
|
205
|
-
|
|
206
|
-
return fig
|
|
177
|
+
return plot_performances_vs_snr(self, **kwargs)
|
|
207
178
|
|
|
208
179
|
def plot_error_metrics(self, metric="cosine", case_keys=None, figsize=(15, 5)):
|
|
209
180
|
|
|
@@ -9,11 +9,8 @@ from spikeinterface.widgets import (
|
|
|
9
9
|
)
|
|
10
10
|
|
|
11
11
|
import numpy as np
|
|
12
|
-
from
|
|
12
|
+
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
13
13
|
from spikeinterface.core.basesorting import minimum_spike_dtype
|
|
14
|
-
from spikeinterface.sortingcomponents.tools import remove_empty_templates
|
|
15
|
-
from spikeinterface.core.recording_tools import get_noise_levels
|
|
16
|
-
from spikeinterface.core.sparsity import compute_sparsity
|
|
17
14
|
|
|
18
15
|
|
|
19
16
|
class MatchingBenchmark(Benchmark):
|
|
@@ -36,7 +33,7 @@ class MatchingBenchmark(Benchmark):
|
|
|
36
33
|
sorting["unit_index"] = spikes["cluster_index"]
|
|
37
34
|
sorting["segment_index"] = spikes["segment_index"]
|
|
38
35
|
sorting = NumpySorting(sorting, self.recording.sampling_frequency, unit_ids)
|
|
39
|
-
self.result = {"sorting": sorting}
|
|
36
|
+
self.result = {"sorting": sorting, "spikes": spikes}
|
|
40
37
|
self.result["templates"] = self.templates
|
|
41
38
|
|
|
42
39
|
def compute_result(self, with_collision=False, **result_params):
|
|
@@ -48,6 +45,7 @@ class MatchingBenchmark(Benchmark):
|
|
|
48
45
|
|
|
49
46
|
_run_key_saved = [
|
|
50
47
|
("sorting", "sorting"),
|
|
48
|
+
("spikes", "npy"),
|
|
51
49
|
("templates", "zarr_templates"),
|
|
52
50
|
]
|
|
53
51
|
_result_key_saved = [("gt_collision", "pickle"), ("gt_comparison", "pickle")]
|
|
@@ -64,45 +62,25 @@ class MatchingStudy(BenchmarkStudy):
|
|
|
64
62
|
benchmark = MatchingBenchmark(recording, gt_sorting, params)
|
|
65
63
|
return benchmark
|
|
66
64
|
|
|
67
|
-
def
|
|
68
|
-
|
|
69
|
-
case_keys = list(self.cases.keys())
|
|
70
|
-
import pylab as plt
|
|
71
|
-
|
|
72
|
-
fig, axs = plt.subplots(ncols=len(case_keys), nrows=1, figsize=figsize, squeeze=False)
|
|
73
|
-
|
|
74
|
-
for count, key in enumerate(case_keys):
|
|
75
|
-
ax = axs[0, count]
|
|
76
|
-
ax.set_title(self.cases[key]["label"])
|
|
77
|
-
plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax)
|
|
78
|
-
|
|
79
|
-
def plot_performances_vs_snr(self, case_keys=None, figsize=None, metrics=["accuracy", "recall", "precision"]):
|
|
80
|
-
if case_keys is None:
|
|
81
|
-
case_keys = list(self.cases.keys())
|
|
65
|
+
def plot_agreement_matrix(self, **kwargs):
|
|
66
|
+
from .benchmark_plot_tools import plot_agreement_matrix
|
|
82
67
|
|
|
83
|
-
|
|
68
|
+
return plot_agreement_matrix(self, **kwargs)
|
|
84
69
|
|
|
85
|
-
|
|
70
|
+
def plot_performances_vs_snr(self, **kwargs):
|
|
71
|
+
from .benchmark_plot_tools import plot_performances_vs_snr
|
|
86
72
|
|
|
87
|
-
|
|
88
|
-
for key in case_keys:
|
|
89
|
-
label = self.cases[key]["label"]
|
|
73
|
+
return plot_performances_vs_snr(self, **kwargs)
|
|
90
74
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
x = metrics["snr"].values
|
|
94
|
-
y = self.get_result(key)["gt_comparison"].get_performance()[k].values
|
|
95
|
-
ax.scatter(x, y, marker=".", label=label)
|
|
96
|
-
ax.set_title(k)
|
|
75
|
+
def plot_performances_comparison(self, **kwargs):
|
|
76
|
+
from .benchmark_plot_tools import plot_performances_comparison
|
|
97
77
|
|
|
98
|
-
|
|
99
|
-
ax.legend()
|
|
100
|
-
|
|
101
|
-
return fig
|
|
78
|
+
return plot_performances_comparison(self, **kwargs)
|
|
102
79
|
|
|
103
80
|
def plot_collisions(self, case_keys=None, figsize=None):
|
|
104
81
|
if case_keys is None:
|
|
105
82
|
case_keys = list(self.cases.keys())
|
|
83
|
+
import matplotlib.pyplot as plt
|
|
106
84
|
|
|
107
85
|
fig, axs = plt.subplots(ncols=len(case_keys), nrows=1, figsize=figsize, squeeze=False)
|
|
108
86
|
|
|
@@ -119,70 +97,6 @@ class MatchingStudy(BenchmarkStudy):
|
|
|
119
97
|
|
|
120
98
|
return fig
|
|
121
99
|
|
|
122
|
-
def plot_comparison_matching(
|
|
123
|
-
self,
|
|
124
|
-
case_keys=None,
|
|
125
|
-
performance_names=["accuracy", "recall", "precision"],
|
|
126
|
-
colors=["g", "b", "r"],
|
|
127
|
-
ylim=(-0.1, 1.1),
|
|
128
|
-
figsize=None,
|
|
129
|
-
):
|
|
130
|
-
|
|
131
|
-
if case_keys is None:
|
|
132
|
-
case_keys = list(self.cases.keys())
|
|
133
|
-
|
|
134
|
-
num_methods = len(case_keys)
|
|
135
|
-
import pylab as plt
|
|
136
|
-
|
|
137
|
-
fig, axs = plt.subplots(ncols=num_methods, nrows=num_methods, figsize=(10, 10))
|
|
138
|
-
for i, key1 in enumerate(case_keys):
|
|
139
|
-
for j, key2 in enumerate(case_keys):
|
|
140
|
-
if len(axs.shape) > 1:
|
|
141
|
-
ax = axs[i, j]
|
|
142
|
-
else:
|
|
143
|
-
ax = axs[j]
|
|
144
|
-
comp1 = self.get_result(key1)["gt_comparison"]
|
|
145
|
-
comp2 = self.get_result(key2)["gt_comparison"]
|
|
146
|
-
if i <= j:
|
|
147
|
-
for performance, color in zip(performance_names, colors):
|
|
148
|
-
perf1 = comp1.get_performance()[performance]
|
|
149
|
-
perf2 = comp2.get_performance()[performance]
|
|
150
|
-
ax.plot(perf2, perf1, ".", label=performance, color=color)
|
|
151
|
-
|
|
152
|
-
ax.plot([0, 1], [0, 1], "k--", alpha=0.5)
|
|
153
|
-
ax.set_ylim(ylim)
|
|
154
|
-
ax.set_xlim(ylim)
|
|
155
|
-
ax.spines[["right", "top"]].set_visible(False)
|
|
156
|
-
ax.set_aspect("equal")
|
|
157
|
-
|
|
158
|
-
label1 = self.cases[key1]["label"]
|
|
159
|
-
label2 = self.cases[key2]["label"]
|
|
160
|
-
if j == i:
|
|
161
|
-
ax.set_ylabel(f"{label1}")
|
|
162
|
-
else:
|
|
163
|
-
ax.set_yticks([])
|
|
164
|
-
if i == j:
|
|
165
|
-
ax.set_xlabel(f"{label2}")
|
|
166
|
-
else:
|
|
167
|
-
ax.set_xticks([])
|
|
168
|
-
if i == num_methods - 1 and j == num_methods - 1:
|
|
169
|
-
patches = []
|
|
170
|
-
import matplotlib.patches as mpatches
|
|
171
|
-
|
|
172
|
-
for color, name in zip(colors, performance_names):
|
|
173
|
-
patches.append(mpatches.Patch(color=color, label=name))
|
|
174
|
-
ax.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0.0)
|
|
175
|
-
else:
|
|
176
|
-
ax.spines["bottom"].set_visible(False)
|
|
177
|
-
ax.spines["left"].set_visible(False)
|
|
178
|
-
ax.spines["top"].set_visible(False)
|
|
179
|
-
ax.spines["right"].set_visible(False)
|
|
180
|
-
ax.set_xticks([])
|
|
181
|
-
ax.set_yticks([])
|
|
182
|
-
plt.tight_layout(h_pad=0, w_pad=0)
|
|
183
|
-
|
|
184
|
-
return fig
|
|
185
|
-
|
|
186
100
|
def get_count_units(self, case_keys=None, well_detected_score=None, redundant_score=None, overmerged_score=None):
|
|
187
101
|
import pandas as pd
|
|
188
102
|
|
|
@@ -225,6 +139,7 @@ class MatchingStudy(BenchmarkStudy):
|
|
|
225
139
|
plot_study_unit_counts(self, case_keys, figsize=figsize)
|
|
226
140
|
|
|
227
141
|
def plot_unit_losses(self, before, after, metric=["precision"], figsize=None):
|
|
142
|
+
import matplotlib.pyplot as plt
|
|
228
143
|
|
|
229
144
|
fig, axs = plt.subplots(ncols=1, nrows=len(metric), figsize=figsize, squeeze=False)
|
|
230
145
|
|
|
@@ -8,14 +8,15 @@ import time
|
|
|
8
8
|
import numpy as np
|
|
9
9
|
|
|
10
10
|
from spikeinterface.core import get_noise_levels
|
|
11
|
-
from spikeinterface.
|
|
11
|
+
from spikeinterface.core.motion import Motion
|
|
12
12
|
from spikeinterface.sortingcomponents.motion import estimate_motion
|
|
13
13
|
from spikeinterface.sortingcomponents.peak_detection import detect_peaks
|
|
14
14
|
from spikeinterface.sortingcomponents.peak_selection import select_peaks
|
|
15
15
|
from spikeinterface.sortingcomponents.peak_localization import localize_peaks
|
|
16
16
|
from spikeinterface.widgets import plot_probe_map
|
|
17
17
|
|
|
18
|
-
from
|
|
18
|
+
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
19
|
+
from .benchmark_plot_tools import _simpleaxis
|
|
19
20
|
|
|
20
21
|
# import MEArec as mr
|
|
21
22
|
|
|
@@ -108,6 +109,8 @@ class MotionEstimationBenchmark(Benchmark):
|
|
|
108
109
|
estimate_motion=t4 - t3,
|
|
109
110
|
)
|
|
110
111
|
|
|
112
|
+
self.result["peaks"] = peaks
|
|
113
|
+
self.result["peak_locations"] = peak_locations
|
|
111
114
|
self.result["step_run_times"] = step_run_times
|
|
112
115
|
self.result["raw_motion"] = motion
|
|
113
116
|
|
|
@@ -130,6 +133,8 @@ class MotionEstimationBenchmark(Benchmark):
|
|
|
130
133
|
self.result["motion"] = motion
|
|
131
134
|
|
|
132
135
|
_run_key_saved = [
|
|
136
|
+
("peaks", "npy"),
|
|
137
|
+
("peak_locations", "npy"),
|
|
133
138
|
("raw_motion", "Motion"),
|
|
134
139
|
("step_run_times", "pickle"),
|
|
135
140
|
]
|
|
@@ -160,7 +165,9 @@ class MotionEstimationStudy(BenchmarkStudy):
|
|
|
160
165
|
def plot_true_drift(self, case_keys=None, scaling_probe=1.5, figsize=(8, 6)):
|
|
161
166
|
self.plot_drift(case_keys=case_keys, tested_drift=False, scaling_probe=scaling_probe, figsize=figsize)
|
|
162
167
|
|
|
163
|
-
def plot_drift(
|
|
168
|
+
def plot_drift(
|
|
169
|
+
self, case_keys=None, gt_drift=True, tested_drift=True, raster=False, scaling_probe=1.0, figsize=(8, 6)
|
|
170
|
+
):
|
|
164
171
|
import matplotlib.pyplot as plt
|
|
165
172
|
|
|
166
173
|
if case_keys is None:
|
|
@@ -194,6 +201,13 @@ class MotionEstimationStudy(BenchmarkStudy):
|
|
|
194
201
|
|
|
195
202
|
# for i in range(self.gt_unit_positions.shape[1]):
|
|
196
203
|
# ax.plot(temporal_bins_s, self.gt_unit_positions[:, i], alpha=0.5, ls="--", c="0.5")
|
|
204
|
+
if raster:
|
|
205
|
+
peaks = bench.result["peaks"]
|
|
206
|
+
peak_locations = bench.result["peak_locations"]
|
|
207
|
+
rec = bench.recording
|
|
208
|
+
x = peaks["sample_index"] / rec.sampling_frequency
|
|
209
|
+
y = peak_locations[bench.direction]
|
|
210
|
+
ax.scatter(x, y, alpha=0.2, s=2, c=np.abs(peaks["amplitude"]), cmap="inferno")
|
|
197
211
|
|
|
198
212
|
for i in range(gt_motion.displacement[0].shape[1]):
|
|
199
213
|
depth = motion.spatial_bins_um[i]
|
|
@@ -10,7 +10,7 @@ from spikeinterface.sortingcomponents.motion.motion_interpolation import Interpo
|
|
|
10
10
|
from spikeinterface.curation import MergeUnitsSorting
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
from
|
|
13
|
+
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class MotionInterpolationBenchmark(Benchmark):
|
|
@@ -12,10 +12,9 @@ from spikeinterface.core import get_noise_levels
|
|
|
12
12
|
|
|
13
13
|
import numpy as np
|
|
14
14
|
|
|
15
|
-
from
|
|
15
|
+
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
16
16
|
from spikeinterface.core.basesorting import minimum_spike_dtype
|
|
17
17
|
from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
|
|
18
|
-
from spikeinterface.core.template_tools import get_template_extremum_channel
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
class PeakDetectionBenchmark(Benchmark):
|
|
@@ -6,7 +6,7 @@ from spikeinterface.postprocessing.localization_tools import (
|
|
|
6
6
|
compute_grid_convolution,
|
|
7
7
|
)
|
|
8
8
|
import numpy as np
|
|
9
|
-
from
|
|
9
|
+
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
10
10
|
from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
|
|
11
11
|
|
|
12
12
|
|
|
@@ -6,15 +6,9 @@ from spikeinterface.comparison import GroundTruthComparison
|
|
|
6
6
|
from spikeinterface.comparison.comparisontools import make_matching_events
|
|
7
7
|
from spikeinterface.core import get_noise_levels
|
|
8
8
|
|
|
9
|
-
import time
|
|
10
|
-
import string, random
|
|
11
|
-
import pylab as plt
|
|
12
|
-
import os
|
|
13
9
|
import numpy as np
|
|
14
10
|
|
|
15
|
-
from
|
|
16
|
-
from spikeinterface.core.basesorting import minimum_spike_dtype
|
|
17
|
-
from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
|
|
11
|
+
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
18
12
|
|
|
19
13
|
|
|
20
14
|
class PeakSelectionBenchmark(Benchmark):
|