Skip to content

Toolkit documentation

dartsort is also a toolkit for common spike sorting analyses, and the main spike sorter is built out of those tools. The most important tools are the "Peelers", which detect spikes and featurize them. These rely on featurization pipelines. Other tools include clustering and template waveform estimation from spike trains.

Detecting, cleaning, and featurizing spikes ("peeling")

In spike sorting workflows like template matching or thresholding-based spike detection, there is a common sequence of steps: spikes are detected, there is possibly some iterative subtraction of estimated clean waveforms, and finally waveforms are extracted and featurized. In dartsort those kind of workflows are called "peelers" (inspired by the iterative subtraction of events) and are implemented as subclasses of a BasePeeler class which handles the shared logic (processing chunks of the recording in parallel, fitting featurization models, ...).

All of the peelers accept a featurization pipeline or a FeaturizationConfig object which handles the spike featurization; these are discussed in the next section.

dartsort includes high-level functions for running various kinds of peelers and corresponding configuration objects. These are:

dartsort.match

match(output_dir: str | Path, recording: BaseRecording, sorting: DARTsortSorting | None = None, motion: MotionInfo | None = None, waveform_cfg: WaveformConfig = default_waveform_cfg, template_cfg=default_template_cfg, featurization_cfg: FeaturizationConfig = default_featurization_cfg, matching_cfg=default_matching_cfg, sampling_cfg: FitSamplingConfig = default_peeling_fit_sampling_cfg, previous_detection_cfg: Any | None = None, prev_step_name: str | None = None, save_cfg: DARTsortInternalConfig | None = None, chunk_starts_samples=None, stop_after_n_spikes: int | None = None, ensure_coverage: float | None = None, overwrite=False, residual_filename: str | None = None, skip_resid_snips=False, show_progress=True, hdf5_filename='matching0.h5', model_subdir='matching0_models', template_data: TemplateData | None = None, template_npz='template_data.npz', computation_cfg: ComputationConfig | None = None, template_denoising_tsvd=None, whitener: SpatialWhitener | None = None) -> DARTsortSorting

dartsort.MatchingConfig

chunk_length_samples class-attribute instance-attribute

chunk_length_samples: int = 30000

max_spikes_per_second class-attribute instance-attribute

max_spikes_per_second: int = 16384

cd_iter class-attribute instance-attribute

cd_iter: int = 0

coarse_cd class-attribute instance-attribute

coarse_cd: bool = True

threshold class-attribute instance-attribute

threshold: float | Literal['fp_control'] = 8.0

template_svd_compression_rank class-attribute instance-attribute

template_svd_compression_rank: int = 5

up_factor class-attribute instance-attribute

up_factor: int = 4

upsampling_radius class-attribute instance-attribute

upsampling_radius: int = 8

template_min_channel_amplitude class-attribute instance-attribute

template_min_channel_amplitude: float = 1.0

refractory_radius_frames class-attribute instance-attribute

refractory_radius_frames: int = 0

amplitude_scaling_variance class-attribute instance-attribute

amplitude_scaling_variance: float = 0.01 ** 2

amplitude_scaling_boundary class-attribute instance-attribute

amplitude_scaling_boundary: float = 1.0 / 3.0

max_iter class-attribute instance-attribute

max_iter: int = 100

conv_ignore_threshold class-attribute instance-attribute

conv_ignore_threshold: float = 0.0

coarse_approx_error_threshold class-attribute instance-attribute

coarse_approx_error_threshold: float = 0.0

coarse_objective class-attribute instance-attribute

coarse_objective: bool = True

channel_selection class-attribute instance-attribute

channel_selection: Literal['template', 'amplitude'] = 'template'

channel_selection_radius class-attribute instance-attribute

channel_selection_radius: float | None = None

template_type class-attribute instance-attribute

template_type: Literal['individual_compressed_upsampled', 'drifty', 'debug'] = 'drifty'

up_method class-attribute instance-attribute

up_method: Literal['interpolation', 'keys3', 'keys4', 'direct'] = 'keys4'

drift_interp_params class-attribute instance-attribute

drift_interp_params: InterpolationParams = tps_interp_clampna_extrap_params

upsampling_compression_map class-attribute instance-attribute

upsampling_compression_map: Literal['yass', 'none'] = 'yass'

whitening class-attribute instance-attribute

whitening: WhiteningConfig = WhiteningConfig(strategy='prewhiten_postapply')

whiten_features class-attribute instance-attribute

whiten_features: bool = False

margin_factor class-attribute instance-attribute

margin_factor: int = 2

max_fp_per_input_spike class-attribute instance-attribute

max_fp_per_input_spike: float = 2.5

min_template_ptp class-attribute instance-attribute

min_template_ptp: float = 1.0

always_keep_ptp class-attribute instance-attribute

always_keep_ptp: float = 10.0

min_template_snr class-attribute instance-attribute

