Skip to content
pgarrett-scrippsPublic

About

Denoise Bruker timsTOF .d files by keeping ion-mobility streaks (Rust CLI + library + GUI)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

dnoise

CI Crates.io Docs.rs License DOI

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.

A real timsTOF MS1 frame: kept signal forms streaks, discarded noise is scattered

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. MS1-only mode (the default) preserves MS/MS spectra; validate downstream identification and quantification results for your workflow.

Install

cargo install dnoise

Or download a prebuilt binary (CLI + GUI, Linux/macOS/Windows) from the releases page.

Usage

The defaults are the configuration benchmarked in the paper, so no flags are needed:

dnoise input.d output.d
INFO 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 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 Replace input after validation, with recovery on installation 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.
dnoise in.d out.d --skip-validation Skip full input/output decoding checks; keep structural and file-safety checks.
dnoise validate out.d Check metadata and decode every output frame.
dnoise metadata out.d Read the processing history stored inside the folder.
dnoise batch jobs.json Process a portable batch manifest.

Every completed output includes dnoise.provenance.json (version, exact settings, statistics, and processing history) and dnoise.config.toml (a reusable recipe). These files travel with the .d folder. See processing metadata and batch workflows.

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.

Library usage

dnoise is also a Rust library (docs.rs). Depend on it without the CLI's dependencies:

[dependencies]
dnoise = { version = "0.3", 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.

Neighbor support (experimental)

Use nearby matching observations to support weak signals during filtering:

dnoise input.d output.d --denoise-msms \
  --prm-neighbor-radius 1 --dia-neighbor-radius 1 --ms1-neighbor-radius 1

Each radius defaults to 0 (off). 1 uses the previous and next compatible observation, within 5 seconds of the current frame. PRM matches targets; DIA matches isolation windows; MS1 skips fragment frames. The combined spectrum only informs filtering: output retains native points and intensities unless optional smoothing/centroiding is enabled. Quantitative accuracy remains unvalidated. See neighbor options, boundaries, and validation.

Compatibility

Type-2 synchro-PASEF, midia-PASEF, and Slice-PASEF examples are supported through the DIA path, including experimental MS/MS and neighbor filtering. See downloaded examples, geometry handling, and validation.

prm-PASEF type-2 .d files support automatic detection and checked target/event metadata. By default, only MS1 is denoised and PRM fragments are preserved unless explicitly cropped. --denoise-msms enables experimental PRM fragment filtering within each isolation event; validate quantitative results before routine use. Discovery acquisition gates stay disabled. --all-frames is rejected for PRM; mixed/unknown acquisitions reject all fragment denoising. See targeted proteomics support and validation.

dnoise reads compression type 2 .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>.

Reproducing the paper

The accompanying manuscript's results were produced with the dnoise v0.4.0 release. The original submission used v0.1.0, archived on Zenodo under 10.5281/zenodo.21959650; 0.4.0 changes the default MS1 gates, so its output differs (see the 0.4.0 entry in CHANGELOG.md). The raw benchmark .d files are public on PRIDE (PXD070049); the manuscript and Supporting Information report the complete dnoise parameters and downstream search settings.

Citing this work

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.5.0) [Software]. Zenodo. https://doi.org/10.5281/zenodo.21959649

The accompanying paper has been submitted to the Journal of the American Society for Mass Spectrometry. Its preprint and journal citation will be added here when available.

Planned maintenance, usability improvements, and research extensions are in the project roadmap.

License

Licensed under the MIT License.

About

Denoise Bruker timsTOF .d files by keeping ion-mobility streaks (Rust CLI + library + GUI)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages