spikeinterface 0.102.2__tar.gz → 0.102.3__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.102.2/src/spikeinterface.egg-info → spikeinterface-0.102.3}/PKG-INFO +4 -4
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/pyproject.toml +6 -7
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_base.py +66 -7
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_clustering.py +7 -2
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_matching.py +7 -38
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_peak_detection.py +66 -42
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_plot_tools.py +259 -118
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_sorter.py +2 -64
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/analyzer_extension_core.py +6 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/base.py +0 -4
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/baserecording.py +1 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/baserecordingsnippets.py +0 -2
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/basesorting.py +27 -51
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/binaryrecordingextractor.py +21 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/channelsaggregationrecording.py +10 -10
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/sortinganalyzer.py +1 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/zarrextractors.py +0 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/curation_tools.py +2 -2
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/exporters/__init__.py +1 -0
- spikeinterface-0.102.3/src/spikeinterface/exporters/to_ibl.py +311 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/exporters/to_phy.py +1 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/extractorlist.py +2 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/iblextractors.py +7 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/biocam.py +15 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/blackrock.py +11 -7
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neobaseextractor.py +3 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/openephys.py +128 -93
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/spikeglx.py +5 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neuropixels_utils.py +5 -5
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/tridesclousextractors.py +0 -1
- spikeinterface-0.102.3/src/spikeinterface/extractors/whitematterrecordingextractor.py +72 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/principal_component.py +2 -2
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/spike_amplitudes.py +0 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/template_metrics.py +0 -2
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/__init__.py +8 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/motion.py +261 -110
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/preprocessinglist.py +1 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/scale.py +0 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/misc_metrics.py +13 -7
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort4.py +78 -16
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/waveclus.py +4 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/spyking_circus2.py +165 -148
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/runsorter.py +0 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/__init__.py +1 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/misc.py +13 -18
- spikeinterface-0.102.3/src/spikeinterface/sortingcomponents/clustering/circus.py +245 -0
- spikeinterface-0.102.3/src/spikeinterface/sortingcomponents/clustering/graph_clustering.py +205 -0
- spikeinterface-0.102.3/src/spikeinterface/sortingcomponents/clustering/graph_tools.py +229 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/method_list.py +2 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/peak_svd.py +16 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/split.py +55 -13
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/tools.py +164 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/circus.py +11 -6
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/tdc.py +8 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/motion_interpolation.py +5 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/motion.py +3 -1
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/traces.py +9 -12
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_locations.py +29 -8
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_waveforms.py +16 -3
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/widget_list.py +5 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3/src/spikeinterface.egg-info}/PKG-INFO +4 -4
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface.egg-info/SOURCES.txt +4 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface.egg-info/requires.txt +4 -3
- spikeinterface-0.102.2/src/spikeinterface/sortingcomponents/clustering/circus.py +0 -317
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/LICENSE +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/README.md +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/setup.cfg +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/setup.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_merging.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_motion_estimation.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_motion_interpolation.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_peak_localization.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_peak_selection.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/basecomparison.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/collision.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/comparisontools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/correlogram.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/groundtruthstudy.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/hybrid.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/multicomparisons.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/paircomparisons.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/baseevent.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/basesnippets.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/binaryfolder.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/channelslice.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/core_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/datasets.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/frameslicerecording.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/frameslicesorting.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/generate.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/globals.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/job_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/loading.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/motion.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/node_pipeline.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/npyfoldersnippets.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/npysnippetsextractor.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/npzfolder.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/npzsortingextractor.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/numpyextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/old_api_utils.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/recording_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/segmentutils.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/snippets_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/sorting_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/sortingfolder.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/sparsity.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/template.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/template_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/testing.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/testing_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/unitsaggregationsorting.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/unitsselectionsorting.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/waveform_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/waveforms_extractor_backwards_compatibility.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/zarrrecordingextractor.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/auto_merge.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/curation_format.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/curationsorting.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/mergeunitssorting.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/model_based_curation.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/remove_duplicated_spikes.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/remove_excess_spikes.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/remove_redundant.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/sortingview_curation.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/splitunitsorting.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/train_manual_curation.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/exporters/report.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/alfsortingextractor.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/bids.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/cbin_ibl.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/cellexplorersortingextractor.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/combinatoextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/hdsortextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/herdingspikesextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/klustaextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/matlabhelpers.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/mclustextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/mcsh5extractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/mdaextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/alphaomega.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/axona.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/ced.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/edf.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/intan.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/maxwell.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/mcsraw.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/mearec.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neo_utils.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neuralynx.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neuroexplorer.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neuronexus.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neuroscope.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/nix.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/plexon.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/plexon2.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/spike2.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/spikegadgets.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/tdt.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/nwbextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/phykilosortextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/shybridextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/sinapsrecordingextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/spykingcircusextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/toy_example.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/waveclussnippetstextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/waveclustextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/yassextractors.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/full.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/drift_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/drifting_generator.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/hybrid_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/noise_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/splitting_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/template_database.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/alignsorting.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/amplitude_scalings.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/correlograms.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/isi.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/localization_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/noise_level.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/spike_locations.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/template_similarity.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/unit_locations.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/align_snippets.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/astype.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/average_across_direction.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/basepreprocessor.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/clip.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/common_reference.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/correct_lsb.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/decimate.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/deepinterpolation.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/generators.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/tf_utils.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/train.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/depth_order.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/detect_bad_channels.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/directional_derivative.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/filter.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/filter_gaussian.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/filter_opencl.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/highpass_spatial_filter.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/interpolate_bad_channels.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/normalize_scale.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/phase_shift.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/preprocessing_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/rectify.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/remove_artifacts.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/resample.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/silence_periods.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/unsigned_to_signed.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/whiten.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/zero_channel_pad.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/pca_metrics.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/quality_metric_calculator.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/quality_metric_list.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/utils.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/basesorter.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/container_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/combinato.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/hdsort.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/hdsort_master.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/herdingspikes.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/ironclust.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort2.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort2_5.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort2_5_master.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort2_master.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort3.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort3_master.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort_master.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosortbase.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/klusta.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/klusta_config_default.prm +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/mountainsort4.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/mountainsort5.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/pykilosort.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/sc_config_default.params +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/spyking_circus.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/tridesclous.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/waveclus_master.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/waveclus_snippets.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/waveclus_snippets_master.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/yass.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/yass_config_default.yaml +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/si_based.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/simplesorter.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/tridesclous2.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/launcher.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/sorterlist.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/constructNPYheader.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/shellscript.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/writeNPY.m +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/clean.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/clustering_tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/dummy.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/isocut5.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/main.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/merge.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/position.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/position_and_features.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/position_and_pca.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/position_ptp_scaled.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/random_projections.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/sliding_hdbscan.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/sliding_nn.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/tdc.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/triage.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/features_from_peaks.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/base.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/main.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/method_list.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/naive.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/wobble.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/decentralized.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/dredge.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/iterative_template.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/medicine.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/motion_cleaner.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/motion_estimation.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/motion_utils.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/peak_detection.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/peak_localization.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/peak_pipeline.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/peak_selection.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/tools.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/hanning_filter.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/neural_network_denoiser.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/savgol_denoiser.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/temporal_pca.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/waveform_thresholder.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/waveform_utils.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/__init__.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/all_amplitudes_distributions.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/amplitudes.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/autocorrelograms.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/base.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/collision.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/comparison.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/crosscorrelograms.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/gtstudy.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/isi_distribution.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/metrics.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/multicomparison.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/peak_activity.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/peaks_on_probe.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/potential_merges.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/probe_map.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/quality_metrics.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/rasters.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/sorting_summary.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/spike_locations.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/spike_locations_by_time.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/spikes_on_traces.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/template_metrics.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/template_similarity.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_depths.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_presence.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_probe_map.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_summary.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_templates.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_waveforms_density_map.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/utils.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/utils_ipywidgets.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/utils_matplotlib.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/utils_sortingview.py +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface.egg-info/dependency_links.txt +0 -0
- {spikeinterface-0.102.2 → spikeinterface-0.102.3}/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.102.
|
|
3
|
+
Version: 0.102.3
|
|
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
|
|
@@ -22,14 +22,15 @@ 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.
|
|
25
|
+
Requires-Dist: neo>=0.14.1
|
|
26
26
|
Requires-Dist: probeinterface>=0.2.23
|
|
27
27
|
Requires-Dist: packaging
|
|
28
|
+
Requires-Dist: numcodecs<0.16.0
|
|
28
29
|
Provides-Extra: extractors
|
|
29
30
|
Requires-Dist: MEArec>=1.8; extra == "extractors"
|
|
30
31
|
Requires-Dist: pynwb>=2.6.0; extra == "extractors"
|
|
31
32
|
Requires-Dist: hdmf-zarr>=0.11.0; extra == "extractors"
|
|
32
|
-
Requires-Dist: pyedflib
|
|
33
|
+
Requires-Dist: pyedflib>=0.1.30; extra == "extractors"
|
|
33
34
|
Requires-Dist: sonpy; python_version < "3.10" and extra == "extractors"
|
|
34
35
|
Requires-Dist: lxml; extra == "extractors"
|
|
35
36
|
Requires-Dist: scipy; extra == "extractors"
|
|
@@ -84,7 +85,6 @@ Requires-Dist: pytest; extra == "test"
|
|
|
84
85
|
Requires-Dist: pytest-dependency; extra == "test"
|
|
85
86
|
Requires-Dist: pytest-cov; extra == "test"
|
|
86
87
|
Requires-Dist: psutil; extra == "test"
|
|
87
|
-
Requires-Dist: huggingface_hub; extra == "test"
|
|
88
88
|
Requires-Dist: ibllib; extra == "test"
|
|
89
89
|
Requires-Dist: s3fs; extra == "test"
|
|
90
90
|
Requires-Dist: numba<0.61.0; python_version < "3.13" and extra == "test"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "spikeinterface"
|
|
3
|
-
version = "0.102.
|
|
3
|
+
version = "0.102.3"
|
|
4
4
|
authors = [
|
|
5
5
|
{ name="Alessio Buccino", email="alessiop.buccino@gmail.com" },
|
|
6
6
|
{ name="Samuel Garcia", email="sam.garcia.die@gmail.com" },
|
|
@@ -25,9 +25,10 @@ dependencies = [
|
|
|
25
25
|
"threadpoolctl>=3.0.0",
|
|
26
26
|
"tqdm",
|
|
27
27
|
"zarr>=2.18,<3",
|
|
28
|
-
"neo>=0.14.
|
|
28
|
+
"neo>=0.14.1",
|
|
29
29
|
"probeinterface>=0.2.23",
|
|
30
30
|
"packaging",
|
|
31
|
+
"numcodecs<0.16.0", # For supporting zarr < 3
|
|
31
32
|
]
|
|
32
33
|
|
|
33
34
|
[build-system]
|
|
@@ -63,7 +64,7 @@ extractors = [
|
|
|
63
64
|
"MEArec>=1.8",
|
|
64
65
|
"pynwb>=2.6.0",
|
|
65
66
|
"hdmf-zarr>=0.11.0",
|
|
66
|
-
"pyedflib>=0.1.30
|
|
67
|
+
"pyedflib>=0.1.30",
|
|
67
68
|
"sonpy;python_version<'3.10'",
|
|
68
69
|
"lxml", # lxml for neuroscope
|
|
69
70
|
"scipy",
|
|
@@ -150,8 +151,6 @@ test = [
|
|
|
150
151
|
"pytest-cov",
|
|
151
152
|
"psutil",
|
|
152
153
|
|
|
153
|
-
"huggingface_hub",
|
|
154
|
-
|
|
155
154
|
# preprocessing
|
|
156
155
|
"ibllib", # for IBL
|
|
157
156
|
|
|
@@ -194,8 +193,8 @@ docs = [
|
|
|
194
193
|
"hdbscan>=0.8.33", # For sorters spykingcircus2 + tridesclous
|
|
195
194
|
"numba", # For many postprocessing functions
|
|
196
195
|
"networkx",
|
|
197
|
-
"skops", # For
|
|
198
|
-
"scikit-learn", # For
|
|
196
|
+
"skops", # For automated curation
|
|
197
|
+
"scikit-learn", # For automated curation
|
|
199
198
|
# Download data
|
|
200
199
|
"pooch>=1.8.2",
|
|
201
200
|
"datalad>=1.0.2",
|
{spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_base.py
RENAMED
|
@@ -176,18 +176,12 @@ class BenchmarkStudy:
|
|
|
176
176
|
self.levels = self.info["levels"]
|
|
177
177
|
|
|
178
178
|
for key, folder in self.analyzers_path.items():
|
|
179
|
-
analyzer = load_sorting_analyzer(folder)
|
|
179
|
+
analyzer = load_sorting_analyzer(folder, load_extensions=False)
|
|
180
180
|
self.analyzers[key] = analyzer
|
|
181
181
|
# the sorting is in memory here we take the saved one because comparisons need to pickle it later
|
|
182
182
|
sorting = load(analyzer.folder / "sorting")
|
|
183
183
|
self.datasets[key] = analyzer.recording, sorting
|
|
184
184
|
|
|
185
|
-
# for rec_file in (self.folder / "datasets" / "recordings").glob("*.pickle"):
|
|
186
|
-
# key = rec_file.stem
|
|
187
|
-
# rec = load(rec_file)
|
|
188
|
-
# gt_sorting = load(self.folder / f"datasets" / "gt_sortings" / key)
|
|
189
|
-
# self.datasets[key] = (rec, gt_sorting)
|
|
190
|
-
|
|
191
185
|
with open(self.folder / "cases.pickle", "rb") as f:
|
|
192
186
|
self.cases = pickle.load(f)
|
|
193
187
|
|
|
@@ -619,3 +613,68 @@ class Benchmark:
|
|
|
619
613
|
def compute_result(self):
|
|
620
614
|
# run becnhmark result
|
|
621
615
|
raise NotImplementedError
|
|
616
|
+
|
|
617
|
+
|
|
618
|
+
# Common feature accross some benchmark : sorter + matching
|
|
619
|
+
class MixinStudyUnitCount:
|
|
620
|
+
def get_count_units(self, case_keys=None, well_detected_score=None, redundant_score=None, overmerged_score=None):
|
|
621
|
+
import pandas as pd
|
|
622
|
+
|
|
623
|
+
if case_keys is None:
|
|
624
|
+
case_keys = list(self.cases.keys())
|
|
625
|
+
|
|
626
|
+
if isinstance(case_keys[0], str):
|
|
627
|
+
index = pd.Index(case_keys, name=self.levels)
|
|
628
|
+
else:
|
|
629
|
+
index = pd.MultiIndex.from_tuples(case_keys, names=self.levels)
|
|
630
|
+
|
|
631
|
+
columns = ["num_gt", "num_sorter", "num_well_detected"]
|
|
632
|
+
key0 = case_keys[0]
|
|
633
|
+
comp = self.get_result(key0)["gt_comparison"]
|
|
634
|
+
if comp.exhaustive_gt:
|
|
635
|
+
columns.extend(["num_false_positive", "num_redundant", "num_overmerged", "num_bad"])
|
|
636
|
+
count_units = pd.DataFrame(index=index, columns=columns, dtype=int)
|
|
637
|
+
|
|
638
|
+
for key in case_keys:
|
|
639
|
+
comp = self.get_result(key)["gt_comparison"]
|
|
640
|
+
|
|
641
|
+
gt_sorting = comp.sorting1
|
|
642
|
+
sorting = comp.sorting2
|
|
643
|
+
|
|
644
|
+
count_units.loc[key, "num_gt"] = len(gt_sorting.get_unit_ids())
|
|
645
|
+
count_units.loc[key, "num_sorter"] = len(sorting.get_unit_ids())
|
|
646
|
+
count_units.loc[key, "num_well_detected"] = comp.count_well_detected_units(well_detected_score)
|
|
647
|
+
|
|
648
|
+
if comp.exhaustive_gt:
|
|
649
|
+
count_units.loc[key, "num_redundant"] = comp.count_redundant_units(redundant_score)
|
|
650
|
+
count_units.loc[key, "num_overmerged"] = comp.count_overmerged_units(overmerged_score)
|
|
651
|
+
count_units.loc[key, "num_false_positive"] = comp.count_false_positive_units(redundant_score)
|
|
652
|
+
count_units.loc[key, "num_bad"] = comp.count_bad_units()
|
|
653
|
+
|
|
654
|
+
return count_units
|
|
655
|
+
|
|
656
|
+
def get_performance_by_unit(self, case_keys=None):
|
|
657
|
+
import pandas as pd
|
|
658
|
+
|
|
659
|
+
if case_keys is None:
|
|
660
|
+
case_keys = self.cases.keys()
|
|
661
|
+
|
|
662
|
+
perf_by_unit = []
|
|
663
|
+
for key in case_keys:
|
|
664
|
+
comp = self.get_result(key)["gt_comparison"]
|
|
665
|
+
|
|
666
|
+
perf = comp.get_performance(method="by_unit", output="pandas")
|
|
667
|
+
|
|
668
|
+
if isinstance(key, str):
|
|
669
|
+
perf[self.levels] = key
|
|
670
|
+
elif isinstance(key, tuple):
|
|
671
|
+
for col, k in zip(self.levels, key):
|
|
672
|
+
perf[col] = k
|
|
673
|
+
|
|
674
|
+
perf = perf.reset_index()
|
|
675
|
+
perf_by_unit.append(perf)
|
|
676
|
+
|
|
677
|
+
perf_by_unit = pd.concat(perf_by_unit)
|
|
678
|
+
perf_by_unit = perf_by_unit.set_index(self.levels)
|
|
679
|
+
perf_by_unit = perf_by_unit.sort_index()
|
|
680
|
+
return perf_by_unit
|
|
@@ -11,7 +11,7 @@ from spikeinterface.widgets import (
|
|
|
11
11
|
|
|
12
12
|
import numpy as np
|
|
13
13
|
from spikeinterface.core.job_tools import fix_job_kwargs, split_job_kwargs
|
|
14
|
-
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
14
|
+
from .benchmark_base import Benchmark, BenchmarkStudy, MixinStudyUnitCount
|
|
15
15
|
from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
|
|
16
16
|
from spikeinterface.core.template_tools import get_template_extremum_channel
|
|
17
17
|
|
|
@@ -93,7 +93,7 @@ class ClusteringBenchmark(Benchmark):
|
|
|
93
93
|
]
|
|
94
94
|
|
|
95
95
|
|
|
96
|
-
class ClusteringStudy(BenchmarkStudy):
|
|
96
|
+
class ClusteringStudy(BenchmarkStudy, MixinStudyUnitCount):
|
|
97
97
|
|
|
98
98
|
benchmark_class = ClusteringBenchmark
|
|
99
99
|
|
|
@@ -196,6 +196,11 @@ class ClusteringStudy(BenchmarkStudy):
|
|
|
196
196
|
|
|
197
197
|
return plot_performances_vs_depth_and_snr(self, *args, **kwargs)
|
|
198
198
|
|
|
199
|
+
def plot_performances_ordered(self, *args, **kwargs):
|
|
200
|
+
from .benchmark_plot_tools import plot_performances_ordered
|
|
201
|
+
|
|
202
|
+
return plot_performances_ordered(self, *args, **kwargs)
|
|
203
|
+
|
|
199
204
|
def plot_error_metrics(self, metric="cosine", case_keys=None, figsize=(15, 5)):
|
|
200
205
|
|
|
201
206
|
if case_keys is None:
|
{spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_matching.py
RENAMED
|
@@ -11,7 +11,7 @@ from spikeinterface.widgets import (
|
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
import numpy as np
|
|
14
|
-
from .benchmark_base import Benchmark, BenchmarkStudy
|
|
14
|
+
from .benchmark_base import Benchmark, BenchmarkStudy, MixinStudyUnitCount
|
|
15
15
|
from spikeinterface.core.basesorting import minimum_spike_dtype
|
|
16
16
|
|
|
17
17
|
|
|
@@ -53,7 +53,7 @@ class MatchingBenchmark(Benchmark):
|
|
|
53
53
|
_result_key_saved = [("gt_collision", "pickle"), ("gt_comparison", "pickle")]
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
class MatchingStudy(BenchmarkStudy):
|
|
56
|
+
class MatchingStudy(BenchmarkStudy, MixinStudyUnitCount):
|
|
57
57
|
|
|
58
58
|
benchmark_class = MatchingBenchmark
|
|
59
59
|
|
|
@@ -84,6 +84,11 @@ class MatchingStudy(BenchmarkStudy):
|
|
|
84
84
|
|
|
85
85
|
return plot_performances_vs_depth_and_snr(self, *args, **kwargs)
|
|
86
86
|
|
|
87
|
+
def plot_performances_ordered(self, *args, **kwargs):
|
|
88
|
+
from .benchmark_plot_tools import plot_performances_ordered
|
|
89
|
+
|
|
90
|
+
return plot_performances_ordered(self, *args, **kwargs)
|
|
91
|
+
|
|
87
92
|
def plot_collisions(self, case_keys=None, figsize=None):
|
|
88
93
|
if case_keys is None:
|
|
89
94
|
case_keys = list(self.cases.keys())
|
|
@@ -104,42 +109,6 @@ class MatchingStudy(BenchmarkStudy):
|
|
|
104
109
|
|
|
105
110
|
return fig
|
|
106
111
|
|
|
107
|
-
def get_count_units(self, case_keys=None, well_detected_score=None, redundant_score=None, overmerged_score=None):
|
|
108
|
-
import pandas as pd
|
|
109
|
-
|
|
110
|
-
if case_keys is None:
|
|
111
|
-
case_keys = list(self.cases.keys())
|
|
112
|
-
|
|
113
|
-
if isinstance(case_keys[0], str):
|
|
114
|
-
index = pd.Index(case_keys, name=self.levels)
|
|
115
|
-
else:
|
|
116
|
-
index = pd.MultiIndex.from_tuples(case_keys, names=self.levels)
|
|
117
|
-
|
|
118
|
-
columns = ["num_gt", "num_sorter", "num_well_detected"]
|
|
119
|
-
comp = self.get_result(case_keys[0])["gt_comparison"]
|
|
120
|
-
if comp.exhaustive_gt:
|
|
121
|
-
columns.extend(["num_false_positive", "num_redundant", "num_overmerged", "num_bad"])
|
|
122
|
-
count_units = pd.DataFrame(index=index, columns=columns, dtype=int)
|
|
123
|
-
|
|
124
|
-
for key in case_keys:
|
|
125
|
-
comp = self.get_result(key)["gt_comparison"]
|
|
126
|
-
assert comp is not None, "You need to do study.run_comparisons() first"
|
|
127
|
-
|
|
128
|
-
gt_sorting = comp.sorting1
|
|
129
|
-
sorting = comp.sorting2
|
|
130
|
-
|
|
131
|
-
count_units.loc[key, "num_gt"] = len(gt_sorting.get_unit_ids())
|
|
132
|
-
count_units.loc[key, "num_sorter"] = len(sorting.get_unit_ids())
|
|
133
|
-
count_units.loc[key, "num_well_detected"] = comp.count_well_detected_units(well_detected_score)
|
|
134
|
-
|
|
135
|
-
if comp.exhaustive_gt:
|
|
136
|
-
count_units.loc[key, "num_redundant"] = comp.count_redundant_units(redundant_score)
|
|
137
|
-
count_units.loc[key, "num_overmerged"] = comp.count_overmerged_units(overmerged_score)
|
|
138
|
-
count_units.loc[key, "num_false_positive"] = comp.count_false_positive_units(redundant_score)
|
|
139
|
-
count_units.loc[key, "num_bad"] = comp.count_bad_units()
|
|
140
|
-
|
|
141
|
-
return count_units
|
|
142
|
-
|
|
143
112
|
def plot_unit_counts(self, case_keys=None, **kwargs):
|
|
144
113
|
from .benchmark_plot_tools import plot_unit_counts
|
|
145
114
|
|
|
@@ -8,7 +8,7 @@ from spikeinterface.widgets import (
|
|
|
8
8
|
)
|
|
9
9
|
from spikeinterface.comparison.comparisontools import make_matching_events
|
|
10
10
|
from spikeinterface.core import get_noise_levels
|
|
11
|
-
|
|
11
|
+
from spikeinterface.benchmark.benchmark_plot_tools import despine
|
|
12
12
|
|
|
13
13
|
import numpy as np
|
|
14
14
|
from spikeinterface.core.job_tools import fix_job_kwargs, split_job_kwargs
|
|
@@ -152,54 +152,29 @@ class PeakDetectionStudy(BenchmarkStudy):
|
|
|
152
152
|
ax.set_title(self.cases[key]["label"])
|
|
153
153
|
plot_agreement_matrix(self.get_result(key)["sliced_gt_comparison"], ax=ax)
|
|
154
154
|
|
|
155
|
-
def
|
|
156
|
-
if case_keys is None:
|
|
157
|
-
case_keys = list(self.cases.keys())
|
|
158
|
-
|
|
159
|
-
import matplotlib.pyplot as plt
|
|
160
|
-
|
|
161
|
-
fig, axs = plt.subplots(ncols=1, nrows=3, figsize=figsize)
|
|
162
|
-
|
|
163
|
-
for count, k in enumerate(("accuracy", "recall", "precision")):
|
|
164
|
-
|
|
165
|
-
ax = axs[count]
|
|
166
|
-
for key in case_keys:
|
|
167
|
-
color = self.get_colors()[key]
|
|
168
|
-
label = self.cases[key]["label"]
|
|
169
|
-
|
|
170
|
-
analyzer = self.get_sorting_analyzer(key)
|
|
171
|
-
metrics = analyzer.get_extension("quality_metrics").get_data()
|
|
172
|
-
x = metrics["snr"].values
|
|
173
|
-
y = self.get_result(key)["sliced_gt_comparison"].get_performance()[k].values
|
|
174
|
-
ax.scatter(x, y, marker=".", label=label, color=color)
|
|
175
|
-
ax.set_title(k)
|
|
176
|
-
if detect_threshold is not None:
|
|
177
|
-
ymin, ymax = ax.get_ylim()
|
|
178
|
-
ax.plot([detect_threshold, detect_threshold], [ymin, ymax], "k--")
|
|
179
|
-
|
|
180
|
-
popt = fit_sigmoid(x, y, p0=None)
|
|
181
|
-
xfit = np.linspace(0, max(metrics["snr"].values), 100)
|
|
182
|
-
ax.plot(xfit, sigmoid(xfit, *popt), color=color)
|
|
183
|
-
|
|
184
|
-
if count == 2:
|
|
185
|
-
ax.legend()
|
|
186
|
-
|
|
187
|
-
def plot_detected_amplitudes(self, case_keys=None, figsize=(15, 5), detect_threshold=None):
|
|
155
|
+
def plot_detected_amplitudes(self, case_keys=None, figsize=(15, 5), detect_threshold=None, axs=None):
|
|
188
156
|
|
|
189
157
|
if case_keys is None:
|
|
190
158
|
case_keys = list(self.cases.keys())
|
|
191
159
|
import matplotlib.pyplot as plt
|
|
192
160
|
|
|
193
|
-
|
|
161
|
+
if axs is None:
|
|
162
|
+
fig, axs = plt.subplots(ncols=len(case_keys), figsize=figsize, squeeze=False)
|
|
163
|
+
else:
|
|
164
|
+
fig = axs[0].get_figure()
|
|
165
|
+
assert len(axs) == len(case_keys), "axs should be the same length as case_keys"
|
|
194
166
|
|
|
195
167
|
for count, key in enumerate(case_keys):
|
|
196
|
-
ax = axs[
|
|
168
|
+
ax = axs[count]
|
|
169
|
+
despine(ax)
|
|
197
170
|
data1 = self.get_result(key)["peaks"]["amplitude"]
|
|
198
171
|
data2 = self.get_result(key)["gt_amplitudes"]
|
|
172
|
+
color = self.get_colors()[key]
|
|
199
173
|
bins = np.linspace(data2.min(), data2.max(), 100)
|
|
200
|
-
ax.hist(data1, bins=bins,
|
|
201
|
-
ax.hist(data2, bins=bins, alpha=0.
|
|
202
|
-
ax.
|
|
174
|
+
ax.hist(data1, bins=bins, label="detected", histtype="step", color=color, linewidth=2)
|
|
175
|
+
ax.hist(data2, bins=bins, alpha=0.1, label="gt", color="k")
|
|
176
|
+
ax.set_yscale("log")
|
|
177
|
+
# ax.set_title(self.cases[key]["label"])
|
|
203
178
|
ax.legend()
|
|
204
179
|
if detect_threshold is not None:
|
|
205
180
|
noise_levels = get_noise_levels(self.benchmarks[key].recording, return_scaled=False).mean()
|
|
@@ -230,13 +205,62 @@ class PeakDetectionStudy(BenchmarkStudy):
|
|
|
230
205
|
ax.set_ylabel("# frames")
|
|
231
206
|
ax.set_xlabel("unit id")
|
|
232
207
|
|
|
233
|
-
def
|
|
208
|
+
def plot_mean_deltas(self, case_keys=None, figsize=(15, 5), ax=None):
|
|
234
209
|
|
|
235
210
|
if case_keys is None:
|
|
236
211
|
case_keys = list(self.cases.keys())
|
|
237
212
|
import matplotlib.pyplot as plt
|
|
238
213
|
|
|
239
|
-
|
|
214
|
+
if ax is None:
|
|
215
|
+
fig, ax = plt.subplots(1, figsize=figsize)
|
|
216
|
+
else:
|
|
217
|
+
fig = ax.get_figure()
|
|
218
|
+
|
|
219
|
+
results = {}
|
|
220
|
+
labels = []
|
|
221
|
+
colors = []
|
|
222
|
+
for count, key in enumerate(case_keys):
|
|
223
|
+
gt_sorting = self.benchmarks[key].gt_sorting
|
|
224
|
+
results[key] = []
|
|
225
|
+
labels += [self.cases[key]["label"]]
|
|
226
|
+
data = self.get_result(key)["matches"]
|
|
227
|
+
for unit_ind, unit_id in enumerate(gt_sorting.unit_ids):
|
|
228
|
+
mask = data["labels"] == unit_id
|
|
229
|
+
results[key] += [np.mean(data["deltas"][mask])]
|
|
230
|
+
|
|
231
|
+
colors += [self.get_colors()[key]]
|
|
232
|
+
despine(ax)
|
|
233
|
+
plots = ax.violinplot(
|
|
234
|
+
results.values(),
|
|
235
|
+
range(len(case_keys)),
|
|
236
|
+
showmeans=True,
|
|
237
|
+
showmedians=False,
|
|
238
|
+
showextrema=False,
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
# Set the color of the violin patches
|
|
242
|
+
for pc, color in zip(plots["bodies"], colors):
|
|
243
|
+
pc.set_facecolor(color)
|
|
244
|
+
pc.set_edgecolor(color)
|
|
245
|
+
|
|
246
|
+
plots["cmeans"].set_colors(colors)
|
|
247
|
+
|
|
248
|
+
# ax.set_title(self.cases[key]["label"])
|
|
249
|
+
ax.set_xticks(range(len(case_keys)), labels, rotation=45)
|
|
250
|
+
ax.set_ylabel("# frames")
|
|
251
|
+
# ax.set_xlabel("unit id")
|
|
252
|
+
|
|
253
|
+
def plot_template_similarities(self, case_keys=None, metric="l2", figsize=(15, 5), detect_threshold=None, ax=None):
|
|
254
|
+
|
|
255
|
+
if case_keys is None:
|
|
256
|
+
case_keys = list(self.cases.keys())
|
|
257
|
+
import matplotlib.pyplot as plt
|
|
258
|
+
|
|
259
|
+
if ax is None:
|
|
260
|
+
fig, ax = plt.subplots(ncols=1, nrows=1, figsize=figsize, squeeze=True)
|
|
261
|
+
else:
|
|
262
|
+
fig = ax.get_figure()
|
|
263
|
+
|
|
240
264
|
for key in case_keys:
|
|
241
265
|
|
|
242
266
|
import sklearn.metrics
|
|
@@ -266,7 +290,7 @@ class PeakDetectionStudy(BenchmarkStudy):
|
|
|
266
290
|
x = metrics["snr"].values
|
|
267
291
|
y = distances
|
|
268
292
|
ax.scatter(x, y, marker=".", label=label, color=color)
|
|
269
|
-
|
|
293
|
+
despine(ax)
|
|
270
294
|
popt = fit_sigmoid(x, y, p0=None)
|
|
271
295
|
xfit = np.linspace(0, max(metrics["snr"].values), 100)
|
|
272
296
|
ax.plot(xfit, sigmoid(xfit, *popt), color=color)
|