Skip to content

Releases: CompOmics/ms2rescore

v4.0.1

Choose a tag to compare

@RalfG RalfG released this 24 Jul 21:35
7d2abba

Changed

  • deeplc feature generator: deeplc_retrain option renamed to finetune (redundant naming, already scoped under deeplc). The old name is still accepted but deprecated, and emits a warning.
  • Docs: Extend docs with migration guide; add more details to CONTRIBUTING.rst; update changelog with past releases; consolidate v4.0.0 alpha and stable release changelogs.
  • Dependencies: Bump DeepLC dependency to stable v4.0.0; rely on uv.lock for installer versions instead of explicitly duplicated pins.

Fixed

  • Removed stale ms2_tolerance option from the default ms2pip feature generator configuration, schema, and example configs. Fragment tolerance is configured centrally via the top-level tolerance_value/tolerance_mode options; MS2PIPFeatureGenerator no longer accepts
    ms2_tolerance.
  • Documented model_dir (ms2pip feature generator) in the configuration schema; it already worked but was missing from the schema.
  • Corrected the configuration schema's default for im2deep's reference_dataset, which incorrectly claimed "Meier_unimod.parquet". The actual default falls through to IM2Deep's own bundled reference dataset.
  • FixReadTheDocs build by removing placeholder link that was being interpreted as cross-reference.
  • Fixed missing feature-weights chart in HTML report.

All changes: v4.0.0...v4.0.1

v4.0.0

Choose a tag to compare

@ArthurDeclercq ArthurDeclercq released this 17 Jul 20:49

Added

  • New rescoring engine: ristretto, a lean, dependency-light (numpy/scikit-learn/pandas only) reimplementation of the Percolator/Käll semi-supervised algorithm, purpose-built for MS²Rescore.
  • New rescoring configuration option: train_fdr and model ("svm", default, or "lda", faster but less powerful).
  • New top-level report_fdr configuration option: FDR threshold used for console-logged identification counts, the HTML report's stats/charts, and FlashLFQ output filtering. Previously hardcoded at 1% throughout.
  • Automatic inference of search-engine score direction (higher-is-better vs. lower-is-better) via spectrum-competed target-decoy evaluation, replacing the user-set lower_score_is_better option. Grouped by run, so multi-file input sharing native spectrum/scan IDs across runs doesn't corrupt the inferred direction.
  • Rescoring result tables (<prefix>.psms.tsv, .peptidoforms.tsv, .peptides.tsv, .proteins.tsv, .weights.tsv) are now always written as plain TSV.
  • ms2rescore-report CLI: new --fdr option to regenerate a report at a different FDR threshold without rerunning rescoring.
  • New MS2 feature generator using Rust-based ms2rescore_rs for direct spectrum feature extraction (intensity ratios, matched ion counts/percentages, hyperscore).
  • New basic features: theoretical_mass, experimental_mass, mass_error, pep_len.
  • annotate_spectra(): annotates all PSM spectra once before feature generators run, eliminating redundant per-generator spectrum parsing.
  • Top-level configuration options fragmentation_model, tolerance_value, and tolerance_mode to control centralized fragment ion annotation (defaults: cidhcd, 0.02 Da).
  • Mumble integration (optional, beta): a new PSM generator for exploring alternative peptide identifications via candidate mass-shift modifications (pip install ms2rescore[mumble]).
  • Intermediate file output on feature-generation or rescoring errors, enabling recovery by rerunning with a modified configuration instead of restarting from scratch.
  • Feature generators are intelligently skipped when all their features are already present in the input PSM file (e.g., on a recovery run).
  • Standalone HTML report regeneration from a PSM TSV file alone -- no config or log file required; before/after comparisons are reconstructed from the PSM list's provenance data.
  • ParseSpectrumError exception for spectrum-parsing failures.

Changed

  • MS2 and MS2PIP feature calculation migrated to Rust via ms2rescore_rs (~5x speed-up).
  • Spectrum files are parsed and annotated once, up front, and shared across all feature generators.
  • DeepLC upgraded to its v4 API: dataset-wide processing with per-run calibration or finetuning. New multitask model leads to much improved performance, even without finetuning.
  • IM2Deep upgraded to its v2 API (im2deep>=2.0.1): dataset-wide processing with per-run CCS calibration using reference peptides.
  • Basic feature generator uses fixed charge encoding (charges 1-6) instead of a dynamic per-dataset range.
  • HTML report generation (in-run and standalone) reconstructs before/after rescoring comparisons from the main PSM list's provenance data, rather than relying on separately persisted result tables.
  • Report/identification-overlap comparisons key on (run, spectrum_id) instead of bare spectrum_id, so multiple input files reusing the same native spectrum IDs no longer collide.
  • Multi-run PSM lists are disambiguated during rescoring/competition via a run identifier, instead of relying on spectrum ID alone.
  • max_psm_rank_output > 1 now applies consistently across the main output, rescoring tables, and report: multiple ranked PSMs per spectrum, with q-values/PEPs computed per-row rather than through full spectrum competition. Intended for surfacing ambiguous candidates (e.g. from Mumble), not a statistically rigorous FDR-controlled count.
  • Main PSM list output renamed <prefix>.psms.tsv<prefix>.tsv; the crash-recovery intermediate file renamed the same way (<prefix>.intermediate.tsv).
  • Dependencies upgraded: deeplc>=4.0.0, im2deep>=2.0.1, ms2pip>=4.2.0, ms2rescore_rs>=0.5.0. Added pyarrow.
  • numpy 2.0 compatibility.
  • Python 3.11 or newer is now required.

Removed

  • [BREAKING] Mokapot rescoring engine and dependency removed.
  • [BREAKING] Percolator CLI integration removed (the separate engine that shelled out to a locally-installed percolator binary). ristretto is now the only rescoring engine.
  • [BREAKING] MaxQuant feature generator removed; functionality consolidated into the MS2 feature generator.
  • [BREAKING] ionmob feature generator removed; replaced by IM2Deep v2.
  • [BREAKING] rescoring_engine configuration option removed (mokapot/Percolator-specific: fasta_file, write_weights, write_txt, protein_kwargs), replaced by rescoring.
  • [BREAKING] Top-level fasta_file configuration option and FASTA-based protein inference removed (mokapot-specific). Does not affect Mumble's separate psm_generator.mumble.fasta_file option, which is unrelated and unchanged.
  • [BREAKING] lower_score_is_better configuration option removed; score direction is always auto-inferred now, with no configuration-level override.
  • [BREAKING] write_rescoring_tables configuration option removed -- rescoring tables are unconditionally written.
  • [BREAKING] PIN (Percolator) file output removed; the main PSM list TSV already carries all rescoring features.
  • [BREAKING] Ability to skip rescoring via configuration removed; rescoring always runs.
  • [BREAKING] ms2_tolerance, spectrum_path, and spectrum_id_pattern parameters removed from MS2PIPFeatureGenerator. Fragment mass tolerance is set globally via tolerance_value / tolerance_mode.
  • [BREAKING] spectrum_path, spectrum_id_pattern, mass_mode, and processes parameters removed from MS2FeatureGenerator. Spectra are provided via centralized annotate_spectra().
  • [BREAKING] ms2rescore.utils (public Python API) renamed and split into two internal modules, ms2rescore._utils and ms2rescore._ristretto_utils -- neither is part of the public API.
  • deeplcretrainer dependency removed (functionality merged into DeepLC v4).
  • tomli dependency removed (only required for Python <3.11).

Fixed

  • processes=-1 (ms2rescore default) passed to DeepLC num_threads, which requires a positive integer or None.
  • Q-value NaN check in parse_psms.py failed when qvalue array contained None values.
  • BrokenExecutor not caught during mokapot rescoring, producing unclear crashes on worker failure.
  • GUI runs never wrote an HTML log file, unlike CLI runs.
  • Out-of-memory errors from multiprocessing during spectrum parsing.

Full Changelog: v3.2.1...v4.0.0

v3.2.1

Choose a tag to compare

@RalfG RalfG released this 10 Feb 14:03
d4121ca

