Releases: CompOmics/ms2rescore
Releases · CompOmics/ms2rescore
Release list
v4.0.1
Changed
deeplcfeature generator:deeplc_retrainoption renamed tofinetune(redundant naming, already scoped underdeeplc). 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_toleranceoption from the defaultms2pipfeature generator configuration, schema, and example configs. Fragment tolerance is configured centrally via the top-leveltolerance_value/tolerance_modeoptions;MS2PIPFeatureGeneratorno longer accepts
ms2_tolerance. - Documented
model_dir(ms2pipfeature generator) in the configuration schema; it already worked but was missing from the schema. - Corrected the configuration schema's default for
im2deep'sreference_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
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
rescoringconfiguration option:train_fdrandmodel("svm", default, or"lda", faster but less powerful). - New top-level
report_fdrconfiguration 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_betteroption. 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-reportCLI: new--fdroption to regenerate a report at a different FDR threshold without rerunning rescoring.- New MS2 feature generator using Rust-based
ms2rescore_rsfor 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, andtolerance_modeto 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.
ParseSpectrumErrorexception 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 barespectrum_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 > 1now 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. Addedpyarrow. - 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
percolatorbinary). 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_engineconfiguration option removed (mokapot/Percolator-specific:fasta_file,write_weights,write_txt,protein_kwargs), replaced byrescoring. - [BREAKING] Top-level
fasta_fileconfiguration option and FASTA-based protein inference removed (mokapot-specific). Does not affect Mumble's separatepsm_generator.mumble.fasta_fileoption, which is unrelated and unchanged. - [BREAKING]
lower_score_is_betterconfiguration option removed; score direction is always auto-inferred now, with no configuration-level override. - [BREAKING]
write_rescoring_tablesconfiguration 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, andspectrum_id_patternparameters removed fromMS2PIPFeatureGenerator. Fragment mass tolerance is set globally viatolerance_value/tolerance_mode. - [BREAKING]
spectrum_path,spectrum_id_pattern,mass_mode, andprocessesparameters removed fromMS2FeatureGenerator. Spectra are provided via centralizedannotate_spectra(). - [BREAKING]
ms2rescore.utils(public Python API) renamed and split into two internal modules,ms2rescore._utilsandms2rescore._ristretto_utils-- neither is part of the public API. deeplcretrainerdependency removed (functionality merged into DeepLC v4).tomlidependency removed (only required for Python <3.11).
Fixed
processes=-1(ms2rescore default) passed to DeepLCnum_threads, which requires a positive integer orNone.- Q-value NaN check in
parse_psms.pyfailed whenqvaluearray containedNonevalues. BrokenExecutornot 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
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 usingwrite_file(fixes #235). - 🐛
io.percolator: Fix missing style argument when checking whetherPercolatorTabWritersupportswrite_psm. - 🐛
io.pepxml: Fix robustness ofPepXMLReaderagainst missing params in file.
IM2Deep (v1.2.0, v1.1.0)
Fixed
- ⬆️ Remove Numpy version pin; general linting and typing updates (CompOmics/IM2Deep#17, fixes #244)
- 🐛 Fix MS2Rescore compatibility (calibration data typing) (CompOmics/IM2Deep#15)
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_lengthinsearch_spacedocumentation (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
Merge pull request #240 from CompOmics/fix/docs-build Update readthedocs config to use dependency groups
v3.2.0
Added
- ✨ Release notifications: Update checks for both GUI and CLI, with a popup (GUI) or console notice (CLI); introduce the
disable_update_checkconfiguration 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_flashlfqoption and adds a new top-levelms2rescore > write_flashlfqoption. - 🚸 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/Nonefor 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-slimand use the lockfile to pin dependency versions. - 📦 Development dependencies: Move dev dependencies into
dependency-groupsinpyproject.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_spectramodule; refine and expand type annotations.
Fixed
- 🐛 CLI/Config precedence: Prevent command-line defaults (e.g.,
False) from overridingTruevalues specified in the configuration file. - 🐛 Config
profile: Respect theprofileparameter 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_DEVICESand XGBoost (Windows crash when set to-1) that could lead to a crash without error messages. - 🐛 NumPy 2 compatibility: Replace
Inf/np.Infusage withinfto maintain compatibility with NumPy 2.0.
Full Changelog: v3.1.5...v3.2.0
v3.1.5
v3.1.4
Fixed
- Update im2deep import after API change in v0.3.1 (#205, fixes #204, by @ArthurDeclercq)
Full Changelog: v3.1.3...v3.1.4
v3.1.3
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
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.rescorein 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
IndexErrorin Qvality when PEP cannot be calculated (see statisticalbiotechnology/triqler#29). To be updated when addressed upstream. (#182, fixes #165) - 🐛 Fix
UnicodeEncodeErrorwhen running DeepLC with transfer learning (#188, fixes #183 and #185)
v3.1.1
Fixed
- 👷 CI: Add missing ionmob dependency for Windows installer by @RalfG in #163 and #173
- 🐛 GUI: Correctly parse IM2Deep config in GUI (fixes #172) by @ArthurDeclercq in #172
- 🐛 Limit Percolator processes to 128 (fixes #117) by @RalfG in #169
Deployment
New Contributors
Full Changelog: v3.0.2...v3.1.1