min_template_snr: float = 0.0

min_template_count class-attribute instance-attribute

min_template_count: int = 20

max_cc_flag_rate class-attribute instance-attribute

max_cc_flag_rate: float = 0.4

cc_flag_entropy_cutoff class-attribute instance-attribute

cc_flag_entropy_cutoff: float = 2.0

depth_order class-attribute instance-attribute

depth_order: bool = True

template_merge_cfg class-attribute instance-attribute

template_merge_cfg: TemplateMergeConfig | None = TemplateMergeConfig()

template_realignment_cfg class-attribute instance-attribute

template_realignment_cfg: TemplateRealignmentConfig = TemplateRealignmentConfig()

precomputed_templates_npz class-attribute instance-attribute

precomputed_templates_npz: str | None = None

delete_pconv class-attribute instance-attribute

delete_pconv: bool = True

dartsort.subtract

subtract(output_dir: str | Path, recording: BaseRecording, waveform_cfg: WaveformConfig = default_waveform_cfg, featurization_cfg: FeaturizationConfig = default_featurization_cfg, subtraction_cfg=default_subtraction_cfg, sampling_cfg: FitSamplingConfig = default_peeling_fit_sampling_cfg, computation_cfg: ComputationConfig | None = None, chunk_starts_samples=None, stop_after_n_spikes: int | None = None, ensure_coverage: float | None = None, overwrite=False, residual_filename: str | None = None, shuffle: bool = False, show_progress=True, hdf5_filename='subtraction.h5', model_subdir='subtraction_models') -> DARTsortSorting | None

dartsort.SubtractionConfig

chunk_length_samples class-attribute instance-attribute

chunk_length_samples: int = 30000

fit_only class-attribute instance-attribute

fit_only: bool = False

detection_threshold class-attribute instance-attribute

detection_threshold: float = 3.0

peak_sign class-attribute instance-attribute

peak_sign: PeakSign = 'both'

realign_to_denoiser class-attribute instance-attribute

realign_to_denoiser: bool = True

denoiser_realignment_channel class-attribute instance-attribute

denoiser_realignment_channel: Literal['detection', 'denoised'] = 'detection'

denoiser_realignment_shift class-attribute instance-attribute

denoiser_realignment_shift: int = 5

relative_peak_radius_samples class-attribute instance-attribute

relative_peak_radius_samples: int = 5

relative_peak_radius_um class-attribute instance-attribute

relative_peak_radius_um: float | None = 35.0

spatial_dedup_radius_um class-attribute instance-attribute

spatial_dedup_radius_um: float | None = 50.0

temporal_dedup_radius_samples class-attribute instance-attribute

temporal_dedup_radius_samples: int = 11

remove_exact_duplicates class-attribute instance-attribute

remove_exact_duplicates: bool = True

positive_temporal_dedup_radius_samples class-attribute instance-attribute

positive_temporal_dedup_radius_samples: int = 41

subtract_radius_um class-attribute instance-attribute

subtract_radius_um: float = 200.0

residnorm_decrease_threshold class-attribute instance-attribute

residnorm_decrease_threshold: float = 10.0

decrease_objective class-attribute instance-attribute

decrease_objective: Literal['norm', 'normsq', 'deconv'] = 'deconv'

growth_tolerance class-attribute instance-attribute

growth_tolerance: float | None = None

trough_priority class-attribute instance-attribute

trough_priority: float | None = 2.0

cumulant_order class-attribute instance-attribute

cumulant_order: int | None = None

convexity_threshold class-attribute instance-attribute

convexity_threshold: float | None = None

convexity_radius class-attribute instance-attribute

convexity_radius: int = 7

max_iter class-attribute instance-attribute

max_iter: int = 100

subtraction_denoising_cfg class-attribute instance-attribute

subtraction_denoising_cfg: FeaturizationConfig = FeaturizationConfig(denoise_only=True, do_nn_denoise=True, extract_radius=200.0, input_waveforms_name='raw', output_waveforms_name='subtracted')

first_denoiser_max_waveforms_fit class-attribute instance-attribute

first_denoiser_max_waveforms_fit: int = 250000

first_denoiser_noise_snips class-attribute instance-attribute

first_denoiser_noise_snips: int = 100 * 128

first_denoiser_noise_snip_length_mul class-attribute instance-attribute

first_denoiser_noise_snip_length_mul: float = 2.5

first_denoiser_noise_density class-attribute instance-attribute

first_denoiser_noise_density: float = 0.5

first_denoiser_thinning class-attribute instance-attribute

first_denoiser_thinning: float = 0.0

first_denoiser_temporal_jitter class-attribute instance-attribute

first_denoiser_temporal_jitter: int = 3

first_denoiser_spatial_jitter class-attribute instance-attribute

first_denoiser_spatial_jitter: float = 35.0

first_denoiser_spatial_dedup_radius class-attribute instance-attribute

