All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
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.
- 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 acceptsms2_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.
- 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.
- 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.
- [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).
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.
- Updated installer dependency pins (
pyopenms3.5,psm_utils1.5,ms2rescore-rs0.4.3,deeplc3.1.13,im2deep1.2.0).
- Dropped support for Python 3.10 (required for DeepLC).
report: caughtIndexErrorwhen no confidently identified PSMs are present.report: fixed empty charts caused by a mismatching Plotly.js version; the version is now determined dynamically.- GUI: fixed missing log file when running MS²Rescore through the GUI.
- GUI: fixed
UnicodeEncodeError/Nonestdout-stderr issue when running DeepLC through the GUI in debug mode. - PyInstaller: fixed missing dependencies in the Windows installer.
- Fixed a typo in the IM2Deep docstring's default argument.
- Update notifications for both GUI and CLI, with a new
disable_update_checkconfiguration option. - IM2Deep added to the citations interface.
- If observed m/z values are present in the PSM list, always verify that PSMs match the corresponding spectra.
- Validation for
psm_id_patternand spectrum ID regex patterns, with clear error messages when patterns are invalid or don't match expected spectrum IDs.
- FlashLFQ export switched to
psm_utils's writer; removedms2rescore > mokapot > write_flashlfq, replaced by a new top-levelwrite_flashlfqoption. - Rescoring no longer continues if precursor information (m/z, RT, or IM) is missing for a subset of PSMs; previously such PSMs were silently removed.
- Improved handling of missing LC-IM-MS fields in spectrum files.
- Clearer logging while parsing precursor information; always raises an error if a PSM cannot be found in the spectrum files, including example PSM IDs from both PSM and spectrum files.
- Boolean configuration options now permit
null/Noneto explicitly represent an unset state. - Dropped support for Python 3.9 (EOL); test matrix extended to 3.12-3.14 (verified through 3.12). Default runtime set to Python 3.12 for Docker and the Windows installer.
- Dependencies upgraded:
deeplc>=3.1,im2deep>=0.3.1. - Switched to
uvfor package management, with a lockfile for reproducible installs; the version single source of truth now lives inpyproject.toml. - Docker base image upgraded to
python:3.12-slim, pinned via the lockfile. - Suppressed non-actionable OpenMS data warnings to reduce noise.
- CLI/config precedence: command-line defaults (e.g.
False) no longer overrideTruevalues set in the configuration file. - Configuration file's
profileparameter is now respected; previously only the CLI argument was honored. - Corrected parsing of spectrum files with missing precursor information; previously, precursor data was parsed even when not required by the configured feature generators.
- Avoided incompatibility between
CUDA_VISIBLE_DEVICESand XGBoost causing a silent crash on Windows when set to-1. - Replaced
Inf/np.Infusage withinffor NumPy 2.0 compatibility.
- Fixed compatibility with NumPy 2: usage of
np.infinstead ofnp.Inf.
- Updated IM2Deep import after an API change in v0.3.1.
- Pinned DeepLC version to
<3.1, avoiding a calibration bug. - Pinned pyOpenMS (upstream dependency of
psm_utils). - Fixed incorrect decoy pattern configuration in a documentation example.
- Fixed
UnicodeEncodeErrorwhen running IM2Deep.
- GUI: improved user experience with descriptions, opening the report upon finishing, etc.
- Updated dependency versions; dropped support for Python 3.8 (required for TensorFlow, nearing EOL).
- Fixed ruff linting for the tutorial notebook.
- Fixed a bug where the default TIMS²Rescore configuration items always overwrote user configuration.
- Fixed a non-descriptive
IndexErrorin Qvality when PEP cannot be calculated. - Fixed
UnicodeEncodeErrorwhen running DeepLC with transfer learning.
- CI: added missing
ionmobdependency for the Windows installer. - GUI: correctly parse IM2Deep configuration.
- Limited Percolator processes to 128.
- Docker images are now built and pushed to GHCR.
- New
tims2rescoreCLI entrypoint with timsTOF-specific configuration defaults. - IM2Deep feature generator for ion mobility.
- Support for Bruker raw (
.d) and miniTDF formats (back-ported to v3.0.3). psm_id_rt_patternandpsm_id_im_patternoptions to parse RT/IM from PSM file spectrum identifiers.max_psm_rank_inputandmax_psm_rank_outputoptions to control rescoring and reporting of multiple PSMs per spectrum (default 5 and 1).- Peptide-level q-values and PEPs are now also stored in the output PSM list, under the
metadatafield. profileoption to write a cProfile report of the rescoring process.- Option to pass
train_fdrto Mokapot (test_fdrwas already supported). - Faster spectrum file reading with the
timsrustandmzdataRust libraries.
- CI: switched linting to ruff (from flake8).
- DeepLC: by default use PSMs passing a 1% FDR threshold for calibration, instead of a fixed number.
- DeepLC: warn when using
deeplc_retrainwith fewer than 500 calibration PSMs. - Raise an exception if precursor info (retention time or ion mobility) is missing from both PSM and spectrum files.
- Dockerfile: use a Python 3.11 base image instead of Ubuntu.
- Config: changed
write_reportdefault fromtruetofalse.
- Report: fixed calculation of the number of retained peptides in the identification overlap chart.
- DeepLC: fixed an issue with conversion to PEPREC.
- Fixed a bug in
infer_spectrum_pathwhen the configured path isNone. - Fixed a bug that always set
im_requiredtoTrue, even without IM-based feature generators configured.
- Support for passing
model_dirto MS²PIP in the feature generator.
- Missing precursor information (retention time and ion mobility) is now parsed in Rust using
mzdataandtimsrust, via the newms2rescore-rspackage. Adds support for Bruker TDF and miniTDF raw files for this feature.
- Fixed writing of the FlashLFQ output file with Mokapot when PSM list
runfields are empty. - Write a partial report when confidence before rescoring could not be calculated (e.g. no PSMs identified before rescoring).
- Removed PSMs with invalid amino acids to avoid errors in feature generators.
- Improved exception handling and logging for report generation.
- Updated
deeplc_retrainerversion. - Pinned NumPy version for Python 3.11 (incompatibility between pyGAM, scikit-learn, and TensorFlow).
- No longer use an unsupported icon on Linux systems.
- Adopted
psm_utilsto support over 10 PSM file formats from different search engines. - Support for mzML (MGF still supported).
- HTML output with interactive charts for quality control and result inspection.
ionmobfeature generator for ion mobility CCS predictions.mokapotrescoring engine for more efficient rescoring.- New graphical user interface with a one-click installer for Windows.
- Documentation on ReadTheDocs.
- Major refactor into a modular Python package to facilitate use in other workflows (see preprint: https://doi.org/10.26434/chemrxiv-2023-rvr9n).
- GUI: fixed parsing of new-style MaxQuant modification names.
- Additional PEAKS search engine features.
- Fixed the MGF TITLE field extraction to be compatible with PEAKS XPro output.
- Removed
shell=Truefrom the Percolator subprocess call. - MS²Rescore now returns an error if Percolator fails (
check=Trueadded tosubprocess.run). - Fixed a
DeprecationWarningfrom passing a set as a pandas indexer. - Python 3.9 compatibility for the GUI.
- Ignore Deprecation/Future/UserWarnings in GUI mode.
- Removed the
importlib_resourcesbackport (Python 3.6 compatibility no longer needed). - GUI can now be started from the terminal with
ms2rescore-gui, in addition topython -m ms2rescore.gui. - Relaxed the scikit-learn dependency to
<2.
- Refactored parsing of the MaxQuant
Modified sequencefield to support new long-form modification labels (e.g.PEPM(Oxidation (M))Kinstead ofPEPM(ox)K). - Added a regex pattern option to the config for more flexible PSM ID matching against the MGF
TITLEfield. - Added
MGF TITLE pattern,num CPU, andfeature setoptions to the GUI.
- Replaced deprecated pandas functions.
- Spaces and hyphens are now supported in input file names (changed Percolator subprocess command).
- Default value of
mgf_title_patternset toNonefor compatibility with the PEAKS pipeline.
- Support for PEAKS mzIdentML identification files.
- Retention time predictor now calibrates per raw file independently, resulting in more accurate calibrations.
- PIN pipeline: allow mass-shift modification labels with a
+sign (e.g.R.IM[+15.99492]MAR.D). - PEAKS and MaxQuant pipelines: precursor charge from the ID file now overwrites
CHARGEin the MGF file. - Plotting module can only run when Percolator is run as part of MS²Rescore.
- MS²Rescore now raises an error and stops if no decoy PSMs are present.
- Removed the obsolete
mgfoption frommaxquant_to_rescoreconfiguration.
- MaxQuant pipeline: carbamidomethyl is no longer a default fixed modification (it could not previously be overridden); it must now be specified explicitly if applicable.
- Fixed MGF parsing incorrectly removing all lines ending in
0.0(including lines ending in10.0) instead of only zero-intensity peaks.
- MS²Rescore now runs on Windows.
- Graphical user interface (GUI), built with Gooey (
pip install ms2rescore[gui],python -m ms2rescore.gui). - Install, upgrade, and run scripts for Windows users without an existing Python installation.
- MS²Rescore can now output a PDF with result plots.
- [BREAKING] Renamed the package from "MS²ReScore" to "ms2rescore" (lowercase s); some class names and exceptions changed accordingly, breaking the Python API with previous versions.
- [BREAKING]
feature_setsoption now expects a list of strings (searchengine,rt,ms2pip) instead of a predefined feature-set string such asms2pip_rt. By default, MS²Rescore uses all three. - MS²PIP is now called through its Python API instead of the CLI.