Source code for matchms.filtering.metadata_processing.make_charge_int
import logging
from matchms.typing import SpectrumType
logger = logging.getLogger("matchms")
[docs]def make_charge_int(spectrum_in: SpectrumType) -> SpectrumType:
"""Convert charge field to integer (if possible)."""
if spectrum_in is None:
return None
spectrum = spectrum_in.clone()
charge = spectrum.get("charge", None)
charge_int = _convert_charge_to_int(charge)
if isinstance(charge_int, int):
spectrum.set("charge", charge_int)
return spectrum
def _convert_charge_to_int(charge):
"""Convert charge to integer if possible, else return None."""
def _try_conversion(charge):
try:
return int(charge)
except ValueError:
logger.warning("Found charge (%s) cannot be converted to integer.",
str(charge))
return None
if charge is None:
return None
if isinstance(charge, int):
return charge
# Avoid pyteomics ChargeList
if isinstance(charge, list):
return _try_conversion(charge[0])
# convert string charges to int
if isinstance(charge, str):
charge = charge.strip().replace("+", "")
if len(charge) > 1 and charge[-1] == "-":
charge = "-" + charge.replace("-", "")
return _try_conversion(charge)