first_denoiser_spatial_dedup_radius: float = 100.0

save_iteration class-attribute instance-attribute

save_iteration: bool = False

save_residnorm_decrease class-attribute instance-attribute

save_residnorm_decrease: bool = False

dartsort.threshold

threshold(output_dir: str | Path, recording: BaseRecording, waveform_cfg: WaveformConfig = default_waveform_cfg, thresholding_cfg: ThresholdingConfig = default_thresholding_cfg, featurization_cfg: FeaturizationConfig = default_featurization_cfg, featurization_pipeline: WaveformPipeline | None = None, sampling_cfg: FitSamplingConfig = default_peeling_fit_sampling_cfg, extract_channel_index: Tensor | None = None, chunk_starts_samples=None, stop_after_n_spikes: int | None = None, ensure_coverage: float | None = None, overwrite=False, show_progress=True, hdf5_filename='threshold.h5', model_subdir='threshold_models', computation_cfg: ComputationConfig | None = None) -> DARTsortSorting

dartsort.ThresholdingConfig

chunk_length_samples class-attribute instance-attribute

chunk_length_samples: int = 30000

detection_threshold class-attribute instance-attribute

detection_threshold: float = 4.0

max_spikes_per_chunk class-attribute instance-attribute

max_spikes_per_chunk: int | None = None

peak_sign class-attribute instance-attribute

peak_sign: Literal['pos', 'neg', 'both'] = 'both'

spatial_dedup_radius_um class-attribute instance-attribute

spatial_dedup_radius_um: float = 150.0

relative_peak_radius_um class-attribute instance-attribute

relative_peak_radius_um: float | None = 35.0

relative_peak_radius_samples class-attribute instance-attribute

relative_peak_radius_samples: int = 5

temporal_dedup_radius_samples class-attribute instance-attribute

temporal_dedup_radius_samples: int = 11

remove_exact_duplicates class-attribute instance-attribute

remove_exact_duplicates: bool = True

cumulant_order class-attribute instance-attribute

cumulant_order: int | None = None

convexity_threshold class-attribute instance-attribute

convexity_threshold: float | None = None

convexity_radius class-attribute instance-attribute

convexity_radius: int = 7

thinning class-attribute instance-attribute

thinning: float = 0.0

time_jitter class-attribute instance-attribute

time_jitter: int = 0

spatial_jitter_radius class-attribute instance-attribute

spatial_jitter_radius: float = 0.0

trough_priority class-attribute instance-attribute

trough_priority: float | None = 2.0

shave_score class-attribute instance-attribute

shave_score: float = 10.0

Featurization pipelines

Featurization is configured by building a FeaturizationConfig. Inside dartsort, the FeaturizationPipeline will be turned into a WaveformPipeline with its .from_config() constructor.

dartsort.FeaturizationConfig

Featurization and denoising configuration

Parameters for a featurization and denoising pipeline which has the flow: [input waveforms] -> [featurization of input waveforms] -> [denoising] -> [featurization of output waveforms]

The flags below allow users to control which features are computed for the input waveforms, what denoising operations are applied, and what features are computed for the output (post-denoising) waveforms.

Users who'd rather do something not covered by this typical case can manually instantiate a WaveformPipeline and pass it into their peeler.

skip class-attribute instance-attribute

skip: bool = False

extract_radius class-attribute instance-attribute

extract_radius: float = 100.0

do_nn_denoise class-attribute instance-attribute

do_nn_denoise: bool = False

do_tpca_denoise class-attribute instance-attribute

do_tpca_denoise: bool = True

do_enforce_decrease class-attribute instance-attribute

do_enforce_decrease: bool | Literal['loc_only'] = 'loc_only'

denoise_only class-attribute instance-attribute

denoise_only: bool = False

save_input_voltages class-attribute instance-attribute

save_input_voltages: bool = True

save_input_waveforms class-attribute instance-attribute

save_input_waveforms: bool = False

save_input_tpca_projs class-attribute instance-attribute

save_input_tpca_projs: bool = True

compute_input_tpca_projs_regardless class-attribute instance-attribute

compute_input_tpca_projs_regardless: bool = False

save_output_waveforms class-attribute instance-attribute

save_output_waveforms: bool = False

save_output_tpca_projs class-attribute instance-attribute

save_output_tpca_projs: bool = False

save_collidedness class-attribute instance-attribute

save_collidedness: bool = False

save_amplitudes class-attribute instance-attribute

save_amplitudes: bool = True

save_all_amplitudes class-attribute instance-attribute

save_all_amplitudes: bool = False

do_localization class-attribute instance-attribute

do_localization: bool = True

localization_radius class-attribute instance-attribute

localization_radius: float = 100.0

localization_amplitude_type class-attribute instance-attribute

localization_amplitude_type: Literal['peak', 'ptp'] = 'peak'

