Denoise Bruker timsTOF .d folders. Real ions form vertical streaks along the
ion-mobility axis. Chemical and electronic noise is short, isolated, or
scattered. dnoise keeps the streaks and drops the rest, writing a cleaned .d
that stays drop-in compatible with the Bruker SDK and existing search tools.
Across 72 ddaPASEF + diaPASEF benchmark runs: 35-53% smaller native
binaries, LFQ accuracy preserved, and at most a 2.3% change in
identifications. All of those runs used the same default parameters with no
per-run tuning. They come from one instrument and two gradients, though, so
other instruments and sample types are untested. Validate on your own data
before committing: --dry-run reports the reduction without writing
anything, and MS1-only mode (the default) leaves identifications untouched.
cargo install dnoiseOr download a prebuilt binary (CLI + GUI, Linux/macOS/Windows) from the releases page.
The defaults are the configuration benchmarked in the paper, so no flags are needed:
dnoise input.d output.dINFO dnoise::writer: denoise: frame inventory scheme="ddaPASEF" frames=8639 ms1=786 msms=7853
INFO dnoise::writer: MS1 selection-polygon gate active
INFO dnoise::writer: denoise: complete frames=8639 raw_points=300509979 kept_points=110092035 kept_pct=36.64
By default only MS1 frames are filtered, so MS/MS spectra (and therefore identifications) are untouched. Acquisition-aware gates detect whether the run is ddaPASEF or diaPASEF and apply the matching geometry automatically. On runs where a gate's geometry is absent it is a silent no-op.
Useful variations:
| Command | What it does |
|---|---|
dnoise in.d --in-place |
Overwrite the input (atomically, with a rollback on failure). |
dnoise in.d out.d --dry-run |
Report the reduction without writing anything. |
dnoise in.d out.d --denoise-msms |
Also denoise MS/MS spectra (changes IDs, re-search to measure). |
dnoise in.d out.d --config my.toml |
Load parameters from a TOML file (example). |
dnoise in.d out.d --report run.json |
Write effective config + reduction stats as JSON. |
Every knob (filter parameters, per-gate control, region-of-interest cropping,
smoothing and centroiding stages, logging) is documented in the
full reference and in dnoise --help. The method
itself is described in ALGORITHM.md.
dnoise is also a Rust library (docs.rs). Depend on it without the CLI's dependencies:
[dependencies]
dnoise = { version = "0.1", default-features = false }use dnoise::{FilterParams, Stages, denoise};
use std::path::Path;
let stats = denoise(
Path::new("input.d"),
Path::new("output.d"),
&FilterParams::default(),
&Stages::default(), // optional stages (halo, gates, smoothing, centroiders); all off
false, // don't overwrite an existing output
)?;
println!("{} -> {} points", stats.raw_points, stats.kept_points);
# Ok::<(), dnoise::DnoiseError>(())A lower-level API exposes the filter on in-memory frames (FlatFrame,
filter_iterated) and the type-2 codec directly. See
docs.rs and docs/reference.md.
dnoise reads compression type 2 (and uncompressed) .d input and always
writes type 2, byte-layout compatible with the Bruker SDK / timsdata DLL.
Validate any output with
cargo run --release --example validate -- <PATH.d>.
The manuscript, its Supporting Information, and the benchmark suite that
produced them (configs, scripts, and the frozen dnoise source they ran
against) live in a separate repository, which will be linked here and
archived with a DOI when the paper is published. It rebuilds every figure
and table from the raw .d files on PRIDE
(PXD070049).
If you use dnoise in your research, please cite it. Machine-readable metadata is in CITATION.cff (GitHub's "Cite this repository" button reads it), and each tagged release is archived on Zenodo.
Garrett, P., Diedrich, J. K., & Yates, J. R. III. dnoise (version 0.1.0) [Software]. Zenodo. https://doi.org/10.5281/zenodo.21959649
The accompanying paper is in preparation. Its citation will be added here on publication.
Licensed under the MIT License.
