<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0" xml:lang="en">
  <teiHeader>
    <fileDesc>
      <titleStmt>
        <title>Kilosort: realtime spike-sorting for extracellular electrophysiology with hundreds of channels</title>
        <author>Pachitariu</author>
        <author>Steinmetz</author>
        <author>Kadir</author>
        <author>Carandini</author>
        <author>D</author>
      </titleStmt>
      <publicationStmt>
        <p>Tag layer of the DHSS Meta-Tagging Project. The article text is reproduced from the
           staged copy named in sourceDesc and is not altered; the tags are held separately in
           standOff so that overlapping and nested spans are preserved.</p>
      </publicationStmt>
      <sourceDesc>
        <bibl>
          <title>Kilosort: realtime spike-sorting for extracellular electrophysiology with hundreds of channels</title>
          <date>2016</date>
          <publisher></publisher>
          <idno type="DOI">10.1101/061481</idno>
          
          <idno type="record">Pachitariu2016-kilosort-realtime-spike-sorting-for-extracel</idno>
          <note type="staged-file">Pachitariu2016-kilosort-realtime-spike-sorting-for-extracel.txt, the project's staged copy</note>
          <note type="text-sha1">50de3bb9bf3d1b55008adf109c79a18f4b762bb6</note>
          <note type="rights">not-redistributable</note>
        </bibl>
      </sourceDesc>
    </fileDesc>
    <profileDesc>
      <textClass><keywords><term>neuroscience</term></keywords></textClass>
      <particDesc>
        <person xml:id="paper"><p>the paper's own words</p></person>
        <person xml:id="tagger"><p>the tag layer; a sentence written by the tagger about the
          paper, always anchored to a quotation but not itself a quotation</p></person>
      </particDesc>
    </profileDesc>
    <revisionDesc>
      <change when="2026-10-06"
              who="build_paper_edition.py">0 spans located by searching the stored text for the quote's exact words, allowing any whitespace between them</change>
    </revisionDesc>
  </teiHeader>
  <standOff>
    <spanGrp type="tags">
      <span xml:id="t0" type="claim_type" ana="#claim_type" resp="#paper">
        <label>method</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t1" type="phenomenon" ana="#phenomenon" resp="#paper">
        <label>spike sorting of high-channel-count extracellular recordings</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t2" type="method" ana="#method" resp="#paper">
        <label>system-or-tool-building</label>
        <term>system-or-tool-building</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t3" type="mechanisms" ana="#mechanisms[0]" resp="#tagger">
        <label>mechanisms</label>
        <term>Replacing the full matrix convolution by a rank-3 low-rank template decomposition cuts the number of filtering operations by the ratio of channel count to template rank, which is what makes near-realtime sorting of hundreds of channels possible</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t4" type="mechanisms" ana="#mechanisms[1]" resp="#tagger">
        <label>mechanisms</label>
        <term>Over-split clusters arise because the fitting algorithm splits a high-variance cluster across several templates in order to reduce total reconstruction error, which is why the resulting cluster pairs form one continuous density and can be merged automatically</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t5" type="limitations" ana="#limitations[0]" resp="#tagger">
        <label>Manual operator curation is still needed despite the automatic merging heuristic, mainly because of electrode drift and other non-stationarities.</label>
        <note>what this limits: any claim that the pipeline is automatic: OPERATOR CURATION IS STILL REQUIRED, PRIMARILY DUE TO NON-STATIONARITIES IN THE RECORDINGS SUCH AS ELECTRODE DRIFT</note>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t6" type="limitations" ana="#limitations[1]" resp="#tagger">
        <label>The optimisation can settle in non-optimal local minima, which the authors only ameliorate by annealing several parameters.</label>
        <note>what this limits: the reproducibility of a given sort: LIKE MOST CLUSTERING ALGORITHMS, THIS MODEL IS PRONE TO NON-OPTIMAL LOCAL MINIMA</note>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t7" type="limitations" ana="#limitations[2]" resp="#tagger">
        <label>The speed comparison against the established framework was not run at the largest channel count, so no 384-channel baseline exists.</label>
        <note>what this limits: the speed comparison as a guide at the largest channel counts: the established framework NEEDED 480 MINUTES TO SORT THE 32 CHANNEL RECORDING, AND 15,000 MINUTES (10 DAYS) TO SORT THE 128 CHANNEL RECORDING, and no 384-channel comparison was run</note>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t8" type="limitations" ana="#limitations[3]" resp="#tagger" cert="1.0">
        <label>The ground-truth spikes are the curated output of one of the two algorithms being compared.</label>
        <note>what this limits: the accuracy comparison reported here: the hybrid ground truth data set was built from all the clusters of a recording previously analysed with KlustaKwik and curated by a human expert, and KlustaKwik is the algorithm Kilosort is compared against</note>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t9" type="limitations" ana="#limitations[4]" resp="#tagger" cert="1.0">
        <label>The accuracy benchmark was made by cropping a larger one.</label>
        <note>what this limits: the 32-channel accuracy results: the authors detail only the 32 channel benchmarks, which they created by cropping the full 128 channel hybrid benchmark</note>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t10" type="limitations" ana="#limitations[5]" resp="#tagger" cert="1.0">
        <label>Scores are also reported after a best-possible merging step that no user could perform.</label>
        <note>what this limits: any score quoted from this figure: panels g-i repeat the results after greedy best possible merges, and a further panel gives the number of merges required to reach the best score</note>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t11" type="controls" ana="#controls[0]" resp="#tagger" cert="0.9">
        <label>the denoised waveform SUBTRACTED from its original location after being added elsewhere</label>
        <note>eliminates: an artificial increase in spike density at any point on the probe - a hybrid-data test that adds spikes without removing them changes the very statistic the sorter is being judged on · outcome (stated by the tagger, no quotation): held</note>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t12" type="concepts" ana="#concepts[0]" resp="#paper">
        <label>hybrid ground truth</label>
        <term>hybrid ground truth</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t13" type="concepts" ana="#concepts[1]" resp="#paper">
        <label>KlustaKwik</label>
        <term>KlustaKwik</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t14" type="concepts" ana="#concepts[2]" resp="#paper">
        <label>human expert</label>
        <term>human expert</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t15" type="concepts" ana="#concepts[3]" resp="#paper">
        <label>greedy best possible merges</label>
        <term>greedy best possible merges</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t16" type="concepts" ana="#concepts[4]" resp="#paper">
        <label>ground truth neurons</label>
        <term>ground truth neurons</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t17" type="senses" ana="#senses[0]" resp="#tagger" cert="1.0">
        <label>ground truth, here - MANUFACTURED, NOT OBSERVED: the paper&#x27;s own term is &#x27;hybrid ground truth&#x27;, and the data set is made by taking human-curated clusters from a previous analysis, denoising their waveforms and re-inserting them elsewhere in a real recording, so the target the sorters must recover is a cleaned copy of an earlier judgement</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t18" type="senses" ana="#senses[1]" resp="#tagger" cert="1.0">
        <label>the reference standard&#x27;s provenance - THE COMPETITOR&#x27;S OUTPUT: the clusters come from a recording previously analysed with KlustaKwik, which is the algorithm Kilosort is being compared against; re-insertion at new locations makes detection a fresh problem, but the standard is still derived from one of the things measured against it</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t19" type="senses" ana="#senses[2]" resp="#tagger" cert="1.0">
        <label>the reported score - GIVEN TWICE, ONCE AFTER AN ORACLE MERGE: the same panels are repeated after greedy best possible merges, with the number of merges needed to reach that best score shown separately, so one of the two numbers is an upper bound rather than an outcome</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t20" type="claim_relations" ana="#claim_relations[0]" resp="#tagger">
        <label>extends → a previous template-matching method (numbered reference 6)</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t21" type="claim_relations" ana="#claim_relations[1]" resp="#tagger">
        <label>extends → masked KlustaKwik (numbered reference 18)</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t22" type="claim_relations" ana="#claim_relations[2]" resp="#tagger">
        <label>builds-on → the hybrid ground truth benchmarking technique (numbered reference 18)</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t23" type="content_tags" ana="#content_tags.statistics[0]" resp="#tagger">
        <label>singular value decomposition</label>
        <term>singular value decomposition</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t24" type="content_tags" ana="#content_tags.statistics[1]" resp="#tagger">
        <label>k-means clustering</label>
        <term>k-means clustering</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t25" type="content_tags" ana="#content_tags.statistics[2]" resp="#tagger">
        <label>covariance matrix estimation</label>
        <term>covariance matrix estimation</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t26" type="content_tags" ana="#content_tags.statistics[3]" resp="#tagger">
        <label>Gaussian distribution</label>
        <term>Gaussian distribution</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t27" type="content_tags" ana="#content_tags.findings[0]" resp="#tagger">
        <label>Kilosort represents the raw voltage as a sum of template waveforms triggered at spike times, which allows spatiotemporally overlapping spikes to be identified and resolved rather than missed.</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t28" type="content_tags" ana="#content_tags.findings[1]" resp="#tagger">
        <label>The established KlustaKwik framework needed 480 minutes to sort a 32-channel recording and 15,000 minutes a 128-channel one on a CPU cluster, and Kilosort was a significant improvement on that.</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t29" type="content_tags" ana="#content_tags.findings[2]" resp="#tagger">
        <label>On hybrid ground-truth data Kilosort yielded well-isolated units (score above 0.9) for 53% of ground-truth neurons versus 35% for KlustaKwik.</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t30" type="content_tags" ana="#content_tags.findings[3]" resp="#tagger">
        <label>After greedy best-possible operator merges Kilosort still led, 69% of units above score 0.9 against 60% for KlustaKwik.</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t31" type="content_tags" ana="#content_tags.findings[4]" resp="#tagger">
        <label>Kilosort&#x27;s accuracy advantage came from missing fewer spikes rather than from fewer false positives, which the authors attribute to its resolution of overlapping spikes.</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t32" type="content_tags" ana="#content_tags.findings[5]" resp="#tagger">
        <label>Fitting each spike with its own three-component spatiotemporal SVD (&quot;private PCs&quot;) left about five times less residual waveform variance than one common per-channel PCA basis.</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t33" type="content_tags" ana="#content_tags.findings[6]" resp="#tagger">
        <label>Kilosort&#x27;s run time scales linearly with the number of recorded neurons rather than the number of channels.</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t34" type="content_tags" ana="#content_tags.definitions[0]" resp="#tagger">
        <label>Kilosort</label>
        <term>Kilosort</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t35" type="content_tags" ana="#content_tags.definitions[1]" resp="#tagger">
        <label>spike sorting</label>
        <term>spike sorting</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t36" type="content_tags" ana="#content_tags.definitions[2]" resp="#tagger">
        <label>common average referencing</label>
        <term>common average referencing</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t37" type="content_tags" ana="#content_tags.definitions[3]" resp="#tagger">
        <label>zero-phase component analysis (ZCA)</label>
        <term>zero-phase component analysis (ZCA)</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t38" type="content_tags" ana="#content_tags.definitions[4]" resp="#tagger">
        <label>hybrid ground truth</label>
        <term>hybrid ground truth</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t39" type="content_tags" ana="#content_tags.definitions[5]" resp="#tagger">
        <label>private PCs</label>
        <term>private PCs</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t40" type="content_tags" ana="#content_tags.variables[2]" resp="#tagger">
        <label>run time</label>
        <term>run time</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t41" type="content_tags" ana="#content_tags.variables[4]" resp="#tagger">
        <label>spike density</label>
        <term>spike density</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t42" type="content_tags" ana="#content_tags.variables[5]" resp="#tagger">
        <label>miss rate</label>
        <term>miss rate</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t43" type="content_tags" ana="#content_tags.variables[6]" resp="#tagger">
        <label>false positive rate</label>
        <term>false positive rate</term>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t44" type="content_tags" ana="#content_tags.quantities[0]" resp="#tagger">
        <label>10, 29 and 140 minutes — Kilosort run times for 32-, 128- and 384-channel recordings on a single GTX 980Ti workstation</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t45" type="content_tags" ana="#content_tags.quantities[1]" resp="#tagger">
        <label>480 minutes / 15,000 minutes (10 days) — KlustaKwik run times for the 32-channel and 128-channel recordings, the comparison baseline</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t46" type="content_tags" ana="#content_tags.quantities[2]" resp="#tagger">
        <label>53% vs 35% — share of ground-truth neurons sorted with a score above 0.9 by Kilosort versus KlustaKwik before manual merges</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t47" type="content_tags" ana="#content_tags.quantities[3]" resp="#tagger">
        <label>69% vs 60% — share of units scoring above 0.9 for Kilosort versus KlustaKwik after best possible merges</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t48" type="content_tags" ana="#content_tags.quantities[4]" resp="#tagger">
        <label>∼5 times — reduction in residual waveform variance from per-spike private PCs relative to a single per-channel PCA</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t49" type="content_tags" ana="#content_tags.quantities[5]" resp="#tagger">
        <label>16 — number of hybrid ground-truth dataset instantiations on which both algorithms were run</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
      <span xml:id="t50" type="content_tags" ana="#content_tags.quantities[6]" resp="#tagger">
        <label>Nchan/Nrank — factor by which the low-rank template decomposition reduces filtering operations, with channel count typically above 100 and template rank typically 3</label>
        <note type="quotation-withheld">Quotation withheld because this record is not cleared for redistribution.</note>
      </span>
    </spanGrp>
  </standOff>
  <text>
    <body>
      <p><note type="rights">The full text of this article is not redistributable, so it is
      not included here. The evidence sentences are withheld with it; the tag layer and its
      grounding status remain. The article itself is at https://doi.org/10.1101/061481.</note></p>
    </body>
  </text>
</TEI>