localization_decay_power class-attribute instance-attribute

localization_decay_power: int = 1

localization_model class-attribute instance-attribute

localization_model: Literal['pointsource', 'dipole'] = 'pointsource'

nn_localization class-attribute instance-attribute

nn_localization: bool = True

additional_com_localization class-attribute instance-attribute

additional_com_localization: bool = False

nn_denoiser_class_name class-attribute instance-attribute

nn_denoiser_class_name: str = 'Decollider'

nn_denoiser_pretrained_path class-attribute instance-attribute

nn_denoiser_pretrained_path: str | None = None

nn_denoiser_train_epochs class-attribute instance-attribute

nn_denoiser_train_epochs: int = 100

nn_denoiser_epoch_size class-attribute instance-attribute

nn_denoiser_epoch_size: int = 200 * 256

nn_denoiser_extra_kwargs class-attribute instance-attribute

nn_denoiser_extra_kwargs: dict | None = argfield(None, cli=False)

tpca_fit_radius class-attribute instance-attribute

tpca_fit_radius: float = 75.0

tpca_rank class-attribute instance-attribute

tpca_rank: int = 8

tpca_centered class-attribute instance-attribute

tpca_centered: bool = False

learn_cleaned_tpca_basis class-attribute instance-attribute

learn_cleaned_tpca_basis: bool = False

input_tpca_waveform_cfg class-attribute instance-attribute

input_tpca_waveform_cfg: WaveformConfig | None = WaveformConfig(ms_before=0.75, ms_after=1.25)

tpca_max_waveforms class-attribute instance-attribute

tpca_max_waveforms: int = 40000

tpca_from_templates class-attribute instance-attribute

tpca_from_templates: bool = True

use_gmm_classifier class-attribute instance-attribute

use_gmm_classifier: bool = False

pre_gmm_clustering_cfg class-attribute instance-attribute

pre_gmm_clustering_cfg: ClusteringConfig | None = None

pre_gmm_refinement_cfgs class-attribute instance-attribute

pre_gmm_refinement_cfgs: Sequence[RefinementConfig | None] | None = None

gmm_refinement_cfg class-attribute instance-attribute

gmm_refinement_cfg: RefinementConfig | None = None

gmm_clustering_features_cfg class-attribute instance-attribute

gmm_clustering_features_cfg: ClusteringFeaturesConfig | None = None

input_waveforms_name class-attribute instance-attribute

input_waveforms_name: str = 'collisioncleaned'

output_waveforms_name class-attribute instance-attribute

output_waveforms_name: str = 'denoised'

dartsort.WaveformPipeline

Bases: Module

Pipelines of featurization nodes.

from_state_dict_pt classmethod

from_state_dict_pt(geom, state_dict_pt, motion=None)

Load a pipeline from file.

from_class_names_and_kwargs classmethod

from_class_names_and_kwargs(geom, channel_index, class_names_and_kwargs, waveform_cfg: WaveformConfig | None, sampling_frequency: float = 30000.0)

Construct a pipeline from a sequence of BaseWaveformModule class names and constructor arguments.

from_config classmethod

from_config(*, featurization_cfg: FeaturizationConfig, waveform_cfg: WaveformConfig, recording=None, geom=None, channel_index=None, sampling_frequency: float)

Construct a pipeline based on configuration options.

forward

forward(waveforms, *, up_to_index: int | None = None, start_index: int | None = None, **fixed_properties)

Run waveforms and fixed properties through pipeline, extracting features and denoising.

fit

fit(recording: BaseRecording, waveforms: Tensor, computation_cfg: ComputationConfig, *, hdf5_filename: str | Path | None = None, waveforms_dataset_name: str = 'waveforms', **fixed_properties: Tensor)

Fit my transformers in sequence, giving each the outputs of its predecessors.

precompute

precompute()

Give my transformers the chance to precompute stuff.

transform_to_disk

transform_to_disk(hdf5_filename: str | Path, waveforms_dataset_name: str | None = 'waveforms', other_dset_names: Sequence[str] | None = None, start_index: int | None = None, up_to_index: int | None = None)

Save my features to new h5 datasets by running in batches through waveforms saved in h5.

This pipeline is a sequence of denoising and featurization objects from the dartsort.transform module:

dartsort.transform

Spike featurization and denoising pipelines

AmortizedLocalization

Bases: BaseWaveformFeaturizer

Localize spike waveform sources in space with a neural network.

Order of output columns: x, y, z_abs.

local_distances
local_distances(z, channels, obs_amps=None)

Return distances from each z to its local geom centered at channels.

AmplitudeFeatures

Bases: BaseWaveformFeaturizer

Extract spike amplitudes.

Decollider

Bases: BaseMultichannelDenoiser

Unsupervised spike waveform denoising.

forward_unbatched
forward_unbatched(waveforms, channels)

Called only at inference time.

EnforceDecrease

