Citing axonforge
If the software did part of your analysis, cite the version you ran. A citation without a version number is not reproducible, because defaults have changed twice in this project's history and will change again.
Software citation#
Plain text, for a reference list:
Brauner, I. and Reyn, T. (2026). axonforge: spike detection, sorting
and interval statistics for extracellular recordings. Version 0.7.2.
Harlin Institute for Neural Dynamics.
As BibTeX:
@software{axonforge_0_7_2,
author = {Brauner, Ida and Reyn, Tomas},
title = {axonforge: spike detection, sorting and interval
statistics for extracellular recordings},
version = {0.7.2},
year = {2026},
month = {9},
publisher = {Harlin Institute for Neural Dynamics},
url = {https://axonforge.dev/}
}
The installed package can tell you what to write, so that the version in the paper is the version that ran:
python - <<'EOF'
import axonforge
print(axonforge.citation()) # plain text
print(axonforge.citation(style="bibtex")) # the entry above
EOF
There is no methods paper to cite yet. One is being written; until it exists, citing a preprint that does not exist is worse than citing the software, and we would rather say so plainly than leave a placeholder here.
What to report in a methods section#
Every value below changes the result, and all of them are in
units.provenance after an analysis, so this list is a matter of copying rather
than of remembering.
| Report | Field | Default |
|---|---|---|
| Version | axonforge_version | — |
| Filter band and order | filt.bandpass | 300–6000 Hz, order 4, zero-phase |
| Referencing | filt.common_median | per channel group |
| Noise estimator | detect.sigma | median/0.6745 |
| Threshold multiplier | detect.k | 4.5 |
| Polarity and dead time | detect.polarity, dead_time_ms | negative, 1.0 ms |
| Waveform window | waveform.pre_ms, post_ms | 0.5 and 1.5 ms |
| Alignment mode | waveform.align.mode | peak, interpolated |
| Components and criterion | sort.n_components, criterion | 3, BIC |
| Refractory period used | quality.refractory_ms | 1.5 ms |
| Manual curation | provenance.curation | list of merges and drops |
«Spikes were detected and sorted with axonforge 0.7.2: common median referencing by tetrode group, zero-phase Butterworth bandpass 300–6000 Hz, threshold at 4.5 σ with σ estimated as the median absolute deviation scaled by 0.6745, 1.0 ms dead time, waveforms −0.5 to +1.5 ms aligned on the interpolated negative peak, three principal components, and a Gaussian mixture with model order chosen by BIC over one to eight components. Clusters with more than 1 % of intervals below 1.5 ms were discarded.»
Authors#
- Ida Brauner — detection, filtering, the container format, maintenance.
- Tomas Reyn — sorting, quality metrics, the synthetic benchmark.
- Readers in the laboratory who found the sidecar design confusing and said so, which is why the sidecar now has three required fields instead of nine.
Correspondence: maintainers@axonforge.dev. Development was supported by internal funds of the Harlin Institute for Neural Dynamics; no external grant paid for it, and no commercial party has a say in what it does.
Licence#
BSD 3-clause. In short: use it for anything, including commercially; keep the copyright notice and the list of conditions in redistributions, in source or in binary form; do not use the names of the project or its authors to endorse something derived from it without permission. It is provided without warranty of any kind.
The full text ships as LICENSE in the source tarball and in the installed
package metadata. Nothing in the dependency set imposes stricter terms: NumPy, SciPy, h5py
and matplotlib are all permissively licensed.
Citing the benchmark separately#
If you reuse the synthetic sets from validation — the
twelve templates and the noise construction — say which signal-to-noise levels and which
seeds you used. The whole generator is axonforge.bench in the same package and
under the same licence, so it needs no separate citation beyond the version.