Changed

  • 📌 Update installer dependency pins (pyopenms 3.5, psm_utils 1.5, ms2rescore-rs 0.4.3, deeplc 3.1.13, im2deep 1.2.0)
  • 🔒 Update lock file

Removed

  • 🔥 Dropped support for Python 3.10 (required for DeepLC)

Fixed

  • 🐛 report: Catch indexerror if no confidently identified PSMs (#243, fixes #231).
  • 🐛 report: Fixed empty charts due to mismatching plotly.js version. The version is now determined dynamically preventing future issues (#242)
  • 🐛 GUI: Fixed missing log file when running MS²Rescore through the GUI (#242)
  • 🐛 GUI: Fix an issue where running DeepLC through the GUI in debug mode resulted in an error due to stdout/stderr being None (#242)
  • 🐛 PyInstaller: Fix recent issues with missing dependencies in Windows Installer (#242)
  • 📌 PyInstaller: Use dependency groups and uv to pin certain package versions for the Windows installer (#241)
  • 📝 docs: Fix typo in default argument of IM2Deep docstring (#241)

The Windows installer also contains changes from these upstream packages

psm_utils (v1.5.1)

Fixed

  • 🐛 io.idxml: Fix compatibility with pyOpenMS 3.5+ for PeptideIdentificationList handling (also see OpenMS/OpenMS#8552).
  • 🐛 io.percolator: Fix missing ScanNr values when using write_file (fixes #235).
  • 🐛 io.percolator: Fix missing style argument when checking whether PercolatorTabWriter supports write_psm.
  • 🐛 io.pepxml: Fix robustness of PepXMLReader against missing params in file.

IM2Deep (v1.2.0, v1.1.0)

Fixed

MS²PIP (v4.1.2, v4.1.1)

Fixed

  • 🐛 Prefer (faster) Genesis for model downloads, with a fall back to Zenodo
  • ⬆️ Fix support for sqlalchemy v2, keeping backwards compatibility with v1.4 (CompOmics/ms2pip#249, fixes CompOmics/ms2pip#250)
  • 📝 Fix typo of max_length in search_space documentation (CompOmics/ms2pip#245)
  • 👷 CI: Update build runners for macOS (see actions/runner-images#13046)
  • 👷 CI: Don't build dependencies like pyarrow from source. This can result in failed build workflows.

Full Changelog: v3.2.0...v3.2.1

v3.2.0.post1

Choose a tag to compare

@github-actions github-actions released this 22 Oct 13:41
b5b1948
Merge pull request #240 from CompOmics/fix/docs-build

Update readthedocs config to use dependency groups

v3.2.0

Choose a tag to compare

@RalfG RalfG released this 20 Oct 12:34
e4f7a4b

Added

  • Release notifications: Update checks for both GUI and CLI, with a popup (GUI) or console notice (CLI); introduce the disable_update_check configuration option.
  • Citations GUI: Add IM2Deep to the citations interface (feature integration).
  • 🚸 PSM–spectrum consistency: If observed m/z values are present in the PSM list, always verify that PSMs match the corresponding spectra.
  • 🚸 Regex pattern validation: Added validation for PSM and spectrum ID regex patterns with clear error messages when patterns are invalid or don't match expected spectrum IDs.

Changed

  • 🔁 FlashLFQ export pathway: Switch to the FlashLFQ writing functionality in psm_utils. This removes the ms2rescore > mokapot > write_flashlfq option and adds a new top-level ms2rescore > write_flashlfq option.
  • 🚸 Precursor completeness policy: Do not continue if precursor information (m/z, RT, or IM) is missing for a subset of PSMs; previously, such PSMs were silently removed.
  • 🚸 Parsing: Further improve handling of missing LC–IM–MS fields in spectrum files.
  • 🔊 Diagnostics: Clearer logging while parsing precursor information—always raise an error if a PSM cannot be found in the spectrum files and include example PSM IDs from both the PSM and spectrum files.
  • ⚙️ Allow more unset values in config: Permit null/None for boolean options to explicitly represent an unset state.
  • 🐍 Python versions: Drop support for 3.9 (EOL). Test matrix extended to 3.12–3.14 with compatibility verified through 3.12; 3.13 and 3.14 currently fail due to missing third-party dependencies. Default runtime set to Python 3.12 for Docker and the Windows installer.
  • ⬆️ Dependencies: DeepLC>= 3.1; IM2Deep>= 0.3.1
  • 📦 Packaging: Switch to UV for package management and introduce a lockfile to ensure reproducible installations; the version’s single source of truth now resides in pyproject.toml.
  • 🐳 Docker: Upgrade base image to python:3.12-slim and use the lockfile to pin dependency versions.
  • 📦 Development dependencies: Move dev dependencies into dependency-groups in pyproject.toml.
  • 🔇 OpenMS: Attempt to suppress non-actionable OpenMS data warnings to reduce noise.
  • 👷 CI: Separate the linting step for faster feedback and update CI action versions.
  • 🔧 Tooling: Update pre-commit hook packages.
  • ♻️ Code quality: General refactoring of the parse_spectra module; refine and expand type annotations.

Fixed

  • 🐛 CLI/Config precedence: Prevent command-line defaults (e.g., False) from overriding True values specified in the configuration file.
  • 🐛 Config profile: Respect the profile parameter from configuration files—previously only the CLI argument was honored.
  • 🐛 Parsing of missing precursor data: Correct handling of spectrum files with missing precursor information—previously, precursor data were parsed even when not required by the configured feature generators.
  • 🐛 XGBoost & CUDA environment: Avoid incompatibility between CUDA_VISIBLE_DEVICES and XGBoost (Windows crash when set to -1) that could lead to a crash without error messages.
  • 🐛 NumPy 2 compatibility: Replace Inf/np.Inf usage with inf to maintain compatibility with NumPy 2.0.

Full Changelog: v3.1.5...v3.2.0

v3.1.5

Choose a tag to compare

@RalfG RalfG released this 15 Apr 15:56

Fixed

  • 🐛 Fixed compatibility with Numpy 2: Usage of np.inf instead of `np.Inf (PR #224, fixes #219)

v3.1.4

Choose a tag to compare

@RalfG RalfG released this 04 Dec 16:42

Fixed


Full Changelog: v3.1.3...v3.1.4

v3.1.3

Choose a tag to compare

@RalfG RalfG released this 02 Oct 08:59

Fixed

  • 📌 Pin DeepLC version to <3.1, avoiding calibration bug by @RalfG in #198
  • 📌 Pin pyOpenMS (upstream dependency for psm_utils) (see OpenMS/OpenMS#7600) by @RalfG in #199
  • 📝 Fix incorrect decoy pattern configuration in documentation example by @rodvrees in #191
  • 🐛 Fix UnicodeEncodeError when running IM2Deep (similar to DeepLC issue #188) @ArthurDeclercq in #195

Full Changelog: v3.1.2...v3.1.3

v3.1.2

Choose a tag to compare

@RalfG RalfG released this 18 Sep 07:16
b1e23f3

Changed

  • 🚸 GUI: Improve user experience with descriptions, open report upon finishing, etc. (#175)
  • ⬆️ Update dependency versions; drop support for Python 3.8 (required for TensorFlow versions; EOL soon) (#189)

Fixed

  • 🚨 Fix ruff linting for tutorial notebook (was not checked by previous versions of Ruff) (#180)
  • 📝 Minor documentation updates: Update overview figure; refer to ms2rescore.rescore in Python API tutorial; remove v3.0 warning in readme (#181)
  • 📝 Fix README URLs to documentation pages (#187)
  • 🐛 Fix bug where the default TIMS²Rescore configuration items always overwrote user configuration (#176)
  • 🐛 Fix non-descriptive IndexError in Qvality when PEP cannot be calculated (see statisticalbiotechnology/triqler#29). To be updated when addressed upstream. (#182, fixes #165)
  • 🐛 Fix UnicodeEncodeError when running DeepLC with transfer learning (#188, fixes #183 and #185)

v3.1.1

Choose a tag to compare

@RalfG RalfG released this 14 Aug 09:46
4215f8d

Fixed


Deployment

  • 🚀 From this release onward, Docker images will be build and pushed to GHCR (by @paretje in #167)

New Contributors

Full Changelog: v3.0.2...v3.1.1