Bases: BaseWaveformDenoiser

A torch module for enforcing spatial decrease of amplitudes

Calling an instance of this class on a N,T,C batch of waveforms will return a result whose peak-to-peak amplitudes decrease as you move away from the detection channel.

forward
forward(waveforms, *, channels, **unused)

enfdec = EnforceDecrease(geom, channel_index) ... dec_wfs, dec_ptps = enfdec(waveforms, maxchans)

WaveformInterpolator

Bases: BaseWaveformDenoiser

Interpolate waveforms for motion correction.

Localization

Bases: BaseWaveformFeaturizer

Optimization-based spike source localization.

Order of output columns: x, y, z_abs, alpha

DebugMatchingPursuitDenoiser

Bases: BaseWaveformDenoiser

This denoiser is used for testing purposes only.

TruncatedMixtureModelTransformer

Bases: BaseWaveformFeaturizer

Gaussian mixture clustering and classification as a featurization node.

SingleChannelWaveformDenoiser

Bases: BaseWaveformDenoiser

YASS-style single-channel waveform denoising.

SupervisedDenoiser

Bases: BaseMultichannelDenoiser

Supervised multi-channel neural network waveform denoising.

forward_unbatched
forward_unbatched(waveforms, channels, to_orig_channels=True)

Called only at inference time.

BaseTemporalPCA

Bases: BaseWaveformModule

Base class for PCA featurizers.

TemporalPCA

Bases: BaseWaveformAutoencoder, TemporalPCAFeaturizer

Combined spike featurization and denoising with PCA.

TemporalPCADenoiser

Bases: BaseWaveformDenoiser, BaseTemporalPCA

Spike waveform denoising with PCA.

TemporalPCAFeaturizer

Bases: BaseWaveformFeaturizer, BaseTemporalPCA

Spike featurization with PCA.

BaseWaveformModule

Bases: BModule

Base class of all spike featurizers and denoisers.

Clustering

dartsort includes configuration options and a main function for running several clustering strategies.

dartsort.cluster

cluster(recording: BaseRecording, sorting: DARTsortSorting, motion: MotionInfo, clustering_cfg: ClusteringConfig | None = default_clustering_cfg, clustering_features_cfg: ClusteringFeaturesConfig | None = default_clustering_features_cfg, refinement_cfgs: Sequence[RefinementConfig | None] | None = None, computation_cfg: ComputationConfig | None = None, features: SimpleMatrixFeatures | None = None, *, _save_cfg: DARTsortInternalConfig | None = None, _save_initial_name='initial', _save_refined_name_fmt='refined0{stepname}', _save_dir=None)

dartsort.ClusteringFeaturesConfig

use_x class-attribute instance-attribute

use_x: bool = True

use_z class-attribute instance-attribute

use_z: bool = True

motion_aware class-attribute instance-attribute

motion_aware: bool = True

use_amplitude class-attribute instance-attribute

use_amplitude: bool = False

use_signed_amplitude class-attribute instance-attribute

use_signed_amplitude: bool = True

log_transform_amplitude class-attribute instance-attribute

log_transform_amplitude: bool = True

amp_log_c class-attribute instance-attribute

amp_log_c: float = 5.0

amp_scale class-attribute instance-attribute

amp_scale: float = 3.0

x_scale class-attribute instance-attribute

x_scale: float = 1.0

n_main_channel_pcs class-attribute instance-attribute

n_main_channel_pcs: int = 5

pc_scale class-attribute instance-attribute

pc_scale: float = 2.0

pc_transform class-attribute instance-attribute

pc_transform: Literal['log', 'sqrt', 'none'] | None = 'none'

pc_pre_transform_scale class-attribute instance-attribute

pc_pre_transform_scale: float = 0.5

adaptive_feature_scales class-attribute instance-attribute

adaptive_feature_scales: bool = False

feature_rank class-attribute instance-attribute

feature_rank: int = 8

interp_params class-attribute instance-attribute

interp_params: InterpolationParams = tps_interp_params

motion_depth_mode class-attribute instance-attribute

motion_depth_mode: Literal['channel', 'localization'] = 'channel'

amplitudes_dataset_name class-attribute instance-attribute

amplitudes_dataset_name: str = 'denoised_ptp_amplitudes'

voltages_dataset_name class-attribute instance-attribute

voltages_dataset_name: str = 'collisioncleaned_voltages'

amplitude_vectors_dataset_name class-attribute instance-attribute

amplitude_vectors_dataset_name: str = 'denoised_ptp_amplitude_vectors'

localizations_dataset_name class-attribute instance-attribute

localizations_dataset_name: str = 'point_source_localizations'

pca_dataset_name class-attribute instance-attribute

pca_dataset_name: str = 'collisioncleaned_tpca_features'

dartsort.ClusteringConfig

cluster_strategy class-attribute instance-attribute

cluster_strategy: str = 'dpc'

