Source code for peptdeep.settings

import os
import collections
import numpy as np

from alphabase.yaml_utils import load_yaml
from alphabase.constants.modification import (
    load_mod_df,
    keep_modloss_by_importance,
    add_new_modifications,
    MOD_DF,
)

from peptdeep.constants._const import CONST_FOLDER

global_settings = load_yaml(os.path.join(CONST_FOLDER, "default_settings.yaml"))
"""
Global settings in peptdeep,
it controls all functionalities of PeptDeep.
"""

model_const = load_yaml(os.path.join(CONST_FOLDER, "model_const.yaml"))

### MOD_TO_FEATURE
mod_elements = model_const["mod_elements"]
mod_feature_size = len(mod_elements)

mod_elem_to_idx = dict(zip(mod_elements, range(mod_feature_size)))


def _parse_mod_formula(formula):
    """
    Parse a modification formula to a feature vector
    """
    feature = np.zeros(mod_feature_size)
    elems = formula.strip(")").split(")")
    for elem in elems:
        chem, num = elem.split("(")
        num = int(num)
        if chem in mod_elem_to_idx:
            feature[mod_elem_to_idx[chem]] = num
        else:
            feature[-1] += num
    return feature


MOD_TO_FEATURE = {}


[docs] def update_all_mod_features(): for modname, formula in MOD_DF[["mod_name", "composition"]].values: MOD_TO_FEATURE[modname] = _parse_mod_formula(formula)
update_all_mod_features()
[docs] def add_user_defined_modifications(user_mods: dict = None): """ Add user-defined modifications into the system, this is userful for isotope labeling. Parameters ---------- user_mods : dict, optional Example: ``` { "Dimethyl2@Any_N-term": { "composition": "H(2)2H(2)C(2)", "modloss_composition": "" }, ... } ``` Set as `global_settings["user_defined_modifications"]` if it is None. By default None. """ if user_mods is None: user_mods = global_settings["common"]["user_defined_modifications"] add_new_modifications(user_mods) update_all_mod_features()
def _refine_global_settings(): global_settings["thread_num"] = min( global_settings["thread_num"], global_settings["MAX_THREADS"] ) global_settings["PEPTDEEP_HOME"] = os.path.expanduser( global_settings["PEPTDEEP_HOME"] ) global_settings["library"]["output_folder"] = global_settings["library"][ "output_folder" ].format(PEPTDEEP_HOME=global_settings["PEPTDEEP_HOME"]) global_settings["model_mgr"]["transfer"]["model_output_folder"] = global_settings[ "model_mgr" ]["transfer"]["model_output_folder"].format( PEPTDEEP_HOME=global_settings["PEPTDEEP_HOME"] ) # global_settings['percolator']['output_folder']=( # global_settings['percolator']['output_folder'].format( # PEPTDEEP_HOME=global_settings['PEPTDEEP_HOME'] # ) # ) for key, val in list(global_settings["model_mgr"]["instrument_group"].items()): global_settings["model_mgr"]["instrument_group"][key.upper()] = val add_user_defined_modifications() _refine_global_settings()
[docs] def update_settings(dict_, new_dict): for k, v in new_dict.items(): if isinstance(v, collections.abc.Mapping): dict_[k] = update_settings(dict_.get(k, {}), v) else: dict_[k] = v return dict_
[docs] def update_global_settings(new_settings): update_settings(global_settings, new_settings) _refine_global_settings()
[docs] def load_global_settings(yaml: str): d = load_yaml(yaml) update_global_settings(d)
[docs] def update_modifications(tsv: str = "", modloss_importance_level: float = 1.0): """ Load modification tsv either from alphabase default `modification.tsv <https://github.com/MannLabs/alphabase/blob/main/alphabase/constants/const_files/modification.tsv>`_ or an external tsv file. Parameters ---------- tsv : str, optional External modification tsv file, "" refers to the default alphabase tsv, by default "". modloss_importance_level : float, optional Only keep the important modification losses, by default 1.0 """ if os.path.isfile(tsv): load_mod_df(tsv, modloss_importance_level=modloss_importance_level) else: keep_modloss_by_importance(modloss_importance_level) add_user_defined_modifications()
update_modifications()