OSCR

Density-based longitudinal neuron tracking in high-density electrophysiological recordings.

Code ↔ Paper

18 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 18 matches · 3 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
  1. [1] § Methods › Neural data processing ↔ QualityMetrics/computeQualityMetrics.m, lines 1–123 · score 0.82 · amplitude cutoff, quality metrics, ISI violations, presence ratio, nearest neighbor
  2. [2] § Methods › Neural data processing ↔ QualityMetrics/computeQualityMetrics.m, lines 1–113 · score 0.82 · amplitude cutoff, quality metrics, ISI violations, presence ratio, nearest neighbor
  3. [3] § Methods › Unit localization ↔ Functions/preprocessSpikeInfo.m, lines 1–64 · score 0.73 · trough amplitude, nearest channels, peak channel, localization, monopolar, algorithm
  4. [4] § Methods › Unit localization ↔ Functions/spikeLocation.m, the whole file · a weak match · score 0.72 · trough amplitude, nearest channels, localization, lsqcurvefit, monopolar, inferred
  5. [5] § Methods › Neural data processing ↔ eMouse_drift/make_noise_model.m, lines 1–136 · score 0.70 · high pass filter, spike detection, firing rate, truncated, preprocessing, ops
  6. [6] § Methods › HDBSCAN ↔ pyDANT/IterativeClustering.py, lines 178–323 · score 0.68 · single linkage tree, distance matrix, precomputed, optimalleaforder, MATLAB, HDBSCAN
  7. [7] § Methods › Neural data processing ↔ configFiles/StandardConfig_MOVEME.m, lines 1–32 · score 0.65 · high pass filter, ops.Th, firing rate, Kilosort, Hz, split
  8. [8] § Methods › Neural data processing ↔ UnitMatchPy/UnitMatchPy/default_params.py, the whole file · a weak match · score 0.61 · ISI violations, refractory period, contaminating, ms, window, metric
  9. [9] § Methods › Neural data processing ↔ MATLAB/UnitMatchPipeline/AssignUniqueIDAlgorithm.m, lines 12–46 · score 0.59 · ISI violations, refractory period, ISIs, ms, window, spikes
  10. [10] § Methods › Iterative clustering algorithm ↔ Functions/iterativeClustering.m, lines 1–77 · score 0.57 · Iterative HDBSCAN, unmatched pair, LDA, weights, matrix, cluster
  11. [11] § Methods › Neural data processing ↔ QualityMetrics/computeQualityMetrics.m, lines 1–123 · score 0.57 · principal component, Nearest neighbor, subsample, metric, spikes, cluster
  12. [12] § Methods › Neural data processing ↔ QualityMetrics/computeQualityMetrics.m, lines 1–113 · score 0.57 · principal component, Nearest neighbor, subsample, metric, spikes, cluster
  13. [13] § Methods › Iterative clustering algorithm ↔ pyDANT/IterativeClustering.py, lines 178–323 · score 0.56 · Updated weights, distance matrix, LDA, selection, iterative, HDBSCAN
  14. [14] § Methods › Comparison with UnitMatch and EMD ↔ MATLAB/Curation/EvaluatingUnitMatch.m, lines 91–190 · score 0.56 · matches identified, UnitMatch, FN, FP, Kilosort, validate
  15. [15] § Methods › Similarity scores › Waveforms ↔ Functions/spikeLocation.m, the whole file · a weak match · score 0.56 · largest amplitude channel, nearest channels, probe, Waveform
  16. [16] § Methods › Comparison with UnitMatch and EMD ↔ MATLAB/Paper_Figures/EMD_integration/run_EMD_batch_onMerged.m, lines 1–83 · score 0.56 · GitHub, neuron tracking, EMD, MATLAB, pipeline, UnitMatch
  17. [17] § Results › Pipeline overview ↔ Functions/iterativeClustering.m, lines 1–77 · score 0.53 · unmatched pairs, feature weights, LDA, HDBSCAN, iterations, pairwise
  18. [18] § Methods › Neural data processing ↔ UnitMatchPy/Demo Notebooks/UMPy_spike_interface_demo.ipynb, lines 68–192 · score 0.51 · Amplitude cutoff, spike amplitudes, kernel, drift, metric, bin

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

MATLAB · 190 lines · 7.6 KB · GPL-3.0 · 2 matches

  1. function computeQualityMetrics(folder_data, user_settings)
  2. % COMPUTEQUALITYMETRICS compute all the quality metrics of non-noise clusters
  3. %
  4. % - Input
  5. % - folder_data: the folder where the data is located
  6. % - user_settings: the global settings or the qualityMetrics settings block
  7. %
  8. % Output:
  9. % QualityMetrics.mat will be generated
  10. %
  11. % The default value from https://github.com/AllenInstitute/ecephys_spike_sorting/blob/919992748a5324724ba87169ecdcf9eb6e3b9973/ecephys_spike_sorting/scripts/create_input_json.py#L185
  12. % "quality_metrics_params" : {
  13. % "isi_threshold" : 0.0015,
  14. % "min_isi" : 0.000166,
  15. % "num_channels_to_compare" : 7,
  16. % "max_spikes_for_unit" : 500,
  17. % "max_spikes_for_nn" : 10000,
  18. % "n_neighbors" : 4,
  19. % 'n_silhouette' : 10000,
  20. % "quality_metrics_output_file" : os.path.join(kilosort_output_directory, "metrics_test.csv"),
  21. % "drift_metrics_interval_s" : 51,
  22. % "drift_metrics_min_spikes_per_interval" : 10,
  23. %
  24. % "include_pc_metrics" : True
  25. %
  26. % From https://github.com/AllenInstitute/ecephys_spike_sorting/blob/919992748a5324724ba87169ecdcf9eb6e3b9973/ecephys_spike_sorting/modules/quality_metrics/_schemas.py#L7
  27. %
  28. % isi_threshold = Float(required=False, default=0.0015, help='Maximum time (in seconds) for ISI violation')
  29. % min_isi = Float(required=False, default=0.00, help='Minimum time (in seconds) for ISI violation')
  30. % num_channels_to_compare = Int(required=False, default=13, help='Number of channels to use for computing PC metrics; must be odd')
  31. % max_spikes_for_unit = Int(required=False, default=500, help='Number of spikes to subsample for computing PC metrics')
  32. % max_spikes_for_nn = Int(required=False, default=10000, help='Further subsampling for NearestNeighbor calculation')
  33. % n_neighbors = Int(required=False, default=4, help='Number of neighbors to use for NearestNeighbor calculation')
  34. % n_silhouette = Int(required=False, default=10000, help='Number of spikes to use for calculating silhouette score')
  35. %
  36. % drift_metrics_min_spikes_per_interval = Int(required=False, default=10, help='Minimum number of spikes for computing depth')
  37. % drift_metrics_interval_s = Float(required=False, default=100, help='Interval length is seconds for computing spike depth')
  38. %
  39. % quality_metrics_output_file = String(required=True, help='CSV file where metrics will be saved')
  40. %
  41. % include_pc_metrics = Bool(required=False, default=True, help='Compute features that require principal components')
  42. %
  43. if nargin < 1
  44. folder_data = './';
  45. end
  46. num_channels_to_compare = 7;
  47. max_spikes_for_unit = 500;
  48. max_spikes_for_nn = 10000;
  49. n_neighbors = 4;
  50. if nargin >= 2 && ~isempty(user_settings)
  51. if isfield(user_settings, 'qualityMetrics')
  52. user_settings = user_settings.qualityMetrics;
  53. end
  54. if isfield(user_settings, 'num_channels_to_compare')
  55. num_channels_to_compare = user_settings.num_channels_to_compare;
  56. end
  57. if isfield(user_settings, 'max_spikes_for_unit')
  58. max_spikes_for_unit = user_settings.max_spikes_for_unit;
  59. end
  60. if isfield(user_settings, 'max_spikes_for_nn')
  61. max_spikes_for_nn = user_settings.max_spikes_for_nn;
  62. end
  63. if isfield(user_settings, 'n_neighbors')
  64. n_neighbors = user_settings.n_neighbors;
  65. end
  66. end
  67. % read the data
  68. spike_times = readNPY(fullfile(folder_data, 'spike_times.npy'));
  69. spike_clusters = readNPY(fullfile(folder_data, 'spike_clusters.npy'));
  70. amplitudes = readNPY(fullfile(folder_data, 'amplitudes.npy'));
  71. cluster_ids = unique(spike_clusters);
  72. n_cluster = length(cluster_ids);
  73. cluster_group = readtable(fullfile(folder_data, 'cluster_group.tsv'), 'Delimiter', '\t', 'FileType', 'text');
  74. labels = cell(n_cluster, 1);
  75. if any(strcmpi(cluster_group.Properties.VariableNames, 'group'))
  76. for k = 1:n_cluster
  77. idx = find(cluster_group.cluster_id == cluster_ids(k));
  78. if isempty(idx)
  79. continue
  80. end
  81. labels{k} = cluster_group.group{idx};
  82. end
  83. end
  84. % spike_locations = zeros(n_cluster, 2);
  85. isi_violations = NaN(n_cluster, 1);
  86. amplitude_cutoffs = NaN(n_cluster, 1);
  87. presence_ratio = NaN(n_cluster, 1);
  88. amplitude_median = NaN(n_cluster, 1);
  89. disp('Computing Non-PC features...');
  90. for k = 1:n_cluster
  91. if strcmpi(labels{k}, 'noise')
  92. if mod(k, 10) == 1
  93. fprintf('%d / %d done!\n', k, n_cluster);
  94. end
  95. continue
  96. end
  97. spike_time_this = double(spike_times(spike_clusters==cluster_ids(k)))./30000*1000; % in ms
  98. amplitude_this = double(amplitudes(spike_clusters==cluster_ids(k)));
  99. amplitude_this = rmoutliers(amplitude_this, 'median', 'ThresholdFactor', 5);
  100. t_begin = 0;
  101. t_end = double(max(spike_times))./30000*1000;
  102. isi_violations(k) = isiViolations(spike_time_this);
  103. amplitude_cutoffs(k) = amplitudeCutoffs(amplitude_this);
  104. amplitude_median(k) = median(amplitude_this);
  105. presence_ratio(k) = presenceRatio(spike_time_this, t_begin, t_end);
  106. if mod(k, 10) == 1
  107. fprintf('%d / %d done!\n', k, n_cluster);
  108. end
  109. end
  110. %% PC based metrics
  111. % load files
  112. chanMap = getKilosortChanMap(folder_data);
  113. pc_features = readNPY(fullfile(folder_data, 'pc_features.npy'));
  114. pc_feature_ind = double(readNPY(fullfile(folder_data, 'pc_feature_ind.npy')));
  115. spike_templates = double(readNPY(fullfile(folder_data, 'spike_templates.npy')));
  116. assert(mod(num_channels_to_compare, 2) == 1);
  117. half_spread = floor((num_channels_to_compare - 1) / 2);
  118. cluster_ids = double(unique(spike_clusters));
  119. template_ids = double(unique(spike_templates));
  120. template_peak_channels = zeros(length(template_ids), 1);
  121. cluster_peak_channels = zeros(length(cluster_ids), 1); % 0 ~ n_channel-1
  122. for idx = 1:length(template_ids)
  123. template_id = template_ids(idx);
  124. for_template = squeeze(spike_templates == template_id);
  125. pc_max = find(mean(pc_features(for_template, 1, :), 1) == max(mean(pc_features(for_template, 1, :), 1)), 1);
  126. template_peak_channels(idx) = pc_feature_ind(template_id+1, pc_max); % matlab index from 1
  127. end
  128. for idx = 1:length(cluster_ids)
  129. cluster_id = cluster_ids(idx);
  130. for_unit = squeeze(spike_clusters == cluster_id);
  131. templates_for_unit = unique(spike_templates(for_unit));
  132. template_positions = ismember(template_ids, templates_for_unit);
  133. cluster_peak_channels(idx) = round(median(template_peak_channels(template_positions)));
  134. end
  135. isolation_distance = NaN(n_cluster, 1);
  136. d_prime = NaN(n_cluster, 1);
  137. nn_miss_rate = NaN(n_cluster, 1);
  138. nn_hit_rate = NaN(n_cluster, 1);
  139. l_ratio = NaN(n_cluster, 1);
  140. disp('Computing PC features...');
  141. for idx = 1:n_cluster
  142. if strcmpi(labels{idx}, 'noise')
  143. continue
  144. end
  145. cluster_id = cluster_ids(idx);
  146. [isolation_distance(idx), d_prime(idx), nn_miss_rate(idx), nn_hit_rate(idx), l_ratio(idx)] = ...
  147. calculate_pc_metrics_one_cluster(...
  148. cluster_peak_channels, idx, cluster_id, cluster_ids,...
  149. half_spread, pc_features, pc_feature_ind,...
  150. spike_clusters, spike_templates,...
  151. max_spikes_for_unit, max_spikes_for_nn, n_neighbors, chanMap);
  152. if mod(idx, 10) == 1
  153. fprintf('%d / %d done!\n', idx, n_cluster);
  154. end
  155. end
  156. %% save to files
  157. metric_names = {'ISI violations', 'Amplitude cutoffs', 'Presence ratio', 'Median Amplitude', 'Isolation distance', 'D prime', 'Nearest-neighbor miss rate', 'Nearest-neighbor hit rate', 'L ratio'};
  158. metrics = {isi_violations, amplitude_cutoffs, presence_ratio, amplitude_median, isolation_distance, d_prime, nn_miss_rate, nn_hit_rate, l_ratio};
  159. save(fullfile(folder_data, 'QualityMetrics.mat'),...
  160. 'cluster_ids', 'isi_violations', 'amplitude_cutoffs', 'presence_ratio', 'labels', 'amplitude_median',...
  161. 'isolation_distance', 'd_prime', 'nn_miss_rate', 'nn_hit_rate', 'l_ratio',...
  162. 'metrics', 'metric_names');
  163. end

computeQualityMetrics.m at commit ebf982a, under GPL-3.0 · at the source

Overview

Authors: Yue Huang1,2, Hanbo Wang1,3, Jiaming Cao1,3, Yu Chen1,2, Xuanning Wang1,2, Yujie Zhao1,3, Hengkun Ren1,3, Qiang Zheng1,2, Jianing Yu1,2,4
ORCID iDs: Jianing Yu
  1. State Key Laboratory of Membrane Biology, Peking University, Beijing 100871, China
  2. School of Life Sciences, Peking University, Beijing 100871, China
  3. Academy for Advanced Interdisciplinary Studies, Peking University, Beijing 100871, China
  4. IDG/McGovern Institute for Brain Research at Peking University, Beijing 100871, China
Journal: Patterns (New York, N.Y.), volume 7, issue 8, article 101590
Dates: received 8 December 2025; accepted 20 May 2026; published online 17 June 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1016/j.patter.2026.101590 · PMID 42630833 · PMCID PMC13494646 · OpenAlex W7165056200
Open access: gold, a free copy (OpenAlex)
Status: code verified
Methods: Statistics, Smoothing, state filtering, decompositions, Machine learning, Preprocessing, Connectivity, fMRI & imaging, Single-unit activity, calcium imaging
Keywords: Neuropixels, single-neuron tracking, density-based clustering, HDBSCAN, chronic electrophysiology, probe-motion correction, spike sorting, cross-session matching, representational drift
Topic: Neural dynamics and brain function (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: National Natural Science Foundation of China (National Science Foundation of China) (32070983, 32271052, 32571183); Natural Science Foundation of Beijing Municipality (5212007); Peking-Tsinghua Center for Life Sciences; State Key Laboratory of Membrane Biology
Citations: not cited yet (Europe PMC); 65 references in the paper

Abstract

Tracking neurons across days in high-density extracellular recordings is essential for investigating the mechanisms of learning and representational drift. However, in weeks-long recordings, identifying matches across sessions is hindered by changes in spike waveforms and unit turnover. We introduce DANT (density-based across-day neuron tracking), a framework that iterates between density-based clustering in feature space and probe-motion estimation inferred from provisional matches. The estimated motion is then used to reregister spike waveforms across sessions before clustering is recomputed in the next iteration. Within this loop, DANT learns a decision boundary from match and non-match labels and uses it in post hoc curation. Applied to weeks-long Neuropixels recordings from cortex and striatum in freely moving rats during reaction-time and self-timing tasks, DANT substantially increases match yield while maintaining a low false-positive rate relative to existing approaches. These results establish DANT as a general unsupervised solution for longitudinal tracking in chronic recordings.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repositories

Its files are read in the Code ↔ Paper reader above, with 18 matches between paragraphs and lines of code.

cortex-lab/phy

License: BSD-3-Clause
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 807cf1825c16a3d95cb591091c291bad6803e81d, 26 September 2026
Languages: Python (150), Shell (2), JavaScript (2)
Size: 276 files, 154 scripts
Software Heritage: archived
Found in: “Data and code availability”
Holds: README, license file, environment (pyproject.toml, uv.lock, deprecated/environment.yml, deprecated/requirements-dev.txt, deprecated/requirements.txt, deprecated/setup.cfg, deprecated/setup.py), tests, continuous integration, documentation
Not found: CITATION.cff
Tools: Phy (98 files), NumPy (67 files), Matplotlib (8 files), SciPy (2 files), imageio (1 file), Pillow (1 file), scikit-learn (1 file), UMAP (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
156 files

jiumao2/PhyWaveformPlugin

License: GPL-3.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 03097410523d991c704b5a58c28f5e8d911f02dd, 21 March 2025
Languages: Python (5)
Size: 11 files, 5 scripts
Software Heritage: not archived
Found in: “Data and code availability”
Holds: README, license file, documentation
Not found: CITATION.cff, environment file, tests, continuous integration
Tools: Phy (5 files), NumPy (4 files), Matplotlib (2 files), Neo (1 file), pandas (1 file), SciPy (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
7 files

jiumao2/AutoCurationKilosort

License: GPL-3.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: ebf982a976f477cbe59ad53495a9f61e4fc13c5b, 13 July 2026
Languages: MATLAB (158)
Size: 183 files, 158 scripts
Software Heritage: not archived
Found in: the text, “Neural data processing”
Holds: README, license file, documentation, 1 notebook
Not found: CITATION.cff, environment file, tests, continuous integration
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
160 files

jiumao2/DANT_UI

License: GPL-3.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: e86f4419c252ca6f917cebdd35ac0a2c5bcce919, 4 December 2025
Languages: Python (2)
Size: 12 files, 2 scripts
Software Heritage: not archived
Found in: the text, “Manual curation”
Holds: README, license file, environment (pyproject.toml, requirements.txt), documentation
Not found: CITATION.cff, tests, continuous integration
Tools: Matplotlib (1 file), NumPy (1 file), pandas (1 file), SciPy (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
4 files

EnnyvanBeest/UnitMatch

License: CC-BY-NC-SA-4.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 95b6fed5db84d12f67487b92d07f0a2664a6122f, 1 September 2026
Languages: MATLAB (138), Python (68), Jupyter (12), C (1), Fortran (1)
Size: 560 files, 220 scripts
Software Heritage: not archived
Found in: the text, “Comparison with UnitMatch and EMD”
Holds: README, license file, environment (UnitMatchPy/pyproject.toml, UnitMatchPy/requirements-cuda.txt), tests, continuous integration, 12 notebooks
Not found: CITATION.cff, documentation
Tools: Statistics and Machine Learning Toolbox (52 files), NumPy (52 files), Matplotlib (27 files), pandas (20 files), PyTorch (17 files), h5py (12 files), SciPy (12 files), Signal Processing Toolbox (5 files), scikit-learn (5 files), SpikeInterface (3 files), statsmodels (3 files), Violinplot-Matlab (3 files), Optimization Toolbox (2 files), Phy (2 files), CircStat (1 file), Kilosort (1 file), Parallel Computing Toolbox (1 file), seaborn (1 file), shadedErrorBar (1 file), UMAP (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
222 files

Zenodo 19973060

License: GPL-2.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
120 files
At the source:

Zenodo 20021262

License: GPL-3.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Phy (5 files), NumPy (4 files), Matplotlib (2 files), Neo (1 file), pandas (1 file), SciPy (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
7 files
At the source:

Zenodo 19973259

License: GPL-3.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
175 files
At the source:

Zenodo 19972266

License: GPL-3.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
160 files
At the source:

Zenodo 19972858

License: GPL-3.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (8 files), Matplotlib (5 files), SciPy (5 files), h5py (2 files), scikit-learn (2 files)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
12 files
At the source:

Zenodo 19973154

License: GPL-3.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Matplotlib (1 file), NumPy (1 file), pandas (1 file), SciPy (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
4 files
At the source:

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 11 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 1,005 scripts, each with its path and the digest of its content;
  • 18 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

Datasets cited

Data and code availability

Example data for the rat presented in Figures 2, 3, and 4 are available as part of the software demo at figshare: https://doi.org/10.6084/m9.figshare.30596258.v2.60,61 All additional data and code are available at Zenodo: https://doi.org/10.5281/ZENODO.20019488.62

DANT is available as both a MATLAB implementation on GitHub at https://github.com/jiumao2/DANT (GPL-3.0 license)63 and a Python implementation at https://github.com/jiumao2/pyDANT (GPL-3.0 license).64 It utilizes the HDBSCAN Python package for clustering27 (BSD-3-Clause license). Neuropixels data acquisition was performed using SpikeGLX at http://billkarsh.github.io/SpikeGLX/ (Janelia Research Campus Software Copyright 1.2). The Python application for manual curation of DANT results is available at https://github.com/jiumao2/DANT_UI (GPL-3.0 license).65 Spike sorting was conducted with a modified version of Kilosort 2.5 at https://github.com/jiumao2/Kilosort_2_5 (GPL-2.0 license),51 followed by manual curation using Phy2 at https://github.com/cortex-lab/phy (BSD-3-Clause license), with custom plugins available at https://github.com/jiumao2/PhyWaveformPlugin (GPL-3.0 license).52 For a subset of datasets, automated curation was performed using AutoCurationKilosort at https://github.com/jiumao2/AutoCurationKilosort (GPL-3.0 license).53

Reproduced under the paper's license (CC BY), from the paper cited above.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 2, 28 September 2026

  • Authors: added Jianing Yu (0009-0006-4924-821X); removed Jianing Yu

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 9 authors, 9 keywords, 4 funders, 59 references.

Cite

This paper

Huang, Y., Wang, H., Cao, J., Chen, Y., Wang, X., Zhao, Y., Ren, H., Zheng, Q., & Yu, J. (2026). Density-based longitudinal neuron tracking in high-density electrophysiological recordings. Patterns (New York, N.Y.), 7(8), 101590. https://doi.org/10.1016/j.patter.2026.101590

BibTeX

@article{huang2026density,
author = {Huang, Yue and Wang, Hanbo and Cao, Jiaming and Chen, Yu and Wang, Xuanning and Zhao, Yujie and Ren, Hengkun and Zheng, Qiang and Yu, Jianing},
title = {{Density-based longitudinal neuron tracking in high-density electrophysiological recordings}},
journal = {Patterns (New York, N.Y.)},
year = {2026},
month = jun,
volume = {7},
number = {8},
pages = {101590},
publisher = {Elsevier},
issn = {2666-3899},
doi = {10.1016/j.patter.2026.101590},
url = {https://doi.org/10.1016/j.patter.2026.101590},
pmid = {42630833},
pmcid = {PMC13494646}
}

RIS

TY - JOUR
AU - Huang, Yue
AU - Wang, Hanbo
AU - Cao, Jiaming
AU - Chen, Yu
AU - Wang, Xuanning
AU - Zhao, Yujie
AU - Ren, Hengkun
AU - Zheng, Qiang
AU - Yu, Jianing
TI - Density-based longitudinal neuron tracking in high-density electrophysiological recordings
T2 - Patterns (New York, N.Y.)
J2 - Patterns (N Y)
PY - 2026
DA - 2026/06/17
VL - 7
IS - 8
SP - 101590
SN - 2666-3899
PB - Elsevier
DO - 10.1016/j.patter.2026.101590
UR - https://doi.org/10.1016/j.patter.2026.101590
LA - en
ER -

CSL-JSON

{
"id": "10.1016/j.patter.2026.101590",
"type": "article-journal",
"title": "Density-based longitudinal neuron tracking in high-density electrophysiological recordings",
"container-title": "Patterns (New York, N.Y.)",
"author": [
{
"family": "Huang",
"given": "Yue"
},
{
"family": "Wang",
"given": "Hanbo"
},
{
"family": "Cao",
"given": "Jiaming"
},
{
"family": "Chen",
"given": "Yu"
},
{
"family": "Wang",
"given": "Xuanning"
},
{
"family": "Zhao",
"given": "Yujie"
},
{
"family": "Ren",
"given": "Hengkun"
},
{
"family": "Zheng",
"given": "Qiang"
},
{
"family": "Yu",
"given": "Jianing"
}
],
"container-title-short": "Patterns (N Y)",
"volume": "7",
"issue": "8",
"page": "101590",
"DOI": "10.1016/j.patter.2026.101590",
"PMID": "42630833",
"PMCID": "PMC13494646",
"ISSN": "2666-3899",
"publisher": "Elsevier",
"URL": "https://doi.org/10.1016/j.patter.2026.101590",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
17
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.7554/elife.110588 [code]
Opening the black box toward a modular approach to spike sorting.
Journal: eLife
In common: Kilosort, Neo, SpikeInterface, 10 other tools, extracellular electrophysiology (units, LFP), 11 references
[2] doi:10.1038/s41593-026-02232-0 [code]
Entorhinal cortex represents task-relevant remote locations independently of CA1.
Journal: Nature neuroscience
In common: Phy, Kilosort, SpikeInterface, 14 other tools, 3 references
[3] doi:10.1038/s41467-026-75347-4 [code]
Sleep reveals dynamics integrating and segregating movement and stimulus representations in V1.
Journal: Nature communications
In common: Phy, CircStat, imageio, 12 other tools, 1 reference
[4] doi:10.1038/s41467-026-76581-6 [code]
Thalamocortical bursts encode reward contingencies and drive associative learning.
Journal: Nature communications
In common: Kilosort, Violinplot-Matlab, CircStat, 9 other tools, 4 references
[5] doi:10.1126/sciadv.aef0343 [code]
Learning induces activation-mechanism-dependent neural plasticity in an intracortical microstimulation task.
Journal: Science advances
In common: Neo, SpikeInterface, UMAP, 10 other tools, 2 references
[6] doi:10.1016/j.neuron.2026.03.034 [code]
Dentate gyrus interneurons modulate winner-take-all network dynamics in freely behaving mice.
Journal: Neuron
In common: shadedErrorBar, CircStat, Optimization Toolbox, 11 other tools, 2 references
[7] doi:10.1523/jneurosci.2001-25.2026 [code]
Dynamics of Dentate Gyrus Place Cells and Dentate Spikes during Spatial and Nonspatial Changes in Environments.
Journal: The Journal of neuroscience : the official journal of the Society for Neuroscience
In common: Phy, CircStat, Optimization Toolbox, 6 other tools, extracellular electrophysiology (units, LFP), 5 references
[8] doi:10.1371/journal.pone.0321830
Long-term neuron tracking reveals balance of stability and plasticity in functional properties.
Journal: PloS one
In common: 12 references
[9] doi:10.1038/s41593-026-02357-2 [code]
Experience reorganizes content-specific memory traces in macaques.
Journal: Nature neuroscience
In common: Phy, CircStat, Optimization Toolbox, 10 other tools, 1 reference
[10] doi:10.1016/j.isci.2026.115488 [code]
An integrated &lt;i&gt;i&lt;/i&gt; &lt;i&gt;n vitro&lt;/i&gt; platform and biophysical modeling approach for studying synaptic transmission in isolated neuronal pairs.
Journal: iScience
In common: Neo, SpikeInterface, h5py, 9 other tools, 2 references

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.