sampling_cfg class-attribute instance-attribute

sampling_cfg: FitSamplingConfig = default_clustering_fit_sampling_cfg

random_seed class-attribute instance-attribute

random_seed: int = 0

min_cluster_size class-attribute instance-attribute

min_cluster_size: int = 25

knn_k class-attribute instance-attribute

knn_k: int | None = None

sigma_local class-attribute instance-attribute

sigma_local: float = 5.0

sigma_regional class-attribute instance-attribute

sigma_regional: float | None = 25.0
n_neighbors_search: int = 50
radius_search: float = 25.0

noise_density class-attribute instance-attribute

noise_density: float = 0.0

outlier_radius class-attribute instance-attribute

outlier_radius: float = 25.0

outlier_neighbor_count class-attribute instance-attribute

outlier_neighbor_count: int = 10

kmeanspp_initializations class-attribute instance-attribute

kmeanspp_initializations: int = 10

kmeans_iter class-attribute instance-attribute

kmeans_iter: int = 100

components_per_channel class-attribute instance-attribute

components_per_channel: int = 20

component_overlap class-attribute instance-attribute

component_overlap: float = 0.95

hellinger_strong class-attribute instance-attribute

hellinger_strong: float = 0.0

hellinger_weak class-attribute instance-attribute

hellinger_weak: float = 0.0

use_hellinger class-attribute instance-attribute

use_hellinger: bool = True

gmmdpc_max_sigma class-attribute instance-attribute

gmmdpc_max_sigma: float = 5.0

mop class-attribute instance-attribute

mop: bool = True

min_samples class-attribute instance-attribute

min_samples: int = 25

cluster_selection_epsilon class-attribute instance-attribute

cluster_selection_epsilon: int = 1

recursive class-attribute instance-attribute

recursive: bool = False

grid_dx class-attribute instance-attribute

grid_dx: float = 15.0

grid_dz class-attribute instance-attribute

grid_dz: float = 15.0

sklearn_class_name class-attribute instance-attribute

sklearn_class_name: str = 'DBSCAN'

sklearn_kwargs class-attribute instance-attribute

sklearn_kwargs: dict | None = None

dartsort.RefinementConfig

refinement_strategy class-attribute instance-attribute

refinement_strategy: str = 'tmm'

sampling_cfg class-attribute instance-attribute

sampling_cfg: FitSamplingConfig = default_clustering_fit_sampling_cfg

pc_merge_threshold class-attribute instance-attribute

pc_merge_threshold: float = 0.1

pc_merge_metric class-attribute instance-attribute

pc_merge_metric: str = 'normeuc'

pc_merge_spikes_per_unit class-attribute instance-attribute

pc_merge_spikes_per_unit: int = 4096

pc_merge_linkage class-attribute instance-attribute

pc_merge_linkage: str = 'complete'

pc_merge_rank class-attribute instance-attribute

pc_merge_rank: int = 5

pc_merge_min_iou class-attribute instance-attribute

pc_merge_min_iou: float = 0.95

cov_kind class-attribute instance-attribute

cov_kind: str = 'factorizednoise'

glasso_alpha class-attribute instance-attribute

glasso_alpha: float | int | None = None

neighb_overlap class-attribute instance-attribute

neighb_overlap: float = 0.75

explore_neighb_steps class-attribute instance-attribute

explore_neighb_steps: int = 0

min_count class-attribute instance-attribute

min_count: int = 25

split_min_count class-attribute instance-attribute

split_min_count: int = 8

channels_count_min class-attribute instance-attribute

channels_count_min: int = 1

signal_rank class-attribute instance-attribute

signal_rank: int = 3

initialize_at_rank_0 class-attribute instance-attribute

initialize_at_rank_0: bool = False

cl_alpha class-attribute instance-attribute

cl_alpha: float = 0.05

cl_split_only class-attribute instance-attribute

cl_split_only: bool = True

latent_prior_std class-attribute instance-attribute

latent_prior_std: float = 1.0

initial_basis_shrinkage class-attribute instance-attribute

initial_basis_shrinkage: float = 1.0

n_spikes_fit class-attribute instance-attribute

n_spikes_fit: int = 4096

distance_metric class-attribute instance-attribute

distance_metric: ComponentDistanceMetric = 'scaled_normeuc'

n_candidates class-attribute instance-attribute

n_candidates: int = 5

merge_group_size class-attribute instance-attribute

merge_group_size: int = 5
n_search: int | None = 3

n_explore class-attribute instance-attribute

n_explore: int | None = None

train_batch_size class-attribute instance-attribute

train_batch_size: int = 512

eval_batch_size class-attribute instance-attribute

eval_batch_size: int = 512

split_friend_distance class-attribute instance-attribute

split_friend_distance: float = 0.8

split_distance_threshold class-attribute instance-attribute

split_distance_threshold: float = 1.5

