diff --git a/quantmsutils/mzml/ms1_feature_finder.py b/quantmsutils/mzml/ms1_feature_finder.py index 0381328..4d84a0d 100644 --- a/quantmsutils/mzml/ms1_feature_finder.py +++ b/quantmsutils/mzml/ms1_feature_finder.py @@ -25,6 +25,8 @@ logging.basicConfig(format="%(asctime)s [%(funcName)s] - %(message)s", level=logging.INFO) logger = logging.getLogger(__name__) +_PYOPENMS_VERSION = tuple(int(p) for p in oms.__version__.split(".")[:2]) + class MS1FeatureDetector: """ @@ -51,6 +53,21 @@ def __init__(self, ms_level: int = 1): self.options = oms.PeakFileOptions() self.options.setMSLevels([self.ms_level]) + @staticmethod + def _pick_experiment( + picker: oms.PeakPickerHiRes, experiment: oms.MSExperiment + ) -> oms.MSExperiment: + """Centroid an experiment, supporting both pyopenms peak-picker APIs. + + pyopenms >= 3.6 returns the picked experiment; older versions fill an + output experiment passed by reference. + """ + if _PYOPENMS_VERSION >= (3, 6): + return picker.pickExperiment(experiment, False) + picked = oms.MSExperiment() + picker.pickExperiment(experiment, picked, False) + return picked + def _calc_tic(self, experiment: oms.MSExperiment) -> float: """ Calculate all the TIC in the MS experiment, summing all intensities from all scans. @@ -249,12 +266,9 @@ def process_file( experiment = oms.MSExperiment() picker = oms.PeakPickerHiRes() - filtered_experiment = oms.MSExperiment() - file_handler.setOptions(self.options) file_handler.load(str(input_path), experiment) - picker.pickExperiment(experiment, filtered_experiment, False) - experiment = filtered_experiment + experiment = self._pick_experiment(picker, experiment) filtered_experiment = oms.MSExperiment() for spec in experiment: diff --git a/quantmsutils/psm/psm_conversion.py b/quantmsutils/psm/psm_conversion.py index f113197..c365b57 100644 --- a/quantmsutils/psm/psm_conversion.py +++ b/quantmsutils/psm/psm_conversion.py @@ -103,9 +103,11 @@ def convert_psm( else: search_engines = [prot_ids[0].getSearchEngine()] - reference_file_name = os.path.splitext( - prot_ids[0].getMetaValue("spectra_data")[0].decode("UTF-8") - )[0] + spectra_data = prot_ids[0].getMetaValue("spectra_data")[0] + # pyopenms < 3.6 returns bytes here, >= 3.6 returns str + if isinstance(spectra_data, bytes): + spectra_data = spectra_data.decode("UTF-8") + reference_file_name = os.path.splitext(spectra_data)[0] spectra_df = pd.read_parquet(ms2_file) if ms2_file else None if spectra_df is not None: