Source code for alphabase.peptide.mobility

import numpy as np
import pandas as pd

from alphabase.constants.atom import common_const_dict
from alphabase.peptide.precursor import update_precursor_mz

CCS_IM_COEF = common_const_dict["MOBILITY"]["CCS_IM_COEF"]
IM_GAS_MASS = common_const_dict["MOBILITY"]["IM_GAS_MASS"]


[docs] def get_reduced_mass(precursor_mzs: np.ndarray, charges: np.ndarray) -> np.ndarray: """Reduced mass for CCS and mobility calculation""" reduced_masses = precursor_mzs * charges return reduced_masses * IM_GAS_MASS / (reduced_masses + IM_GAS_MASS)
[docs] def ccs_to_mobility_bruker( ccs_values: np.ndarray, charges: np.ndarray, precursor_mzs: np.ndarray ) -> np.ndarray: """Convert CCS to mobility for Bruker (timsTOF)""" reduced_masses = get_reduced_mass(precursor_mzs, charges) return ccs_values * np.sqrt(reduced_masses) / charges / CCS_IM_COEF
[docs] def mobility_to_ccs_bruker( im_values: np.ndarray, charges: np.ndarray, precursor_mzs: np.ndarray ) -> np.ndarray: """Convert mobility to CCS for Bruker (timsTOF)""" reduced_masses = get_reduced_mass(precursor_mzs, charges) return im_values * charges * CCS_IM_COEF / np.sqrt(reduced_masses)
[docs] def ccs_to_mobility_for_df( precursor_df: pd.DataFrame, ccs_column: str, *, vendor="bruker" ) -> np.ndarray: """ Parameters ---------- precursor_df : pd.DataFrame precursor_df ccs_column : str CCS column name in precursor_df vendor : str, optional Different vender may have different IM calculation. Defaults to "bruker". Note that other vendors are not implemented currently. Returns ------- np.ndarray mobility values """ if "precursor_mz" not in precursor_df.columns: precursor_df = update_precursor_mz(precursor_df) return ccs_to_mobility_bruker( precursor_df[ccs_column].values, precursor_df.charge.values, precursor_df.precursor_mz.values, )
[docs] def mobility_to_ccs_for_df( precursor_df: pd.DataFrame, mobility_column: str, *, vendor="bruker" ) -> np.ndarray: """ Parameters ---------- precursor_df : pd.DataFrame precursor_df mobility_column : str mobility column name in precursor_df vendor : str, optional Different vender may have different IM calculation. Defaults to "bruker". Note that other vendors are not implemented currently. Returns ------- np.ndarray CCS values """ if "precursor_mz" not in precursor_df.columns: precursor_df = update_precursor_mz(precursor_df) if precursor_df[mobility_column].isna().any(): print(f"NA/nan is detected in the `{mobility_column}` column, fillna with 0.0") precursor_df[mobility_column] = ( precursor_df[mobility_column].fillna(0.0).astype(np.float64) ) if (precursor_df[mobility_column] == "").any(): print( f"Empty string is detected in the `{mobility_column}` column, fill with 0.0" ) precursor_df[mobility_column] = ( precursor_df[mobility_column].replace("", 0.0).astype(np.float64) ) return mobility_to_ccs_bruker( precursor_df[mobility_column].values, precursor_df.charge.values, precursor_df.precursor_mz.values, )