merge_distance_threshold class-attribute instance-attribute

merge_distance_threshold: float = 1.5

criterion_em_iters class-attribute instance-attribute

criterion_em_iters: int = 3

hold_out_criterion class-attribute instance-attribute

hold_out_criterion: bool = True

n_em_iters class-attribute instance-attribute

n_em_iters: int = 250

em_converged_atol class-attribute instance-attribute

em_converged_atol: float = 0.005

n_total_iters class-attribute instance-attribute

n_total_iters: int = 1

mixture_steps class-attribute instance-attribute

mixture_steps: Sequence[MixtureStep] = ('split', 'merge', 'demolish')

prior_pseudocount class-attribute instance-attribute

prior_pseudocount: float = 0.0

kmeansk class-attribute instance-attribute

kmeansk: int = 4

kmeans_tries class-attribute instance-attribute

kmeans_tries: int = 5

kmeanspp_tries class-attribute instance-attribute

kmeanspp_tries: int = 5

full_proposal_every class-attribute instance-attribute

full_proposal_every: int = 10

main_min_iters class-attribute instance-attribute

main_min_iters: int = 20

search_adj class-attribute instance-attribute

search_adj: Literal['top', 'explore'] = 'top'

robust_strategy class-attribute instance-attribute

robust_strategy: Literal['none', 'fixed'] = 'none'

robust_fixed_std_dataset class-attribute instance-attribute

robust_fixed_std_dataset: str = 'collidedness'

robust_fixed_power class-attribute instance-attribute

robust_fixed_power: float = 40.0

robust_df class-attribute instance-attribute

robust_df: float = 4.0

demolition_min_resp_ratio class-attribute instance-attribute

demolition_min_resp_ratio: float = 1.1

demolish_during_selection class-attribute instance-attribute

demolish_during_selection: bool = False

em_after_demolish class-attribute instance-attribute

em_after_demolish: bool = False

whiten_split class-attribute instance-attribute

whiten_split: bool = True

scale_dist_args class-attribute instance-attribute

scale_dist_args: tuple[float, float, float] = (0.01, 3.0 / 4.0, 4.0 / 3.0)

whiten_dist class-attribute instance-attribute

whiten_dist: bool = True

template_merge_cfg class-attribute instance-attribute

template_merge_cfg: TemplateMergeConfig = TemplateMergeConfig(linkage='single')

glom_max_firing_corr class-attribute instance-attribute

glom_max_firing_corr: float | None = -0.1

glom_firing_corr_dt class-attribute instance-attribute

glom_firing_corr_dt: float = 0.5

glom_firing_corr_method class-attribute instance-attribute

glom_firing_corr_method: Literal['binsqrt'] = 'binsqrt'
qda_link: Literal['single', 'complete'] = 'single'

qda_uni_score class-attribute instance-attribute

qda_uni_score: float = 0.95

qda_threshold class-attribute instance-attribute

qda_threshold: float = 0.35

qda_min_ratio class-attribute instance-attribute

qda_min_ratio: float = 0.1

qda_min_coverage class-attribute instance-attribute

qda_min_coverage: float = 0.35

qda_min_iou class-attribute instance-attribute

qda_min_iou: float = 0.5

qda_force_merge_for_temp_dist_below class-attribute instance-attribute

qda_force_merge_for_temp_dist_below: float = 0.3

chunk_size_s class-attribute instance-attribute

chunk_size_s: float = 300.0

log_c class-attribute instance-attribute

log_c: float = 5.0

feature_scales class-attribute instance-attribute

feature_scales: tuple[float, float, float] = (1.0, 1.0, 50.0)

adaptive_feature_scales class-attribute instance-attribute

adaptive_feature_scales: bool = False

cov_radius class-attribute instance-attribute

cov_radius: float = 200.0

val_proportion class-attribute instance-attribute

val_proportion: float = 0.5

impute_kind class-attribute instance-attribute

impute_kind: Literal['interp', 'impute'] = 'impute'

noise_interp_params class-attribute instance-attribute

noise_interp_params: InterpolationParams = tps_interp_clampna_extrap_params

Template waveform estimation

dartsort.estimate_template_library

estimate_template_library(recording: BaseRecording, sorting: DARTsortSorting, motion: MotionInfo | None = None, min_template_snr: float = 0.0, min_template_ptp: float = 0.0, always_keep_ptp: float = 0.0, min_template_count: int = 0, max_cc_flag_rate: float = 1.0, cc_flag_entropy_cutoff: float = 0.0, waveform_cfg: WaveformConfig = default_waveform_cfg, template_cfg: TemplateConfig = default_template_cfg, realign_cfg: TemplateRealignmentConfig | None = None, template_merge_cfg: TemplateMergeConfig | None = None, tsvd: PCA | TruncatedSVD | None = None, whitener: SpatialWhitener | None = None, computation_cfg: ComputationConfig | None = None, fit_featurization_tsvd: bool = False, featurization_cfg: FeaturizationConfig | None = None, detection_cfg: Any | None = None, depth_order: bool = False, template_npz_path=None) -> tuple[DARTsortSorting, TemplateData]

