Skip to content

Commit

Permalink
Merge pull request #119 from compomics/fix/report-exception-handling
Browse files Browse the repository at this point in the history
Better handle exceptions when generating report
  • Loading branch information
RalfG authored Jan 24, 2024
2 parents b36e238 + 2898f65 commit d4f9f72
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 8 deletions.
10 changes: 7 additions & 3 deletions ms2rescore/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from ms2rescore.parse_spectra import get_missing_values
from ms2rescore.report import generate
from ms2rescore.rescoring_engines import mokapot, percolator
from ms2rescore import exceptions

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -151,9 +152,12 @@ def rescore(configuration: Dict, psm_list: Optional[PSMList] = None) -> None:

# Write report
if config["write_report"]:
generate.generate_report(
output_file_root, psm_list=psm_list, feature_names=feature_names, use_txt_log=True
)
try:
generate.generate_report(
output_file_root, psm_list=psm_list, feature_names=feature_names, use_txt_log=True
)
except exceptions.ReportGenerationError as e:
logger.error(e)


def _write_feature_names(feature_names, output_file_root):
Expand Down
6 changes: 6 additions & 0 deletions ms2rescore/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,9 @@ class ModificationParsingError(IDFileParsingError):
"""Identification file parsing error."""

pass


class ReportGenerationError(MS2RescoreError):
"""Error while generating report."""

pass
21 changes: 16 additions & 5 deletions ms2rescore/report/utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""Utility functions for MS²Rescore report generation."""

import logging
from collections import defaultdict
from csv import DictReader
from pathlib import Path
Expand All @@ -9,6 +10,10 @@
import psm_utils
from mokapot import LinearConfidence, LinearPsmDataset, read_fasta

from ms2rescore.exceptions import ReportGenerationError

logger = logging.getLogger(__name__)


def read_feature_names(feature_names_path: Path) -> dict:
"""Read feature names and mapping with feature generator from file."""
Expand Down Expand Up @@ -41,10 +46,11 @@ def get_confidence_estimates(
"before_rescoring_score"
].astype(float)
except KeyError as e:
raise KeyError(
raise ReportGenerationError(
"No `before_rescoring_score` in PSM list provenance data. Ensure that the PSM list "
"was generated by MS²Rescore."
"was generated by MS²Rescore. Could not generate report."
) from e

peptide = (
pd.Series(psm_list["peptidoform"]).astype(str).str.replace(r"(/\d+$)", "", n=1, regex=True)
)
Expand All @@ -55,8 +61,7 @@ def get_confidence_estimates(
"before": score_before,
"after": psm_list["score"],
}
)
psms = psms.reset_index()
).reset_index()

if fasta_file:
fasta = read_fasta(fasta_file)
Expand All @@ -73,6 +78,12 @@ def get_confidence_estimates(
if fasta_file:
lin_psm_dataset.add_proteins(fasta)

confidence[when] = lin_psm_dataset.assign_confidence()
try:
confidence[when] = lin_psm_dataset.assign_confidence()
except RuntimeError as e:
raise ReportGenerationError(
f"Error while assigning confidence estimates to PSMs ({when} rescoring). "
"Could not generate report."
) from e

return confidence["before"], confidence["after"]

0 comments on commit d4f9f72

Please sign in to comment.