Postprocess spike train and estimate a TemplateData.

dartsort.TemplateData

templates instance-attribute

templates: ndarray

unit_ids instance-attribute

unit_ids: ndarray

spike_counts instance-attribute

spike_counts: ndarray

spike_counts_by_channel class-attribute instance-attribute

spike_counts_by_channel: ndarray | None = None

raw_std_dev class-attribute instance-attribute

raw_std_dev: ndarray | None = None

registered_geom class-attribute instance-attribute

registered_geom: ndarray | None = None

trough_offset_samples instance-attribute

trough_offset_samples: int

sampling_frequency instance-attribute

sampling_frequency: float

properties class-attribute instance-attribute

properties: dict[str, ndarray] | None = None

tsvd class-attribute instance-attribute

tsvd: TruncatedSVD | PCA | None = None

whitener class-attribute instance-attribute

whitener: ndarray | None = None

whiten_strategy class-attribute instance-attribute

whiten_strategy: WhiteningStrategy = 'none'

featurization_basis class-attribute instance-attribute

featurization_basis: ndarray | None = None

spike_length_samples property

spike_length_samples

snrs_by_channel

snrs_by_channel()

main_channels

main_channels()

template_locations

template_locations(mode='channel', radius=100.0)

registered_depths_um

registered_depths_um(mode='channel', radius=100.0)

from_npz classmethod

from_npz(npz_path)

to_npz

to_npz(npz_path)

coarsen

coarsen()

Weighted average all templates that share a unit id.

unit_mask

unit_mask(unit_id)

unit_templates

unit_templates(unit_id)

from_config classmethod

from_config(*, recording: BaseRecording, sorting: DARTsortSorting | None, template_cfg: TemplateConfig, waveform_cfg: WaveformConfig = default_waveform_cfg, save_folder: Path | None = None, overwrite=False, motion: MotionInfo | None = None, whitener: SpatialWhitener | None = None, save_npz_name: str | None = 'template_data.npz', tsvd=None, featurization_basis=None, computation_cfg: ComputationConfig | None = None, show_progress: bool = True) -> TemplateData

dartsort.TemplateConfig

spikes_per_unit class-attribute instance-attribute

spikes_per_unit: int = 500

with_raw_std_dev class-attribute instance-attribute

with_raw_std_dev: bool = False

reduction class-attribute instance-attribute

reduction: Literal['median', 'mean'] = 'median'

algorithm class-attribute instance-attribute

algorithm: Literal['unitextract', 'peelreduce', 'peelreduce_if_mean'] | str = 'peelreduce'

denoising_method class-attribute instance-attribute

denoising_method: Literal['none', 'exp_weighted', 'svd'] = 'svd'

weighted class-attribute instance-attribute

weighted: bool = False

grab_chunk_length_samples class-attribute instance-attribute

grab_chunk_length_samples: int = 30000

units_per_job class-attribute instance-attribute

units_per_job: int = 8

whitening class-attribute instance-attribute

whitening: WhiteningConfig = WhiteningConfig()

registered_templates class-attribute instance-attribute

registered_templates: bool = True

min_fraction_at_shift class-attribute instance-attribute

min_fraction_at_shift: float = 0.25

min_count_at_shift class-attribute instance-attribute

min_count_at_shift: int = 25

template_interp_params class-attribute instance-attribute

template_interp_params: InterpolationParams = tps_interp_clampna_extrap_params

denoising_rank class-attribute instance-attribute

denoising_rank: int = 5

denoising_fit_radius class-attribute instance-attribute

denoising_fit_radius: float = 75.0

denoising_fit_sampling_cfg class-attribute instance-attribute

denoising_fit_sampling_cfg: FitSamplingConfig = replace(default_peeling_fit_sampling_cfg, n_residual_snips=0)

template_min_channel_amplitude class-attribute instance-attribute

template_min_channel_amplitude: float = 1.0

svd_method class-attribute instance-attribute

svd_method: TemplateSVDMethod = 'raw_template'

svd_alignment_iterations class-attribute instance-attribute

svd_alignment_iterations: int = 0

svd_alignment_ms class-attribute instance-attribute

svd_alignment_ms: float = 0.75

exp_weight_snr_threshold class-attribute instance-attribute

exp_weight_snr_threshold: float = 50.0

amplitudes_dataset_name class-attribute instance-attribute

amplitudes_dataset_name: str = 'denoised_ptp_amplitudes'

localizations_dataset_name class-attribute instance-attribute

localizations_dataset_name: str = 'point_source_localizations'

use_svd property

use_svd: bool

actual_algorithm

actual_algorithm() -> str