From 0ca3d4a1cc12047dd5c67a3c37b86817407e983f Mon Sep 17 00:00:00 2001
From: mschwoerer <82171591+mschwoer@users.noreply.github.com>
Date: Wed, 22 May 2024 16:44:52 +0200
Subject: [PATCH 01/53] auto-fix more linting issues
---
alphabase/constants/_const.py | 1 +
alphabase/constants/aa.py | 11 +++---
alphabase/constants/atom.py | 6 ++--
alphabase/constants/element.py | 4 +--
alphabase/constants/isotope.py | 9 ++---
alphabase/constants/modification.py | 15 +++-----
alphabase/io/hdf.py | 9 ++---
alphabase/io/tempmmap.py | 13 +++----
alphabase/peptide/fragment.py | 15 ++++----
alphabase/peptide/mass_calc.py | 15 ++++----
alphabase/peptide/mobility.py | 2 +-
alphabase/peptide/precursor.py | 18 +++++-----
alphabase/protein/fasta.py | 31 ++++++++---------
alphabase/protein/protein_level_decoy.py | 2 +-
alphabase/psm_reader/__init__.py | 34 +++++++++++++------
alphabase/psm_reader/alphapept_reader.py | 7 ++--
alphabase/psm_reader/dia_psm_reader.py | 5 ++-
alphabase/psm_reader/maxquant_reader.py | 10 +++---
alphabase/psm_reader/msfragger_reader.py | 11 +++---
alphabase/psm_reader/pfind_reader.py | 7 ++--
alphabase/psm_reader/psm_reader.py | 12 +++----
alphabase/psm_reader/sage_reader.py | 10 +++---
.../quant_reader/config_dict_loader.py | 9 ++---
.../quant_reader/longformat_reader.py | 17 ++++++----
.../quant_reader/quant_reader_manager.py | 5 ++-
.../quant_reader/table_reformatter.py | 3 +-
.../quant_reader/wideformat_reader.py | 4 +--
alphabase/spectral_library/base.py | 30 ++++++++--------
alphabase/spectral_library/decoy.py | 8 +++--
alphabase/spectral_library/flat.py | 8 ++---
alphabase/spectral_library/reader.py | 8 ++---
alphabase/spectral_library/translate.py | 11 +++---
alphabase/spectral_library/validate.py | 6 ++--
alphabase/utils.py | 9 ++---
docs/conf.py | 4 +--
pyproject.toml | 19 +++++++++--
release/pyinstaller/alphabase_pyinstaller.py | 5 +--
setup.py | 5 +--
38 files changed, 209 insertions(+), 189 deletions(-)
diff --git a/alphabase/constants/_const.py b/alphabase/constants/_const.py
index 5fa3fed3..d7d5da91 100644
--- a/alphabase/constants/_const.py
+++ b/alphabase/constants/_const.py
@@ -1,4 +1,5 @@
import os
+
import numpy as np
from alphabase.yaml_utils import load_yaml
diff --git a/alphabase/constants/aa.py b/alphabase/constants/aa.py
index a8c49a92..b8b27e7c 100644
--- a/alphabase/constants/aa.py
+++ b/alphabase/constants/aa.py
@@ -1,18 +1,17 @@
import os
-import pandas as pd
-import numpy as np
import typing
-from alphabase.yaml_utils import load_yaml
+import numpy as np
+import pandas as pd
+from alphabase.constants._const import CONST_FILE_FOLDER
from alphabase.constants.atom import (
- calc_mass_from_formula,
MASS_H2O,
+ calc_mass_from_formula,
parse_formula,
reset_elements,
)
-
-from alphabase.constants._const import CONST_FILE_FOLDER
+from alphabase.yaml_utils import load_yaml
# We use all 128 ASCII code to represent amino acids for flexible extensions in the future.
# The amino acid masses are stored in 128-lengh array :py:data:`AA_ASCII_MASS`.
diff --git a/alphabase/constants/atom.py b/alphabase/constants/atom.py
index b53b5e38..4d8e5f98 100644
--- a/alphabase/constants/atom.py
+++ b/alphabase/constants/atom.py
@@ -1,11 +1,11 @@
import os
-import numpy as np
-import numba
import typing
-from alphabase.yaml_utils import load_yaml
+import numba
+import numpy as np
from alphabase.constants._const import CONST_FILE_FOLDER, common_const_dict
+from alphabase.yaml_utils import load_yaml
MASS_PROTON: float = common_const_dict["MASS_PROTON"]
MASS_ISOTOPE: float = common_const_dict["MASS_ISOTOPE"]
diff --git a/alphabase/constants/element.py b/alphabase/constants/element.py
index d3803609..9d34ebaf 100644
--- a/alphabase/constants/element.py
+++ b/alphabase/constants/element.py
@@ -1,7 +1,7 @@
-from alphabase.constants.atom import * # noqa: F403 TODO remove in the next release
-
import warnings
+from alphabase.constants.atom import * # noqa: F403 TODO remove in the next release
+
warnings.warn(
"The module `alphabase.constants.element` is deprecated, "
"it will be removed in alphabase>=1.3.0. "
diff --git a/alphabase/constants/isotope.py b/alphabase/constants/isotope.py
index a0c432ff..8feecc93 100644
--- a/alphabase/constants/isotope.py
+++ b/alphabase/constants/isotope.py
@@ -1,14 +1,15 @@
+import typing
+
import numba
import numpy as np
-import typing
from alphabase.constants.atom import (
- MAX_ISOTOPE_LEN,
- EMPTY_DIST,
CHEM_ISOTOPE_DIST,
CHEM_MONO_IDX,
- truncate_isotope,
+ EMPTY_DIST,
+ MAX_ISOTOPE_LEN,
parse_formula,
+ truncate_isotope,
)
diff --git a/alphabase/constants/modification.py b/alphabase/constants/modification.py
index a1627e7c..279ee6f0 100644
--- a/alphabase/constants/modification.py
+++ b/alphabase/constants/modification.py
@@ -1,17 +1,16 @@
import os
+from typing import List, Union
+
import numba
import numpy as np
import pandas as pd
-from typing import Union, List
+from alphabase.constants._const import CONST_FILE_FOLDER
from alphabase.constants.atom import (
calc_mass_from_formula,
parse_formula,
)
-from alphabase.constants._const import CONST_FILE_FOLDER
-
-
#: Main entry of modification infomation (DataFrame fotmat).
MOD_DF: pd.DataFrame = pd.DataFrame()
@@ -138,9 +137,7 @@ def calc_modification_mass(
"""
masses = np.zeros(nAA)
for site, mod in zip(mod_sites, mod_names):
- if site == 0:
- masses[site] += MOD_MASS[mod]
- elif site == -1:
+ if site == 0 or site == -1:
masses[site] += MOD_MASS[mod]
else:
masses[site - 1] += MOD_MASS[mod]
@@ -178,9 +175,7 @@ def calc_mod_masses_for_same_len_seqs(
masses = np.zeros((len(mod_names_list), nAA))
for i, (mod_names, mod_sites) in enumerate(zip(mod_names_list, mod_sites_list)):
for mod, site in zip(mod_names, mod_sites):
- if site == 0:
- masses[i, site] += MOD_MASS[mod]
- elif site == -1:
+ if site == 0 or site == -1:
masses[i, site] += MOD_MASS[mod]
else:
masses[i, site - 1] += MOD_MASS[mod]
diff --git a/alphabase/io/hdf.py b/alphabase/io/hdf.py
index 26f12a8f..a9b41446 100644
--- a/alphabase/io/hdf.py
+++ b/alphabase/io/hdf.py
@@ -1,12 +1,13 @@
+import contextlib
+import re
+import time
+
import h5py
import numpy as np
import pandas as pd
-import re
-import contextlib
-import time
-class HDF_Object(object):
+class HDF_Object:
"""
A generic class to access HDF components.
"""
diff --git a/alphabase/io/tempmmap.py b/alphabase/io/tempmmap.py
index f8be53bc..7dfac298 100644
--- a/alphabase/io/tempmmap.py
+++ b/alphabase/io/tempmmap.py
@@ -2,16 +2,17 @@
"""This module allows to create temporary mmapped arrays."""
# builtin
-import os
-import logging
import atexit
+import logging
+import mmap
+import os
+import shutil
+import tempfile
+
+import h5py
# external
import numpy as np
-import mmap
-import h5py
-import tempfile
-import shutil
_TEMP_DIR = tempfile.TemporaryDirectory(prefix="temp_mmap_")
TEMP_DIR_NAME = _TEMP_DIR.name
diff --git a/alphabase/peptide/fragment.py b/alphabase/peptide/fragment.py
index 39b5d912..ba0ff3c9 100644
--- a/alphabase/peptide/fragment.py
+++ b/alphabase/peptide/fragment.py
@@ -1,22 +1,21 @@
+from typing import Dict, List, Tuple, Union
+
+import numba as nb
import numpy as np
import pandas as pd
-from typing import List, Union, Tuple, Dict
-import numba as nb
-from alphabase.constants._const import PEAK_MZ_DTYPE, PEAK_INTENSITY_DTYPE
-
-from alphabase.constants.modification import calc_modloss_mass
+from alphabase.constants._const import PEAK_INTENSITY_DTYPE, PEAK_MZ_DTYPE
from alphabase.constants.atom import (
MASS_PROTON,
+ calc_mass_from_formula,
)
+from alphabase.constants.modification import calc_modloss_mass
from alphabase.peptide.mass_calc import calc_b_y_and_peptide_masses_for_same_len_seqs
from alphabase.peptide.precursor import (
- refine_precursor_df,
is_precursor_refined,
+ refine_precursor_df,
)
-from alphabase.constants.atom import calc_mass_from_formula
-
frag_type_representation_dict = {
"c": "b+N(1)H(3)",
"z": "y+N(-1)H(-2)",
diff --git a/alphabase/peptide/mass_calc.py b/alphabase/peptide/mass_calc.py
index b2ae9610..a1a60c70 100644
--- a/alphabase/peptide/mass_calc.py
+++ b/alphabase/peptide/mass_calc.py
@@ -1,17 +1,18 @@
-import numpy as np
from typing import List, Tuple
+import numpy as np
+
from alphabase.constants.aa import (
calc_AA_masses,
calc_AA_masses_for_same_len_seqs,
calc_sequence_masses_for_same_len_seqs,
)
+from alphabase.constants.atom import MASS_H2O
from alphabase.constants.modification import (
+ calc_mod_masses_for_same_len_seqs,
calc_modification_mass,
calc_modification_mass_sum,
- calc_mod_masses_for_same_len_seqs,
)
-from alphabase.constants.atom import MASS_H2O
def calc_diff_modification_mass(
@@ -42,9 +43,7 @@ def calc_diff_modification_mass(
"""
masses = np.zeros(pep_len)
for site, mass in zip(mass_diff_sites, mass_diffs):
- if site == 0:
- masses[site] += mass
- elif site == -1:
+ if site == 0 or site == -1:
masses[site] += mass
else:
masses[site - 1] += mass
@@ -87,9 +86,7 @@ def calc_mod_diff_masses_for_same_len_seqs(
zip(aa_mass_diffs_list, mod_sites_list)
):
for mod_diff, site in zip(aa_mass_diffs, mod_sites):
- if site == 0:
- masses[i, site] += mod_diff
- elif site == -1:
+ if site == 0 or site == -1:
masses[i, site] += mod_diff
else:
masses[i, site - 1] += mod_diff
diff --git a/alphabase/peptide/mobility.py b/alphabase/peptide/mobility.py
index be4a443d..5326c9a1 100644
--- a/alphabase/peptide/mobility.py
+++ b/alphabase/peptide/mobility.py
@@ -1,8 +1,8 @@
import numpy as np
import pandas as pd
-from alphabase.peptide.precursor import update_precursor_mz
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"]
diff --git a/alphabase/peptide/precursor.py b/alphabase/peptide/precursor.py
index 5e4e4125..c45bf968 100644
--- a/alphabase/peptide/precursor.py
+++ b/alphabase/peptide/precursor.py
@@ -1,17 +1,17 @@
-import pandas as pd
-import numpy as np
-import numba
-import typing
import multiprocessing as mp
-from tqdm import tqdm
+import typing
+from functools import partial
+import numba
+import numpy as np
+import pandas as pd
+from tqdm import tqdm
from xxhash import xxh64_intdigest
-from functools import partial
-from alphabase.constants.atom import MASS_PROTON, MASS_ISOTOPE
from alphabase.constants.aa import AA_Composition
-from alphabase.constants.modification import MOD_Composition
+from alphabase.constants.atom import MASS_ISOTOPE, MASS_PROTON
from alphabase.constants.isotope import IsotopeDistribution
+from alphabase.constants.modification import MOD_Composition
from alphabase.peptide.mass_calc import calc_peptide_masses_for_same_len_seqs
@@ -586,7 +586,7 @@ def calc_precursor_isotope_intensity(
isotope_dist = IsotopeDistribution()
- col_names = ["i_{}".format(i) for i in range(max_isotope)]
+ col_names = [f"i_{i}" for i in range(max_isotope)]
precursor_dist = np.zeros((len(precursor_df), max_isotope), dtype=np.float32)
diff --git a/alphabase/protein/fasta.py b/alphabase/protein/fasta.py
index a7e7f9df..174edffb 100644
--- a/alphabase/protein/fasta.py
+++ b/alphabase/protein/fasta.py
@@ -1,25 +1,22 @@
-import regex as re
-import numpy as np
-import pandas as pd
-import numba
-import os
-import itertools
import copy
-import ahocorasick
-from tqdm import tqdm
-
+import itertools
+import os
import warnings
-
-from Bio import SeqIO
from typing import Union
-from alphabase.yaml_utils import load_yaml
-from alphabase.io.hdf import HDF_File
-from alphabase.utils import explode_multiple_columns
+import ahocorasick
+import numba
+import numpy as np
+import pandas as pd
+import regex as re
+from Bio import SeqIO
+from tqdm import tqdm
from alphabase.constants._const import CONST_FILE_FOLDER
-
+from alphabase.io.hdf import HDF_File
from alphabase.spectral_library.base import SpecLibBase
+from alphabase.utils import explode_multiple_columns
+from alphabase.yaml_utils import load_yaml
def get_uniprot_gene_name(description: str):
@@ -46,7 +43,7 @@ def read_fasta_file(fasta_filename: str = ""):
protein information,
{protein_id:str, full_name:str, gene_name:str, description:str, sequence:str}
"""
- with open(fasta_filename, "rt") as handle:
+ with open(fasta_filename) as handle:
iterator = SeqIO.parse(handle, "fasta")
while iterator:
try:
@@ -180,7 +177,7 @@ def cleave_sequence_with_cut_pos(
return seq_list, miss_list, nterm_list, cterm_list
-class Digest(object):
+class Digest:
def __init__(
self,
protease: str = "trypsin",
diff --git a/alphabase/protein/protein_level_decoy.py b/alphabase/protein/protein_level_decoy.py
index eadac7e6..3727c11a 100644
--- a/alphabase/protein/protein_level_decoy.py
+++ b/alphabase/protein/protein_level_decoy.py
@@ -1,7 +1,7 @@
import pandas as pd
from alphabase.protein.fasta import SpecLibFasta
-from alphabase.spectral_library.decoy import decoy_lib_provider, SpecLibDecoy
+from alphabase.spectral_library.decoy import SpecLibDecoy, decoy_lib_provider
class ProteinReverseDecoy(SpecLibDecoy):
diff --git a/alphabase/psm_reader/__init__.py b/alphabase/psm_reader/__init__.py
index 30e431ba..1c7f9579 100644
--- a/alphabase/psm_reader/__init__.py
+++ b/alphabase/psm_reader/__init__.py
@@ -15,38 +15,50 @@
"SageReaderParquet",
]
-from alphabase.psm_reader.psm_reader import (
- psm_reader_provider,
- psm_reader_yaml,
- PSMReaderBase,
-)
from alphabase.psm_reader.alphapept_reader import (
AlphaPeptReader,
+)
+from alphabase.psm_reader.alphapept_reader import (
register_readers as register_ap_readers,
)
from alphabase.psm_reader.dia_psm_reader import (
DiannReader,
SpectronautReader,
- SwathReader,
SpectronautReportReader,
+ SwathReader,
+)
+from alphabase.psm_reader.dia_psm_reader import (
register_readers as register_dia_readers,
)
from alphabase.psm_reader.maxquant_reader import (
MaxQuantReader,
- register_readers as register_mq_readers,
)
-from alphabase.psm_reader.pfind_reader import (
- pFindReader,
- register_readers as register_pf_readers,
+from alphabase.psm_reader.maxquant_reader import (
+ register_readers as register_mq_readers,
)
from alphabase.psm_reader.msfragger_reader import (
MSFragger_PSM_TSV_Reader,
MSFraggerPepXML,
+)
+from alphabase.psm_reader.msfragger_reader import (
register_readers as register_fragger_readers,
)
+from alphabase.psm_reader.pfind_reader import (
+ pFindReader,
+)
+from alphabase.psm_reader.pfind_reader import (
+ register_readers as register_pf_readers,
+)
+from alphabase.psm_reader.psm_reader import (
+ PSMReaderBase,
+ psm_reader_provider,
+ psm_reader_yaml,
+)
from alphabase.psm_reader.sage_reader import (
- SageReaderTSV,
SageReaderParquet,
+ SageReaderTSV,
+)
+from alphabase.psm_reader.sage_reader import (
register_readers as register_sage_readers,
)
diff --git a/alphabase/psm_reader/alphapept_reader.py b/alphabase/psm_reader/alphapept_reader.py
index 7b0e2ca5..0327fabc 100644
--- a/alphabase/psm_reader/alphapept_reader.py
+++ b/alphabase/psm_reader/alphapept_reader.py
@@ -1,8 +1,9 @@
-import numba
import os
-import pandas as pd
-import numpy as np
+
import h5py
+import numba
+import numpy as np
+import pandas as pd
from alphabase.psm_reader.psm_reader import (
PSMReaderBase,
diff --git a/alphabase/psm_reader/dia_psm_reader.py b/alphabase/psm_reader/dia_psm_reader.py
index 0f651b2d..310f4485 100644
--- a/alphabase/psm_reader/dia_psm_reader.py
+++ b/alphabase/psm_reader/dia_psm_reader.py
@@ -1,9 +1,8 @@
-import pandas as pd
import numpy as np
-
-from alphabase.psm_reader.psm_reader import psm_reader_provider, psm_reader_yaml
+import pandas as pd
from alphabase.psm_reader.maxquant_reader import MaxQuantReader
+from alphabase.psm_reader.psm_reader import psm_reader_provider, psm_reader_yaml
class SpectronautReader(MaxQuantReader):
diff --git a/alphabase/psm_reader/maxquant_reader.py b/alphabase/psm_reader/maxquant_reader.py
index 49e8202a..6087b02f 100644
--- a/alphabase/psm_reader/maxquant_reader.py
+++ b/alphabase/psm_reader/maxquant_reader.py
@@ -1,16 +1,16 @@
-import pandas as pd
-import numpy as np
-import numba
import copy
+import numba
+import numpy as np
+import pandas as pd
+
+from alphabase.constants.modification import MOD_DF
from alphabase.psm_reader.psm_reader import (
PSMReaderBase,
psm_reader_provider,
psm_reader_yaml,
)
-from alphabase.constants.modification import MOD_DF
-
mod_to_unimod_dict = {}
for mod_name, unimod_id in MOD_DF[["mod_name", "unimod_id"]].values:
unimod_id = int(unimod_id)
diff --git a/alphabase/psm_reader/msfragger_reader.py b/alphabase/psm_reader/msfragger_reader.py
index fde27480..56f9ef9c 100644
--- a/alphabase/psm_reader/msfragger_reader.py
+++ b/alphabase/psm_reader/msfragger_reader.py
@@ -1,16 +1,15 @@
import numpy as np
import pandas as pd
+import pyteomics.pepxml as pepxml
+from alphabase.constants.aa import AA_ASCII_MASS
+from alphabase.constants.atom import MASS_H, MASS_O
+from alphabase.constants.modification import MOD_MASS
from alphabase.psm_reader.psm_reader import (
PSMReaderBase,
- psm_reader_yaml,
psm_reader_provider,
+ psm_reader_yaml,
)
-from alphabase.constants.aa import AA_ASCII_MASS
-from alphabase.constants.atom import MASS_H, MASS_O
-from alphabase.constants.modification import MOD_MASS
-
-import pyteomics.pepxml as pepxml
def _is_fragger_decoy(proteins):
diff --git a/alphabase/psm_reader/pfind_reader.py b/alphabase/psm_reader/pfind_reader.py
index 6253d5fc..c5c61d4d 100644
--- a/alphabase/psm_reader/pfind_reader.py
+++ b/alphabase/psm_reader/pfind_reader.py
@@ -1,8 +1,7 @@
-import pandas as pd
import numpy as np
+import pandas as pd
import alphabase.constants.modification as ap_mod
-
from alphabase.psm_reader.psm_reader import (
PSMReaderBase,
psm_reader_provider,
@@ -48,9 +47,7 @@ def translate_pFind_mod(mod_str):
ret_mods = []
for mod in mod_str.split(";"):
mod = convert_one_pFind_mod(mod)
- if not mod:
- return pd.NA
- elif mod not in ap_mod.MOD_INFO_DICT:
+ if not mod or mod not in ap_mod.MOD_INFO_DICT:
return pd.NA
else:
ret_mods.append(mod)
diff --git a/alphabase/psm_reader/psm_reader.py b/alphabase/psm_reader/psm_reader.py
index 53ed84f4..e57c1d92 100644
--- a/alphabase/psm_reader/psm_reader.py
+++ b/alphabase/psm_reader/psm_reader.py
@@ -1,13 +1,13 @@
-import os
import copy
-import pandas as pd
-import numpy as np
+import os
import warnings
+import numpy as np
+import pandas as pd
+
import alphabase.peptide.mobility as mobility
-from alphabase.peptide.precursor import update_precursor_mz, reset_precursor_df
from alphabase.constants._const import CONST_FILE_FOLDER
-
+from alphabase.peptide.precursor import reset_precursor_df, update_precursor_mz
from alphabase.utils import get_delimiter
from alphabase.yaml_utils import load_yaml
@@ -78,7 +78,7 @@ def keep_modifications(mod_str: str, mod_set: set) -> str:
psm_reader_yaml = load_yaml(os.path.join(CONST_FILE_FOLDER, "psm_reader.yaml"))
-class PSMReaderBase(object):
+class PSMReaderBase:
def __init__(
self,
*,
diff --git a/alphabase/psm_reader/sage_reader.py b/alphabase/psm_reader/sage_reader.py
index 71b7187f..9a47983d 100644
--- a/alphabase/psm_reader/sage_reader.py
+++ b/alphabase/psm_reader/sage_reader.py
@@ -1,17 +1,17 @@
-import numpy as np
-import pandas as pd
-import typing
import re
+import typing
from functools import partial
+import numpy as np
+import pandas as pd
+
+from alphabase.constants.modification import MOD_DF
from alphabase.psm_reader.psm_reader import (
PSMReaderBase,
psm_reader_provider,
psm_reader_yaml,
)
-from alphabase.constants.modification import MOD_DF
-
def sage_spec_idx_from_scannr(scannr: str) -> int:
"""Extract the spectrum index from the scannr field in Sage output.
diff --git a/alphabase/quantification/quant_reader/config_dict_loader.py b/alphabase/quantification/quant_reader/config_dict_loader.py
index 70fe78e7..2cdf4aa1 100644
--- a/alphabase/quantification/quant_reader/config_dict_loader.py
+++ b/alphabase/quantification/quant_reader/config_dict_loader.py
@@ -1,11 +1,12 @@
+import itertools
import os
-import yaml
-import pandas as pd
import os.path
import pathlib
-import itertools
import re
+import pandas as pd
+import yaml
+
INTABLE_CONFIG = os.path.join(
pathlib.Path(__file__).parent.absolute(),
"../../../alphabase/constants/const_files/quant_reader_config.yaml",
@@ -57,7 +58,7 @@ def _get_seperator(input_file):
def _load_config(config_yaml):
- with open(config_yaml, "r") as stream:
+ with open(config_yaml) as stream:
config_all = yaml.safe_load(stream)
return config_all
diff --git a/alphabase/quantification/quant_reader/longformat_reader.py b/alphabase/quantification/quant_reader/longformat_reader.py
index 2301879c..88a31db7 100644
--- a/alphabase/quantification/quant_reader/longformat_reader.py
+++ b/alphabase/quantification/quant_reader/longformat_reader.py
@@ -1,14 +1,17 @@
-import pandas as pd
+import glob
import os
+import os.path
import shutil
-import glob
+
import dask.dataframe as dd
-import os.path
+import pandas as pd
-from . import config_dict_loader
-from . import quantreader_utils
-from . import table_reformatter
-from . import plexdia_reformatter
+from . import (
+ config_dict_loader,
+ plexdia_reformatter,
+ quantreader_utils,
+ table_reformatter,
+)
def reformat_and_write_longtable_according_to_config(
diff --git a/alphabase/quantification/quant_reader/quant_reader_manager.py b/alphabase/quantification/quant_reader/quant_reader_manager.py
index 98dcb0b3..469c0821 100644
--- a/alphabase/quantification/quant_reader/quant_reader_manager.py
+++ b/alphabase/quantification/quant_reader/quant_reader_manager.py
@@ -1,7 +1,6 @@
import pandas as pd
-from . import config_dict_loader
-from . import longformat_reader
-from . import wideformat_reader
+
+from . import config_dict_loader, longformat_reader, wideformat_reader
def import_data(
diff --git a/alphabase/quantification/quant_reader/table_reformatter.py b/alphabase/quantification/quant_reader/table_reformatter.py
index 9f4b8bbe..70527265 100644
--- a/alphabase/quantification/quant_reader/table_reformatter.py
+++ b/alphabase/quantification/quant_reader/table_reformatter.py
@@ -1,6 +1,7 @@
-import pandas as pd
import copy
+import pandas as pd
+
def merge_protein_cols_and_config_dict(
input_df, config_dict, use_alphaquant_format=False
diff --git a/alphabase/quantification/quant_reader/wideformat_reader.py b/alphabase/quantification/quant_reader/wideformat_reader.py
index b1fdaa66..52ce7cdf 100644
--- a/alphabase/quantification/quant_reader/wideformat_reader.py
+++ b/alphabase/quantification/quant_reader/wideformat_reader.py
@@ -1,6 +1,6 @@
import pandas as pd
-from . import quantreader_utils
-from . import table_reformatter
+
+from . import quantreader_utils, table_reformatter
def reformat_and_write_wideformat_table(peptides_tsv, outfile_name, config_dict):
diff --git a/alphabase/spectral_library/base.py b/alphabase/spectral_library/base.py
index 972db75c..ba687112 100644
--- a/alphabase/spectral_library/base.py
+++ b/alphabase/spectral_library/base.py
@@ -1,31 +1,32 @@
-import pandas as pd
-import numpy as np
-import typing
-import logging
import copy
-import warnings
+import logging
import re
+import typing
+import warnings
+
+import numpy as np
+import pandas as pd
+from alphabase.io.hdf import HDF_File
from alphabase.peptide.fragment import (
- create_fragment_mz_dataframe,
calc_fragment_count,
+ create_fragment_mz_dataframe,
filter_fragment_number,
join_left,
remove_unused_fragments,
)
from alphabase.peptide.precursor import (
- update_precursor_mz,
- refine_precursor_df,
- calc_precursor_isotope_intensity_mp,
- calc_precursor_isotope_intensity,
- calc_precursor_isotope_info_mp,
calc_precursor_isotope_info,
+ calc_precursor_isotope_info_mp,
+ calc_precursor_isotope_intensity,
+ calc_precursor_isotope_intensity_mp,
hash_precursor_df,
+ refine_precursor_df,
+ update_precursor_mz,
)
-from alphabase.io.hdf import HDF_File
-class SpecLibBase(object):
+class SpecLibBase:
"""
Base spectral library in alphabase and alphapeptdeep.
@@ -320,10 +321,9 @@ def append_decoy_sequence(self):
...
```
"""
- from alphabase.spectral_library.decoy import decoy_lib_provider
-
# register 'protein_reverse' to the decoy_lib_provider
from alphabase.protein.protein_level_decoy import register_decoy
+ from alphabase.spectral_library.decoy import decoy_lib_provider
register_decoy()
diff --git a/alphabase/spectral_library/decoy.py b/alphabase/spectral_library/decoy.py
index 2f3e4dc2..76a02409 100644
--- a/alphabase/spectral_library/decoy.py
+++ b/alphabase/spectral_library/decoy.py
@@ -1,7 +1,9 @@
import copy
+import multiprocessing as mp
from typing import Any
+
import pandas as pd
-import multiprocessing as mp
+
from alphabase.spectral_library.base import SpecLibBase
@@ -11,7 +13,7 @@ def _batchify_series(series, mp_batch_size):
yield series.iloc[i : i + mp_batch_size]
-class BaseDecoyGenerator(object):
+class BaseDecoyGenerator:
"""
Base class for decoy generator.
A class is used instead of a function to make as it needs to be pickled for multiprocessing.
@@ -208,7 +210,7 @@ def _remove_target_seqs(self):
)
-class SpecLibDecoyProvider(object):
+class SpecLibDecoyProvider:
def __init__(self):
self.decoy_dict = {}
diff --git a/alphabase/spectral_library/flat.py b/alphabase/spectral_library/flat.py
index 3257eb00..62e9db7c 100644
--- a/alphabase/spectral_library/flat.py
+++ b/alphabase/spectral_library/flat.py
@@ -1,11 +1,11 @@
-import pandas as pd
-import numpy as np
import warnings
-from alphabase.spectral_library.base import SpecLibBase
-from alphabase.peptide.fragment import flatten_fragments, remove_unused_fragments
+import numpy as np
+import pandas as pd
from alphabase.io.hdf import HDF_File
+from alphabase.peptide.fragment import flatten_fragments, remove_unused_fragments
+from alphabase.spectral_library.base import SpecLibBase
class SpecLibFlat(SpecLibBase):
diff --git a/alphabase/spectral_library/reader.py b/alphabase/spectral_library/reader.py
index d5d8c349..f5dd209a 100644
--- a/alphabase/spectral_library/reader.py
+++ b/alphabase/spectral_library/reader.py
@@ -1,15 +1,15 @@
import typing
+
import numpy as np
import pandas as pd
from tqdm import tqdm
+from alphabase.constants._const import PEAK_INTENSITY_DTYPE
from alphabase.peptide.mobility import mobility_to_ccs_for_df
+from alphabase.psm_reader import psm_reader_provider
from alphabase.psm_reader.maxquant_reader import MaxQuantReader
-from alphabase.spectral_library.base import SpecLibBase
from alphabase.psm_reader.psm_reader import psm_reader_yaml
-from alphabase.psm_reader import psm_reader_provider
-
-from alphabase.constants._const import PEAK_INTENSITY_DTYPE
+from alphabase.spectral_library.base import SpecLibBase
class LibraryReaderBase(MaxQuantReader, SpecLibBase):
diff --git a/alphabase/spectral_library/translate.py b/alphabase/spectral_library/translate.py
index 5e710200..6a8f460c 100644
--- a/alphabase/spectral_library/translate.py
+++ b/alphabase/spectral_library/translate.py
@@ -1,14 +1,13 @@
-import pandas as pd
-import numpy as np
-import tqdm
+import multiprocessing as mp
import typing
+
import numba
-import multiprocessing as mp
+import numpy as np
+import pandas as pd
+import tqdm
from alphabase.constants.modification import MOD_DF
-
from alphabase.spectral_library.base import SpecLibBase
-
from alphabase.utils import explode_multiple_columns
diff --git a/alphabase/spectral_library/validate.py b/alphabase/spectral_library/validate.py
index c4b9ac38..4c869322 100644
--- a/alphabase/spectral_library/validate.py
+++ b/alphabase/spectral_library/validate.py
@@ -1,7 +1,7 @@
-import pandas as pd
-import numpy as np
+from typing import List, Union
-from typing import Union, List
+import numpy as np
+import pandas as pd
class Column:
diff --git a/alphabase/utils.py b/alphabase/utils.py
index adc1d4a4..adb00faf 100644
--- a/alphabase/utils.py
+++ b/alphabase/utils.py
@@ -1,7 +1,8 @@
-import tqdm
-import pandas as pd
-import itertools
import io
+import itertools
+
+import pandas as pd
+import tqdm
# from alphatims
@@ -39,7 +40,7 @@ def get_delimiter(tsv_file: str):
line = tsv_file.readline().strip()
tsv_file.seek(0)
else:
- with open(tsv_file, "r") as f:
+ with open(tsv_file) as f:
line = f.readline().strip()
if "\t" in line:
return "\t"
diff --git a/docs/conf.py b/docs/conf.py
index 58851c17..597637c4 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -10,10 +10,10 @@
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
-import os
-import sys
import importlib
import inspect
+import os
+import sys
sys.path.insert(0, os.path.abspath(".."))
diff --git a/pyproject.toml b/pyproject.toml
index 7f5d25d4..ebe33c6e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,19 @@
-
[tool.ruff.lint]
-select = ["E", "F"]
+select = [
+ # pycodestyle
+ "E",
+ # Pyflakes
+ "F",
+# # pyupgrade
+# "UP",
+# # flake8-bugbear
+# "B",
+# # flake8-simplify
+# "SIM",
+# # isort
+# "I",
+]
ignore = [
- "E501" # Line too long (ruff wraps code, but not docstrings)
+ "E501", # Line too long (ruff wraps code, but not docstrings)
+ "B028" # No explicit `stacklevel` keyword argument found (for warnings)
]
diff --git a/release/pyinstaller/alphabase_pyinstaller.py b/release/pyinstaller/alphabase_pyinstaller.py
index f4d40f19..74a4af7d 100644
--- a/release/pyinstaller/alphabase_pyinstaller.py
+++ b/release/pyinstaller/alphabase_pyinstaller.py
@@ -1,13 +1,14 @@
if __name__ == "__main__":
try:
- import alphabase.gui
import multiprocessing
+ import alphabase.gui
+
multiprocessing.freeze_support()
alphabase.gui.run()
except Exception:
- import traceback
import sys
+ import traceback
exc_info = sys.exc_info()
# Display the *original* exception
diff --git a/setup.py b/setup.py
index e2859fc3..d3e36c2b 100644
--- a/setup.py
+++ b/setup.py
@@ -1,15 +1,16 @@
#!python
# builtin
-import setuptools
import re
+import setuptools
+
# local
import alphabase as package2install
def get_long_description():
- with open("README.md", "r") as readme_file:
+ with open("README.md") as readme_file:
long_description = readme_file.read()
return long_description
From a8e12383348b4d7f2d230505b22e6becdf328cfe Mon Sep 17 00:00:00 2001
From: mschwoerer <82171591+mschwoer@users.noreply.github.com>
Date: Wed, 22 May 2024 16:51:41 +0200
Subject: [PATCH 02/53] auto-fix more linting issues
---
alphabase/constants/aa.py | 6 +-
alphabase/constants/isotope.py | 18 +++---
alphabase/constants/modification.py | 5 +-
alphabase/io/hdf.py | 5 +-
alphabase/peptide/fragment.py | 59 ++++++++++---------
alphabase/peptide/precursor.py | 24 ++++----
alphabase/protein/fasta.py | 29 +++++----
alphabase/psm_reader/alphapept_reader.py | 7 +--
alphabase/psm_reader/maxquant_reader.py | 9 ++-
alphabase/psm_reader/msfragger_reader.py | 5 +-
alphabase/psm_reader/psm_reader.py | 22 +++----
.../quant_reader/config_dict_loader.py | 6 +-
.../quant_reader/longformat_reader.py | 6 +-
.../quant_reader/quantreader_utils.py | 7 ++-
.../quant_reader/table_reformatter.py | 10 ++--
.../quant_reader/wideformat_reader.py | 2 +-
alphabase/spectral_library/base.py | 31 ++++++----
alphabase/spectral_library/flat.py | 20 ++++---
alphabase/spectral_library/reader.py | 44 +++++++-------
alphabase/spectral_library/translate.py | 2 +-
alphabase/spectral_library/validate.py | 18 +++---
setup.py | 5 +-
22 files changed, 175 insertions(+), 165 deletions(-)
diff --git a/alphabase/constants/aa.py b/alphabase/constants/aa.py
index b8b27e7c..8cae7d7e 100644
--- a/alphabase/constants/aa.py
+++ b/alphabase/constants/aa.py
@@ -69,7 +69,7 @@ def reset_AA_df():
def reset_AA_Composition():
global AA_Composition
AA_Composition = {}
- for aa, formula, mass in AA_DF.values:
+ for aa, formula, _mass in AA_DF.values:
AA_Composition[aa] = dict(parse_formula(formula))
return AA_Composition
@@ -77,7 +77,9 @@ def reset_AA_Composition():
reset_AA_Composition()
-def reset_AA_atoms(atom_replace_dict: typing.Dict = {}):
+def reset_AA_atoms(atom_replace_dict: typing.Dict = None):
+ if atom_replace_dict is None:
+ atom_replace_dict = {}
reset_elements()
replace_atoms(atom_replace_dict)
reset_AA_mass()
diff --git a/alphabase/constants/isotope.py b/alphabase/constants/isotope.py
index 8feecc93..82528fa0 100644
--- a/alphabase/constants/isotope.py
+++ b/alphabase/constants/isotope.py
@@ -155,14 +155,7 @@ def _calc_one_elem_cum_dist(element_cum_dist: np.ndarray, element_cum_mono: np.n
class IsotopeDistribution:
def __init__(
self,
- max_elem_num_dict: dict = {
- "C": 2000,
- "H": 5000,
- "N": 1000,
- "O": 1000,
- "S": 200,
- "P": 200,
- },
+ max_elem_num_dict: dict = None,
):
"""Faster calculation of isotope abundance distribution by pre-building
isotope distribution tables for most common elements.
@@ -193,6 +186,15 @@ def __init__(
{element: mono position array of cumulated isotope distribution},
and mono position array is a 1-D int np.ndarray.
"""
+ if max_elem_num_dict is None:
+ max_elem_num_dict = {
+ "C": 2000,
+ "H": 5000,
+ "N": 1000,
+ "O": 1000,
+ "S": 200,
+ "P": 200,
+ }
self.element_to_cum_dist_dict = {}
self.element_to_cum_mono_idx = {}
for elem, n in max_elem_num_dict.items():
diff --git a/alphabase/constants/modification.py b/alphabase/constants/modification.py
index 279ee6f0..6a3d9805 100644
--- a/alphabase/constants/modification.py
+++ b/alphabase/constants/modification.py
@@ -276,10 +276,7 @@ def calc_modloss_mass_with_importance(
mod_losses = np.zeros(nAA + 2)
mod_losses[mod_sites] = [MOD_LOSS_MASS[mod] for mod in mod_names]
_loss_importance = np.zeros(nAA + 2)
- _loss_importance[mod_sites] = [
- MOD_LOSS_IMPORTANCE[mod] if mod in MOD_LOSS_IMPORTANCE else 0
- for mod in mod_names
- ]
+ _loss_importance[mod_sites] = [MOD_LOSS_IMPORTANCE.get(mod, 0) for mod in mod_names]
# Will not consider the modloss if the corresponding modloss_importance is 0
mod_losses[_loss_importance == 0] = 0
diff --git a/alphabase/io/hdf.py b/alphabase/io/hdf.py
index a9b41446..d4ffcc61 100644
--- a/alphabase/io/hdf.py
+++ b/alphabase/io/hdf.py
@@ -496,10 +496,7 @@ def __init__(
>>> hdf_file.dfs.df1.data_from
"colleagues"
"""
- if delete_existing:
- mode = "w"
- else:
- mode = "a"
+ mode = "w" if delete_existing else "a"
with h5py.File(file_name, mode): # , swmr=True):
pass
super().__init__(
diff --git a/alphabase/peptide/fragment.py b/alphabase/peptide/fragment.py
index ba0ff3c9..c65e079e 100644
--- a/alphabase/peptide/fragment.py
+++ b/alphabase/peptide/fragment.py
@@ -494,10 +494,12 @@ def mask_fragments_for_charge_greater_than_precursor_charge(
precursor_charge_array: np.ndarray,
nAA_array: np.ndarray,
*,
- candidate_fragment_charges: list = [2, 3, 4],
+ candidate_fragment_charges: list = None,
):
"""Mask the fragment dataframe when
the fragment charge is larger than the precursor charge"""
+ if candidate_fragment_charges is None:
+ candidate_fragment_charges = [2, 3, 4]
precursor_charge_array = np.repeat(precursor_charge_array, nAA_array - 1)
for col in fragment_df.columns:
for charge in candidate_fragment_charges:
@@ -681,8 +683,8 @@ def flatten_fragments(
fragment_intensity_df: pd.DataFrame,
min_fragment_intensity: float = -1,
keep_top_k_fragments: int = 1000,
- custom_columns: list = ["type", "number", "position", "charge", "loss_type"],
- custom_df: Dict[str, pd.DataFrame] = {},
+ custom_columns: list = None,
+ custom_df: Dict[str, pd.DataFrame] = None,
) -> Tuple[pd.DataFrame, pd.DataFrame]:
"""
Converts the tabular fragment format consisting of
@@ -750,6 +752,10 @@ def flatten_fragments(
- charge: uint8, fragment charge
- loss_type: int16, fragment loss type, 0=noloss, 17=NH3, 18=H2O, 98=H3PO4 (phos), ...
"""
+ if custom_df is None:
+ custom_df = {}
+ if custom_columns is None:
+ custom_columns = ["type", "number", "position", "charge", "loss_type"]
if len(precursor_df) == 0:
return precursor_df, pd.DataFrame()
# new dataframes for fragments and precursors are created
@@ -1047,25 +1053,24 @@ def create_fragment_mz_dataframe(
pd.DataFrame
`fragment_mz_df` with given `charged_frag_types`
"""
- if reference_fragment_df is None:
- if "frag_start_idx" in precursor_df.columns:
- # raise ValueError(
- # "`precursor_df` contains 'frag_start_idx' column, "\
- # "please provide `reference_fragment_df` argument"
- # )
- fragment_mz_df = init_fragment_by_precursor_dataframe(
- precursor_df,
- charged_frag_types,
- dtype=dtype,
- )
- return create_fragment_mz_dataframe(
- precursor_df=precursor_df,
- charged_frag_types=charged_frag_types,
- reference_fragment_df=fragment_mz_df,
- inplace_in_reference=True,
- batch_size=batch_size,
- dtype=dtype,
- )
+ if reference_fragment_df is None and "frag_start_idx" in precursor_df.columns:
+ # raise ValueError(
+ # "`precursor_df` contains 'frag_start_idx' column, "\
+ # "please provide `reference_fragment_df` argument"
+ # )
+ fragment_mz_df = init_fragment_by_precursor_dataframe(
+ precursor_df,
+ charged_frag_types,
+ dtype=dtype,
+ )
+ return create_fragment_mz_dataframe(
+ precursor_df=precursor_df,
+ charged_frag_types=charged_frag_types,
+ reference_fragment_df=fragment_mz_df,
+ inplace_in_reference=True,
+ batch_size=batch_size,
+ dtype=dtype,
+ )
if "nAA" not in precursor_df.columns:
# fast
return create_fragment_mz_dataframe_by_sort_precursor(
@@ -1255,12 +1260,10 @@ def filter_fragment_number(
if not set(["frag_start_idx", "frag_stop_idx"]).issubset(precursor_df.columns):
raise KeyError("frag_start_idx and frag_stop_idx not in dataframe")
- for i, (start_idx, stop_idx, n_allowed_lib) in enumerate(
- zip(
- precursor_df["frag_start_idx"].values,
- precursor_df["frag_stop_idx"].values,
- precursor_df[n_fragments_allowed_column_name].values,
- )
+ for start_idx, stop_idx, n_allowed_lib in zip(
+ precursor_df["frag_start_idx"].values,
+ precursor_df["frag_stop_idx"].values,
+ precursor_df[n_fragments_allowed_column_name].values,
):
_allowed = min(n_allowed_lib, n_allowed)
diff --git a/alphabase/peptide/precursor.py b/alphabase/peptide/precursor.py
index c45bf968..9f7ccfa3 100644
--- a/alphabase/peptide/precursor.py
+++ b/alphabase/peptide/precursor.py
@@ -25,18 +25,16 @@ def refine_precursor_df(
"""
if ensure_data_validity:
df.fillna("", inplace=True)
- if "charge" in df.columns:
- if df.charge.dtype not in [
- "int",
- "int8",
- "int64",
- "int32",
- # np.int64, np.int32, np.int8,
- ]:
- df["charge"] = df["charge"].astype(np.int8)
- if "mod_sites" in df.columns:
- if df.mod_sites.dtype not in ["O", "U"]:
- df["mod_sites"] = df.mod_sites.astype("U")
+ if "charge" in df.columns and df.charge.dtype not in [
+ "int",
+ "int8",
+ "int64",
+ "int32",
+ # np.int64, np.int32, np.int8,
+ ]:
+ df["charge"] = df["charge"].astype(np.int8)
+ if "mod_sites" in df.columns and df.mod_sites.dtype not in ["O", "U"]:
+ df["mod_sites"] = df.mod_sites.astype("U")
if "nAA" not in df.columns:
df["nAA"] = df.sequence.str.len().astype(np.int32)
@@ -107,7 +105,7 @@ def update_precursor_mz(
# precursor_mz_idx = precursor_df.columns.get_loc(
# 'precursor_mz'
# )
- for nAA, big_df_group in _grouped:
+ for _, big_df_group in _grouped:
for i in range(0, len(big_df_group), batch_size):
batch_end = i + batch_size
diff --git a/alphabase/protein/fasta.py b/alphabase/protein/fasta.py
index 174edffb..3c5e6dc6 100644
--- a/alphabase/protein/fasta.py
+++ b/alphabase/protein/fasta.py
@@ -429,8 +429,8 @@ def add_single_peptide_labeling(
nterm_label_mod: str,
cterm_label_mod: str,
):
- add_nterm_label = True if nterm_label_mod else False
- add_cterm_label = True if cterm_label_mod else False
+ add_nterm_label = bool(nterm_label_mod)
+ add_cterm_label = bool(cterm_label_mod)
if mod_sites:
_sites = mod_sites.split(";")
if "0" in _sites:
@@ -478,10 +478,7 @@ def create_labeling_peptide_df(
if len(peptide_df) == 0:
return peptide_df
- if inplace:
- df = peptide_df
- else:
- df = peptide_df.copy()
+ df = peptide_df if inplace else peptide_df.copy()
(label_aas, label_mod_dict, nterm_label_mod, cterm_label_mod) = parse_labels(labels)
@@ -507,7 +504,7 @@ def protein_idxes_to_names(protein_idxes: str, protein_names: list):
def append_special_modifications(
df: pd.DataFrame,
- var_mods: list = ["Phospho@S", "Phospho@T", "Phospho@Y"],
+ var_mods: list = None,
min_mod_num: int = 0,
max_mod_num: int = 1,
max_peptidoform_num: int = 100,
@@ -553,6 +550,8 @@ def append_special_modifications(
pd.DataFrame
The precursor_df with new modification added.
"""
+ if var_mods is None:
+ var_mods = ["Phospho@S", "Phospho@T", "Phospho@Y"]
if len(var_mods) == 0 or len(df) == 0:
return df
@@ -644,7 +643,7 @@ class SpecLibFasta(SpecLibBase):
def __init__(
self,
- charged_frag_types: list = ["b_z1", "b_z2", "y_z1", "y_z2"],
+ charged_frag_types: list = None,
*,
protease: str = "trypsin",
max_missed_cleavages: int = 2,
@@ -654,12 +653,12 @@ def __init__(
precursor_charge_max: int = 4,
precursor_mz_min: float = 400.0,
precursor_mz_max: float = 2000.0,
- var_mods: list = ["Acetyl@Protein_N-term", "Oxidation@M"],
+ var_mods: list = None,
min_var_mod_num: int = 0,
max_var_mod_num: int = 2,
- fix_mods: list = ["Carbamidomethyl@C"],
+ fix_mods: list = None,
labeling_channels: dict = None,
- special_mods: list = [],
+ special_mods: list = None,
min_special_mod_num: int = 0,
max_special_mod_num: int = 1,
special_mods_cannot_modify_pep_n_term: bool = False,
@@ -758,6 +757,14 @@ def __init__(
include_contaminants : bool, optional
If include contaminants.fasta, by default False
"""
+ if special_mods is None:
+ special_mods = []
+ if fix_mods is None:
+ fix_mods = ["Carbamidomethyl@C"]
+ if var_mods is None:
+ var_mods = ["Acetyl@Protein_N-term", "Oxidation@M"]
+ if charged_frag_types is None:
+ charged_frag_types = ["b_z1", "b_z2", "y_z1", "y_z2"]
super().__init__(
charged_frag_types=charged_frag_types,
precursor_mz_min=precursor_mz_min,
diff --git a/alphabase/psm_reader/alphapept_reader.py b/alphabase/psm_reader/alphapept_reader.py
index 0327fabc..df59f8fa 100644
--- a/alphabase/psm_reader/alphapept_reader.py
+++ b/alphabase/psm_reader/alphapept_reader.py
@@ -18,10 +18,7 @@ def parse_ap(precursor):
Parser to parse peptide strings
"""
items = precursor.split("_")
- if len(items) == 3:
- decoy = 1
- else:
- decoy = 0
+ decoy = 1 if len(items) == 3 else 0
modseq = items[0]
charge = items[-1]
@@ -81,7 +78,7 @@ def _init_modification_mapping(self):
def _load_file(self, filename):
with h5py.File(filename, "r") as _hdf:
dataset = _hdf[self.hdf_dataset]
- df = pd.DataFrame({col: dataset[col] for col in dataset.keys()})
+ df = pd.DataFrame({col: dataset[col] for col in dataset})
df["raw_name"] = os.path.basename(filename)[: -len(".ms_data.hdf")]
df["precursor"] = df["precursor"].str.decode("utf-8")
# df['naked_sequence'] = df['naked_sequence'].str.decode('utf-8')
diff --git a/alphabase/psm_reader/maxquant_reader.py b/alphabase/psm_reader/maxquant_reader.py
index 6087b02f..96c5a67c 100644
--- a/alphabase/psm_reader/maxquant_reader.py
+++ b/alphabase/psm_reader/maxquant_reader.py
@@ -75,10 +75,7 @@ def parse_mod_seq(
0 for N-term; -1 for C-term; 1 to N for normal modifications.
"""
PeptideModSeq = modseq
- if modseq[0] == "_":
- underscore_for_ncterm = True
- else:
- underscore_for_ncterm = False
+ underscore_for_ncterm = modseq[0] == "_"
mod_list = []
site_list = []
site = PeptideModSeq.find(mod_sep[0])
@@ -136,7 +133,7 @@ def __init__(
fdr=0.01,
keep_decoy=False,
fixed_C57=True,
- mod_seq_columns=["Modified sequence"],
+ mod_seq_columns=None,
**kwargs,
):
"""Reader for MaxQuant msms.txt and evidence.txt
@@ -168,6 +165,8 @@ def __init__(
The columns to find modified sequences,
by default ['Modified sequence']
"""
+ if mod_seq_columns is None:
+ mod_seq_columns = ["Modified sequence"]
super().__init__(
column_mapping=column_mapping,
modification_mapping=modification_mapping,
diff --git a/alphabase/psm_reader/msfragger_reader.py b/alphabase/psm_reader/msfragger_reader.py
index 56f9ef9c..005f23d8 100644
--- a/alphabase/psm_reader/msfragger_reader.py
+++ b/alphabase/psm_reader/msfragger_reader.py
@@ -13,10 +13,7 @@
def _is_fragger_decoy(proteins):
- for prot in proteins:
- if not prot.lower().startswith("rev_"):
- return False
- return True
+ return all(prot.lower().startswith("rev_") for prot in proteins)
mass_mapped_mods = psm_reader_yaml["msfragger_pepxml"]["mass_mapped_mods"]
diff --git a/alphabase/psm_reader/psm_reader.py b/alphabase/psm_reader/psm_reader.py
index e57c1d92..9721cdc8 100644
--- a/alphabase/psm_reader/psm_reader.py
+++ b/alphabase/psm_reader/psm_reader.py
@@ -344,7 +344,7 @@ def normalize_rt_by_raw_name(self):
self.norm_rt()
if "raw_name" not in self.psm_df.columns:
return
- for raw_name, df_group in self.psm_df.groupby("raw_name"):
+ for _, df_group in self.psm_df.groupby("raw_name"):
self.psm_df.loc[df_group.index, "rt_norm"] = (
df_group.rt_norm / df_group.rt_norm.max()
)
@@ -510,19 +510,21 @@ def _post_process(self, origin_df: pd.DataFrame):
def filter_psm_by_modifications(
self,
- include_mod_set=set(
- [
- "Oxidation@M",
- "Phospho@S",
- "Phospho@T",
- "Phospho@Y",
- "Acetyl@Protein N-term",
- ]
- ),
+ include_mod_set=None,
):
"""
Only keeps peptides with modifications in `include_mod_list`.
"""
+ if include_mod_set is None:
+ include_mod_set = set(
+ [
+ "Oxidation@M",
+ "Phospho@S",
+ "Phospho@T",
+ "Phospho@Y",
+ "Acetyl@Protein N-term",
+ ]
+ )
self._psm_df.mods = self._psm_df.mods.apply(
keep_modifications, mod_set=include_mod_set
)
diff --git a/alphabase/quantification/quant_reader/config_dict_loader.py b/alphabase/quantification/quant_reader/config_dict_loader.py
index 2cdf4aa1..1f37adbc 100644
--- a/alphabase/quantification/quant_reader/config_dict_loader.py
+++ b/alphabase/quantification/quant_reader/config_dict_loader.py
@@ -24,7 +24,7 @@ def get_input_type_and_config_dict(input_file, input_type_to_use=None):
uploaded_data_columns = set(pd.read_csv(input_file, sep=sep, nrows=1).columns)
- for input_type in type2relevant_columns.keys():
+ for input_type in type2relevant_columns:
if (input_type_to_use is not None) and (input_type != input_type_to_use):
continue
relevant_columns = type2relevant_columns.get(input_type)
@@ -65,7 +65,7 @@ def _load_config(config_yaml):
def _get_type2relevant_cols(config_all):
type2relcols = {}
- for type in config_all.keys():
+ for type in config_all:
config_typedict = config_all.get(type)
relevant_cols = get_relevant_columns_config_dict(config_typedict)
type2relcols[type] = relevant_cols
@@ -78,7 +78,7 @@ def get_relevant_columns_config_dict(config_typedict):
for filtconf in config_typedict.get("filters", {}).values():
filtcols.append(filtconf.get("param"))
- if "ion_hierarchy" in config_typedict.keys():
+ if "ion_hierarchy" in config_typedict:
for headr in config_typedict.get("ion_hierarchy").values():
ioncols = list(itertools.chain.from_iterable(headr.get("mapping").values()))
dict_ioncols.extend(ioncols)
diff --git a/alphabase/quantification/quant_reader/longformat_reader.py b/alphabase/quantification/quant_reader/longformat_reader.py
index 88a31db7..a89c9952 100644
--- a/alphabase/quantification/quant_reader/longformat_reader.py
+++ b/alphabase/quantification/quant_reader/longformat_reader.py
@@ -153,7 +153,7 @@ def adapt_subtable(input_df_subset, config_dict, use_alphaquant_format):
input_df_subset = quantreader_utils.filter_input(
config_dict.get("filters", {}), input_df_subset
)
- if "ion_hierarchy" in config_dict.keys():
+ if "ion_hierarchy" in config_dict:
return table_reformatter.merge_protein_cols_and_config_dict(
input_df_subset, config_dict, use_alphaquant_format
)
@@ -240,9 +240,9 @@ def process_with_dask(
def get_hierarchy_names_from_config_dict(config_dict_for_type):
hierarchy_names = []
- if "ion_hierarchy" in config_dict_for_type.keys():
+ if "ion_hierarchy" in config_dict_for_type:
ion_hierarchy = config_dict_for_type.get("ion_hierarchy")
- for hierarchy_type in ion_hierarchy.keys():
+ for hierarchy_type in ion_hierarchy:
hierarchy_names += ion_hierarchy.get(hierarchy_type).get("order")
return list(set(hierarchy_names))
else:
diff --git a/alphabase/quantification/quant_reader/quantreader_utils.py b/alphabase/quantification/quant_reader/quantreader_utils.py
index 49c094fc..9c01071e 100644
--- a/alphabase/quantification/quant_reader/quantreader_utils.py
+++ b/alphabase/quantification/quant_reader/quantreader_utils.py
@@ -1,3 +1,6 @@
+import contextlib
+
+
def filter_input(filter_dict, input):
if filter_dict is None:
return input
@@ -14,10 +17,8 @@ def filter_input(filter_dict, input):
if comparator == "==":
input = input[input[param] == value]
continue
- try:
+ with contextlib.suppress(Exception):
input = input.astype({f"{param}": "float"})
- except Exception:
- pass
if comparator == ">":
input = input[input[param].astype(type(value)) > value]
diff --git a/alphabase/quantification/quant_reader/table_reformatter.py b/alphabase/quantification/quant_reader/table_reformatter.py
index 70527265..4c221f1d 100644
--- a/alphabase/quantification/quant_reader/table_reformatter.py
+++ b/alphabase/quantification/quant_reader/table_reformatter.py
@@ -25,7 +25,7 @@ def merge_protein_cols_and_config_dict(
input_df = input_df.drop(columns=[x for x in protein_cols if x != "protein"])
index_names = []
- for hierarchy_type in ion_hierarchy.keys():
+ for hierarchy_type in ion_hierarchy:
df_subset = input_df.copy()
ion_hierarchy_local = ion_hierarchy.get(hierarchy_type).get("order")
ion_headers_merged, ion_headers_grouped = get_ionname_columns(
@@ -35,13 +35,13 @@ def merge_protein_cols_and_config_dict(
df_subset, hierarchy_type, config_dict, ion_headers_merged
)
headers = list(set(ion_headers_merged + quant_columns + ["protein"]))
- if "sample_ID" in config_dict.keys():
+ if "sample_ID" in config_dict:
headers += [config_dict.get("sample_ID")]
df_subset = df_subset[headers].drop_duplicates()
if splitcol2sep is not None:
if (
- quant_columns[0] in splitcol2sep.keys()
+ quant_columns[0] in splitcol2sep
): # in the case that quantitative values are stored grouped in one column (e.g. msiso1,msiso2,msiso3, etc.), reformat accordingly
df_subset = split_extend_df(df_subset, splitcol2sep)
ion_headers_grouped = adapt_headers_on_extended_df(
@@ -97,7 +97,7 @@ def get_quantitative_columns(input_df, hierarchy_type, config_dict, ion_headers_
quantcolumn_candidates = [
x for x in input_df.columns if x not in naming_columns
]
- if "quant_pre_or_suffix" in config_dict.keys():
+ if "quant_pre_or_suffix" in config_dict:
return [
x
for x in quantcolumn_candidates
@@ -147,7 +147,7 @@ def adapt_headers_on_extended_df(ion_headers_grouped, splitcol2sep):
for vals in ion_headers_grouped_copy:
if splitcol2sep is not None:
for idx in range(len(vals)):
- if vals[idx] in splitcol2sep.keys():
+ if vals[idx] in splitcol2sep:
vals[idx] = vals[idx] + "_idxs"
return ion_headers_grouped_copy
diff --git a/alphabase/quantification/quant_reader/wideformat_reader.py b/alphabase/quantification/quant_reader/wideformat_reader.py
index 52ce7cdf..1e7c03a3 100644
--- a/alphabase/quantification/quant_reader/wideformat_reader.py
+++ b/alphabase/quantification/quant_reader/wideformat_reader.py
@@ -12,7 +12,7 @@ def reformat_and_write_wideformat_table(peptides_tsv, outfile_name, config_dict)
input_df = table_reformatter.merge_protein_cols_and_config_dict(
input_df, config_dict
)
- if "quant_pre_or_suffix" in config_dict.keys():
+ if "quant_pre_or_suffix" in config_dict:
quant_pre_or_suffix = config_dict.get("quant_pre_or_suffix")
headers = ["protein", "quant_id"] + list(
filter(
diff --git a/alphabase/spectral_library/base.py b/alphabase/spectral_library/base.py
index ba687112..fc84404f 100644
--- a/alphabase/spectral_library/base.py
+++ b/alphabase/spectral_library/base.py
@@ -80,7 +80,7 @@ def __init__(
# ['b_z1','b_z2','y_z1','y_modloss_z1', ...];
# 'b_z1': 'b' is the fragment type and
# 'z1' is the charge state z=1.
- charged_frag_types: typing.List[str] = ["b_z1", "b_z2", "y_z1", "y_z2"],
+ charged_frag_types: typing.List[str] = None,
precursor_mz_min=400,
precursor_mz_max=6000,
decoy: str = None,
@@ -104,7 +104,11 @@ def __init__(
Decoy methods, could be "pseudo_reverse" or "diann".
Defaults to None.
"""
- self.charged_frag_types = charged_frag_types
+ self.charged_frag_types = (
+ ["b_z1", "b_z2", "y_z1", "y_z2"]
+ if charged_frag_types is None
+ else charged_frag_types
+ )
self._precursor_df = pd.DataFrame()
self._fragment_intensity_df = pd.DataFrame()
self._fragment_mz_df = pd.DataFrame()
@@ -190,12 +194,7 @@ def copy(self):
def append(
self,
other: "SpecLibBase",
- dfs_to_append: typing.List[str] = [
- "_precursor_df",
- "_fragment_intensity_df",
- "_fragment_mz_df",
- "_fragment_intensity_predicted_df",
- ],
+ dfs_to_append: typing.List[str] = None,
remove_unused_dfs: bool = True,
):
"""
@@ -223,6 +222,13 @@ def append(
None
"""
+ if dfs_to_append is None:
+ dfs_to_append = [
+ "_precursor_df",
+ "_fragment_intensity_df",
+ "_fragment_mz_df",
+ "_fragment_intensity_predicted_df",
+ ]
if remove_unused_dfs:
current_frag_dfs = self.available_dense_fragment_dfs()
for attr in current_frag_dfs:
@@ -265,11 +271,10 @@ def check_matching_columns(df1, df2):
n_fragments = []
# get subset of dfs_to_append starting with _fragment
for attr in dfs_to_append:
- if attr.startswith("_fragment"):
- if hasattr(self, attr):
- n_current_fragments = len(getattr(self, attr))
- if n_current_fragments > 0:
- n_fragments += [n_current_fragments]
+ if attr.startswith("_fragment") and hasattr(self, attr):
+ n_current_fragments = len(getattr(self, attr))
+ if n_current_fragments > 0:
+ n_fragments += [n_current_fragments]
if not np.all(np.array(n_fragments) == n_fragments[0]):
raise ValueError(
diff --git a/alphabase/spectral_library/flat.py b/alphabase/spectral_library/flat.py
index 62e9db7c..3af62c78 100644
--- a/alphabase/spectral_library/flat.py
+++ b/alphabase/spectral_library/flat.py
@@ -38,16 +38,10 @@ class SpecLibFlat(SpecLibBase):
def __init__(
self,
- charged_frag_types: list = ["b_z1", "b_z2", "y_z1", "y_z2"],
+ charged_frag_types: list = None,
min_fragment_intensity: float = 0.001,
keep_top_k_fragments: int = 1000,
- custom_fragment_df_columns: list = [
- "type",
- "number",
- "position",
- "charge",
- "loss_type",
- ],
+ custom_fragment_df_columns: list = None,
**kwargs,
):
"""
@@ -63,6 +57,16 @@ def __init__(
See :attr:`custom_fragment_df_columns`,
defaults to ['type','number','position','charge','loss_type']
"""
+ if custom_fragment_df_columns is None:
+ custom_fragment_df_columns = [
+ "type",
+ "number",
+ "position",
+ "charge",
+ "loss_type",
+ ]
+ if charged_frag_types is None:
+ charged_frag_types = ["b_z1", "b_z2", "y_z1", "y_z2"]
super().__init__(charged_frag_types=charged_frag_types)
self.min_fragment_intensity = min_fragment_intensity
self.keep_top_k_fragments = keep_top_k_fragments
diff --git a/alphabase/spectral_library/reader.py b/alphabase/spectral_library/reader.py
index f5dd209a..ed5e5975 100644
--- a/alphabase/spectral_library/reader.py
+++ b/alphabase/spectral_library/reader.py
@@ -15,16 +15,7 @@
class LibraryReaderBase(MaxQuantReader, SpecLibBase):
def __init__(
self,
- charged_frag_types: typing.List[str] = [
- "b_z1",
- "b_z2",
- "y_z1",
- "y_z2",
- "b_modloss_z1",
- "b_modloss_z2",
- "y_modloss_z1",
- "y_modloss_z2",
- ],
+ charged_frag_types: typing.List[str] = None,
column_mapping: dict = None,
modification_mapping: dict = None,
fdr=0.01,
@@ -79,6 +70,17 @@ def __init__(
Can be either `pseudo_reverse` or `diann`
"""
+ if charged_frag_types is None:
+ charged_frag_types = [
+ "b_z1",
+ "b_z2",
+ "y_z1",
+ "y_z2",
+ "b_modloss_z1",
+ "b_modloss_z2",
+ "y_modloss_z1",
+ "y_modloss_z2",
+ ]
SpecLibBase.__init__(
self,
charged_frag_types=charged_frag_types,
@@ -293,21 +295,23 @@ def _post_process(
class LibraryReaderFromRawData(SpecLibBase):
def __init__(
self,
- charged_frag_types: typing.List[str] = [
- "b_z1",
- "b_z2",
- "y_z1",
- "y_z2",
- "b_modloss_z1",
- "b_modloss_z2",
- "y_modloss_z1",
- "y_modloss_z2",
- ],
+ charged_frag_types: typing.List[str] = None,
precursor_mz_min: float = 400,
precursor_mz_max: float = 2000,
decoy: str = None,
**kwargs,
):
+ if charged_frag_types is None:
+ charged_frag_types = [
+ "b_z1",
+ "b_z2",
+ "y_z1",
+ "y_z2",
+ "b_modloss_z1",
+ "b_modloss_z2",
+ "y_modloss_z1",
+ "y_modloss_z2",
+ ]
super().__init__(
charged_frag_types=charged_frag_types,
precursor_mz_min=precursor_mz_min,
diff --git a/alphabase/spectral_library/translate.py b/alphabase/spectral_library/translate.py
index 6a8f460c..b163a37d 100644
--- a/alphabase/spectral_library/translate.py
+++ b/alphabase/spectral_library/translate.py
@@ -120,7 +120,7 @@ def merge_precursor_fragment_df(
iters = enumerate(df[["frag_start_idx", "frag_stop_idx"]].values)
if verbose:
iters = tqdm.tqdm(iters)
- for i, (start, end) in iters:
+ for _i, (start, end) in iters:
intens = fragment_inten_df.iloc[start:end, :].to_numpy(
copy=True
) # is loc[start:end-1,:] faster?
diff --git a/alphabase/spectral_library/validate.py b/alphabase/spectral_library/validate.py
index 4c869322..3396d577 100644
--- a/alphabase/spectral_library/validate.py
+++ b/alphabase/spectral_library/validate.py
@@ -72,17 +72,15 @@ def __call__(self, df: pd.DataFrame):
f"Validation failed: Column {self.name} of type {_get_type_name(df[self.name].dtype)} cannot be cast to {_get_type_name(self.type)}"
)
- if not self.allow_NaN:
- if df[self.name].isna().any():
- raise ValueError(
- f"Validation failed: Column {self.name} contains NaN values"
- )
+ if not self.allow_NaN and df[self.name].isna().any():
+ raise ValueError(
+ f"Validation failed: Column {self.name} contains NaN values"
+ )
- if not self.allow_inf:
- if not np.isfinite(df[self.name]).all():
- raise ValueError(
- f"Validation failed: Column {self.name} contains inf values"
- )
+ if not self.allow_inf and not np.isfinite(df[self.name]).all():
+ raise ValueError(
+ f"Validation failed: Column {self.name} contains inf values"
+ )
class Optional(Column):
diff --git a/setup.py b/setup.py
index d3e36c2b..b803c302 100644
--- a/setup.py
+++ b/setup.py
@@ -21,10 +21,7 @@ def get_requirements():
requirement_file_names[""] = "requirements.txt"
for extra, requirement_file_name in requirement_file_names.items():
with open(requirement_file_name) as requirements_file:
- if extra != "":
- extra_stable = f"{extra}-stable"
- else:
- extra_stable = "stable"
+ extra_stable = f"{extra}-stable" if extra != "" else "stable"
extra_requirements[extra_stable] = []
extra_requirements[extra] = []
for line in requirements_file:
From dae9f9527f38d80ed4c91e42a618de1f0a6e30c7 Mon Sep 17 00:00:00 2001
From: mschwoerer <82171591+mschwoer@users.noreply.github.com>
Date: Wed, 22 May 2024 16:54:57 +0200
Subject: [PATCH 03/53] fix more linting issues
---
alphabase/io/hdf.py | 16 +++++++++-------
alphabase/io/tempmmap.py | 9 ++++-----
alphabase/psm_reader/psm_reader.py | 7 ++++---
alphabase/spectral_library/base.py | 12 +++++++-----
alphabase/utils.py | 2 +-
pyproject.toml | 16 ++++++++--------
6 files changed, 33 insertions(+), 29 deletions(-)
diff --git a/alphabase/io/hdf.py b/alphabase/io/hdf.py
index d4ffcc61..8262d9e1 100644
--- a/alphabase/io/hdf.py
+++ b/alphabase/io/hdf.py
@@ -199,14 +199,16 @@ def set_truncate(self, truncate: bool = True):
def __setattr__(self, name, value):
try:
super().__setattr__(name, value)
- except NotImplementedError:
+ except NotImplementedError as e:
if not self.truncate:
if name in self.group_names:
- raise KeyError(f"Group name '{name}' cannot be truncated")
+ raise KeyError(f"Group name '{name}' cannot be truncated") from e
elif name in self.dataset_names:
- raise KeyError(f"Dataset name '{name}' cannot be truncated")
+ raise KeyError(f"Dataset name '{name}' cannot be truncated") from e
elif name in self.dataframe_names:
- raise KeyError(f"Dataframe name '{name}' cannot be truncated")
+ raise KeyError(
+ f"Dataframe name '{name}' cannot be truncated"
+ ) from e
if isinstance(value, (np.ndarray, pd.core.series.Series)):
self.add_dataset(name, value)
elif isinstance(value, (dict, pd.DataFrame)):
@@ -217,7 +219,7 @@ def __setattr__(self, name, value):
"Only (str, bool, int, float, np.ndarray, "
"pd.core.series.Series, dict pd.DataFrame) types are "
"accepted.",
- )
+ ) from e
def add_dataset(
self,
@@ -252,12 +254,12 @@ def add_dataset(
# chunks=array.shape,
maxshape=tuple([None for i in array.shape]),
)
- except TypeError:
+ except TypeError as e:
raise NotImplementedError(
f"Type {array.dtype} is not understood. "
"If this is a string format, try to cast it to "
"np.dtype('O') as possible solution."
- )
+ ) from e
dataset = HDF_Dataset(
file_name=self.file_name,
name=f"{self.name}/{name}",
diff --git a/alphabase/io/tempmmap.py b/alphabase/io/tempmmap.py
index 7dfac298..a4d7b0d8 100644
--- a/alphabase/io/tempmmap.py
+++ b/alphabase/io/tempmmap.py
@@ -119,11 +119,10 @@ def create_empty_mmap(shape: tuple, dtype: np.dtype, path: str = None, overwrite
)
else:
# check that if overwrite is false the file does not already exist
- if not overwrite:
- if os.path.exists(path):
- raise ValueError(
- "The file already exists. Set overwrite to True to overwrite the file or choose a different name."
- )
+ if not overwrite and os.path.exists(path):
+ raise ValueError(
+ "The file already exists. Set overwrite to True to overwrite the file or choose a different name."
+ )
if not os.path.basename.endswith(".hdf"):
raise ValueError("The chosen file name needs to end with .hdf")
if os.path.isdir(os.path.commonpath(path)):
diff --git a/alphabase/psm_reader/psm_reader.py b/alphabase/psm_reader/psm_reader.py
index 9721cdc8..0ff51dbb 100644
--- a/alphabase/psm_reader/psm_reader.py
+++ b/alphabase/psm_reader/psm_reader.py
@@ -240,9 +240,10 @@ def _reverse_mod_mapping(self):
for this_mod, other_mod in self.modification_mapping.items():
if isinstance(other_mod, (list, tuple)):
for _mod in other_mod:
- if _mod in self.rev_mod_mapping:
- if this_mod.endswith("Protein N-term"):
- continue
+ if _mod in self.rev_mod_mapping and this_mod.endswith(
+ "Protein N-term"
+ ):
+ continue
self.rev_mod_mapping[_mod] = this_mod
else:
self.rev_mod_mapping[other_mod] = this_mod
diff --git a/alphabase/spectral_library/base.py b/alphabase/spectral_library/base.py
index fc84404f..47a31b20 100644
--- a/alphabase/spectral_library/base.py
+++ b/alphabase/spectral_library/base.py
@@ -281,19 +281,21 @@ def check_matching_columns(df1, df2):
"The libraries can't be appended as the number of fragments in the current libraries are not the same."
)
- for attr, matching_columns in zip(dfs_to_append, matching_columns):
+ for attr, column in zip(dfs_to_append, matching_columns):
if hasattr(self, attr) and hasattr(other, attr):
current_df = getattr(self, attr)
# copy dataframes to avoid changing the original ones
- other_df = getattr(other, attr)[matching_columns].copy()
+ other_df = getattr(other, attr)[column].copy()
if attr.startswith("_precursor"):
frag_idx_increment = 0
for fragment_df in ["_fragment_intensity_df", "_fragment_mz_df"]:
- if hasattr(self, fragment_df):
- if len(getattr(self, fragment_df)) > 0:
- frag_idx_increment = len(getattr(self, fragment_df))
+ if (
+ hasattr(self, fragment_df)
+ and len(getattr(self, fragment_df)) > 0
+ ):
+ frag_idx_increment = len(getattr(self, fragment_df))
if "frag_start_idx" in other_df.columns:
other_df["frag_start_idx"] += frag_idx_increment
diff --git a/alphabase/utils.py b/alphabase/utils.py
index adb00faf..7bb7fa3c 100644
--- a/alphabase/utils.py
+++ b/alphabase/utils.py
@@ -9,7 +9,7 @@
def process_bar(iterator, len_iter):
with tqdm.tqdm(total=len_iter) as bar:
i = 0
- for i, iter in enumerate(iterator):
+ for i, iter in enumerate(iterator): # noqa: B007
yield iter
bar.update()
bar.update(len_iter - i - 1)
diff --git a/pyproject.toml b/pyproject.toml
index ebe33c6e..4847eeee 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,14 +4,14 @@ select = [
"E",
# Pyflakes
"F",
-# # pyupgrade
-# "UP",
-# # flake8-bugbear
-# "B",
-# # flake8-simplify
-# "SIM",
-# # isort
-# "I",
+ # pyupgrade
+ "UP",
+ # flake8-bugbear
+ "B",
+ # flake8-simplify
+ "SIM",
+ # isort
+ "I",
]
ignore = [
"E501", # Line too long (ruff wraps code, but not docstrings)
From fd03c81662f2245c3240922d748728fe0b4ea193 Mon Sep 17 00:00:00 2001
From: mschwoerer <82171591+mschwoer@users.noreply.github.com>
Date: Wed, 12 Jun 2024 09:11:29 +0200
Subject: [PATCH 04/53] revert back tp mutable arguments
---
alphabase/constants/aa.py | 4 +---
alphabase/constants/isotope.py | 18 ++++++++----------
alphabase/peptide/fragment.py | 12 +++---------
alphabase/protein/fasta.py | 20 +++++---------------
alphabase/spectral_library/base.py | 22 ++++++++--------------
alphabase/spectral_library/flat.py | 20 ++++++++------------
alphabase/spectral_library/reader.py | 22 ++++++++++------------
pyproject.toml | 3 ++-
8 files changed, 45 insertions(+), 76 deletions(-)
diff --git a/alphabase/constants/aa.py b/alphabase/constants/aa.py
index 8cae7d7e..c2334e9e 100644
--- a/alphabase/constants/aa.py
+++ b/alphabase/constants/aa.py
@@ -77,9 +77,7 @@ def reset_AA_Composition():
reset_AA_Composition()
-def reset_AA_atoms(atom_replace_dict: typing.Dict = None):
- if atom_replace_dict is None:
- atom_replace_dict = {}
+def reset_AA_atoms(atom_replace_dict: typing.Dict = {}):
reset_elements()
replace_atoms(atom_replace_dict)
reset_AA_mass()
diff --git a/alphabase/constants/isotope.py b/alphabase/constants/isotope.py
index 82528fa0..8feecc93 100644
--- a/alphabase/constants/isotope.py
+++ b/alphabase/constants/isotope.py
@@ -155,7 +155,14 @@ def _calc_one_elem_cum_dist(element_cum_dist: np.ndarray, element_cum_mono: np.n
class IsotopeDistribution:
def __init__(
self,
- max_elem_num_dict: dict = None,
+ max_elem_num_dict: dict = {
+ "C": 2000,
+ "H": 5000,
+ "N": 1000,
+ "O": 1000,
+ "S": 200,
+ "P": 200,
+ },
):
"""Faster calculation of isotope abundance distribution by pre-building
isotope distribution tables for most common elements.
@@ -186,15 +193,6 @@ def __init__(
{element: mono position array of cumulated isotope distribution},
and mono position array is a 1-D int np.ndarray.
"""
- if max_elem_num_dict is None:
- max_elem_num_dict = {
- "C": 2000,
- "H": 5000,
- "N": 1000,
- "O": 1000,
- "S": 200,
- "P": 200,
- }
self.element_to_cum_dist_dict = {}
self.element_to_cum_mono_idx = {}
for elem, n in max_elem_num_dict.items():
diff --git a/alphabase/peptide/fragment.py b/alphabase/peptide/fragment.py
index c65e079e..2eb4a6d9 100644
--- a/alphabase/peptide/fragment.py
+++ b/alphabase/peptide/fragment.py
@@ -494,12 +494,10 @@ def mask_fragments_for_charge_greater_than_precursor_charge(
precursor_charge_array: np.ndarray,
nAA_array: np.ndarray,
*,
- candidate_fragment_charges: list = None,
+ candidate_fragment_charges: list = [2, 3, 4],
):
"""Mask the fragment dataframe when
the fragment charge is larger than the precursor charge"""
- if candidate_fragment_charges is None:
- candidate_fragment_charges = [2, 3, 4]
precursor_charge_array = np.repeat(precursor_charge_array, nAA_array - 1)
for col in fragment_df.columns:
for charge in candidate_fragment_charges:
@@ -683,8 +681,8 @@ def flatten_fragments(
fragment_intensity_df: pd.DataFrame,
min_fragment_intensity: float = -1,
keep_top_k_fragments: int = 1000,
- custom_columns: list = None,
- custom_df: Dict[str, pd.DataFrame] = None,
+ custom_columns: list = ["type", "number", "position", "charge", "loss_type"],
+ custom_df: Dict[str, pd.DataFrame] = {},
) -> Tuple[pd.DataFrame, pd.DataFrame]:
"""
Converts the tabular fragment format consisting of
@@ -752,10 +750,6 @@ def flatten_fragments(
- charge: uint8, fragment charge
- loss_type: int16, fragment loss type, 0=noloss, 17=NH3, 18=H2O, 98=H3PO4 (phos), ...
"""
- if custom_df is None:
- custom_df = {}
- if custom_columns is None:
- custom_columns = ["type", "number", "position", "charge", "loss_type"]
if len(precursor_df) == 0:
return precursor_df, pd.DataFrame()
# new dataframes for fragments and precursors are created
diff --git a/alphabase/protein/fasta.py b/alphabase/protein/fasta.py
index 3c5e6dc6..5de7670b 100644
--- a/alphabase/protein/fasta.py
+++ b/alphabase/protein/fasta.py
@@ -504,7 +504,7 @@ def protein_idxes_to_names(protein_idxes: str, protein_names: list):
def append_special_modifications(
df: pd.DataFrame,
- var_mods: list = None,
+ var_mods: list = ["Phospho@S", "Phospho@T", "Phospho@Y"],
min_mod_num: int = 0,
max_mod_num: int = 1,
max_peptidoform_num: int = 100,
@@ -550,8 +550,6 @@ def append_special_modifications(
pd.DataFrame
The precursor_df with new modification added.
"""
- if var_mods is None:
- var_mods = ["Phospho@S", "Phospho@T", "Phospho@Y"]
if len(var_mods) == 0 or len(df) == 0:
return df
@@ -643,7 +641,7 @@ class SpecLibFasta(SpecLibBase):
def __init__(
self,
- charged_frag_types: list = None,
+ charged_frag_types: list = ["b_z1", "b_z2", "y_z1", "y_z2"],
*,
protease: str = "trypsin",
max_missed_cleavages: int = 2,
@@ -653,12 +651,12 @@ def __init__(
precursor_charge_max: int = 4,
precursor_mz_min: float = 400.0,
precursor_mz_max: float = 2000.0,
- var_mods: list = None,
+ var_mods: list = ["Acetyl@Protein_N-term", "Oxidation@M"],
min_var_mod_num: int = 0,
max_var_mod_num: int = 2,
- fix_mods: list = None,
+ fix_mods: list = ["Carbamidomethyl@C"],
labeling_channels: dict = None,
- special_mods: list = None,
+ special_mods: list = [],
min_special_mod_num: int = 0,
max_special_mod_num: int = 1,
special_mods_cannot_modify_pep_n_term: bool = False,
@@ -757,14 +755,6 @@ def __init__(
include_contaminants : bool, optional
If include contaminants.fasta, by default False
"""
- if special_mods is None:
- special_mods = []
- if fix_mods is None:
- fix_mods = ["Carbamidomethyl@C"]
- if var_mods is None:
- var_mods = ["Acetyl@Protein_N-term", "Oxidation@M"]
- if charged_frag_types is None:
- charged_frag_types = ["b_z1", "b_z2", "y_z1", "y_z2"]
super().__init__(
charged_frag_types=charged_frag_types,
precursor_mz_min=precursor_mz_min,
diff --git a/alphabase/spectral_library/base.py b/alphabase/spectral_library/base.py
index 47a31b20..cf605207 100644
--- a/alphabase/spectral_library/base.py
+++ b/alphabase/spectral_library/base.py
@@ -80,7 +80,7 @@ def __init__(
# ['b_z1','b_z2','y_z1','y_modloss_z1', ...];
# 'b_z1': 'b' is the fragment type and
# 'z1' is the charge state z=1.
- charged_frag_types: typing.List[str] = None,
+ charged_frag_types: typing.List[str] = ["b_z1", "b_z2", "y_z1", "y_z2"],
precursor_mz_min=400,
precursor_mz_max=6000,
decoy: str = None,
@@ -104,11 +104,7 @@ def __init__(
Decoy methods, could be "pseudo_reverse" or "diann".
Defaults to None.
"""
- self.charged_frag_types = (
- ["b_z1", "b_z2", "y_z1", "y_z2"]
- if charged_frag_types is None
- else charged_frag_types
- )
+ self.charged_frag_types = charged_frag_types
self._precursor_df = pd.DataFrame()
self._fragment_intensity_df = pd.DataFrame()
self._fragment_mz_df = pd.DataFrame()
@@ -194,7 +190,12 @@ def copy(self):
def append(
self,
other: "SpecLibBase",
- dfs_to_append: typing.List[str] = None,
+ dfs_to_append: typing.List[str] = [
+ "_precursor_df",
+ "_fragment_intensity_df",
+ "_fragment_mz_df",
+ "_fragment_intensity_predicted_df",
+ ],
remove_unused_dfs: bool = True,
):
"""
@@ -222,13 +223,6 @@ def append(
None
"""
- if dfs_to_append is None:
- dfs_to_append = [
- "_precursor_df",
- "_fragment_intensity_df",
- "_fragment_mz_df",
- "_fragment_intensity_predicted_df",
- ]
if remove_unused_dfs:
current_frag_dfs = self.available_dense_fragment_dfs()
for attr in current_frag_dfs:
diff --git a/alphabase/spectral_library/flat.py b/alphabase/spectral_library/flat.py
index 3af62c78..62e9db7c 100644
--- a/alphabase/spectral_library/flat.py
+++ b/alphabase/spectral_library/flat.py
@@ -38,10 +38,16 @@ class SpecLibFlat(SpecLibBase):
def __init__(
self,
- charged_frag_types: list = None,
+ charged_frag_types: list = ["b_z1", "b_z2", "y_z1", "y_z2"],
min_fragment_intensity: float = 0.001,
keep_top_k_fragments: int = 1000,
- custom_fragment_df_columns: list = None,
+ custom_fragment_df_columns: list = [
+ "type",
+ "number",
+ "position",
+ "charge",
+ "loss_type",
+ ],
**kwargs,
):
"""
@@ -57,16 +63,6 @@ def __init__(
See :attr:`custom_fragment_df_columns`,
defaults to ['type','number','position','charge','loss_type']
"""
- if custom_fragment_df_columns is None:
- custom_fragment_df_columns = [
- "type",
- "number",
- "position",
- "charge",
- "loss_type",
- ]
- if charged_frag_types is None:
- charged_frag_types = ["b_z1", "b_z2", "y_z1", "y_z2"]
super().__init__(charged_frag_types=charged_frag_types)
self.min_fragment_intensity = min_fragment_intensity
self.keep_top_k_fragments = keep_top_k_fragments
diff --git a/alphabase/spectral_library/reader.py b/alphabase/spectral_library/reader.py
index ed5e5975..6461ef00 100644
--- a/alphabase/spectral_library/reader.py
+++ b/alphabase/spectral_library/reader.py
@@ -15,7 +15,16 @@
class LibraryReaderBase(MaxQuantReader, SpecLibBase):
def __init__(
self,
- charged_frag_types: typing.List[str] = None,
+ charged_frag_types: typing.List[str] = [
+ "b_z1",
+ "b_z2",
+ "y_z1",
+ "y_z2",
+ "b_modloss_z1",
+ "b_modloss_z2",
+ "y_modloss_z1",
+ "y_modloss_z2",
+ ],
column_mapping: dict = None,
modification_mapping: dict = None,
fdr=0.01,
@@ -70,17 +79,6 @@ def __init__(
Can be either `pseudo_reverse` or `diann`
"""
- if charged_frag_types is None:
- charged_frag_types = [
- "b_z1",
- "b_z2",
- "y_z1",
- "y_z2",
- "b_modloss_z1",
- "b_modloss_z2",
- "y_modloss_z1",
- "y_modloss_z2",
- ]
SpecLibBase.__init__(
self,
charged_frag_types=charged_frag_types,
diff --git a/pyproject.toml b/pyproject.toml
index 4847eeee..565e4a72 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -15,5 +15,6 @@ select = [
]
ignore = [
"E501", # Line too long (ruff wraps code, but not docstrings)
- "B028" # No explicit `stacklevel` keyword argument found (for warnings)
+ "B028", # No explicit `stacklevel` keyword argument found (for warnings)
+ "B006", # Do not use mutable data structures for argument defaults # TODO: fix this!
]
From 6a574602fb38755fd074db4928f52ff887fc3156 Mon Sep 17 00:00:00 2001
From: mschwoerer <82171591+mschwoer@users.noreply.github.com>
Date: Wed, 12 Jun 2024 14:28:05 +0200
Subject: [PATCH 05/53] tolerate mutable arguments in ruff
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 565e4a72..659c6123 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,5 +16,5 @@ select = [
ignore = [
"E501", # Line too long (ruff wraps code, but not docstrings)
"B028", # No explicit `stacklevel` keyword argument found (for warnings)
- "B006", # Do not use mutable data structures for argument defaults # TODO: fix this!
+ #"B006", # Do not use mutable data structures for argument defaults # TODO: fix this!
]
From 7811213fba89b2522b4514d4bacd3a6eb3408d4d Mon Sep 17 00:00:00 2001
From: mschwoerer <82171591+mschwoer@users.noreply.github.com>
Date: Wed, 12 Jun 2024 14:28:18 +0200
Subject: [PATCH 06/53] tolerate mutable arguments in ruff
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 659c6123..565e4a72 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,5 +16,5 @@ select = [
ignore = [
"E501", # Line too long (ruff wraps code, but not docstrings)
"B028", # No explicit `stacklevel` keyword argument found (for warnings)
- #"B006", # Do not use mutable data structures for argument defaults # TODO: fix this!
+ "B006", # Do not use mutable data structures for argument defaults # TODO: fix this!
]
From 894e4a2615d808583c2f8b607f0a3a80a2f4b2e0 Mon Sep 17 00:00:00 2001
From: mschwoerer <82171591+mschwoer@users.noreply.github.com>
Date: Mon, 24 Jun 2024 13:48:06 +0200
Subject: [PATCH 07/53] test
---
nbs_tests/psm_reader/sage_reader.ipynb | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/nbs_tests/psm_reader/sage_reader.ipynb b/nbs_tests/psm_reader/sage_reader.ipynb
index cb1f90f5..b19b901a 100644
--- a/nbs_tests/psm_reader/sage_reader.ipynb
+++ b/nbs_tests/psm_reader/sage_reader.ipynb
@@ -58,7 +58,9 @@
"outputs": [],
"source": [
"#| hide\n",
- "assert capture_modifications('Q[-17.026548]DQSANEKNK[+42.010567]LEM[+15.9949]NK[+42.010567]', annotated_mod_df) == ('0;9;12;14', 'Gln->pyro-Glu@Q^Any N-term;Acetyl@K;Oxidation@M;Acetyl@K')"
+ "result = capture_modifications('Q[-17.026548]DQSANEKNK[+42.010567]LEM[+15.9949]NK[+42.010567]', annotated_mod_df) \n",
+ "expected = ('0;9;12;14', 'Gln->pyro-Glu@Q^Any N-term;Acetyl@K;Oxidation@M;Acetyl@K') \n",
+ "assert result ==expected, f\"Expected: {expected}, got: {result}\""
]
},
{
From 3f38a892f3e468217538ed766ca7d1edf6a0a5ee Mon Sep 17 00:00:00 2001
From: mschwoerer <82171591+mschwoer@users.noreply.github.com>
Date: Tue, 25 Jun 2024 13:57:27 +0200
Subject: [PATCH 08/53] remove modification names with whitespaces
---
.../constants/const_files/modification.tsv | 602 +++++++++---------
scripts/unimod_to_tsv.ipynb | 188 +++---
2 files changed, 410 insertions(+), 380 deletions(-)
diff --git a/alphabase/constants/const_files/modification.tsv b/alphabase/constants/const_files/modification.tsv
index 49ed5d0e..8ba1b0cc 100644
--- a/alphabase/constants/const_files/modification.tsv
+++ b/alphabase/constants/const_files/modification.tsv
@@ -1,16 +1,16 @@
mod_name unimod_mass unimod_avge_mass composition unimod_modloss modloss_composition classification unimod_id modloss_importance
Acetyl@T 42.010565 42.0367 H(2)C(2)O(1) 0.0 Post-translational 1 0.0
-Acetyl@Protein N-term 42.010565 42.0367 H(2)C(2)O(1) 0.0 Post-translational 1 0.0
+Acetyl@Protein_N-term 42.010565 42.0367 H(2)C(2)O(1) 0.0 Post-translational 1 0.0
Acetyl@S 42.010565 42.0367 H(2)C(2)O(1) 0.0 Post-translational 1 0.0
Acetyl@C 42.010565 42.0367 H(2)C(2)O(1) 0.0 Post-translational 1 0.0
-Acetyl@Any N-term 42.010565 42.0367 H(2)C(2)O(1) 0.0 Multiple 1 0.0
+Acetyl@Any_N-term 42.010565 42.0367 H(2)C(2)O(1) 0.0 Multiple 1 0.0
Acetyl@K 42.010565 42.0367 H(2)C(2)O(1) 0.0 Multiple 1 0.0
Acetyl@Y 42.010565 42.0367 H(2)C(2)O(1) 0.0 Chemical derivative 1 0.0
Acetyl@H 42.010565 42.0367 H(2)C(2)O(1) 0.0 Chemical derivative 1 0.0
Acetyl@R 42.010565 42.0367 H(2)C(2)O(1) 0.0 Artefact 1 0.0
-Amidated@Any C-term -0.984016 -0.9848 H(1)N(1)O(-1) 0.0 Artefact 2 0.0
-Amidated@Protein C-term -0.984016 -0.9848 H(1)N(1)O(-1) 0.0 Post-translational 2 0.0
-Biotin@Any N-term 226.077598 226.2954 H(14)C(10)N(2)O(2)S(1) 0.0 Chemical derivative 3 0.0
+Amidated@Any_C-term -0.984016 -0.9848 H(1)N(1)O(-1) 0.0 Artefact 2 0.0
+Amidated@Protein_C-term -0.984016 -0.9848 H(1)N(1)O(-1) 0.0 Post-translational 2 0.0
+Biotin@Any_N-term 226.077598 226.2954 H(14)C(10)N(2)O(2)S(1) 0.0 Chemical derivative 3 0.0
Biotin@K 226.077598 226.2954 H(14)C(10)N(2)O(2)S(1) 0.0 Post-translational 3 0.0
Carbamidomethyl@Y 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
Carbamidomethyl@T 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
@@ -18,7 +18,7 @@ Carbamidomethyl@S 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
Carbamidomethyl@E 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
Carbamidomethyl@D 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
Carbamidomethyl@H 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
-Carbamidomethyl@Any N-term 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
+Carbamidomethyl@Any_N-term 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
Carbamidomethyl@K 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Artefact 4 0.0
Carbamidomethyl@C 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Chemical derivative 4 0.0
Carbamidomethyl@U 57.021464 57.0513 H(3)C(2)N(1)O(1) 0.0 Chemical derivative 4 0.0
@@ -29,10 +29,10 @@ Carbamyl@S 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Chemical derivative 5 0.0
Carbamyl@M 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Artefact 5 0.0
Carbamyl@C 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Artefact 5 0.0
Carbamyl@R 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Artefact 5 0.0
-Carbamyl@Any N-term 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Multiple 5 0.0
+Carbamyl@Any_N-term 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Multiple 5 0.0
Carbamyl@K 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Multiple 5 0.0
-Carbamyl@Protein N-term 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Post-translational 5 0.0
-Carboxymethyl@Any N-term 58.005479 58.0361 H(2)C(2)O(2) 0.0 Artefact 6 0.0
+Carbamyl@Protein_N-term 43.005814 43.0247 H(1)C(1)N(1)O(1) 0.0 Post-translational 5 0.0
+Carboxymethyl@Any_N-term 58.005479 58.0361 H(2)C(2)O(2) 0.0 Artefact 6 0.0
Carboxymethyl@K 58.005479 58.0361 H(2)C(2)O(2) 0.0 Artefact 6 0.0
Carboxymethyl@C 58.005479 58.0361 H(2)C(2)O(2) 0.0 Chemical derivative 6 0.0
Carboxymethyl@W 58.005479 58.0361 H(2)C(2)O(2) 0.0 Chemical derivative 6 0.0
@@ -40,11 +40,11 @@ Carboxymethyl@U 58.005479 58.0361 H(2)C(2)O(2) 0.0 Chemical derivative 6 0.0
Deamidated@Q 0.984016 0.9848 H(-1)N(-1)O(1) 0.0 Artefact 7 0.0
Deamidated@R 0.984016 0.9848 H(-1)N(-1)O(1) 43.005814 H(1)C(1)N(1)O(1) Post-translational 7 0.5
Deamidated@N 0.984016 0.9848 H(-1)N(-1)O(1) 0.0 Artefact 7 0.0
-Deamidated@F^Protein N-term 0.984016 0.9848 H(-1)N(-1)O(1) 0.0 Post-translational 7 0.0
+Deamidated@F^Protein_N-term 0.984016 0.9848 H(-1)N(-1)O(1) 0.0 Post-translational 7 0.0
ICAT-G@C 486.251206 486.6253 H(38)C(22)N(4)O(6)S(1) 0.0 Isotopic label 8 0.0
ICAT-G:2H(8)@C 494.30142 494.6746 H(30)2H(8)C(22)N(4)O(6)S(1) 0.0 Isotopic label 9 0.0
-Met->Hse@M^Any C-term -29.992806 -30.0922 H(-2)C(-1)O(1)S(-1) 0.0 Chemical derivative 10 0.0
-Met->Hsl@M^Any C-term -48.003371 -48.1075 H(-4)C(-1)S(-1) 0.0 Chemical derivative 11 0.0
+Met->Hse@M^Any_C-term -29.992806 -30.0922 H(-2)C(-1)O(1)S(-1) 0.0 Chemical derivative 10 0.0
+Met->Hsl@M^Any_C-term -48.003371 -48.1075 H(-4)C(-1)S(-1) 0.0 Chemical derivative 11 0.0
ICAT-D:2H(8)@C 450.275205 450.6221 H(26)2H(8)C(20)N(4)O(5)S(1) 0.0 Isotopic label 12 0.0
ICAT-D@C 442.224991 442.5728 H(34)C(20)N(4)O(5)S(1) 0.0 Isotopic label 13 0.0
NIPCAM@C 99.068414 99.1311 H(9)C(5)N(1)O(1) 0.0 Chemical derivative 17 0.0
@@ -68,32 +68,32 @@ Dehydrated@D -18.010565 -18.0153 H(-2)O(-1) 0.0 Chemical derivative 23 0.0
Dehydrated@Y -18.010565 -18.0153 H(-2)O(-1) 0.0 Post-translational 23 0.0
Dehydrated@T -18.010565 -18.0153 H(-2)O(-1) 0.0 Post-translational 23 0.0
Dehydrated@S -18.010565 -18.0153 H(-2)O(-1) 0.0 Post-translational 23 0.0
-Dehydrated@N^Protein C-term -18.010565 -18.0153 H(-2)O(-1) 0.0 Post-translational 23 0.0
-Dehydrated@Q^Protein C-term -18.010565 -18.0153 H(-2)O(-1) 0.0 Post-translational 23 0.0
-Dehydrated@C^Any N-term -18.010565 -18.0153 H(-2)O(-1) 0.0 Artefact 23 0.0
+Dehydrated@N^Protein_C-term -18.010565 -18.0153 H(-2)O(-1) 0.0 Post-translational 23 0.0
+Dehydrated@Q^Protein_C-term -18.010565 -18.0153 H(-2)O(-1) 0.0 Post-translational 23 0.0
+Dehydrated@C^Any_N-term -18.010565 -18.0153 H(-2)O(-1) 0.0 Artefact 23 0.0
Propionamide@C 71.037114 71.0779 H(5)C(3)N(1)O(1) 0.0 Artefact 24 0.0
Propionamide@K 71.037114 71.0779 H(5)C(3)N(1)O(1) 0.0 Chemical derivative 24 0.0
-Propionamide@Any N-term 71.037114 71.0779 H(5)C(3)N(1)O(1) 0.0 Chemical derivative 24 0.0
-Pyridylacetyl@Any N-term 119.037114 119.1207 H(5)C(7)N(1)O(1) 0.0 Chemical derivative 25 0.0
+Propionamide@Any_N-term 71.037114 71.0779 H(5)C(3)N(1)O(1) 0.0 Chemical derivative 24 0.0
+Pyridylacetyl@Any_N-term 119.037114 119.1207 H(5)C(7)N(1)O(1) 0.0 Chemical derivative 25 0.0
Pyridylacetyl@K 119.037114 119.1207 H(5)C(7)N(1)O(1) 0.0 Chemical derivative 25 0.0
-Pyro-carbamidomethyl@C^Any N-term 39.994915 40.0208 C(2)O(1) 0.0 Artefact 26 0.0
-Glu->pyro-Glu@E^Any N-term -18.010565 -18.0153 H(-2)O(-1) 0.0 Artefact 27 0.0
-Gln->pyro-Glu@Q^Any N-term -17.026549 -17.0305 H(-3)N(-1) 0.0 Artefact 28 0.0
-SMA@Any N-term 127.063329 127.1412 H(9)C(6)N(1)O(2) 0.0 Chemical derivative 29 0.0
+Pyro-carbamidomethyl@C^Any_N-term 39.994915 40.0208 C(2)O(1) 0.0 Artefact 26 0.0
+Glu->pyro-Glu@E^Any_N-term -18.010565 -18.0153 H(-2)O(-1) 0.0 Artefact 27 0.0
+Gln->pyro-Glu@Q^Any_N-term -17.026549 -17.0305 H(-3)N(-1) 0.0 Artefact 28 0.0
+SMA@Any_N-term 127.063329 127.1412 H(9)C(6)N(1)O(2) 0.0 Chemical derivative 29 0.0
SMA@K 127.063329 127.1412 H(9)C(6)N(1)O(2) 0.0 Chemical derivative 29 0.0
Cation:Na@D 21.981943 21.9818 H(-1)Na(1) 0.0 Artefact 30 0.0
-Cation:Na@Any C-term 21.981943 21.9818 H(-1)Na(1) 0.0 Artefact 30 0.0
+Cation:Na@Any_C-term 21.981943 21.9818 H(-1)Na(1) 0.0 Artefact 30 0.0
Cation:Na@E 21.981943 21.9818 H(-1)Na(1) 0.0 Artefact 30 0.0
Pyridylethyl@C 105.057849 105.1372 H(7)C(7)N(1) 0.0 Chemical derivative 31 0.0
Methyl@E 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
Methyl@D 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
-Methyl@Any C-term 14.01565 14.0266 H(2)C(1) 0.0 Multiple 34 0.0
-Methyl@Protein N-term 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
+Methyl@Any_C-term 14.01565 14.0266 H(2)C(1) 0.0 Multiple 34 0.0
+Methyl@Protein_N-term 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
Methyl@L 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
Methyl@I 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
Methyl@R 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
Methyl@Q 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
-Methyl@Any N-term 14.01565 14.0266 H(2)C(1) 0.0 Chemical derivative 34 0.0
+Methyl@Any_N-term 14.01565 14.0266 H(2)C(1) 0.0 Chemical derivative 34 0.0
Methyl@N 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
Methyl@K 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
Methyl@H 14.01565 14.0266 H(2)C(1) 0.0 Post-translational 34 0.0
@@ -107,7 +107,7 @@ Oxidation@Q 15.994915 15.9994 O(1) 0.0 Chemical derivative 35 0.0
Oxidation@L 15.994915 15.9994 O(1) 0.0 Chemical derivative 35 0.0
Oxidation@I 15.994915 15.9994 O(1) 0.0 Chemical derivative 35 0.0
Oxidation@U 15.994915 15.9994 O(1) 0.0 Multiple 35 0.0
-Oxidation@G^Any C-term 15.994915 15.9994 O(1) 0.0 Pre-translational 35 0.0
+Oxidation@G^Any_C-term 15.994915 15.9994 O(1) 0.0 Pre-translational 35 0.0
Oxidation@W 15.994915 15.9994 O(1) 0.0 Artefact 35 0.0
Oxidation@C 15.994915 15.9994 O(1) 0.0 Post-translational 35 0.0
Oxidation@H 15.994915 15.9994 O(1) 0.0 Artefact 35 0.0
@@ -120,20 +120,20 @@ Oxidation@P 15.994915 15.9994 O(1) 0.0 Post-translational 35 0.0
Oxidation@N 15.994915 15.9994 O(1) 0.0 Post-translational 35 0.0
Oxidation@K 15.994915 15.9994 O(1) 0.0 Post-translational 35 0.0
Oxidation@D 15.994915 15.9994 O(1) 0.0 Post-translational 35 0.0
-Dimethyl@Protein N-term 28.0313 28.0532 H(4)C(2) 0.0 Isotopic label 36 0.0
-Dimethyl@P^Protein N-term 28.0313 28.0532 H(4)C(2) 0.0 Post-translational 36 0.0
+Dimethyl@Protein_N-term 28.0313 28.0532 H(4)C(2) 0.0 Isotopic label 36 0.0
+Dimethyl@P^Protein_N-term 28.0313 28.0532 H(4)C(2) 0.0 Post-translational 36 0.0
Dimethyl@N 28.0313 28.0532 H(4)C(2) 0.0 Post-translational 36 0.0
-Dimethyl@Any N-term 28.0313 28.0532 H(4)C(2) 0.0 Isotopic label 36 0.0
+Dimethyl@Any_N-term 28.0313 28.0532 H(4)C(2) 0.0 Isotopic label 36 0.0
Dimethyl@K 28.0313 28.0532 H(4)C(2) 0.0 Multiple 36 0.0
Dimethyl@R 28.0313 28.0532 H(4)C(2) 0.0 Post-translational 36 0.0
-Trimethyl@A^Protein N-term 42.04695 42.0797 H(6)C(3) 0.0 Post-translational 37 0.0
+Trimethyl@A^Protein_N-term 42.04695 42.0797 H(6)C(3) 0.0 Post-translational 37 0.0
Trimethyl@R 42.04695 42.0797 H(6)C(3) 0.0 Chemical derivative 37 0.0
Trimethyl@K 42.04695 42.0797 H(6)C(3) 59.073499 H(9)C(3)N(1) Post-translational 37 0.5
Methylthio@C 45.987721 46.0916 H(2)C(1)S(1) 0.0 Multiple 39 0.0
Methylthio@N 45.987721 46.0916 H(2)C(1)S(1) 0.0 Post-translational 39 0.0
Methylthio@D 45.987721 46.0916 H(2)C(1)S(1) 0.0 Post-translational 39 0.0
Methylthio@K 45.987721 46.0916 H(2)C(1)S(1) 0.0 Artefact 39 0.0
-Methylthio@Any N-term 45.987721 46.0916 H(2)C(1)S(1) 0.0 Artefact 39 0.0
+Methylthio@Any_N-term 45.987721 46.0916 H(2)C(1)S(1) 0.0 Artefact 39 0.0
Sulfo@S 79.956815 80.0632 O(3)S(1) 79.956815 O(3)S(1) Post-translational 40 0.5
Sulfo@T 79.956815 80.0632 O(3)S(1) 79.956815 O(3)S(1) Post-translational 40 0.5
Sulfo@Y 79.956815 80.0632 O(3)S(1) 79.956815 O(3)S(1) Post-translational 40 0.5
@@ -142,7 +142,7 @@ Hex@C 162.052824 162.1406 H(10)C(6)O(5) 0.0 Other glycosylation 41 0.0
Hex@W 162.052824 162.1406 H(10)C(6)O(5) 0.0 Other glycosylation 41 0.0
Hex@T 162.052824 162.1406 H(10)C(6)O(5) 162.052824 H(10)C(6)O(5) O-linked glycosylation 41 0.5
Hex@S 162.052824 162.1406 H(10)C(6)O(5) 162.052824 H(10)C(6)O(5) O-linked glycosylation 41 0.5
-Hex@Any N-term 162.052824 162.1406 H(10)C(6)O(5) 54.031694 H(6)O(3) Other glycosylation 41 0.5
+Hex@Any_N-term 162.052824 162.1406 H(10)C(6)O(5) 54.031694 H(6)O(3) Other glycosylation 41 0.5
Hex@N 162.052824 162.1406 H(10)C(6)O(5) 162.052824 H(10)C(6)O(5) N-linked glycosylation 41 0.5
Hex@R 162.052824 162.1406 H(10)C(6)O(5) 54.031694 H(6)O(3) Other glycosylation 41 0.5
Hex@K 162.052824 162.1406 H(10)C(6)O(5) 54.031694 H(6)O(3) Other glycosylation 41 0.5
@@ -155,21 +155,21 @@ HexNAc@N 203.079373 203.1925 H(13)C(8)N(1)O(5) 203.079373 H(13)C(8)N(1)O(5) N-li
Farnesyl@C 204.187801 204.3511 H(24)C(15) 0.0 Post-translational 44 0.0
Myristoyl@C 210.198366 210.3556 H(26)C(14)O(1) 0.0 Post-translational 45 0.0
Myristoyl@K 210.198366 210.3556 H(26)C(14)O(1) 0.0 Post-translational 45 0.0
-Myristoyl@G^Any N-term 210.198366 210.3556 H(26)C(14)O(1) 0.0 Post-translational 45 0.0
+Myristoyl@G^Any_N-term 210.198366 210.3556 H(26)C(14)O(1) 0.0 Post-translational 45 0.0
PyridoxalPhosphate@K 229.014009 229.1266 H(8)C(8)N(1)O(5)P(1) 0.0 Post-translational 46 0.0
Palmitoyl@T 238.229666 238.4088 H(30)C(16)O(1) 0.0 Post-translational 47 0.0
Palmitoyl@S 238.229666 238.4088 H(30)C(16)O(1) 0.0 Post-translational 47 0.0
Palmitoyl@K 238.229666 238.4088 H(30)C(16)O(1) 0.0 Post-translational 47 0.0
Palmitoyl@C 238.229666 238.4088 H(30)C(16)O(1) 0.0 Post-translational 47 0.0
-Palmitoyl@Protein N-term 238.229666 238.4088 H(30)C(16)O(1) 0.0 Post-translational 47 0.0
+Palmitoyl@Protein_N-term 238.229666 238.4088 H(30)C(16)O(1) 0.0 Post-translational 47 0.0
GeranylGeranyl@C 272.250401 272.4681 H(32)C(20) 0.0 Post-translational 48 0.0
Phosphopantetheine@S 340.085794 340.333 H(21)C(11)N(2)O(6)P(1)S(1) 0.0 Post-translational 49 0.0
FAD@Y 783.141486 783.5339 H(31)C(27)N(9)O(15)P(2) 0.0 Post-translational 50 0.0
FAD@H 783.141486 783.5339 H(31)C(27)N(9)O(15)P(2) 0.0 Post-translational 50 0.0
FAD@C 783.141486 783.5339 H(31)C(27)N(9)O(15)P(2) 0.0 Post-translational 50 0.0
-Tripalmitate@C^Protein N-term 788.725777 789.3049 H(96)C(51)O(5) 0.0 Post-translational 51 0.0
+Tripalmitate@C^Protein_N-term 788.725777 789.3049 H(96)C(51)O(5) 0.0 Post-translational 51 0.0
Guanidinyl@K 42.021798 42.04 H(2)C(1)N(2) 0.0 Chemical derivative 52 0.0
-Guanidinyl@Any N-term 42.021798 42.04 H(2)C(1)N(2) 0.0 Chemical derivative 52 0.0
+Guanidinyl@Any_N-term 42.021798 42.04 H(2)C(1)N(2) 0.0 Chemical derivative 52 0.0
HNE@K 156.11503 156.2221 H(16)C(9)O(2) 0.0 Post-translational 53 0.0
HNE@H 156.11503 156.2221 H(16)C(9)O(2) 0.0 Post-translational 53 0.0
HNE@C 156.11503 156.2221 H(16)C(9)O(2) 0.0 Post-translational 53 0.0
@@ -177,36 +177,36 @@ HNE@A 156.11503 156.2221 H(16)C(9)O(2) 0.0 Post-translational 53 0.0
HNE@L 156.11503 156.2221 H(16)C(9)O(2) 0.0 Post-translational 53 0.0
Glucuronyl@T 176.032088 176.1241 H(8)C(6)O(6) 176.032088 H(8)C(6)O(6) O-linked glycosylation 54 0.5
Glucuronyl@S 176.032088 176.1241 H(8)C(6)O(6) 176.032088 H(8)C(6)O(6) O-linked glycosylation 54 0.5
-Glucuronyl@Protein N-term 176.032088 176.1241 H(8)C(6)O(6) 0.0 Other glycosylation 54 0.0
+Glucuronyl@Protein_N-term 176.032088 176.1241 H(8)C(6)O(6) 0.0 Other glycosylation 54 0.0
Glutathione@C 305.068156 305.3076 H(15)C(10)N(3)O(6)S(1) 0.0 Post-translational 55 0.0
Acetyl:2H(3)@T 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
Acetyl:2H(3)@S 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
Acetyl:2H(3)@H 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
-Acetyl:2H(3)@Any N-term 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
+Acetyl:2H(3)@Any_N-term 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
Acetyl:2H(3)@K 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
Acetyl:2H(3)@Y 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
-Acetyl:2H(3)@Protein N-term 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
-Propionyl@Any N-term 56.026215 56.0633 H(4)C(3)O(1) 0.0 Isotopic label 58 0.0
+Acetyl:2H(3)@Protein_N-term 45.029395 45.0552 H(-1)2H(3)C(2)O(1) 0.0 Isotopic label 56 0.0
+Propionyl@Any_N-term 56.026215 56.0633 H(4)C(3)O(1) 0.0 Isotopic label 58 0.0
Propionyl@K 56.026215 56.0633 H(4)C(3)O(1) 0.0 Isotopic label 58 0.0
Propionyl@S 56.026215 56.0633 H(4)C(3)O(1) 0.0 Chemical derivative 58 0.0
Propionyl@T 56.026215 56.0633 H(4)C(3)O(1) 0.0 Isotopic label 58 0.0
-Propionyl@Protein N-term 56.026215 56.0633 H(4)C(3)O(1) 0.0 Multiple 58 0.0
-Propionyl:13C(3)@Any N-term 59.036279 59.0412 H(4)13C(3)O(1) 0.0 Isotopic label 59 0.0
+Propionyl@Protein_N-term 56.026215 56.0633 H(4)C(3)O(1) 0.0 Multiple 58 0.0
+Propionyl:13C(3)@Any_N-term 59.036279 59.0412 H(4)13C(3)O(1) 0.0 Isotopic label 59 0.0
Propionyl:13C(3)@K 59.036279 59.0412 H(4)13C(3)O(1) 0.0 Isotopic label 59 0.0
-GIST-Quat@Any N-term 127.099714 127.1842 H(13)C(7)N(1)O(1) 59.073499 H(9)C(3)N(1) Isotopic label 60 0.5
+GIST-Quat@Any_N-term 127.099714 127.1842 H(13)C(7)N(1)O(1) 59.073499 H(9)C(3)N(1) Isotopic label 60 0.5
GIST-Quat@K 127.099714 127.1842 H(13)C(7)N(1)O(1) 59.073499 H(9)C(3)N(1) Isotopic label 60 0.5
-GIST-Quat:2H(3)@Any N-term 130.118544 130.2027 H(10)2H(3)C(7)N(1)O(1) 62.09233 H(6)2H(3)C(3)N(1) Isotopic label 61 0.5
+GIST-Quat:2H(3)@Any_N-term 130.118544 130.2027 H(10)2H(3)C(7)N(1)O(1) 62.09233 H(6)2H(3)C(3)N(1) Isotopic label 61 0.5
GIST-Quat:2H(3)@K 130.118544 130.2027 H(10)2H(3)C(7)N(1)O(1) 62.09233 H(6)2H(3)C(3)N(1) Isotopic label 61 0.5
-GIST-Quat:2H(6)@Any N-term 133.137375 133.2212 H(7)2H(6)C(7)N(1)O(1) 65.11116 H(3)2H(6)C(3)N(1) Isotopic label 62 0.5
+GIST-Quat:2H(6)@Any_N-term 133.137375 133.2212 H(7)2H(6)C(7)N(1)O(1) 65.11116 H(3)2H(6)C(3)N(1) Isotopic label 62 0.5
GIST-Quat:2H(6)@K 133.137375 133.2212 H(7)2H(6)C(7)N(1)O(1) 65.11116 H(3)2H(6)C(3)N(1) Isotopic label 62 0.5
-GIST-Quat:2H(9)@Any N-term 136.156205 136.2397 H(4)2H(9)C(7)N(1)O(1) 68.12999 2H(9)C(3)N(1) Isotopic label 63 0.5
+GIST-Quat:2H(9)@Any_N-term 136.156205 136.2397 H(4)2H(9)C(7)N(1)O(1) 68.12999 2H(9)C(3)N(1) Isotopic label 63 0.5
GIST-Quat:2H(9)@K 136.156205 136.2397 H(4)2H(9)C(7)N(1)O(1) 68.12999 2H(9)C(3)N(1) Isotopic label 63 0.5
-Succinyl@Protein N-term 100.016044 100.0728 H(4)C(4)O(3) 0.0 Post-translational 64 0.0
-Succinyl@Any N-term 100.016044 100.0728 H(4)C(4)O(3) 0.0 Isotopic label 64 0.0
+Succinyl@Protein_N-term 100.016044 100.0728 H(4)C(4)O(3) 0.0 Post-translational 64 0.0
+Succinyl@Any_N-term 100.016044 100.0728 H(4)C(4)O(3) 0.0 Isotopic label 64 0.0
Succinyl@K 100.016044 100.0728 H(4)C(4)O(3) 0.0 Isotopic label 64 0.0
-Succinyl:2H(4)@Any N-term 104.041151 104.0974 2H(4)C(4)O(3) 0.0 Isotopic label 65 0.0
+Succinyl:2H(4)@Any_N-term 104.041151 104.0974 2H(4)C(4)O(3) 0.0 Isotopic label 65 0.0
Succinyl:2H(4)@K 104.041151 104.0974 2H(4)C(4)O(3) 0.0 Isotopic label 65 0.0
-Succinyl:13C(4)@Any N-term 104.029463 104.0434 H(4)13C(4)O(3) 0.0 Isotopic label 66 0.0
+Succinyl:13C(4)@Any_N-term 104.029463 104.0434 H(4)13C(4)O(3) 0.0 Isotopic label 66 0.0
Succinyl:13C(4)@K 104.029463 104.0434 H(4)13C(4)O(3) 0.0 Isotopic label 66 0.0
probiotinhydrazide@P 258.115047 258.3405 H(18)C(10)N(4)O(2)S(1) 0.0 Chemical derivative 357 0.0
Pro->pyro-Glu@P 13.979265 13.9835 H(-2)O(1) 0.0 Chemical derivative 359 0.0
@@ -215,23 +215,23 @@ His->Asp@H -22.031969 -22.0519 H(-2)C(-2)N(-2)O(2) 0.0 AA substitution 349 0.0
Trp->Hydroxykynurenin@W 19.989829 19.9881 C(-1)O(2) 0.0 Chemical derivative 350 0.0
Delta:H(4)C(3)@K 40.0313 40.0639 H(4)C(3) 0.0 Other 256 0.0
Delta:H(4)C(3)@H 40.0313 40.0639 H(4)C(3) 0.0 Other 256 0.0
-Delta:H(4)C(3)@Protein N-term 40.0313 40.0639 H(4)C(3) 0.0 Other 256 0.0
+Delta:H(4)C(3)@Protein_N-term 40.0313 40.0639 H(4)C(3) 0.0 Other 256 0.0
Delta:H(4)C(2)@K 28.0313 28.0532 H(4)C(2) 0.0 Other 255 0.0
Delta:H(4)C(2)@H 28.0313 28.0532 H(4)C(2) 0.0 Other 255 0.0
-Delta:H(4)C(2)@Any N-term 28.0313 28.0532 H(4)C(2) 0.0 Other 255 0.0
+Delta:H(4)C(2)@Any_N-term 28.0313 28.0532 H(4)C(2) 0.0 Other 255 0.0
Cys->Dha@C -33.987721 -34.0809 H(-2)S(-1) 0.0 Chemical derivative 368 0.0
Arg->GluSA@R -43.053433 -43.0711 H(-5)C(-1)N(-3)O(1) 0.0 Chemical derivative 344 0.0
Trioxidation@Y 47.984744 47.9982 O(3) 0.0 Chemical derivative 345 0.0
Trioxidation@W 47.984744 47.9982 O(3) 0.0 Chemical derivative 345 0.0
Trioxidation@C 47.984744 47.9982 O(3) 0.0 Chemical derivative 345 0.0
Trioxidation@F 47.984744 47.9982 O(3) 0.0 Artefact 345 0.0
-Iminobiotin@Any N-term 225.093583 225.3106 H(15)C(10)N(3)O(1)S(1) 0.0 Chemical derivative 89 0.0
+Iminobiotin@Any_N-term 225.093583 225.3106 H(15)C(10)N(3)O(1)S(1) 0.0 Chemical derivative 89 0.0
Iminobiotin@K 225.093583 225.3106 H(15)C(10)N(3)O(1)S(1) 0.0 Chemical derivative 89 0.0
-ESP@Any N-term 338.177647 338.4682 H(26)C(16)N(4)O(2)S(1) 0.0 Isotopic label 90 0.0
+ESP@Any_N-term 338.177647 338.4682 H(26)C(16)N(4)O(2)S(1) 0.0 Isotopic label 90 0.0
ESP@K 338.177647 338.4682 H(26)C(16)N(4)O(2)S(1) 0.0 Isotopic label 90 0.0
-ESP:2H(10)@Any N-term 348.240414 348.5299 H(16)2H(10)C(16)N(4)O(2)S(1) 0.0 Isotopic label 91 0.0
+ESP:2H(10)@Any_N-term 348.240414 348.5299 H(16)2H(10)C(16)N(4)O(2)S(1) 0.0 Isotopic label 91 0.0
ESP:2H(10)@K 348.240414 348.5299 H(16)2H(10)C(16)N(4)O(2)S(1) 0.0 Isotopic label 91 0.0
-NHS-LC-Biotin@Any N-term 339.161662 339.453 H(25)C(16)N(3)O(3)S(1) 0.0 Chemical derivative 92 0.0
+NHS-LC-Biotin@Any_N-term 339.161662 339.453 H(25)C(16)N(3)O(3)S(1) 0.0 Chemical derivative 92 0.0
NHS-LC-Biotin@K 339.161662 339.453 H(25)C(16)N(3)O(3)S(1) 0.0 Chemical derivative 92 0.0
EDT-maleimide-PEO-biotin@T 601.206246 601.8021 H(39)C(25)N(5)O(6)S(3) 0.0 Chemical derivative 93 0.0
EDT-maleimide-PEO-biotin@S 601.206246 601.8021 H(39)C(25)N(5)O(6)S(3) 0.0 Chemical derivative 93 0.0
@@ -243,14 +243,14 @@ Nitro@Y 44.985078 44.9976 H(-1)N(1)O(2) 0.0 Chemical derivative 354 0.0
Nitro@W 44.985078 44.9976 H(-1)N(1)O(2) 0.0 Chemical derivative 354 0.0
Nitro@F 44.985078 44.9976 H(-1)N(1)O(2) 0.0 Artefact 354 0.0
ICAT-C@C 227.126991 227.2603 H(17)C(10)N(3)O(3) 0.0 Isotopic label 105 0.0
-Delta:H(2)C(2)@Protein N-term 26.01565 26.0373 H(2)C(2) 0.0 Other 254 0.0
+Delta:H(2)C(2)@Protein_N-term 26.01565 26.0373 H(2)C(2) 0.0 Other 254 0.0
Delta:H(2)C(2)@K 26.01565 26.0373 H(2)C(2) 0.0 Other 254 0.0
Delta:H(2)C(2)@H 26.01565 26.0373 H(2)C(2) 0.0 Other 254 0.0
-Delta:H(2)C(2)@Any N-term 26.01565 26.0373 H(2)C(2) 0.0 Other 254 0.0
+Delta:H(2)C(2)@Any_N-term 26.01565 26.0373 H(2)C(2) 0.0 Other 254 0.0
Trp->Kynurenin@W 3.994915 3.9887 C(-1)O(1) 0.0 Chemical derivative 351 0.0
Lys->Allysine@K -1.031634 -1.0311 H(-3)N(-1)O(1) 0.0 Post-translational 352 0.0
ICAT-C:13C(9)@C 236.157185 236.1942 H(17)C(1)13C(9)N(3)O(3) 0.0 Isotopic label 106 0.0
-FormylMet@Protein N-term 159.035399 159.2062 H(9)C(6)N(1)O(2)S(1) 0.0 Pre-translational 107 0.0
+FormylMet@Protein_N-term 159.035399 159.2062 H(9)C(6)N(1)O(2)S(1) 0.0 Pre-translational 107 0.0
Nethylmaleimide@C 125.047679 125.1253 H(7)C(6)N(1)O(2) 0.0 Chemical derivative 108 0.0
OxLysBiotinRed@K 354.172562 354.4676 H(26)C(16)N(4)O(3)S(1) 0.0 Chemical derivative 112 0.0
IBTP@C 316.138088 316.3759 H(21)C(22)P(1) 0.0 Chemical derivative 119 0.0
@@ -265,21 +265,21 @@ GG@C 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Other 121 0.0
GG@T 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Other 121 0.0
GG@S 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Other 121 0.0
GG@K 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Other 121 1000000.0
-GG@Protein N-term 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Post-translational 121 0.0
-Formyl@Protein N-term 27.994915 28.0101 C(1)O(1) 0.0 Post-translational 122 0.0
+GG@Protein_N-term 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Post-translational 121 0.0
+Formyl@Protein_N-term 27.994915 28.0101 C(1)O(1) 0.0 Post-translational 122 0.0
Formyl@T 27.994915 28.0101 C(1)O(1) 0.0 Artefact 122 0.0
Formyl@K 27.994915 28.0101 C(1)O(1) 0.0 Artefact 122 0.0
-Formyl@Any N-term 27.994915 28.0101 C(1)O(1) 0.0 Artefact 122 0.0
+Formyl@Any_N-term 27.994915 28.0101 C(1)O(1) 0.0 Artefact 122 0.0
Formyl@S 27.994915 28.0101 C(1)O(1) 0.0 Artefact 122 0.0
ICAT-H@C 345.097915 345.7754 H(20)C(15)N(1)O(6)Cl(1) 0.0 Isotopic label 123 0.0
ICAT-H:13C(6)@C 351.118044 351.7313 H(20)C(9)13C(6)N(1)O(6)Cl(1) 0.0 Isotopic label 124 0.0
-Cation:K@Any C-term 37.955882 38.0904 H(-1)K(1) 0.0 Artefact 530 0.0
+Cation:K@Any_C-term 37.955882 38.0904 H(-1)K(1) 0.0 Artefact 530 0.0
Cation:K@E 37.955882 38.0904 H(-1)K(1) 0.0 Artefact 530 0.0
Cation:K@D 37.955882 38.0904 H(-1)K(1) 0.0 Artefact 530 0.0
-Xlink:DTSSP[88]@Protein N-term 87.998285 88.1283 H(4)C(3)O(1)S(1) 0.0 Chemical derivative 126 0.0
+Xlink:DTSSP[88]@Protein_N-term 87.998285 88.1283 H(4)C(3)O(1)S(1) 0.0 Chemical derivative 126 0.0
Xlink:DTSSP[88]@K 87.998285 88.1283 H(4)C(3)O(1)S(1) 0.0 Chemical derivative 126 0.0
Xlink:EGS[226]@K 226.047738 226.1828 H(10)C(10)O(6) 0.0 Chemical derivative 1897 0.0
-Xlink:EGS[226]@Protein N-term 226.047738 226.1828 H(10)C(10)O(6) 0.0 Chemical derivative 1897 0.0
+Xlink:EGS[226]@Protein_N-term 226.047738 226.1828 H(10)C(10)O(6) 0.0 Chemical derivative 1897 0.0
Fluoro@Y 17.990578 17.9905 H(-1)F(1) 0.0 Non-standard residue 127 0.0
Fluoro@W 17.990578 17.9905 H(-1)F(1) 0.0 Non-standard residue 127 0.0
Fluoro@F 17.990578 17.9905 H(-1)F(1) 0.0 Non-standard residue 127 0.0
@@ -290,16 +290,16 @@ Iodo@Y 125.896648 125.8965 H(-1)I(1) 0.0 Chemical derivative 129 0.0
Diiodo@Y 251.793296 251.7931 H(-2)I(2) 0.0 Chemical derivative 130 0.0
Diiodo@H 251.793296 251.7931 H(-2)I(2) 0.0 Chemical derivative 130 0.0
Triiodo@Y 377.689944 377.6896 H(-3)I(3) 0.0 Chemical derivative 131 0.0
-Myristoleyl@G^Protein N-term 208.182715 208.3398 H(24)C(14)O(1) 0.0 Co-translational 134 0.0
+Myristoleyl@G^Protein_N-term 208.182715 208.3398 H(24)C(14)O(1) 0.0 Co-translational 134 0.0
Pro->Pyrrolidinone@P -30.010565 -30.026 H(-2)C(-1)O(-1) 0.0 Chemical derivative 360 0.0
-Myristoyl+Delta:H(-4)@G^Protein N-term 206.167065 206.3239 H(22)C(14)O(1) 0.0 Co-translational 135 0.0
-Benzoyl@Any N-term 104.026215 104.1061 H(4)C(7)O(1) 0.0 Isotopic label 136 0.0
+Myristoyl+Delta:H(-4)@G^Protein_N-term 206.167065 206.3239 H(22)C(14)O(1) 0.0 Co-translational 135 0.0
+Benzoyl@Any_N-term 104.026215 104.1061 H(4)C(7)O(1) 0.0 Isotopic label 136 0.0
Benzoyl@K 104.026215 104.1061 H(4)C(7)O(1) 0.0 Isotopic label 136 0.0
Hex(5)HexNAc(2)@N 1216.422863 1217.088 H(76)C(46)N(2)O(35) 1216.422863 H(76)C(46)N(2)O(35) N-linked glycosylation 137 0.5
-Dansyl@Any N-term 233.051049 233.2862 H(11)C(12)N(1)O(2)S(1) 0.0 Chemical derivative 139 0.0
+Dansyl@Any_N-term 233.051049 233.2862 H(11)C(12)N(1)O(2)S(1) 0.0 Chemical derivative 139 0.0
Dansyl@K 233.051049 233.2862 H(11)C(12)N(1)O(2)S(1) 0.0 Chemical derivative 139 0.0
-a-type-ion@Any C-term -46.005479 -46.0254 H(-2)C(-1)O(-2) 0.0 Other 140 0.0
-Amidine@Any N-term 41.026549 41.0519 H(3)C(2)N(1) 0.0 Chemical derivative 141 0.0
+a-type-ion@Any_C-term -46.005479 -46.0254 H(-2)C(-1)O(-2) 0.0 Other 140 0.0
+Amidine@Any_N-term 41.026549 41.0519 H(3)C(2)N(1) 0.0 Chemical derivative 141 0.0
Amidine@K 41.026549 41.0519 H(3)C(2)N(1) 0.0 Chemical derivative 141 0.0
HexNAc(1)dHex(1)@T 349.137281 349.3337 H(23)C(14)N(1)O(9) 349.137281 H(23)C(14)N(1)O(9) O-linked glycosylation 142 0.5
HexNAc(1)dHex(1)@S 349.137281 349.3337 H(23)C(14)N(1)O(9) 349.137281 H(23)C(14)N(1)O(9) O-linked glycosylation 142 0.5
@@ -350,9 +350,9 @@ Delta:S(-1)Se(1)@C 47.944449 46.895 S(-1)Se(1) 0.0 Non-standard residue 162 0.0
NBS:13C(6)@W 159.008578 159.1144 H(3)13C(6)N(1)O(2)S(1) 0.0 Chemical derivative 171 0.0
Methyl:2H(3)13C(1)@K 18.037835 18.0377 H(-1)2H(3)13C(1) 0.0 Isotopic label 329 0.0
Methyl:2H(3)13C(1)@R 18.037835 18.0377 H(-1)2H(3)13C(1) 0.0 Isotopic label 329 0.0
-Methyl:2H(3)13C(1)@Any N-term 18.037835 18.0377 H(-1)2H(3)13C(1) 0.0 Isotopic label 329 0.0
-Dimethyl:2H(6)13C(2)@Protein N-term 36.07567 36.0754 H(-2)2H(6)13C(2) 0.0 Isotopic label 330 0.0
-Dimethyl:2H(6)13C(2)@Any N-term 36.07567 36.0754 H(-2)2H(6)13C(2) 0.0 Isotopic label 330 0.0
+Methyl:2H(3)13C(1)@Any_N-term 18.037835 18.0377 H(-1)2H(3)13C(1) 0.0 Isotopic label 329 0.0
+Dimethyl:2H(6)13C(2)@Protein_N-term 36.07567 36.0754 H(-2)2H(6)13C(2) 0.0 Isotopic label 330 0.0
+Dimethyl:2H(6)13C(2)@Any_N-term 36.07567 36.0754 H(-2)2H(6)13C(2) 0.0 Isotopic label 330 0.0
Dimethyl:2H(6)13C(2)@R 36.07567 36.0754 H(-2)2H(6)13C(2) 0.0 Isotopic label 330 0.0
Dimethyl:2H(6)13C(2)@K 36.07567 36.0754 H(-2)2H(6)13C(2) 0.0 Isotopic label 330 0.0
NBS@W 152.988449 153.1585 H(3)C(6)N(1)O(2)S(1) 0.0 Chemical derivative 172 0.0
@@ -375,11 +375,11 @@ Label:13C(6)@R 6.020129 5.9559 C(-6)13C(6) 0.0 Isotopic label 188 0.0
HPG@R 132.021129 132.1162 H(4)C(8)O(2) 0.0 Chemical derivative 186 0.0
2HPG@R 282.052824 282.2476 H(10)C(16)O(5) 0.0 Chemical derivative 187 0.0
QAT:2H(3)@C 174.168569 174.2784 H(16)2H(3)C(9)N(2)O(1) 0.0 Isotopic label 196 0.0
-Label:18O(2)@Any C-term 4.008491 3.9995 O(-2)18O(2) 0.0 Isotopic label 193 0.0
-AccQTag@Any N-term 170.048013 170.1674 H(6)C(10)N(2)O(1) 0.0 Chemical derivative 194 0.0
+Label:18O(2)@Any_C-term 4.008491 3.9995 O(-2)18O(2) 0.0 Isotopic label 193 0.0
+AccQTag@Any_N-term 170.048013 170.1674 H(6)C(10)N(2)O(1) 0.0 Chemical derivative 194 0.0
AccQTag@K 170.048013 170.1674 H(6)C(10)N(2)O(1) 0.0 Chemical derivative 194 0.0
-Dimethyl:2H(4)@Protein N-term 32.056407 32.0778 2H(4)C(2) 0.0 Isotopic label 199 0.0
-Dimethyl:2H(4)@Any N-term 32.056407 32.0778 2H(4)C(2) 0.0 Isotopic label 199 0.0
+Dimethyl:2H(4)@Protein_N-term 32.056407 32.0778 2H(4)C(2) 0.0 Isotopic label 199 0.0
+Dimethyl:2H(4)@Any_N-term 32.056407 32.0778 2H(4)C(2) 0.0 Isotopic label 199 0.0
Dimethyl:2H(4)@K 32.056407 32.0778 2H(4)C(2) 0.0 Isotopic label 199 0.0
Dimethyl:2H(4)@R 32.056407 32.0778 2H(4)C(2) 0.0 Isotopic label 199 0.0
EQAT@C 184.157563 184.2786 H(20)C(10)N(2)O(1) 0.0 Chemical derivative 197 0.0
@@ -408,11 +408,11 @@ NEIAA@Y 85.052764 85.1045 H(7)C(4)N(1)O(1) 0.0 Isotopic label 211 0.0
NEIAA@C 85.052764 85.1045 H(7)C(4)N(1)O(1) 0.0 Isotopic label 211 0.0
iTRAQ4plex@C 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
iTRAQ4plex@T 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
-iTRAQ4plex@Protein N-term 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
+iTRAQ4plex@Protein_N-term 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
iTRAQ4plex@S 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
iTRAQ4plex@H 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
iTRAQ4plex@Y 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
-iTRAQ4plex@Any N-term 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
+iTRAQ4plex@Any_N-term 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
iTRAQ4plex@K 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 214 0.0
Crotonaldehyde@K 70.041865 70.0898 H(6)C(4)O(1) 0.0 Other 253 0.0
Crotonaldehyde@H 70.041865 70.0898 H(6)C(4)O(1) 0.0 Other 253 0.0
@@ -426,26 +426,26 @@ Argbiotinhydrazide@R 199.066699 199.27 H(13)C(9)N(1)O(2)S(1) 0.0 Chemical deriv
Label:18O(1)@Y 2.004246 1.9998 O(-1)18O(1) 0.0 Isotopic label 258 0.0
Label:18O(1)@T 2.004246 1.9998 O(-1)18O(1) 0.0 Isotopic label 258 0.0
Label:18O(1)@S 2.004246 1.9998 O(-1)18O(1) 0.0 Isotopic label 258 0.0
-Label:18O(1)@Any C-term 2.004246 1.9998 O(-1)18O(1) 0.0 Isotopic label 258 0.0
+Label:18O(1)@Any_C-term 2.004246 1.9998 O(-1)18O(1) 0.0 Isotopic label 258 0.0
Label:13C(6)15N(2)@K 8.014199 7.9427 C(-6)13C(6)N(-2)15N(2) 0.0 Isotopic label 259 0.0
Thiophospho@Y 95.943487 96.0455 H(1)O(2)P(1)S(1) 0.0 Other 260 0.0
Thiophospho@T 95.943487 96.0455 H(1)O(2)P(1)S(1) 0.0 Other 260 0.0
Thiophospho@S 95.943487 96.0455 H(1)O(2)P(1)S(1) 0.0 Other 260 0.0
SPITC@K 214.971084 215.2495 H(5)C(7)N(1)O(3)S(2) 0.0 Chemical derivative 261 0.0
-SPITC@Any N-term 214.971084 215.2495 H(5)C(7)N(1)O(3)S(2) 0.0 Chemical derivative 261 0.0
+SPITC@Any_N-term 214.971084 215.2495 H(5)C(7)N(1)O(3)S(2) 0.0 Chemical derivative 261 0.0
IGBP@C 296.016039 297.1478 H(13)C(12)N(2)O(2)Br(1) 0.0 Isotopic label 243 0.0
Cytopiloyne@Y 362.136553 362.3738 H(22)C(19)O(7) 0.0 Chemical derivative 270 0.0
Cytopiloyne@S 362.136553 362.3738 H(22)C(19)O(7) 0.0 Chemical derivative 270 0.0
Cytopiloyne@R 362.136553 362.3738 H(22)C(19)O(7) 0.0 Chemical derivative 270 0.0
Cytopiloyne@P 362.136553 362.3738 H(22)C(19)O(7) 0.0 Chemical derivative 270 0.0
-Cytopiloyne@Any N-term 362.136553 362.3738 H(22)C(19)O(7) 0.0 Chemical derivative 270 0.0
+Cytopiloyne@Any_N-term 362.136553 362.3738 H(22)C(19)O(7) 0.0 Chemical derivative 270 0.0
Cytopiloyne@K 362.136553 362.3738 H(22)C(19)O(7) 0.0 Chemical derivative 270 0.0
Cytopiloyne@C 362.136553 362.3738 H(22)C(19)O(7) 0.0 Chemical derivative 270 0.0
Cytopiloyne+water@Y 380.147118 380.3891 H(24)C(19)O(8) 0.0 Chemical derivative 271 0.0
Cytopiloyne+water@T 380.147118 380.3891 H(24)C(19)O(8) 0.0 Chemical derivative 271 0.0
Cytopiloyne+water@S 380.147118 380.3891 H(24)C(19)O(8) 0.0 Chemical derivative 271 0.0
Cytopiloyne+water@R 380.147118 380.3891 H(24)C(19)O(8) 0.0 Chemical derivative 271 0.0
-Cytopiloyne+water@Any N-term 380.147118 380.3891 H(24)C(19)O(8) 0.0 Chemical derivative 271 0.0
+Cytopiloyne+water@Any_N-term 380.147118 380.3891 H(24)C(19)O(8) 0.0 Chemical derivative 271 0.0
Cytopiloyne+water@K 380.147118 380.3891 H(24)C(19)O(8) 0.0 Chemical derivative 271 0.0
Cytopiloyne+water@C 380.147118 380.3891 H(24)C(19)O(8) 0.0 Chemical derivative 271 0.0
Label:13C(6)15N(4)@R 10.008269 9.9296 C(-6)13C(6)N(-4)15N(4) 0.0 Isotopic label 267 0.0
@@ -458,8 +458,8 @@ Label:13C(5)15N(1)@V 6.013809 5.9567 C(-5)13C(5)N(-1)15N(1) 0.0 Isotopic label
Label:13C(5)15N(1)@E 6.013809 5.9567 C(-5)13C(5)N(-1)15N(1) 0.0 Isotopic label 268 0.0
PET@T 121.035005 121.2028 H(7)C(7)N(1)O(-1)S(1) 0.0 Chemical derivative 264 0.0
PET@S 121.035005 121.2028 H(7)C(7)N(1)O(-1)S(1) 0.0 Chemical derivative 264 0.0
-CAF@Any N-term 135.983029 136.1265 H(4)C(3)O(4)S(1) 0.0 Chemical derivative 272 0.0
-Xlink:BS2G[96]@Protein N-term 96.021129 96.0841 H(4)C(5)O(2) 0.0 Chemical derivative 1905 0.0
+CAF@Any_N-term 135.983029 136.1265 H(4)C(3)O(4)S(1) 0.0 Chemical derivative 272 0.0
+Xlink:BS2G[96]@Protein_N-term 96.021129 96.0841 H(4)C(5)O(2) 0.0 Chemical derivative 1905 0.0
Xlink:BS2G[96]@K 96.021129 96.0841 H(4)C(5)O(2) 0.0 Chemical derivative 1905 0.0
Nitrosyl@C 28.990164 28.9982 H(-1)N(1)O(1) 0.0 Post-translational 275 0.0
Nitrosyl@Y 28.990164 28.9982 H(-1)N(1)O(1) 0.0 Chemical derivative 275 0.0
@@ -467,7 +467,7 @@ Kdo@T 220.058303 220.1767 H(12)C(8)O(7) 220.058303 H(12)C(8)O(7) O-linked glycos
Kdo@S 220.058303 220.1767 H(12)C(8)O(7) 220.058303 H(12)C(8)O(7) O-linked glycosylation 2022 0.5
AEBS@Y 183.035399 183.2276 H(9)C(8)N(1)O(2)S(1) 0.0 Artefact 276 0.0
AEBS@S 183.035399 183.2276 H(9)C(8)N(1)O(2)S(1) 0.0 Artefact 276 0.0
-AEBS@Protein N-term 183.035399 183.2276 H(9)C(8)N(1)O(2)S(1) 0.0 Artefact 276 0.0
+AEBS@Protein_N-term 183.035399 183.2276 H(9)C(8)N(1)O(2)S(1) 0.0 Artefact 276 0.0
AEBS@K 183.035399 183.2276 H(9)C(8)N(1)O(2)S(1) 0.0 Artefact 276 0.0
AEBS@H 183.035399 183.2276 H(9)C(8)N(1)O(2)S(1) 0.0 Artefact 276 0.0
Ethanolyl@K 44.026215 44.0526 H(4)C(2)O(1) 0.0 Chemical derivative 278 0.0
@@ -475,10 +475,10 @@ Ethanolyl@C 44.026215 44.0526 H(4)C(2)O(1) 0.0 Chemical derivative 278 0.0
Ethanolyl@R 44.026215 44.0526 H(4)C(2)O(1) 0.0 Chemical derivative 278 0.0
Label:13C(6)15N(2)+Dimethyl@K 36.045499 35.9959 H(4)C(-4)13C(6)N(-2)15N(2) 0.0 Isotopic label 987 0.0
HMVK@C 86.036779 86.0892 H(6)C(4)O(2) 0.0 Chemical derivative 371 0.0
-Ethyl@Any C-term 28.0313 28.0532 H(4)C(2) 0.0 Chemical derivative 280 0.0
-Ethyl@Protein N-term 28.0313 28.0532 H(4)C(2) 0.0 Chemical derivative 280 0.0
+Ethyl@Any_C-term 28.0313 28.0532 H(4)C(2) 0.0 Chemical derivative 280 0.0
+Ethyl@Protein_N-term 28.0313 28.0532 H(4)C(2) 0.0 Chemical derivative 280 0.0
Ethyl@E 28.0313 28.0532 H(4)C(2) 0.0 Artefact 280 0.0
-Ethyl@Any N-term 28.0313 28.0532 H(4)C(2) 0.0 Multiple 280 0.0
+Ethyl@Any_N-term 28.0313 28.0532 H(4)C(2) 0.0 Multiple 280 0.0
Ethyl@K 28.0313 28.0532 H(4)C(2) 0.0 Multiple 280 0.0
Ethyl@D 28.0313 28.0532 H(4)C(2) 0.0 Chemical derivative 280 0.0
CoenzymeA@C 765.09956 765.5182 H(34)C(21)N(7)O(16)P(3)S(1) 0.0 Post-translational 281 0.0
@@ -486,15 +486,15 @@ Methyl+Deamidated@Q 14.999666 15.0113 H(1)C(1)N(-1)O(1) 0.0 Post-translational
Methyl+Deamidated@N 14.999666 15.0113 H(1)C(1)N(-1)O(1) 0.0 Chemical derivative 528 0.0
Delta:H(5)C(2)@P 29.039125 29.0611 H(5)C(2) 0.0 Post-translational 529 0.0
Methyl:2H(2)@K 16.028204 16.0389 2H(2)C(1) 0.0 Isotopic label 284 0.0
-Methyl:2H(2)@Any N-term 16.028204 16.0389 2H(2)C(1) 0.0 Isotopic label 284 0.0
+Methyl:2H(2)@Any_N-term 16.028204 16.0389 2H(2)C(1) 0.0 Isotopic label 284 0.0
SulfanilicAcid@E 155.004099 155.1744 H(5)C(6)N(1)O(2)S(1) 0.0 Isotopic label 285 0.0
SulfanilicAcid@D 155.004099 155.1744 H(5)C(6)N(1)O(2)S(1) 0.0 Isotopic label 285 0.0
-SulfanilicAcid@Any C-term 155.004099 155.1744 H(5)C(6)N(1)O(2)S(1) 0.0 Isotopic label 285 0.0
+SulfanilicAcid@Any_C-term 155.004099 155.1744 H(5)C(6)N(1)O(2)S(1) 0.0 Isotopic label 285 0.0
SulfanilicAcid:13C(6)@E 161.024228 161.1303 H(5)13C(6)N(1)O(2)S(1) 0.0 Chemical derivative 286 0.0
SulfanilicAcid:13C(6)@D 161.024228 161.1303 H(5)13C(6)N(1)O(2)S(1) 0.0 Chemical derivative 286 0.0
-SulfanilicAcid:13C(6)@Any C-term 161.024228 161.1303 H(5)13C(6)N(1)O(2)S(1) 0.0 Chemical derivative 286 0.0
+SulfanilicAcid:13C(6)@Any_C-term 161.024228 161.1303 H(5)13C(6)N(1)O(2)S(1) 0.0 Chemical derivative 286 0.0
Biotin-PEO-Amine@D 356.188212 356.4835 H(28)C(16)N(4)O(3)S(1) 0.0 Chemical derivative 289 0.0
-Biotin-PEO-Amine@Protein C-term 356.188212 356.4835 H(28)C(16)N(4)O(3)S(1) 0.0 Chemical derivative 289 0.0
+Biotin-PEO-Amine@Protein_C-term 356.188212 356.4835 H(28)C(16)N(4)O(3)S(1) 0.0 Chemical derivative 289 0.0
Biotin-PEO-Amine@E 356.188212 356.4835 H(28)C(16)N(4)O(3)S(1) 0.0 Chemical derivative 289 0.0
Trp->Oxolactone@W 13.979265 13.9835 H(-2)O(1) 0.0 Chemical derivative 288 0.0
Biotin-HPDP@C 428.191582 428.6124 H(32)C(19)N(4)O(3)S(2) 0.0 Chemical derivative 290 0.0
@@ -502,7 +502,7 @@ Delta:Hg(1)@C 201.970617 200.59 Hg(1) 0.0 Chemical derivative 291 0.0
IodoU-AMP@Y 322.020217 322.1654 H(11)C(9)N(2)O(9)P(1) 0.0 Chemical derivative 292 0.0
IodoU-AMP@W 322.020217 322.1654 H(11)C(9)N(2)O(9)P(1) 0.0 Chemical derivative 292 0.0
IodoU-AMP@F 322.020217 322.1654 H(11)C(9)N(2)O(9)P(1) 0.0 Chemical derivative 292 0.0
-CAMthiopropanoyl@Protein N-term 145.019749 145.1796 H(7)C(5)N(1)O(2)S(1) 0.0 Chemical derivative 293 0.0
+CAMthiopropanoyl@Protein_N-term 145.019749 145.1796 H(7)C(5)N(1)O(2)S(1) 0.0 Chemical derivative 293 0.0
CAMthiopropanoyl@K 145.019749 145.1796 H(7)C(5)N(1)O(2)S(1) 0.0 Chemical derivative 293 0.0
IED-Biotin@C 326.141261 326.4145 H(22)C(14)N(4)O(3)S(1) 0.0 Chemical derivative 294 0.0
dHex@N 146.057909 146.1412 H(10)C(6)O(4) 146.057909 H(10)C(6)O(4) N-linked glycosylation 295 0.5
@@ -517,7 +517,7 @@ Carboxy@E 43.989829 44.0095 C(1)O(2) 0.0 Post-translational 299 0.0
Carboxy@D 43.989829 44.0095 C(1)O(2) 0.0 Post-translational 299 0.0
Carboxy@K 43.989829 44.0095 C(1)O(2) 0.0 Post-translational 299 0.0
Carboxy@W 43.989829 44.0095 C(1)O(2) 0.0 Chemical derivative 299 0.0
-Carboxy@M^Protein N-term 43.989829 44.0095 C(1)O(2) 0.0 Post-translational 299 0.0
+Carboxy@M^Protein_N-term 43.989829 44.0095 C(1)O(2) 0.0 Post-translational 299 0.0
Bromobimane@C 190.074228 190.1986 H(10)C(10)N(2)O(2) 0.0 Chemical derivative 301 0.0
Menadione@K 170.036779 170.1641 H(6)C(11)O(2) 0.0 Chemical derivative 302 0.0
Menadione@C 170.036779 170.1641 H(6)C(11)O(2) 0.0 Chemical derivative 302 0.0
@@ -539,7 +539,7 @@ Hex(5)HexNAc(4)@S 1622.581608 1623.4731 H(102)C(62)N(4)O(45) 1622.581608 H(102)C
Hex(5)HexNAc(4)@N 1622.581608 1623.4731 H(102)C(62)N(4)O(45) 1622.581608 H(102)C(62)N(4)O(45) N-linked glycosylation 311 0.5
Hex(5)HexNAc(4)@T 1622.581608 1623.4731 H(102)C(62)N(4)O(45) 1622.581608 H(102)C(62)N(4)O(45) O-linked glycosylation 311 0.5
Cysteinyl@C 119.004099 119.1423 H(5)C(3)N(1)O(2)S(1) 0.0 Multiple 312 0.0
-Lys-loss@K^Protein C-term -128.094963 -128.1723 H(-12)C(-6)N(-2)O(-1) 0.0 Post-translational 313 0.0
+Lys-loss@K^Protein_C-term -128.094963 -128.1723 H(-12)C(-6)N(-2)O(-1) 0.0 Post-translational 313 0.0
Nmethylmaleimide@K 111.032028 111.0987 H(5)C(5)N(1)O(2) 0.0 Chemical derivative 314 0.0
Nmethylmaleimide@C 111.032028 111.0987 H(5)C(5)N(1)O(2) 0.0 Chemical derivative 314 0.0
CyDye-Cy3@C 672.298156 672.8335 H(44)C(37)N(4)O(6)S(1) 0.0 Chemical derivative 494 0.0
@@ -551,7 +551,7 @@ Nethylmaleimide+water@K 143.058243 143.1406 H(9)C(6)N(1)O(3) 0.0 Chemical deriv
Nethylmaleimide+water@C 143.058243 143.1406 H(9)C(6)N(1)O(3) 0.0 Chemical derivative 320 0.0
Methyl+Acetyl:2H(3)@K 59.045045 59.0817 H(1)2H(3)C(3)O(1) 0.0 Isotopic label 768 0.0
Xlink:B10621@C 713.093079 713.5626 H(30)C(31)N(4)O(6)S(1)I(1) 0.0 Chemical derivative 323 0.0
-Xlink:DTBP[87]@Protein N-term 87.01427 87.1435 H(5)C(3)N(1)S(1) 0.0 Chemical derivative 324 0.0
+Xlink:DTBP[87]@Protein_N-term 87.01427 87.1435 H(5)C(3)N(1)S(1) 0.0 Chemical derivative 324 0.0
Xlink:DTBP[87]@K 87.01427 87.1435 H(5)C(3)N(1)S(1) 0.0 Chemical derivative 324 0.0
FP-Biotin@K 572.316129 572.7405 H(49)C(27)N(4)O(5)P(1)S(1) 0.0 Chemical derivative 325 0.0
FP-Biotin@T 572.316129 572.7405 H(49)C(27)N(4)O(5)P(1)S(1) 0.0 Chemical derivative 325 0.0
@@ -573,21 +573,21 @@ Diisopropylphosphate@K 164.060231 164.1394 H(13)C(6)O(3)P(1) 0.0 Chemical deriv
Diisopropylphosphate@Y 164.060231 164.1394 H(13)C(6)O(3)P(1) 0.0 Chemical derivative 362 0.0
Diisopropylphosphate@T 164.060231 164.1394 H(13)C(6)O(3)P(1) 0.0 Chemical derivative 362 0.0
Diisopropylphosphate@S 164.060231 164.1394 H(13)C(6)O(3)P(1) 0.0 Chemical derivative 362 0.0
-Diisopropylphosphate@Any N-term 164.060231 164.1394 H(13)C(6)O(3)P(1) 0.0 Chemical derivative 362 0.0
+Diisopropylphosphate@Any_N-term 164.060231 164.1394 H(13)C(6)O(3)P(1) 0.0 Chemical derivative 362 0.0
Isopropylphospho@Y 122.013281 122.0596 H(7)C(3)O(3)P(1) 0.0 Chemical derivative 363 0.0
Isopropylphospho@T 122.013281 122.0596 H(7)C(3)O(3)P(1) 0.0 Chemical derivative 363 0.0
Isopropylphospho@S 122.013281 122.0596 H(7)C(3)O(3)P(1) 0.0 Chemical derivative 363 0.0
-ICPL:13C(6)@Any N-term 111.041593 111.05 H(3)13C(6)N(1)O(1) 0.0 Isotopic label 364 0.0
-ICPL:13C(6)@Protein N-term 111.041593 111.05 H(3)13C(6)N(1)O(1) 0.0 Isotopic label 364 0.0
+ICPL:13C(6)@Any_N-term 111.041593 111.05 H(3)13C(6)N(1)O(1) 0.0 Isotopic label 364 0.0
+ICPL:13C(6)@Protein_N-term 111.041593 111.05 H(3)13C(6)N(1)O(1) 0.0 Isotopic label 364 0.0
ICPL:13C(6)@K 111.041593 111.05 H(3)13C(6)N(1)O(1) 0.0 Isotopic label 364 0.0
CarbamidomethylDTT@C 209.018035 209.2864 H(11)C(6)N(1)O(3)S(2) 0.0 Artefact 893 0.0
-ICPL@Protein N-term 105.021464 105.0941 H(3)C(6)N(1)O(1) 0.0 Isotopic label 365 0.0
+ICPL@Protein_N-term 105.021464 105.0941 H(3)C(6)N(1)O(1) 0.0 Isotopic label 365 0.0
ICPL@K 105.021464 105.0941 H(3)C(6)N(1)O(1) 0.0 Isotopic label 365 0.0
-ICPL@Any N-term 105.021464 105.0941 H(3)C(6)N(1)O(1) 0.0 Isotopic label 365 0.0
+ICPL@Any_N-term 105.021464 105.0941 H(3)C(6)N(1)O(1) 0.0 Isotopic label 365 0.0
Deamidated:18O(1)@Q 2.988261 2.9845 H(-1)N(-1)18O(1) 0.0 Isotopic label 366 0.0
Deamidated:18O(1)@N 2.988261 2.9845 H(-1)N(-1)18O(1) 0.0 Isotopic label 366 0.0
Arg->Orn@R -42.021798 -42.04 H(-2)C(-1)N(-2) 0.0 Artefact 372 0.0
-Cation:Cu[I]@Any C-term 61.921774 62.5381 H(-1)Cu(1) 0.0 Artefact 531 0.0
+Cation:Cu[I]@Any_C-term 61.921774 62.5381 H(-1)Cu(1) 0.0 Artefact 531 0.0
Cation:Cu[I]@E 61.921774 62.5381 H(-1)Cu(1) 0.0 Artefact 531 0.0
Cation:Cu[I]@D 61.921774 62.5381 H(-1)Cu(1) 0.0 Artefact 531 0.0
Cation:Cu[I]@H 61.921774 62.5381 H(-1)Cu(1) 0.0 Artefact 531 0.0
@@ -600,10 +600,10 @@ Carboxyethyl@H 72.021129 72.0627 H(4)C(3)O(2) 0.0 Chemical derivative 378 0.0
Hypusine@K 87.068414 87.1204 H(9)C(4)N(1)O(1) 0.0 Post-translational 379 0.0
Retinylidene@K 266.203451 266.4204 H(26)C(20) 0.0 Post-translational 380 0.0
Lys->AminoadipicAcid@K 14.96328 14.9683 H(-3)N(-1)O(2) 0.0 Post-translational 381 0.0
-Cys->PyruvicAcid@C^Protein N-term -33.003705 -33.0961 H(-3)N(-1)O(1)S(-1) 0.0 Post-translational 382 0.0
-Ammonia-loss@C^Any N-term -17.026549 -17.0305 H(-3)N(-1) 0.0 Artefact 385 0.0
-Ammonia-loss@S^Protein N-term -17.026549 -17.0305 H(-3)N(-1) 0.0 Post-translational 385 0.0
-Ammonia-loss@T^Protein N-term -17.026549 -17.0305 H(-3)N(-1) 0.0 Post-translational 385 0.0
+Cys->PyruvicAcid@C^Protein_N-term -33.003705 -33.0961 H(-3)N(-1)O(1)S(-1) 0.0 Post-translational 382 0.0
+Ammonia-loss@C^Any_N-term -17.026549 -17.0305 H(-3)N(-1) 0.0 Artefact 385 0.0
+Ammonia-loss@S^Protein_N-term -17.026549 -17.0305 H(-3)N(-1) 0.0 Post-translational 385 0.0
+Ammonia-loss@T^Protein_N-term -17.026549 -17.0305 H(-3)N(-1) 0.0 Post-translational 385 0.0
Ammonia-loss@N -17.026549 -17.0305 H(-3)N(-1) 0.0 Chemical derivative 385 0.0
Phycocyanobilin@C 586.279135 586.678 H(38)C(33)N(4)O(6) 0.0 Post-translational 387 0.0
Phycoerythrobilin@C 588.294785 588.6939 H(40)C(33)N(4)O(6) 0.0 Post-translational 388 0.0
@@ -614,7 +614,7 @@ Molybdopterin@C 521.884073 520.2668 H(11)C(10)N(5)O(8)P(1)S(2)Mo(1) 0.0 Post-tr
Quinone@W 29.974179 29.9829 H(-2)O(2) 0.0 Post-translational 392 0.0
Quinone@Y 29.974179 29.9829 H(-2)O(2) 0.0 Post-translational 392 0.0
Glucosylgalactosyl@K 340.100562 340.2806 H(20)C(12)O(11) 340.100562 H(20)C(12)O(11) Other glycosylation 393 0.5
-GPIanchor@Protein C-term 123.00853 123.0477 H(6)C(2)N(1)O(3)P(1) 0.0 Post-translational 394 0.0
+GPIanchor@Protein_C-term 123.00853 123.0477 H(6)C(2)N(1)O(3)P(1) 0.0 Post-translational 394 0.0
PhosphoribosyldephosphoCoA@S 881.146904 881.6335 H(42)C(26)N(7)O(19)P(3)S(1) 0.0 Post-translational 395 0.0
GlycerylPE@E 197.04531 197.1262 H(12)C(5)N(1)O(5)P(1) 0.0 Post-translational 396 0.0
Triiodothyronine@Y 469.716159 469.785 H(1)C(6)O(1)I(3) 0.0 Post-translational 397 0.0
@@ -623,25 +623,25 @@ Tyr->Dha@Y -94.041865 -94.1112 H(-6)C(-6)O(-1) 0.0 Post-translational 400 0.0
Didehydro@S -2.01565 -2.0159 H(-2) 0.0 Post-translational 401 0.0
Didehydro@Y -2.01565 -2.0159 H(-2) 0.0 Post-translational 401 0.0
Didehydro@T -2.01565 -2.0159 H(-2) 0.0 Chemical derivative 401 0.0
-Didehydro@K^Any C-term -2.01565 -2.0159 H(-2) 0.0 Artefact 401 0.0
+Didehydro@K^Any_C-term -2.01565 -2.0159 H(-2) 0.0 Artefact 401 0.0
Cys->Oxoalanine@C -17.992806 -18.0815 H(-2)O(1)S(-1) 0.0 Post-translational 402 0.0
-Ser->LacticAcid@S^Protein N-term -15.010899 -15.0146 H(-1)N(-1) 0.0 Post-translational 403 0.0
+Ser->LacticAcid@S^Protein_N-term -15.010899 -15.0146 H(-1)N(-1) 0.0 Post-translational 403 0.0
GluGlu@E 258.085186 258.228 H(14)C(10)N(2)O(6) 0.0 Post-translational 451 0.0
-GluGlu@Protein C-term 258.085186 258.228 H(14)C(10)N(2)O(6) 0.0 Post-translational 451 0.0
+GluGlu@Protein_C-term 258.085186 258.228 H(14)C(10)N(2)O(6) 0.0 Post-translational 451 0.0
Phosphoadenosine@H 329.05252 329.2059 H(12)C(10)N(5)O(6)P(1) 0.0 Post-translational 405 0.0
Phosphoadenosine@T 329.05252 329.2059 H(12)C(10)N(5)O(6)P(1) 0.0 Post-translational 405 0.0
Phosphoadenosine@K 329.05252 329.2059 H(12)C(10)N(5)O(6)P(1) 0.0 Post-translational 405 0.0
Phosphoadenosine@Y 329.05252 329.2059 H(12)C(10)N(5)O(6)P(1) 0.0 Post-translational 405 0.0
Phosphoadenosine@S 329.05252 329.2059 H(12)C(10)N(5)O(6)P(1) 0.0 Post-translational 405 0.0
Glu@E 129.042593 129.114 H(7)C(5)N(1)O(3) 0.0 Post-translational 450 0.0
-Glu@Protein C-term 129.042593 129.114 H(7)C(5)N(1)O(3) 0.0 Chemical derivative 450 0.0
+Glu@Protein_C-term 129.042593 129.114 H(7)C(5)N(1)O(3) 0.0 Chemical derivative 450 0.0
Hydroxycinnamyl@C 146.036779 146.1427 H(6)C(9)O(2) 0.0 Post-translational 407 0.0
Glycosyl@P 148.037173 148.114 H(8)C(5)O(5) 0.0 Other glycosylation 408 0.0
FMNH@H 454.088965 454.3279 H(19)C(17)N(4)O(9)P(1) 0.0 Post-translational 409 0.0
FMNH@C 454.088965 454.3279 H(19)C(17)N(4)O(9)P(1) 0.0 Post-translational 409 0.0
Archaeol@C 634.662782 635.1417 H(86)C(43)O(2) 0.0 Post-translational 410 0.0
-Phenylisocyanate@Any N-term 119.037114 119.1207 H(5)C(7)N(1)O(1) 0.0 Chemical derivative 411 0.0
-Phenylisocyanate:2H(5)@Any N-term 124.068498 124.1515 2H(5)C(7)N(1)O(1) 0.0 Chemical derivative 412 0.0
+Phenylisocyanate@Any_N-term 119.037114 119.1207 H(5)C(7)N(1)O(1) 0.0 Chemical derivative 411 0.0
+Phenylisocyanate:2H(5)@Any_N-term 124.068498 124.1515 2H(5)C(7)N(1)O(1) 0.0 Chemical derivative 412 0.0
Phosphoguanosine@H 345.047435 345.2053 H(12)C(10)N(5)O(7)P(1) 0.0 Post-translational 413 0.0
Phosphoguanosine@K 345.047435 345.2053 H(12)C(10)N(5)O(7)P(1) 0.0 Post-translational 413 0.0
Hydroxymethyl@N 30.010565 30.026 H(2)C(1)O(1) 0.0 Post-translational 414 0.0
@@ -650,13 +650,13 @@ Dipyrrolylmethanemethyl@C 418.137616 418.3973 H(22)C(20)N(2)O(8) 0.0 Post-trans
PhosphoUridine@H 306.025302 306.166 H(11)C(9)N(2)O(8)P(1) 0.0 Post-translational 417 0.0
PhosphoUridine@Y 306.025302 306.166 H(11)C(9)N(2)O(8)P(1) 0.0 Post-translational 417 0.0
Glycerophospho@S 154.00311 154.0584 H(7)C(3)O(5)P(1) 0.0 Post-translational 419 0.0
-Carboxy->Thiocarboxy@G^Protein C-term 15.977156 16.0656 O(-1)S(1) 0.0 Post-translational 420 0.0
+Carboxy->Thiocarboxy@G^Protein_C-term 15.977156 16.0656 O(-1)S(1) 0.0 Post-translational 420 0.0
Sulfide@D 31.972071 32.065 S(1) 0.0 Post-translational 421 0.0
Sulfide@C 31.972071 32.065 S(1) 0.0 Post-translational 421 0.0
Sulfide@W 31.972071 32.065 S(1) 0.0 Chemical derivative 421 0.0
PyruvicAcidIminyl@K 70.005479 70.0468 H(2)C(3)O(2) 0.0 Post-translational 422 0.0
-PyruvicAcidIminyl@V^Protein N-term 70.005479 70.0468 H(2)C(3)O(2) 0.0 Post-translational 422 0.0
-PyruvicAcidIminyl@C^Protein N-term 70.005479 70.0468 H(2)C(3)O(2) 0.0 Post-translational 422 0.0
+PyruvicAcidIminyl@V^Protein_N-term 70.005479 70.0468 H(2)C(3)O(2) 0.0 Post-translational 422 0.0
+PyruvicAcidIminyl@C^Protein_N-term 70.005479 70.0468 H(2)C(3)O(2) 0.0 Post-translational 422 0.0
Delta:Se(1)@C 79.91652 78.96 Se(1) 0.0 Post-translational 423 0.0
MolybdopterinGD@D 1572.985775 1572.0146 H(47)C(40)N(20)O(26)P(4)S(4)Mo(1) 0.0 Post-translational 424 0.0
MolybdopterinGD@C 1572.985775 1572.0146 H(47)C(40)N(20)O(26)P(4)S(4)Mo(1) 0.0 Post-translational 424 0.0
@@ -684,12 +684,12 @@ PhosphoHex@S 242.019154 242.1205 H(11)C(6)O(8)P(1) 242.019154 H(11)C(6)O(8)P(1)
Palmitoleyl@C 236.214016 236.3929 H(28)C(16)O(1) 0.0 Post-translational 431 0.0
Palmitoleyl@S 236.214016 236.3929 H(28)C(16)O(1) 0.0 Post-translational 431 0.0
Palmitoleyl@T 236.214016 236.3929 H(28)C(16)O(1) 0.0 Pre-translational 431 0.0
-Cholesterol@Protein C-term 368.344302 368.6383 H(44)C(27) 0.0 Post-translational 432 0.0
+Cholesterol@Protein_C-term 368.344302 368.6383 H(44)C(27) 0.0 Post-translational 432 0.0
Didehydroretinylidene@K 264.187801 264.4046 H(24)C(20) 0.0 Post-translational 433 0.0
CHDH@D 294.183109 294.3859 H(26)C(17)O(4) 0.0 Post-translational 434 0.0
Methylpyrroline@K 109.052764 109.1259 H(7)C(6)N(1)O(1) 0.0 Post-translational 435 0.0
Hydroxyheme@E 614.161645 614.4714 H(30)C(34)N(4)O(4)Fe(1) 0.0 Post-translational 436 0.0
-MicrocinC7@Protein C-term 386.110369 386.3003 H(19)C(13)N(6)O(6)P(1) 0.0 Post-translational 437 0.0
+MicrocinC7@Protein_C-term 386.110369 386.3003 H(19)C(13)N(6)O(6)P(1) 0.0 Post-translational 437 0.0
Cyano@C 24.995249 25.0095 H(-1)C(1)N(1) 0.0 Post-translational 438 0.0
Diironsubcluster@C 342.786916 342.876 H(-1)C(5)N(2)O(5)S(2)Fe(2) 0.0 Post-translational 439 0.0
Amidino@C 42.021798 42.04 H(2)C(1)N(2) 0.0 Post-translational 440 0.0
@@ -701,27 +701,27 @@ Hydroxytrimethyl@K 59.04969 59.0871 H(7)C(3)O(1) 0.0 Post-translational 445 0.0
Deoxy@T -15.994915 -15.9994 O(-1) 0.0 Chemical derivative 447 0.0
Deoxy@D -15.994915 -15.9994 O(-1) 0.0 Post-translational 447 0.0
Deoxy@S -15.994915 -15.9994 O(-1) 0.0 Chemical derivative 447 0.0
-Microcin@Protein C-term 831.197041 831.6871 H(37)C(36)N(3)O(20) 0.0 Post-translational 448 0.0
+Microcin@Protein_C-term 831.197041 831.6871 H(37)C(36)N(3)O(20) 0.0 Post-translational 448 0.0
Decanoyl@T 154.135765 154.2493 H(18)C(10)O(1) 0.0 Post-translational 449 0.0
Decanoyl@S 154.135765 154.2493 H(18)C(10)O(1) 0.0 Post-translational 449 0.0
-GluGluGlu@Protein C-term 387.127779 387.3419 H(21)C(15)N(3)O(9) 0.0 Post-translational 452 0.0
+GluGluGlu@Protein_C-term 387.127779 387.3419 H(21)C(15)N(3)O(9) 0.0 Post-translational 452 0.0
GluGluGlu@E 387.127779 387.3419 H(21)C(15)N(3)O(9) 0.0 Post-translational 452 0.0
-GluGluGluGlu@Protein C-term 516.170373 516.4559 H(28)C(20)N(4)O(12) 0.0 Post-translational 453 0.0
+GluGluGluGlu@Protein_C-term 516.170373 516.4559 H(28)C(20)N(4)O(12) 0.0 Post-translational 453 0.0
GluGluGluGlu@E 516.170373 516.4559 H(28)C(20)N(4)O(12) 0.0 Post-translational 453 0.0
HexN@W 161.068808 161.1558 H(11)C(6)N(1)O(4) 0.0 Other glycosylation 454 0.0
HexN@T 161.068808 161.1558 H(11)C(6)N(1)O(4) 161.068808 H(11)C(6)N(1)O(4) O-linked glycosylation 454 0.5
HexN@S 161.068808 161.1558 H(11)C(6)N(1)O(4) 161.068808 H(11)C(6)N(1)O(4) O-linked glycosylation 454 0.5
HexN@N 161.068808 161.1558 H(11)C(6)N(1)O(4) 161.068808 H(11)C(6)N(1)O(4) N-linked glycosylation 454 0.5
HexN@K 161.068808 161.1558 H(11)C(6)N(1)O(4) 0.0 Synth. pep. protect. gp. 454 0.0
-Xlink:DMP[154]@Protein N-term 154.110613 154.2096 H(14)C(8)N(2)O(1) 0.0 Chemical derivative 455 0.0
+Xlink:DMP[154]@Protein_N-term 154.110613 154.2096 H(14)C(8)N(2)O(1) 0.0 Chemical derivative 455 0.0
Xlink:DMP[154]@K 154.110613 154.2096 H(14)C(8)N(2)O(1) 0.0 Chemical derivative 455 0.0
-NDA@Any N-term 175.042199 175.1855 H(5)C(13)N(1) 0.0 Chemical derivative 457 0.0
+NDA@Any_N-term 175.042199 175.1855 H(5)C(13)N(1) 0.0 Chemical derivative 457 0.0
NDA@K 175.042199 175.1855 H(5)C(13)N(1) 0.0 Chemical derivative 457 0.0
-SPITC:13C(6)@Any N-term 220.991213 221.2054 H(5)C(1)13C(6)N(1)O(3)S(2) 0.0 Chemical derivative 464 0.0
+SPITC:13C(6)@Any_N-term 220.991213 221.2054 H(5)C(1)13C(6)N(1)O(3)S(2) 0.0 Chemical derivative 464 0.0
SPITC:13C(6)@K 220.991213 221.2054 H(5)C(1)13C(6)N(1)O(3)S(2) 0.0 Chemical derivative 464 0.0
-TMAB:2H(9)@Any N-term 137.16403 137.2476 H(5)2H(9)C(7)N(1)O(1) 68.12999 2H(9)C(3)N(1) Isotopic label 477 0.5
+TMAB:2H(9)@Any_N-term 137.16403 137.2476 H(5)2H(9)C(7)N(1)O(1) 68.12999 2H(9)C(3)N(1) Isotopic label 477 0.5
TMAB:2H(9)@K 137.16403 137.2476 H(5)2H(9)C(7)N(1)O(1) 68.12999 2H(9)C(3)N(1) Isotopic label 477 0.5
-TMAB@Any N-term 128.107539 128.1922 H(14)C(7)N(1)O(1) 59.073499 H(9)C(3)N(1) Isotopic label 476 0.5
+TMAB@Any_N-term 128.107539 128.1922 H(14)C(7)N(1)O(1) 59.073499 H(9)C(3)N(1) Isotopic label 476 0.5
TMAB@K 128.107539 128.1922 H(14)C(7)N(1)O(1) 59.073499 H(9)C(3)N(1) Isotopic label 476 0.5
FTC@S 421.073241 421.4259 H(15)C(21)N(3)O(5)S(1) 0.0 Chemical derivative 478 0.0
FTC@R 421.073241 421.4259 H(15)C(21)N(3)O(5)S(1) 0.0 Chemical derivative 478 0.0
@@ -749,21 +749,21 @@ BHTOH@C 234.16198 234.334 H(22)C(15)O(2) 0.0 Other 498 0.0
BHTOH@K 234.16198 234.334 H(22)C(15)O(2) 0.0 Other 498 0.0
IGBP:13C(2)@C 298.022748 299.1331 H(13)C(10)13C(2)N(2)O(2)Br(1) 0.0 Isotopic label 499 0.0
Nmethylmaleimide+water@C 129.042593 129.114 H(7)C(5)N(1)O(3) 0.0 Chemical derivative 500 0.0
-PyMIC@Any N-term 134.048013 134.1353 H(6)C(7)N(2)O(1) 0.0 Chemical derivative 501 0.0
-LG-lactam-K@Protein N-term 332.19876 332.4339 H(28)C(20)O(4) 0.0 Post-translational 503 0.0
+PyMIC@Any_N-term 134.048013 134.1353 H(6)C(7)N(2)O(1) 0.0 Chemical derivative 501 0.0
+LG-lactam-K@Protein_N-term 332.19876 332.4339 H(28)C(20)O(4) 0.0 Post-translational 503 0.0
LG-lactam-K@K 332.19876 332.4339 H(28)C(20)O(4) 0.0 Post-translational 503 0.0
BisANS@K 594.091928 594.6569 H(22)C(32)N(2)O(6)S(2) 0.0 Chemical derivative 519 0.0
-Piperidine@Any N-term 68.0626 68.117 H(8)C(5) 0.0 Chemical derivative 520 0.0
+Piperidine@Any_N-term 68.0626 68.117 H(8)C(5) 0.0 Chemical derivative 520 0.0
Piperidine@K 68.0626 68.117 H(8)C(5) 0.0 Chemical derivative 520 0.0
-Diethyl@Any N-term 56.0626 56.1063 H(8)C(4) 0.0 Chemical derivative 518 0.0
+Diethyl@Any_N-term 56.0626 56.1063 H(8)C(4) 0.0 Chemical derivative 518 0.0
Diethyl@K 56.0626 56.1063 H(8)C(4) 0.0 Chemical derivative 518 0.0
-LG-Hlactam-K@Protein N-term 348.193674 348.4333 H(28)C(20)O(5) 0.0 Post-translational 504 0.0
+LG-Hlactam-K@Protein_N-term 348.193674 348.4333 H(28)C(20)O(5) 0.0 Post-translational 504 0.0
LG-Hlactam-K@K 348.193674 348.4333 H(28)C(20)O(5) 0.0 Post-translational 504 0.0
-Dimethyl:2H(4)13C(2)@Protein N-term 34.063117 34.0631 2H(4)13C(2) 0.0 Isotopic label 510 0.0
+Dimethyl:2H(4)13C(2)@Protein_N-term 34.063117 34.0631 2H(4)13C(2) 0.0 Isotopic label 510 0.0
Dimethyl:2H(4)13C(2)@R 34.063117 34.0631 2H(4)13C(2) 0.0 Isotopic label 510 0.0
Dimethyl:2H(4)13C(2)@K 34.063117 34.0631 2H(4)13C(2) 0.0 Isotopic label 510 0.0
-Dimethyl:2H(4)13C(2)@Any N-term 34.063117 34.0631 2H(4)13C(2) 0.0 Isotopic label 510 0.0
-C8-QAT@Any N-term 227.224915 227.3862 H(29)C(14)N(1)O(1) 0.0 Chemical derivative 513 0.0
+Dimethyl:2H(4)13C(2)@Any_N-term 34.063117 34.0631 2H(4)13C(2) 0.0 Isotopic label 510 0.0
+C8-QAT@Any_N-term 227.224915 227.3862 H(29)C(14)N(1)O(1) 0.0 Chemical derivative 513 0.0
C8-QAT@K 227.224915 227.3862 H(29)C(14)N(1)O(1) 0.0 Chemical derivative 513 0.0
Hex(2)@R 324.105647 324.2812 H(20)C(12)O(10) 0.0 Other glycosylation 512 0.0
Hex(2)@K 324.105647 324.2812 H(20)C(12)O(10) 0.0 Other glycosylation 512 0.0
@@ -773,30 +773,30 @@ LG-lactam-R@R 290.176961 290.3939 H(26)C(19)N(-2)O(4) 0.0 Post-translational 50
Withaferin@C 470.266839 470.5977 H(38)C(28)O(6) 0.0 Chemical derivative 1036 0.0
Biotin:Thermo-88317@S 443.291294 443.5603 H(42)C(22)N(3)O(4)P(1) 0.0 Chemical derivative 1037 0.0
Biotin:Thermo-88317@Y 443.291294 443.5603 H(42)C(22)N(3)O(4)P(1) 0.0 Chemical derivative 1037 0.0
-CLIP_TRAQ_2@Any N-term 141.098318 141.1756 H(12)C(6)13C(1)N(2)O(1) 0.0 Isotopic label 525 0.0
+CLIP_TRAQ_2@Any_N-term 141.098318 141.1756 H(12)C(6)13C(1)N(2)O(1) 0.0 Isotopic label 525 0.0
CLIP_TRAQ_2@K 141.098318 141.1756 H(12)C(6)13C(1)N(2)O(1) 0.0 Isotopic label 525 0.0
CLIP_TRAQ_2@Y 141.098318 141.1756 H(12)C(6)13C(1)N(2)O(1) 0.0 Isotopic label 525 0.0
LG-Hlactam-R@R 306.171876 306.3933 H(26)C(19)N(-2)O(5) 0.0 Post-translational 506 0.0
Maleimide-PEO2-Biotin@C 525.225719 525.6183 H(35)C(23)N(5)O(7)S(1) 0.0 Chemical derivative 522 0.0
-Sulfo-NHS-LC-LC-Biotin@Any N-term 452.245726 452.6106 H(36)C(22)N(4)O(4)S(1) 0.0 Chemical derivative 523 0.0
+Sulfo-NHS-LC-LC-Biotin@Any_N-term 452.245726 452.6106 H(36)C(22)N(4)O(4)S(1) 0.0 Chemical derivative 523 0.0
Sulfo-NHS-LC-LC-Biotin@K 452.245726 452.6106 H(36)C(22)N(4)O(4)S(1) 0.0 Chemical derivative 523 0.0
FNEM@C 427.069202 427.3625 H(13)C(24)N(1)O(7) 0.0 Chemical derivative 515 0.0
PropylNAGthiazoline@C 232.064354 232.2768 H(14)C(9)N(1)O(4)S(1) 0.0 Chemical derivative 514 0.0
Dethiomethyl@M -48.003371 -48.1075 H(-4)C(-1)S(-1) 0.0 Artefact 526 0.0
iTRAQ4plex114@Y 144.105918 144.168 H(12)C(5)13C(2)N(2)18O(1) 0.0 Isotopic label 532 0.0
-iTRAQ4plex114@Any N-term 144.105918 144.168 H(12)C(5)13C(2)N(2)18O(1) 0.0 Isotopic label 532 0.0
+iTRAQ4plex114@Any_N-term 144.105918 144.168 H(12)C(5)13C(2)N(2)18O(1) 0.0 Isotopic label 532 0.0
iTRAQ4plex114@K 144.105918 144.168 H(12)C(5)13C(2)N(2)18O(1) 0.0 Isotopic label 532 0.0
iTRAQ4plex114@C 144.105918 144.168 H(12)C(5)13C(2)N(2)18O(1) 0.0 Isotopic label 532 0.0
iTRAQ4plex115@Y 144.099599 144.1688 H(12)C(6)13C(1)N(1)15N(1)18O(1) 0.0 Isotopic label 533 0.0
-iTRAQ4plex115@Any N-term 144.099599 144.1688 H(12)C(6)13C(1)N(1)15N(1)18O(1) 0.0 Isotopic label 533 0.0
+iTRAQ4plex115@Any_N-term 144.099599 144.1688 H(12)C(6)13C(1)N(1)15N(1)18O(1) 0.0 Isotopic label 533 0.0
iTRAQ4plex115@K 144.099599 144.1688 H(12)C(6)13C(1)N(1)15N(1)18O(1) 0.0 Isotopic label 533 0.0
iTRAQ4plex115@C 144.099599 144.1688 H(12)C(6)13C(1)N(1)15N(1)18O(1) 0.0 Isotopic label 533 0.0
Dibromo@Y 155.821022 157.7921 H(-2)Br(2) 0.0 Chemical derivative 534 0.0
LRGG@K 383.228103 383.446 H(29)C(16)N(7)O(4) 0.0 Chemical derivative 535 0.0
CLIP_TRAQ_3@Y 271.148736 271.2976 H(20)C(11)13C(1)N(3)O(4) 0.0 Isotopic label 536 0.0
-CLIP_TRAQ_3@Any N-term 271.148736 271.2976 H(20)C(11)13C(1)N(3)O(4) 0.0 Isotopic label 536 0.0
+CLIP_TRAQ_3@Any_N-term 271.148736 271.2976 H(20)C(11)13C(1)N(3)O(4) 0.0 Isotopic label 536 0.0
CLIP_TRAQ_3@K 271.148736 271.2976 H(20)C(11)13C(1)N(3)O(4) 0.0 Isotopic label 536 0.0
-CLIP_TRAQ_4@Any N-term 244.101452 244.2292 H(15)C(9)13C(1)N(2)O(5) 0.0 Isotopic label 537 0.0
+CLIP_TRAQ_4@Any_N-term 244.101452 244.2292 H(15)C(9)13C(1)N(2)O(5) 0.0 Isotopic label 537 0.0
CLIP_TRAQ_4@K 244.101452 244.2292 H(15)C(9)13C(1)N(2)O(5) 0.0 Isotopic label 537 0.0
CLIP_TRAQ_4@Y 244.101452 244.2292 H(15)C(9)13C(1)N(2)O(5) 0.0 Isotopic label 537 0.0
Biotin:Cayman-10141@C 626.386577 626.8927 H(54)C(35)N(4)O(4)S(1) 0.0 Other 538 0.0
@@ -840,12 +840,12 @@ Gly->Val@G 42.04695 42.0797 H(6)C(3)N(0)O(0)S(0) 0.0 AA substitution 575 0.0
Gly->Asp@G 58.005479 58.0361 H(2)C(2)N(0)O(2)S(0) 0.0 AA substitution 576 0.0
Gly->Cys@G 45.987721 46.0916 H(2)C(1)N(0)O(0)S(1) 0.0 AA substitution 577 0.0
Gly->Arg@G 99.079647 99.1344 H(9)C(4)N(3)O(0)S(0) 0.0 AA substitution 578 0.0
-dNIC@Any N-term 109.048119 109.1205 H(1)2H(3)C(6)N(1)O(1) 0.0 Isotopic label 698 0.0
+dNIC@Any_N-term 109.048119 109.1205 H(1)2H(3)C(6)N(1)O(1) 0.0 Isotopic label 698 0.0
dNIC@K 109.048119 109.1205 H(1)2H(3)C(6)N(1)O(1) 0.0 Isotopic label 698 0.0
His->Pro@H -40.006148 -40.0241 H(0)C(-1)N(-2)O(0)S(0) 0.0 AA substitution 580 0.0
His->Tyr@H 26.004417 26.034 H(2)C(3)N(-2)O(1)S(0) 0.0 AA substitution 581 0.0
His->Gln@H -9.000334 -9.0101 H(1)C(-1)N(-1)O(1)S(0) 0.0 AA substitution 582 0.0
-NIC@Any N-term 105.021464 105.0941 H(3)C(6)N(1)O(1) 0.0 Isotopic label 697 0.0
+NIC@Any_N-term 105.021464 105.0941 H(3)C(6)N(1)O(1) 0.0 Isotopic label 697 0.0
NIC@K 105.021464 105.0941 H(3)C(6)N(1)O(1) 0.0 Isotopic label 697 0.0
His->Arg@H 19.042199 19.0464 H(5)C(0)N(1)O(0)S(0) 0.0 AA substitution 584 0.0
His->Xle@H -23.974848 -23.9816 H(4)N(-2) 0.0 AA substitution 585 0.0
@@ -957,23 +957,23 @@ Tyr->Asp@Y -48.036386 -48.0859 H(-4)C(-5)N(0)O(1)S(0) 0.0 AA substitution 682 0
Tyr->Cys@Y -60.054144 -60.0304 H(-4)C(-6)N(0)O(-1)S(1) 0.0 AA substitution 683 0.0
BDMAPP@W 253.010225 254.1231 H(12)C(11)N(1)O(1)Br(1) 0.0 Artefact 684 0.0
BDMAPP@Y 253.010225 254.1231 H(12)C(11)N(1)O(1)Br(1) 0.0 Artefact 684 0.0
-BDMAPP@Protein N-term 253.010225 254.1231 H(12)C(11)N(1)O(1)Br(1) 0.0 Chemical derivative 684 0.0
+BDMAPP@Protein_N-term 253.010225 254.1231 H(12)C(11)N(1)O(1)Br(1) 0.0 Chemical derivative 684 0.0
BDMAPP@K 253.010225 254.1231 H(12)C(11)N(1)O(1)Br(1) 0.0 Chemical derivative 684 0.0
BDMAPP@H 253.010225 254.1231 H(12)C(11)N(1)O(1)Br(1) 0.0 Artefact 684 0.0
NA-LNO2@C 325.225309 325.443 H(31)C(18)N(1)O(4) 0.0 Post-translational 685 0.0
NA-LNO2@H 325.225309 325.443 H(31)C(18)N(1)O(4) 0.0 Post-translational 685 0.0
NA-OA-NO2@C 327.240959 327.4589 H(33)C(18)N(1)O(4) 0.0 Post-translational 686 0.0
NA-OA-NO2@H 327.240959 327.4589 H(33)C(18)N(1)O(4) 0.0 Post-translational 686 0.0
-ICPL:2H(4)@Any N-term 109.046571 109.1188 H(-1)2H(4)C(6)N(1)O(1) 0.0 Isotopic label 687 0.0
-ICPL:2H(4)@Protein N-term 109.046571 109.1188 H(-1)2H(4)C(6)N(1)O(1) 0.0 Isotopic label 687 0.0
+ICPL:2H(4)@Any_N-term 109.046571 109.1188 H(-1)2H(4)C(6)N(1)O(1) 0.0 Isotopic label 687 0.0
+ICPL:2H(4)@Protein_N-term 109.046571 109.1188 H(-1)2H(4)C(6)N(1)O(1) 0.0 Isotopic label 687 0.0
ICPL:2H(4)@K 109.046571 109.1188 H(-1)2H(4)C(6)N(1)O(1) 0.0 Isotopic label 687 0.0
CarboxymethylDTT@C 210.00205 210.2712 H(10)C(6)O(4)S(2) 0.0 Artefact 894 0.0
-iTRAQ8plex@Protein N-term 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
+iTRAQ8plex@Protein_N-term 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
iTRAQ8plex@T 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
iTRAQ8plex@S 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
iTRAQ8plex@H 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
iTRAQ8plex@Y 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
-iTRAQ8plex@Any N-term 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
+iTRAQ8plex@Any_N-term 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
iTRAQ8plex@K 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
iTRAQ8plex@C 304.20536 304.3074 H(24)C(7)13C(7)N(3)15N(1)O(3) 0.0 Isotopic label 730 0.0
Label:13C(6)15N(1)@I 7.017164 6.9493 C(-6)13C(6)N(-1)15N(1) 0.0 Isotopic label 695 0.0
@@ -991,14 +991,14 @@ O-Dimethylphosphate@S 107.997631 108.0331 H(5)C(2)O(3)P(1) 0.0 Chemical derivat
O-Methylphosphate@Y 93.981981 94.0065 H(3)C(1)O(3)P(1) 0.0 Chemical derivative 724 0.0
O-Methylphosphate@T 93.981981 94.0065 H(3)C(1)O(3)P(1) 0.0 Chemical derivative 724 0.0
O-Methylphosphate@S 93.981981 94.0065 H(3)C(1)O(3)P(1) 0.0 Chemical derivative 724 0.0
-Diethylphosphate@Any N-term 136.028931 136.0862 H(9)C(4)O(3)P(1) 0.0 Chemical derivative 725 0.0
+Diethylphosphate@Any_N-term 136.028931 136.0862 H(9)C(4)O(3)P(1) 0.0 Chemical derivative 725 0.0
Diethylphosphate@H 136.028931 136.0862 H(9)C(4)O(3)P(1) 0.0 Chemical derivative 725 0.0
Diethylphosphate@C 136.028931 136.0862 H(9)C(4)O(3)P(1) 0.0 Chemical derivative 725 0.0
Diethylphosphate@K 136.028931 136.0862 H(9)C(4)O(3)P(1) 0.0 Chemical derivative 725 0.0
Diethylphosphate@Y 136.028931 136.0862 H(9)C(4)O(3)P(1) 0.0 Chemical derivative 725 0.0
Diethylphosphate@T 136.028931 136.0862 H(9)C(4)O(3)P(1) 0.0 Chemical derivative 725 0.0
Diethylphosphate@S 136.028931 136.0862 H(9)C(4)O(3)P(1) 0.0 Chemical derivative 725 0.0
-Ethylphosphate@Any N-term 107.997631 108.0331 H(5)C(2)O(3)P(1) 0.0 Chemical derivative 726 0.0
+Ethylphosphate@Any_N-term 107.997631 108.0331 H(5)C(2)O(3)P(1) 0.0 Chemical derivative 726 0.0
Ethylphosphate@K 107.997631 108.0331 H(5)C(2)O(3)P(1) 0.0 Chemical derivative 726 0.0
Ethylphosphate@Y 107.997631 108.0331 H(5)C(2)O(3)P(1) 0.0 Chemical derivative 726 0.0
Ethylphosphate@T 107.997631 108.0331 H(5)C(2)O(3)P(1) 0.0 Chemical derivative 726 0.0
@@ -1015,30 +1015,30 @@ O-Isopropylmethylphosphonate@Y 120.034017 120.0868 H(9)C(4)O(2)P(1) 0.0 Chemica
O-Isopropylmethylphosphonate@T 120.034017 120.0868 H(9)C(4)O(2)P(1) 0.0 Chemical derivative 729 0.0
O-Isopropylmethylphosphonate@S 120.034017 120.0868 H(9)C(4)O(2)P(1) 0.0 Chemical derivative 729 0.0
iTRAQ8plex:13C(6)15N(2)@Y 304.19904 304.3081 H(24)C(8)13C(6)N(2)15N(2)O(3) 0.0 Isotopic label 731 0.0
-iTRAQ8plex:13C(6)15N(2)@Any N-term 304.19904 304.3081 H(24)C(8)13C(6)N(2)15N(2)O(3) 0.0 Isotopic label 731 0.0
+iTRAQ8plex:13C(6)15N(2)@Any_N-term 304.19904 304.3081 H(24)C(8)13C(6)N(2)15N(2)O(3) 0.0 Isotopic label 731 0.0
iTRAQ8plex:13C(6)15N(2)@K 304.19904 304.3081 H(24)C(8)13C(6)N(2)15N(2)O(3) 0.0 Isotopic label 731 0.0
iTRAQ8plex:13C(6)15N(2)@C 304.19904 304.3081 H(24)C(8)13C(6)N(2)15N(2)O(3) 0.0 Isotopic label 731 0.0
BEMAD_ST@T 136.001656 136.2357 H(8)C(4)O(1)S(2) 0.0 Chemical derivative 735 0.0
BEMAD_ST@S 136.001656 136.2357 H(8)C(4)O(1)S(2) 0.0 Chemical derivative 735 0.0
Ethanolamine@D 43.042199 43.0678 H(5)C(2)N(1) 0.0 Chemical derivative 734 0.0
-Ethanolamine@Any C-term 43.042199 43.0678 H(5)C(2)N(1) 0.0 Chemical derivative 734 0.0
+Ethanolamine@Any_C-term 43.042199 43.0678 H(5)C(2)N(1) 0.0 Chemical derivative 734 0.0
Ethanolamine@E 43.042199 43.0678 H(5)C(2)N(1) 0.0 Chemical derivative 734 0.0
Ethanolamine@C 43.042199 43.0678 H(5)C(2)N(1) 0.0 Chemical derivative 734 0.0
TMT6plex@T 229.162932 229.2634 H(20)C(8)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 737 0.0
TMT6plex@S 229.162932 229.2634 H(20)C(8)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 737 0.0
TMT6plex@H 229.162932 229.2634 H(20)C(8)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 737 0.0
-TMT6plex@Protein N-term 229.162932 229.2634 H(20)C(8)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 737 0.0
-TMT6plex@Any N-term 229.162932 229.2634 H(20)C(8)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 737 0.0
+TMT6plex@Protein_N-term 229.162932 229.2634 H(20)C(8)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 737 0.0
+TMT6plex@Any_N-term 229.162932 229.2634 H(20)C(8)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 737 0.0
TMT6plex@K 229.162932 229.2634 H(20)C(8)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 737 0.0
BEMAD_C@C 120.0245 120.1701 H(8)C(4)O(2)S(1) 0.0 Chemical derivative 736 0.0
TMT2plex@H 225.155833 225.2921 H(20)C(11)13C(1)N(2)O(2) 0.0 Isotopic label 738 0.0
TMT2plex@S 225.155833 225.2921 H(20)C(11)13C(1)N(2)O(2) 0.0 Isotopic label 738 0.0
TMT2plex@T 225.155833 225.2921 H(20)C(11)13C(1)N(2)O(2) 0.0 Isotopic label 738 0.0
-TMT2plex@Protein N-term 225.155833 225.2921 H(20)C(11)13C(1)N(2)O(2) 0.0 Isotopic label 738 0.0
-TMT2plex@Any N-term 225.155833 225.2921 H(20)C(11)13C(1)N(2)O(2) 0.0 Isotopic label 738 0.0
+TMT2plex@Protein_N-term 225.155833 225.2921 H(20)C(11)13C(1)N(2)O(2) 0.0 Isotopic label 738 0.0
+TMT2plex@Any_N-term 225.155833 225.2921 H(20)C(11)13C(1)N(2)O(2) 0.0 Isotopic label 738 0.0
TMT2plex@K 225.155833 225.2921 H(20)C(11)13C(1)N(2)O(2) 0.0 Isotopic label 738 0.0
-TMT@Protein N-term 224.152478 224.2994 H(20)C(12)N(2)O(2) 0.0 Chemical derivative 739 0.0
-TMT@Any N-term 224.152478 224.2994 H(20)C(12)N(2)O(2) 0.0 Chemical derivative 739 0.0
+TMT@Protein_N-term 224.152478 224.2994 H(20)C(12)N(2)O(2) 0.0 Chemical derivative 739 0.0
+TMT@Any_N-term 224.152478 224.2994 H(20)C(12)N(2)O(2) 0.0 Chemical derivative 739 0.0
TMT@K 224.152478 224.2994 H(20)C(12)N(2)O(2) 0.0 Chemical derivative 739 0.0
TMT@H 224.152478 224.2994 H(20)C(12)N(2)O(2) 0.0 Isotopic label 739 0.0
TMT@S 224.152478 224.2994 H(20)C(12)N(2)O(2) 0.0 Isotopic label 739 0.0
@@ -1054,9 +1054,9 @@ NO_SMX_SIMD@C 267.031377 267.2612 H(9)C(10)N(3)O(4)S(1) 0.0 Chemical derivative
Malonyl@C 86.000394 86.0462 H(2)C(3)O(3) 0.0 Chemical derivative 747 0.0
Malonyl@S 86.000394 86.0462 H(2)C(3)O(3) 0.0 Chemical derivative 747 0.0
Malonyl@K 86.000394 86.0462 H(2)C(3)O(3) 0.0 Post-translational 747 0.0
-3sulfo@Any N-term 183.983029 184.1693 H(4)C(7)O(4)S(1) 0.0 Chemical derivative 748 0.0
+3sulfo@Any_N-term 183.983029 184.1693 H(4)C(7)O(4)S(1) 0.0 Chemical derivative 748 0.0
trifluoro@L 53.971735 53.9714 H(-3)F(3) 0.0 Non-standard residue 750 0.0
-TNBS@Any N-term 210.986535 211.0886 H(1)C(6)N(3)O(6) 0.0 Chemical derivative 751 0.0
+TNBS@Any_N-term 210.986535 211.0886 H(1)C(6)N(3)O(6) 0.0 Chemical derivative 751 0.0
TNBS@K 210.986535 211.0886 H(1)C(6)N(3)O(6) 0.0 Chemical derivative 751 0.0
Biotin-phenacyl@C 626.263502 626.727 H(38)C(29)N(8)O(6)S(1) 0.0 Chemical derivative 774 0.0
Biotin-phenacyl@H 626.263502 626.727 H(38)C(29)N(8)O(6)S(1) 0.0 Chemical derivative 774 0.0
@@ -1069,14 +1069,14 @@ maleimide@C 97.016378 97.0721 H(3)C(4)N(1)O(2) 0.0 Chemical derivative 773 0.0
IDEnT@C 214.990469 216.064 H(7)C(9)N(1)O(1)Cl(2) 0.0 Isotopic label 762 0.0
BEMAD_ST:2H(6)@T 142.039317 142.2727 H(2)2H(6)C(4)O(1)S(2) 0.0 Isotopic label 763 0.0
BEMAD_ST:2H(6)@S 142.039317 142.2727 H(2)2H(6)C(4)O(1)S(2) 0.0 Isotopic label 763 0.0
-Met-loss@M^Protein N-term -131.040485 -131.1961 H(-9)C(-5)N(-1)O(-1)S(-1) 0.0 Co-translational 765 0.0
-Met-loss+Acetyl@M^Protein N-term -89.02992 -89.1594 H(-7)C(-3)N(-1)S(-1) 0.0 Co-translational 766 0.0
+Met-loss@M^Protein_N-term -131.040485 -131.1961 H(-9)C(-5)N(-1)O(-1)S(-1) 0.0 Co-translational 765 0.0
+Met-loss+Acetyl@M^Protein_N-term -89.02992 -89.1594 H(-7)C(-3)N(-1)S(-1) 0.0 Co-translational 766 0.0
Menadione-HQ@K 172.05243 172.18 H(8)C(11)O(2) 0.0 Chemical derivative 767 0.0
Menadione-HQ@C 172.05243 172.18 H(8)C(11)O(2) 0.0 Chemical derivative 767 0.0
Carboxymethyl:13C(2)@C 60.012189 60.0214 H(2)13C(2)O(2) 0.0 Chemical derivative 775 0.0
NEM:2H(5)@C 130.079062 130.1561 H(2)2H(5)C(6)N(1)O(2) 0.0 Chemical derivative 776 0.0
-Gly-loss+Amide@G^Any C-term -58.005479 -58.0361 H(-2)C(-2)O(-2) 0.0 Post-translational 822 0.0
-TMPP-Ac@Any N-term 572.181134 572.5401 H(33)C(29)O(10)P(1) 0.0 Chemical derivative 827 0.0
+Gly-loss+Amide@G^Any_C-term -58.005479 -58.0361 H(-2)C(-2)O(-2) 0.0 Post-translational 822 0.0
+TMPP-Ac@Any_N-term 572.181134 572.5401 H(33)C(29)O(10)P(1) 0.0 Chemical derivative 827 0.0
TMPP-Ac@K 572.181134 572.5401 H(33)C(29)O(10)P(1) 0.0 Artefact 827 0.0
TMPP-Ac@Y 572.181134 572.5401 H(33)C(29)O(10)P(1) 0.0 Artefact 827 0.0
Label:13C(6)+GG@K 120.063056 120.0586 H(6)C(-2)13C(6)N(2)O(2) 0.0 Isotopic label 799 0.0
@@ -1105,7 +1105,7 @@ cGMP@C 343.031785 343.1895 H(10)C(10)N(5)O(7)P(1) 0.0 Post-translational 849 0.
cGMP+RMP-loss@C 150.041585 150.1182 H(4)C(5)N(5)O(1) 0.0 Post-translational 851 0.0
cGMP+RMP-loss@S 150.041585 150.1182 H(4)C(5)N(5)O(1) 0.0 Post-translational 851 0.0
mTRAQ@Y 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Isotopic label 888 0.0
-mTRAQ@Any N-term 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Isotopic label 888 0.0
+mTRAQ@Any_N-term 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Isotopic label 888 0.0
mTRAQ@K 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Isotopic label 888 0.0
mTRAQ@H 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Isotopic label 888 0.0
mTRAQ@S 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Isotopic label 888 0.0
@@ -1115,19 +1115,19 @@ Label:2H(4)+GG@K 118.068034 118.1273 H(2)2H(4)C(4)N(2)O(2) 0.0 Post-translation
spermine@Q 185.189198 185.3097 H(23)C(10)N(3) 0.0 Chemical derivative 1420 0.0
Label:13C(1)2H(3)@M 4.022185 4.0111 H(-3)2H(3)C(-1)13C(1) 0.0 Isotopic label 862 0.0
ZGB@K 758.380841 758.7261 H(53)C(37)N(6)O(6)F(2)S(1)B(1) 0.0 Other 861 0.0
-ZGB@Any N-term 758.380841 758.7261 H(53)C(37)N(6)O(6)F(2)S(1)B(1) 0.0 Other 861 0.0
+ZGB@Any_N-term 758.380841 758.7261 H(53)C(37)N(6)O(6)F(2)S(1)B(1) 0.0 Other 861 0.0
MG-H1@R 54.010565 54.0474 H(2)C(3)O(1) 0.0 Other 859 0.0
G-H1@R 39.994915 40.0208 C(2)O(1) 0.0 Other 860 0.0
Label:13C(6)15N(2)+GG@K 122.057126 122.0454 H(6)C(-2)13C(6)15N(2)O(2) 0.0 Isotopic label 864 0.0
-ICPL:13C(6)2H(4)@Any N-term 115.0667 115.0747 H(-1)2H(4)13C(6)N(1)O(1) 0.0 Isotopic label 866 0.0
+ICPL:13C(6)2H(4)@Any_N-term 115.0667 115.0747 H(-1)2H(4)13C(6)N(1)O(1) 0.0 Isotopic label 866 0.0
ICPL:13C(6)2H(4)@K 115.0667 115.0747 H(-1)2H(4)13C(6)N(1)O(1) 0.0 Isotopic label 866 0.0
-ICPL:13C(6)2H(4)@Protein N-term 115.0667 115.0747 H(-1)2H(4)13C(6)N(1)O(1) 0.0 Isotopic label 866 0.0
+ICPL:13C(6)2H(4)@Protein_N-term 115.0667 115.0747 H(-1)2H(4)13C(6)N(1)O(1) 0.0 Isotopic label 866 0.0
DyLight-maleimide@C 940.1999 941.0762 H(48)C(39)N(4)O(15)S(4) 0.0 Chemical derivative 890 0.0
mTRAQ:13C(3)15N(1)@S 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 889 0.0
mTRAQ:13C(3)15N(1)@T 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 889 0.0
mTRAQ:13C(3)15N(1)@H 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 889 0.0
mTRAQ:13C(3)15N(1)@Y 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 889 0.0
-mTRAQ:13C(3)15N(1)@Any N-term 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 889 0.0
+mTRAQ:13C(3)15N(1)@Any_N-term 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 889 0.0
mTRAQ:13C(3)15N(1)@K 144.102063 144.1544 H(12)C(4)13C(3)N(1)15N(1)O(1) 0.0 Isotopic label 889 0.0
Methyl-PEO12-Maleimide@C 710.383719 710.8073 H(58)C(32)N(2)O(15) 0.0 Chemical derivative 891 0.0
MDCC@C 383.148121 383.3978 H(21)C(20)N(3)O(5) 0.0 Chemical derivative 887 0.0
@@ -1149,7 +1149,7 @@ Lys->CamCys@K 31.935685 32.0219 H(-4)C(-1)O(1)S(1) 0.0 Pre-translational 903 0.
Phe->CamCys@F 12.962234 13.0204 H(-1)C(-4)N(1)O(1)S(1) 0.0 Pre-translational 904 0.0
Leu->MetOx@L 33.951335 34.0378 H(-2)C(-1)O(1)S(1) 0.0 Pre-translational 905 0.0
Lys->MetOx@K 18.940436 19.0232 H(-3)C(-1)N(-1)O(1)S(1) 0.0 Pre-translational 906 0.0
-Galactosyl@Any N-term 178.047738 178.14 H(10)C(6)O(6) 0.0 Other glycosylation 907 0.0
+Galactosyl@Any_N-term 178.047738 178.14 H(10)C(6)O(6) 0.0 Other glycosylation 907 0.0
Galactosyl@K 178.047738 178.14 H(10)C(6)O(6) 0.0 Other glycosylation 907 0.0
Xlink:SMCC[321]@C 321.205242 321.4146 H(27)C(17)N(3)O(3) 0.0 Chemical derivative 908 0.0
Bacillosamine@N 228.111007 228.245 H(16)C(10)N(2)O(4) 228.111007 H(16)C(10)N(2)O(4) N-linked glycosylation 910 0.5
@@ -1184,39 +1184,39 @@ DNPS@W 198.981352 199.164 H(3)C(6)N(2)O(4)S(1) 0.0 Chemical derivative 941 0.0
SulfoGMBS@C 458.162391 458.5306 H(26)C(22)N(4)O(5)S(1) 0.0 Other 942 0.0
DimethylamineGMBS@C 267.158292 267.3241 H(21)C(13)N(3)O(3) 0.0 Chemical derivative 943 0.0
Label:15N(2)2H(9)@K 11.050561 11.0423 H(-9)2H(9)N(-2)15N(2) 0.0 Isotopic label 944 0.0
-LG-anhydrolactam@Any N-term 314.188195 314.4186 H(26)C(20)O(3) 0.0 Post-translational 946 0.0
+LG-anhydrolactam@Any_N-term 314.188195 314.4186 H(26)C(20)O(3) 0.0 Post-translational 946 0.0
LG-anhydrolactam@K 314.188195 314.4186 H(26)C(20)O(3) 0.0 Post-translational 946 0.0
LG-pyrrole@C 316.203845 316.4345 H(28)C(20)O(3) 0.0 Post-translational 947 0.0
-LG-pyrrole@Any N-term 316.203845 316.4345 H(28)C(20)O(3) 0.0 Post-translational 947 0.0
+LG-pyrrole@Any_N-term 316.203845 316.4345 H(28)C(20)O(3) 0.0 Post-translational 947 0.0
LG-pyrrole@K 316.203845 316.4345 H(28)C(20)O(3) 0.0 Post-translational 947 0.0
-LG-anhyropyrrole@Any N-term 298.19328 298.4192 H(26)C(20)O(2) 0.0 Post-translational 948 0.0
+LG-anhyropyrrole@Any_N-term 298.19328 298.4192 H(26)C(20)O(2) 0.0 Post-translational 948 0.0
LG-anhyropyrrole@K 298.19328 298.4192 H(26)C(20)O(2) 0.0 Post-translational 948 0.0
3-deoxyglucosone@R 144.042259 144.1253 H(8)C(6)O(4) 0.0 Multiple 949 0.0
Cation:Li@D 6.008178 5.9331 H(-1)Li(1) 0.0 Artefact 950 0.0
Cation:Li@E 6.008178 5.9331 H(-1)Li(1) 0.0 Artefact 950 0.0
-Cation:Li@Any C-term 6.008178 5.9331 H(-1)Li(1) 0.0 Artefact 950 0.0
-Cation:Ca[II]@Any C-term 37.946941 38.0621 H(-2)Ca(1) 0.0 Artefact 951 0.0
+Cation:Li@Any_C-term 6.008178 5.9331 H(-1)Li(1) 0.0 Artefact 950 0.0
+Cation:Ca[II]@Any_C-term 37.946941 38.0621 H(-2)Ca(1) 0.0 Artefact 951 0.0
Cation:Ca[II]@E 37.946941 38.0621 H(-2)Ca(1) 0.0 Artefact 951 0.0
Cation:Ca[II]@D 37.946941 38.0621 H(-2)Ca(1) 0.0 Artefact 951 0.0
Cation:Fe[II]@D 53.919289 53.8291 H(-2)Fe(1) 0.0 Artefact 952 0.0
Cation:Fe[II]@E 53.919289 53.8291 H(-2)Fe(1) 0.0 Artefact 952 0.0
-Cation:Fe[II]@Any C-term 53.919289 53.8291 H(-2)Fe(1) 0.0 Artefact 952 0.0
+Cation:Fe[II]@Any_C-term 53.919289 53.8291 H(-2)Fe(1) 0.0 Artefact 952 0.0
Cation:Ni[II]@D 55.919696 56.6775 H(-2)Ni(1) 0.0 Artefact 953 0.0
Cation:Ni[II]@E 55.919696 56.6775 H(-2)Ni(1) 0.0 Artefact 953 0.0
-Cation:Ni[II]@Any C-term 55.919696 56.6775 H(-2)Ni(1) 0.0 Artefact 953 0.0
-Cation:Zn[II]@Any C-term 61.913495 63.3931 H(-2)Zn(1) 0.0 Artefact 954 0.0
+Cation:Ni[II]@Any_C-term 55.919696 56.6775 H(-2)Ni(1) 0.0 Artefact 953 0.0
+Cation:Zn[II]@Any_C-term 61.913495 63.3931 H(-2)Zn(1) 0.0 Artefact 954 0.0
Cation:Zn[II]@E 61.913495 63.3931 H(-2)Zn(1) 0.0 Artefact 954 0.0
Cation:Zn[II]@D 61.913495 63.3931 H(-2)Zn(1) 0.0 Artefact 954 0.0
Cation:Zn[II]@H 61.913495 63.3931 H(-2)Zn(1) 0.0 Artefact 954 0.0
Cation:Ag@D 105.897267 106.8603 H(-1)Ag(1) 0.0 Artefact 955 0.0
Cation:Ag@E 105.897267 106.8603 H(-1)Ag(1) 0.0 Artefact 955 0.0
-Cation:Ag@Any C-term 105.897267 106.8603 H(-1)Ag(1) 0.0 Artefact 955 0.0
+Cation:Ag@Any_C-term 105.897267 106.8603 H(-1)Ag(1) 0.0 Artefact 955 0.0
Cation:Mg[II]@D 21.969392 22.2891 H(-2)Mg(1) 0.0 Artefact 956 0.0
Cation:Mg[II]@E 21.969392 22.2891 H(-2)Mg(1) 0.0 Artefact 956 0.0
-Cation:Mg[II]@Any C-term 21.969392 22.2891 H(-2)Mg(1) 0.0 Artefact 956 0.0
+Cation:Mg[II]@Any_C-term 21.969392 22.2891 H(-2)Mg(1) 0.0 Artefact 956 0.0
2-succinyl@C 116.010959 116.0722 H(4)C(4)O(4) 0.0 Chemical derivative 957 0.0
Propargylamine@D 37.031634 37.0632 H(3)C(3)N(1)O(-1) 0.0 Chemical derivative 958 0.0
-Propargylamine@Any C-term 37.031634 37.0632 H(3)C(3)N(1)O(-1) 0.0 Chemical derivative 958 0.0
+Propargylamine@Any_C-term 37.031634 37.0632 H(3)C(3)N(1)O(-1) 0.0 Chemical derivative 958 0.0
Propargylamine@E 37.031634 37.0632 H(3)C(3)N(1)O(-1) 0.0 Chemical derivative 958 0.0
Phosphopropargyl@T 116.997965 117.0431 H(4)C(3)N(1)O(2)P(1) 0.0 Multiple 959 0.0
Phosphopropargyl@Y 116.997965 117.0431 H(4)C(3)N(1)O(2)P(1) 0.0 Multiple 959 0.0
@@ -1224,11 +1224,11 @@ Phosphopropargyl@S 116.997965 117.0431 H(4)C(3)N(1)O(2)P(1) 0.0 Multiple 959 0.
SUMO2135@K 2135.920496 2137.2343 H(137)C(90)N(21)O(37)S(1) 0.0 Other 960 0.0
SUMO3549@K 3549.536568 3551.6672 H(224)C(150)N(38)O(60)S(1) 0.0 Other 961 0.0
serotonylation@Q 159.068414 159.1846 H(9)C(10)N(1)O(1) 0.0 Post-translational 1992 0.0
-BITC@Any N-term 149.02992 149.2129 H(7)C(8)N(1)S(1) 0.0 Chemical derivative 978 0.0
+BITC@Any_N-term 149.02992 149.2129 H(7)C(8)N(1)S(1) 0.0 Chemical derivative 978 0.0
BITC@K 149.02992 149.2129 H(7)C(8)N(1)S(1) 0.0 Chemical derivative 978 0.0
BITC@C 149.02992 149.2129 H(7)C(8)N(1)S(1) 0.0 Chemical derivative 978 0.0
Carbofuran@S 58.029289 58.0593 H(4)C(2)N(1)O(1) 0.0 Chemical derivative 977 0.0
-PEITC@Any N-term 163.04557 163.2395 H(9)C(9)N(1)S(1) 0.0 Chemical derivative 979 0.0
+PEITC@Any_N-term 163.04557 163.2395 H(9)C(9)N(1)S(1) 0.0 Chemical derivative 979 0.0
PEITC@K 163.04557 163.2395 H(9)C(9)N(1)S(1) 0.0 Chemical derivative 979 0.0
PEITC@C 163.04557 163.2395 H(9)C(9)N(1)S(1) 0.0 Chemical derivative 979 0.0
thioacylPA@K 159.035399 159.2062 H(9)C(6)N(1)O(2)S(1) 0.0 Chemical derivative 967 0.0
@@ -1236,15 +1236,15 @@ maleimide3@K 969.366232 969.8975 H(59)C(37)N(7)O(23) 0.0 Post-translational 971
maleimide3@C 969.366232 969.8975 H(59)C(37)N(7)O(23) 0.0 Post-translational 971 0.0
maleimide5@K 1293.471879 1294.1787 H(79)C(49)N(7)O(33) 0.0 Post-translational 972 0.0
maleimide5@C 1293.471879 1294.1787 H(79)C(49)N(7)O(33) 0.0 Post-translational 972 0.0
-Puromycin@Any C-term 453.212452 453.4943 H(27)C(22)N(7)O(4) 0.0 Co-translational 973 0.0
+Puromycin@Any_C-term 453.212452 453.4943 H(27)C(22)N(7)O(4) 0.0 Co-translational 973 0.0
glucosone@R 160.037173 160.1247 H(8)C(6)O(5) 0.0 Other 981 0.0
Label:13C(6)+Dimethyl@K 34.051429 34.0091 H(4)C(-4)13C(6) 0.0 Isotopic label 986 0.0
cysTMT@C 299.166748 299.4322 H(25)C(14)N(3)O(2)S(1) 0.0 Chemical derivative 984 0.0
cysTMT6plex@C 304.177202 304.3962 H(25)C(10)13C(4)N(2)15N(1)O(2)S(1) 0.0 Isotopic label 985 0.0
-ISD_z+2_ion@Any N-term -15.010899 -15.0146 H(-1)N(-1) 0.0 Artefact 991 0.0
+ISD_z+2_ion@Any_N-term -15.010899 -15.0146 H(-1)N(-1) 0.0 Artefact 991 0.0
Ammonium@E 17.026549 17.0305 H(3)N(1) 0.0 Artefact 989 0.0
Ammonium@D 17.026549 17.0305 H(3)N(1) 0.0 Artefact 989 0.0
-Ammonium@Any C-term 17.026549 17.0305 H(3)N(1) 0.0 Artefact 989 0.0
+Ammonium@Any_C-term 17.026549 17.0305 H(3)N(1) 0.0 Artefact 989 0.0
Biotin:Sigma-B1267@C 449.17329 449.5239 H(27)C(20)N(5)O(5)S(1) 0.0 Chemical derivative 993 0.0
Label:15N(1)@M 0.997035 0.9934 N(-1)15N(1) 0.0 Isotopic label 994 0.0
Label:15N(1)@E 0.997035 0.9934 N(-1)15N(1) 0.0 Isotopic label 994 0.0
@@ -1280,34 +1280,34 @@ Thiazolidine@Y 12.0 12.0107 C(1) 0.0 Chemical derivative 1009 0.0
Thiazolidine@H 12.0 12.0107 C(1) 0.0 Chemical derivative 1009 0.0
Thiazolidine@R 12.0 12.0107 C(1) 0.0 Chemical derivative 1009 0.0
Thiazolidine@K 12.0 12.0107 C(1) 0.0 Chemical derivative 1009 0.0
-Thiazolidine@Protein N-term 12.0 12.0107 C(1) 0.0 Chemical derivative 1009 0.0
+Thiazolidine@Protein_N-term 12.0 12.0107 C(1) 0.0 Chemical derivative 1009 0.0
Thiazolidine@C 12.0 12.0107 C(1) 0.0 Chemical derivative 1009 0.0
Thiazolidine@F 12.0 12.0107 C(1) 0.0 Chemical derivative 1009 0.0
DEDGFLYMVYASQETFG@K 1970.824411 1972.088 H(122)C(89)N(18)O(31)S(1) 18.010565 H(2)O(1) Post-translational 1010 0.5
Biotin:Invitrogen-M1602@C 523.210069 523.6024 H(33)C(23)N(5)O(7)S(1) 0.0 Chemical derivative 1012 0.0
Xlink:DSS[156]@K 156.078644 156.1791 H(12)C(8)O(3) 0.0 Chemical derivative 1020 0.0
-Xlink:DSS[156]@Protein N-term 156.078644 156.1791 H(12)C(8)O(3) 0.0 Chemical derivative 1020 0.0
+Xlink:DSS[156]@Protein_N-term 156.078644 156.1791 H(12)C(8)O(3) 0.0 Chemical derivative 1020 0.0
DMPO@H 111.068414 111.1418 H(9)C(6)N(1)O(1) 0.0 Post-translational 1017 0.0
DMPO@Y 111.068414 111.1418 H(9)C(6)N(1)O(1) 0.0 Post-translational 1017 0.0
DMPO@C 111.068414 111.1418 H(9)C(6)N(1)O(1) 0.0 Post-translational 1017 0.0
glycidamide@K 87.032028 87.0773 H(5)C(3)N(1)O(2) 0.0 Chemical derivative 1014 0.0
-glycidamide@Any N-term 87.032028 87.0773 H(5)C(3)N(1)O(2) 0.0 Chemical derivative 1014 0.0
-Ahx2+Hsl@Any C-term 309.205242 309.4039 H(27)C(16)N(3)O(3) 0.0 Non-standard residue 1015 0.0
+glycidamide@Any_N-term 87.032028 87.0773 H(5)C(3)N(1)O(2) 0.0 Chemical derivative 1014 0.0
+Ahx2+Hsl@Any_C-term 309.205242 309.4039 H(27)C(16)N(3)O(3) 0.0 Non-standard residue 1015 0.0
ICDID@C 138.06808 138.1638 H(10)C(8)O(2) 0.0 Isotopic label 1018 0.0
ICDID:2H(6)@C 144.10574 144.2008 H(4)2H(6)C(8)O(2) 0.0 Isotopic label 1019 0.0
-Xlink:EGS[244]@Protein N-term 244.058303 244.1981 H(12)C(10)O(7) 0.0 Chemical derivative 1021 0.0
+Xlink:EGS[244]@Protein_N-term 244.058303 244.1981 H(12)C(10)O(7) 0.0 Chemical derivative 1021 0.0
Xlink:EGS[244]@K 244.058303 244.1981 H(12)C(10)O(7) 0.0 Chemical derivative 1021 0.0
-Xlink:DST[132]@Protein N-term 132.005873 132.0716 H(4)C(4)O(5) 0.0 Chemical derivative 1022 0.0
+Xlink:DST[132]@Protein_N-term 132.005873 132.0716 H(4)C(4)O(5) 0.0 Chemical derivative 1022 0.0
Xlink:DST[132]@K 132.005873 132.0716 H(4)C(4)O(5) 0.0 Chemical derivative 1022 0.0
-Xlink:DTSSP[192]@Protein N-term 191.991486 192.2559 H(8)C(6)O(3)S(2) 0.0 Chemical derivative 1023 0.0
+Xlink:DTSSP[192]@Protein_N-term 191.991486 192.2559 H(8)C(6)O(3)S(2) 0.0 Chemical derivative 1023 0.0
Xlink:DTSSP[192]@K 191.991486 192.2559 H(8)C(6)O(3)S(2) 0.0 Chemical derivative 1023 0.0
Xlink:SMCC[237]@C 237.100108 237.2518 H(15)C(12)N(1)O(4) 0.0 Chemical derivative 1024 0.0
Xlink:SMCC[237]@K 237.100108 237.2518 H(15)C(12)N(1)O(4) 0.0 Chemical derivative 1024 0.0
-Xlink:SMCC[237]@Protein N-term 237.100108 237.2518 H(15)C(12)N(1)O(4) 0.0 Chemical derivative 1024 0.0
+Xlink:SMCC[237]@Protein_N-term 237.100108 237.2518 H(15)C(12)N(1)O(4) 0.0 Chemical derivative 1024 0.0
2-nitrobenzyl@Y 135.032028 135.1201 H(5)C(7)N(1)O(2) 0.0 Chemical derivative 1032 0.0
-Xlink:DMP[140]@Protein N-term 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Chemical derivative 1027 0.0
+Xlink:DMP[140]@Protein_N-term 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Chemical derivative 1027 0.0
Xlink:DMP[140]@K 140.094963 140.183 H(12)C(7)N(2)O(1) 0.0 Chemical derivative 1027 0.0
-Xlink:EGS[115]@Protein N-term 115.026943 115.0874 H(5)C(4)N(1)O(3) 0.0 Chemical derivative 1028 0.0
+Xlink:EGS[115]@Protein_N-term 115.026943 115.0874 H(5)C(4)N(1)O(3) 0.0 Chemical derivative 1028 0.0
Xlink:EGS[115]@K 115.026943 115.0874 H(5)C(4)N(1)O(3) 0.0 Chemical derivative 1028 0.0
Cys->SecNEM@C 172.992127 172.0203 H(7)C(6)N(1)O(2)S(-1)Se(1) 0.0 Non-standard residue 1033 0.0
Cys->SecNEM:2H(5)@C 178.023511 177.0511 H(2)2H(5)C(6)N(1)O(2)S(-1)Se(1) 0.0 Chemical derivative 1034 0.0
@@ -1571,17 +1571,17 @@ BMP-piperidinol@C 263.131014 263.3337 H(17)C(18)N(1)O(1) 0.0 Chemical derivativ
BMP-piperidinol@M 263.131014 263.3337 H(17)C(18)N(1)O(1) 0.0 Chemical derivative 1281 0.0
UgiJoullieProGlyProGly@D 308.148455 308.333 H(20)C(14)N(4)O(4) 0.0 Chemical derivative 1283 0.0
UgiJoullieProGlyProGly@E 308.148455 308.333 H(20)C(14)N(4)O(4) 0.0 Chemical derivative 1283 0.0
-Arg-loss@R^Any C-term -156.101111 -156.1857 H(-12)C(-6)N(-4)O(-1) 0.0 Other 1287 0.0
-Arg@Any N-term 156.101111 156.1857 H(12)C(6)N(4)O(1) 0.0 Other 1288 0.0
+Arg-loss@R^Any_C-term -156.101111 -156.1857 H(-12)C(-6)N(-4)O(-1) 0.0 Other 1287 0.0
+Arg@Any_N-term 156.101111 156.1857 H(12)C(6)N(4)O(1) 0.0 Other 1288 0.0
IMEHex(2)NeuAc(1)@K 688.199683 688.6527 H(40)C(25)N(2)O(18)S(1) 0.0 Other glycosylation 1286 0.0
Butyryl@K 70.041865 70.0898 H(6)C(4)O(1) 0.0 Post-translational 1289 0.0
Dicarbamidomethyl@K 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Artefact 1290 0.0
Dicarbamidomethyl@H 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Artefact 1290 0.0
Dicarbamidomethyl@C 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Artefact 1290 0.0
Dicarbamidomethyl@R 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Artefact 1290 0.0
-Dicarbamidomethyl@Any N-term 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Artefact 1290 0.0
+Dicarbamidomethyl@Any_N-term 114.042927 114.1026 H(6)C(4)N(2)O(2) 0.0 Artefact 1290 0.0
Dimethyl:2H(6)@K 34.068961 34.0901 H(-2)2H(6)C(2) 0.0 Isotopic label 1291 0.0
-Dimethyl:2H(6)@Any N-term 34.068961 34.0901 H(-2)2H(6)C(2) 0.0 Isotopic label 1291 0.0
+Dimethyl:2H(6)@Any_N-term 34.068961 34.0901 H(-2)2H(6)C(2) 0.0 Isotopic label 1291 0.0
Dimethyl:2H(6)@R 34.068961 34.0901 H(-2)2H(6)C(2) 0.0 Isotopic label 1291 0.0
GGQ@K 242.101505 242.2319 H(14)C(9)N(4)O(4) 0.0 Other 1292 0.0
QTGG@K 343.149184 343.3357 H(21)C(13)N(5)O(6) 0.0 Other 1293 0.0
@@ -1591,9 +1591,9 @@ Label:13C(3)@A 3.010064 2.978 C(-3)13C(3) 0.0 Isotopic label 1296 0.0
Label:13C(4)15N(1)@D 5.010454 4.964 C(-4)13C(4)N(-1)15N(1) 0.0 Isotopic label 1298 0.0
Label:2H(10)@L 10.062767 10.0616 H(-10)2H(10) 0.0 Isotopic label 1299 0.0
Label:2H(4)13C(1)@R 5.028462 5.0173 H(-4)2H(4)C(-1)13C(1) 0.0 Isotopic label 1300 0.0
-Lys@Any N-term 128.094963 128.1723 H(12)C(6)N(2)O(1) 0.0 Other 1301 0.0
+Lys@Any_N-term 128.094963 128.1723 H(12)C(6)N(2)O(1) 0.0 Other 1301 0.0
mTRAQ:13C(6)15N(2)@K 148.109162 148.1257 H(12)C(1)13C(6)15N(2)O(1) 0.0 Isotopic label 1302 0.0
-mTRAQ:13C(6)15N(2)@Any N-term 148.109162 148.1257 H(12)C(1)13C(6)15N(2)O(1) 0.0 Isotopic label 1302 0.0
+mTRAQ:13C(6)15N(2)@Any_N-term 148.109162 148.1257 H(12)C(1)13C(6)15N(2)O(1) 0.0 Isotopic label 1302 0.0
mTRAQ:13C(6)15N(2)@Y 148.109162 148.1257 H(12)C(1)13C(6)15N(2)O(1) 0.0 Isotopic label 1302 0.0
mTRAQ:13C(6)15N(2)@H 148.109162 148.1257 H(12)C(1)13C(6)15N(2)O(1) 0.0 Isotopic label 1302 0.0
mTRAQ:13C(6)15N(2)@S 148.109162 148.1257 H(12)C(1)13C(6)15N(2)O(1) 0.0 Isotopic label 1302 0.0
@@ -1606,11 +1606,11 @@ NeuGc@S 307.090331 307.254 H(17)C(11)N(1)O(9) 307.090331 H(17)C(11)N(1)O(9) O-li
NeuGc@N 307.090331 307.254 H(17)C(11)N(1)O(9) 307.090331 H(17)C(11)N(1)O(9) N-linked glycosylation 1304 0.5
Propyl@D 42.04695 42.0797 H(6)C(3) 0.0 Chemical derivative 1305 0.0
Propyl@K 42.04695 42.0797 H(6)C(3) 0.0 Isotopic label 1305 0.0
-Propyl@Any N-term 42.04695 42.0797 H(6)C(3) 0.0 Isotopic label 1305 0.0
+Propyl@Any_N-term 42.04695 42.0797 H(6)C(3) 0.0 Isotopic label 1305 0.0
Propyl@E 42.04695 42.0797 H(6)C(3) 0.0 Chemical derivative 1305 0.0
-Propyl@Any C-term 42.04695 42.0797 H(6)C(3) 0.0 Chemical derivative 1305 0.0
-Propyl@Protein C-term 42.04695 42.0797 H(6)C(3) 0.0 Chemical derivative 1305 0.0
-Propyl:2H(6)@Any N-term 48.084611 48.1167 2H(6)C(3) 0.0 Isotopic label 1306 0.0
+Propyl@Any_C-term 42.04695 42.0797 H(6)C(3) 0.0 Chemical derivative 1305 0.0
+Propyl@Protein_C-term 42.04695 42.0797 H(6)C(3) 0.0 Chemical derivative 1305 0.0
+Propyl:2H(6)@Any_N-term 48.084611 48.1167 2H(6)C(3) 0.0 Isotopic label 1306 0.0
Propyl:2H(6)@K 48.084611 48.1167 2H(6)C(3) 0.0 Isotopic label 1306 0.0
Propiophenone@C 132.057515 132.1592 H(8)C(9)O(1) 0.0 Chemical derivative 1310 0.0
Propiophenone@W 132.057515 132.1592 H(8)C(9)O(1) 0.0 Chemical derivative 1310 0.0
@@ -1623,36 +1623,36 @@ PS_Hapten@H 120.021129 120.1055 H(4)C(7)O(2) 0.0 Chemical derivative 1345 0.0
PS_Hapten@C 120.021129 120.1055 H(4)C(7)O(2) 0.0 Chemical derivative 1345 0.0
PS_Hapten@K 120.021129 120.1055 H(4)C(7)O(2) 0.0 Chemical derivative 1345 0.0
Cy3-maleimide@C 753.262796 753.9046 H(45)C(37)N(4)O(9)S(2) 0.0 Chemical derivative 1348 0.0
-Delta:H(6)C(3)O(1)@Protein N-term 58.041865 58.0791 H(6)C(3)O(1) 0.0 Chemical derivative 1312 0.0
+Delta:H(6)C(3)O(1)@Protein_N-term 58.041865 58.0791 H(6)C(3)O(1) 0.0 Chemical derivative 1312 0.0
Delta:H(6)C(3)O(1)@K 58.041865 58.0791 H(6)C(3)O(1) 0.0 Chemical derivative 1312 0.0
Delta:H(6)C(3)O(1)@H 58.041865 58.0791 H(6)C(3)O(1) 0.0 Chemical derivative 1312 0.0
Delta:H(6)C(3)O(1)@C 58.041865 58.0791 H(6)C(3)O(1) 0.0 Chemical derivative 1312 0.0
-Delta:H(8)C(6)O(1)@Protein N-term 96.057515 96.1271 H(8)C(6)O(1) 0.0 Chemical derivative 1313 0.0
+Delta:H(8)C(6)O(1)@Protein_N-term 96.057515 96.1271 H(8)C(6)O(1) 0.0 Chemical derivative 1313 0.0
Delta:H(8)C(6)O(1)@K 96.057515 96.1271 H(8)C(6)O(1) 0.0 Chemical derivative 1313 0.0
biotinAcrolein298@H 298.146347 298.4044 H(22)C(13)N(4)O(2)S(1) 0.0 Chemical derivative 1314 0.0
biotinAcrolein298@K 298.146347 298.4044 H(22)C(13)N(4)O(2)S(1) 0.0 Chemical derivative 1314 0.0
-biotinAcrolein298@Protein N-term 298.146347 298.4044 H(22)C(13)N(4)O(2)S(1) 0.0 Chemical derivative 1314 0.0
+biotinAcrolein298@Protein_N-term 298.146347 298.4044 H(22)C(13)N(4)O(2)S(1) 0.0 Chemical derivative 1314 0.0
biotinAcrolein298@C 298.146347 298.4044 H(22)C(13)N(4)O(2)S(1) 0.0 Chemical derivative 1314 0.0
MM-diphenylpentanone@C 265.146664 265.3496 H(19)C(18)N(1)O(1) 0.0 Chemical derivative 1315 0.0
EHD-diphenylpentanone@M 266.13068 266.3343 H(18)C(18)O(2) 0.0 Chemical derivative 1317 0.0
EHD-diphenylpentanone@C 266.13068 266.3343 H(18)C(18)O(2) 0.0 Chemical derivative 1317 0.0
benzylguanidine@K 132.068748 132.1625 H(8)C(8)N(2) 0.0 Chemical derivative 1349 0.0
-CarboxymethylDMAP@Any N-term 162.079313 162.1885 H(10)C(9)N(2)O(1) 0.0 Chemical derivative 1350 0.0
+CarboxymethylDMAP@Any_N-term 162.079313 162.1885 H(10)C(9)N(2)O(1) 0.0 Chemical derivative 1350 0.0
Biotin:Thermo-21901+2H2O@C 561.246849 561.6489 H(39)C(23)N(5)O(9)S(1) 0.0 Chemical derivative 1320 0.0
DiLeu4plex115@K 145.12 145.1966 H(15)C(7)13C(1)15N(1)18O(1) 0.0 Isotopic label 1321 0.0
-DiLeu4plex115@Any N-term 145.12 145.1966 H(15)C(7)13C(1)15N(1)18O(1) 0.0 Isotopic label 1321 0.0
+DiLeu4plex115@Any_N-term 145.12 145.1966 H(15)C(7)13C(1)15N(1)18O(1) 0.0 Isotopic label 1321 0.0
DiLeu4plex115@Y 145.12 145.1966 H(15)C(7)13C(1)15N(1)18O(1) 0.0 Isotopic label 1321 0.0
-DiLeu4plex@Any N-term 145.132163 145.2229 H(13)2H(2)C(8)N(1)18O(1) 0.0 Isotopic label 1322 0.0
+DiLeu4plex@Any_N-term 145.132163 145.2229 H(13)2H(2)C(8)N(1)18O(1) 0.0 Isotopic label 1322 0.0
DiLeu4plex@K 145.132163 145.2229 H(13)2H(2)C(8)N(1)18O(1) 0.0 Isotopic label 1322 0.0
DiLeu4plex@Y 145.132163 145.2229 H(13)2H(2)C(8)N(1)18O(1) 0.0 Isotopic label 1322 0.0
DiLeu4plex117@K 145.128307 145.2092 H(13)2H(2)C(7)13C(1)15N(1)O(1) 0.0 Isotopic label 1323 0.0
-DiLeu4plex117@Any N-term 145.128307 145.2092 H(13)2H(2)C(7)13C(1)15N(1)O(1) 0.0 Isotopic label 1323 0.0
+DiLeu4plex117@Any_N-term 145.128307 145.2092 H(13)2H(2)C(7)13C(1)15N(1)O(1) 0.0 Isotopic label 1323 0.0
DiLeu4plex117@Y 145.128307 145.2092 H(13)2H(2)C(7)13C(1)15N(1)O(1) 0.0 Isotopic label 1323 0.0
DiLeu4plex118@K 145.140471 145.2354 H(11)2H(4)C(8)N(1)O(1) 0.0 Isotopic label 1324 0.0
-DiLeu4plex118@Any N-term 145.140471 145.2354 H(11)2H(4)C(8)N(1)O(1) 0.0 Isotopic label 1324 0.0
+DiLeu4plex118@Any_N-term 145.140471 145.2354 H(11)2H(4)C(8)N(1)O(1) 0.0 Isotopic label 1324 0.0
DiLeu4plex118@Y 145.140471 145.2354 H(11)2H(4)C(8)N(1)O(1) 0.0 Isotopic label 1324 0.0
Xlink:BuUrBu[213]@K 213.111341 213.2337 H(15)C(9)N(3)O(3) 0.0 Chemical derivative 1887 0.0
-Xlink:BuUrBu[213]@Protein N-term 213.111341 213.2337 H(15)C(9)N(3)O(3) 0.0 Chemical derivative 1887 0.0
+Xlink:BuUrBu[213]@Protein_N-term 213.111341 213.2337 H(15)C(9)N(3)O(3) 0.0 Chemical derivative 1887 0.0
bisANS-sulfonates@S 437.201774 437.5543 H(25)C(32)N(2) 0.0 Chemical derivative 1330 0.0
bisANS-sulfonates@T 437.201774 437.5543 H(25)C(32)N(2) 0.0 Chemical derivative 1330 0.0
bisANS-sulfonates@K 437.201774 437.5543 H(25)C(32)N(2) 0.0 Chemical derivative 1330 0.0
@@ -1691,7 +1691,7 @@ iodoTMT6plex@E 329.226595 329.3825 H(28)C(12)13C(4)N(3)15N(1)O(3) 0.0 Chemical
iodoTMT6plex@D 329.226595 329.3825 H(28)C(12)13C(4)N(3)15N(1)O(3) 0.0 Chemical derivative 1342 0.0
iodoTMT6plex@C 329.226595 329.3825 H(28)C(12)13C(4)N(3)15N(1)O(3) 0.0 Chemical derivative 1342 0.0
Label:13C(2)15N(2)@K 4.00078 3.9721 C(-2)13C(2)N(-2)15N(2) 0.0 Isotopic label 1787 0.0
-Phosphogluconoylation@Any N-term 258.014069 258.1199 H(11)C(6)O(9)P(1) 0.0 Post-translational 1344 0.0
+Phosphogluconoylation@Any_N-term 258.014069 258.1199 H(11)C(6)O(9)P(1) 0.0 Post-translational 1344 0.0
Phosphogluconoylation@K 258.014069 258.1199 H(11)C(6)O(9)P(1) 0.0 Post-translational 1344 0.0
Methyl:2H(3)+Acetyl:2H(3)@K 62.063875 62.1002 H(-2)2H(6)C(3)O(1) 0.0 Isotopic label 1368 0.0
dHex(1)Hex(1)@T 308.110732 308.2818 H(20)C(12)O(9) 308.110732 H(20)C(12)O(9) O-linked glycosylation 1367 0.5
@@ -1703,7 +1703,7 @@ Label:2H(3)+Oxidation@M 19.013745 19.0179 H(-3)2H(3)O(1) 0.0 Isotopic label 137
Trimethyl:2H(9)@R 51.103441 51.1352 H(-3)2H(9)C(3) 0.0 Isotopic label 1371 0.0
Trimethyl:2H(9)@K 51.103441 51.1352 H(-3)2H(9)C(3) 0.0 Isotopic label 1371 0.0
Acetyl:13C(2)@K 44.017274 44.022 H(2)13C(2)O(1) 0.0 Isotopic label 1372 0.0
-Acetyl:13C(2)@Protein N-term 44.017274 44.022 H(2)13C(2)O(1) 0.0 Isotopic label 1372 0.0
+Acetyl:13C(2)@Protein_N-term 44.017274 44.022 H(2)13C(2)O(1) 0.0 Isotopic label 1372 0.0
dHex(1)Hex(2)@T 470.163556 470.4224 H(30)C(18)O(14) 470.163556 H(30)C(18)O(14) O-linked glycosylation 1375 0.5
dHex(1)Hex(2)@S 470.163556 470.4224 H(30)C(18)O(14) 470.163556 H(30)C(18)O(14) O-linked glycosylation 1375 0.5
dHex(1)Hex(3)@T 632.216379 632.563 H(40)C(24)O(19) 632.216379 H(40)C(24)O(19) O-linked glycosylation 1376 0.5
@@ -1725,31 +1725,31 @@ Hydroxamic_acid@D 15.010899 15.0146 H(1)N(1) 0.0 Artefact 1385 0.0
Oxidation+NEM@C 141.042593 141.1247 H(7)C(6)N(1)O(3) 0.0 Chemical derivative 1390 0.0
NHS-fluorescein@K 471.131802 471.4581 H(21)C(27)N(1)O(7) 0.0 Chemical derivative 1391 0.0
DiART6plex@Y 217.162932 217.2527 H(20)C(7)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 1392 0.0
-DiART6plex@Protein N-term 217.162932 217.2527 H(20)C(7)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 1392 0.0
-DiART6plex@Any N-term 217.162932 217.2527 H(20)C(7)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 1392 0.0
+DiART6plex@Protein_N-term 217.162932 217.2527 H(20)C(7)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 1392 0.0
+DiART6plex@Any_N-term 217.162932 217.2527 H(20)C(7)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 1392 0.0
DiART6plex@K 217.162932 217.2527 H(20)C(7)13C(4)N(1)15N(1)O(2) 0.0 Isotopic label 1392 0.0
DiART6plex115@K 217.156612 217.2535 H(20)C(8)13C(3)15N(2)O(2) 0.0 Isotopic label 1393 0.0
-DiART6plex115@Any N-term 217.156612 217.2535 H(20)C(8)13C(3)15N(2)O(2) 0.0 Isotopic label 1393 0.0
-DiART6plex115@Protein N-term 217.156612 217.2535 H(20)C(8)13C(3)15N(2)O(2) 0.0 Isotopic label 1393 0.0
+DiART6plex115@Any_N-term 217.156612 217.2535 H(20)C(8)13C(3)15N(2)O(2) 0.0 Isotopic label 1393 0.0
+DiART6plex115@Protein_N-term 217.156612 217.2535 H(20)C(8)13C(3)15N(2)O(2) 0.0 Isotopic label 1393 0.0
DiART6plex115@Y 217.156612 217.2535 H(20)C(8)13C(3)15N(2)O(2) 0.0 Isotopic label 1393 0.0
DiART6plex116/119@Y 217.168776 217.2797 H(18)2H(2)C(9)13C(2)N(1)15N(1)O(2) 0.0 Isotopic label 1394 0.0
-DiART6plex116/119@Protein N-term 217.168776 217.2797 H(18)2H(2)C(9)13C(2)N(1)15N(1)O(2) 0.0 Isotopic label 1394 0.0
+DiART6plex116/119@Protein_N-term 217.168776 217.2797 H(18)2H(2)C(9)13C(2)N(1)15N(1)O(2) 0.0 Isotopic label 1394 0.0
DiART6plex116/119@K 217.168776 217.2797 H(18)2H(2)C(9)13C(2)N(1)15N(1)O(2) 0.0 Isotopic label 1394 0.0
-DiART6plex116/119@Any N-term 217.168776 217.2797 H(18)2H(2)C(9)13C(2)N(1)15N(1)O(2) 0.0 Isotopic label 1394 0.0
+DiART6plex116/119@Any_N-term 217.168776 217.2797 H(18)2H(2)C(9)13C(2)N(1)15N(1)O(2) 0.0 Isotopic label 1394 0.0
DiART6plex117@K 217.162456 217.2805 H(18)2H(2)C(10)13C(1)15N(2)O(2) 0.0 Isotopic label 1395 0.0
-DiART6plex117@Any N-term 217.162456 217.2805 H(18)2H(2)C(10)13C(1)15N(2)O(2) 0.0 Isotopic label 1395 0.0
-DiART6plex117@Protein N-term 217.162456 217.2805 H(18)2H(2)C(10)13C(1)15N(2)O(2) 0.0 Isotopic label 1395 0.0
+DiART6plex117@Any_N-term 217.162456 217.2805 H(18)2H(2)C(10)13C(1)15N(2)O(2) 0.0 Isotopic label 1395 0.0
+DiART6plex117@Protein_N-term 217.162456 217.2805 H(18)2H(2)C(10)13C(1)15N(2)O(2) 0.0 Isotopic label 1395 0.0
DiART6plex117@Y 217.162456 217.2805 H(18)2H(2)C(10)13C(1)15N(2)O(2) 0.0 Isotopic label 1395 0.0
DiART6plex118@K 217.175096 217.279 H(18)2H(2)C(8)13C(3)N(2)O(2) 0.0 Isotopic label 1396 0.0
-DiART6plex118@Any N-term 217.175096 217.279 H(18)2H(2)C(8)13C(3)N(2)O(2) 0.0 Isotopic label 1396 0.0
-DiART6plex118@Protein N-term 217.175096 217.279 H(18)2H(2)C(8)13C(3)N(2)O(2) 0.0 Isotopic label 1396 0.0
+DiART6plex118@Any_N-term 217.175096 217.279 H(18)2H(2)C(8)13C(3)N(2)O(2) 0.0 Isotopic label 1396 0.0
+DiART6plex118@Protein_N-term 217.175096 217.279 H(18)2H(2)C(8)13C(3)N(2)O(2) 0.0 Isotopic label 1396 0.0
DiART6plex118@Y 217.175096 217.279 H(18)2H(2)C(8)13C(3)N(2)O(2) 0.0 Isotopic label 1396 0.0
Iodoacetanilide@K 133.052764 133.1473 H(7)C(8)N(1)O(1) 0.0 Artefact 1397 0.0
Iodoacetanilide@C 133.052764 133.1473 H(7)C(8)N(1)O(1) 0.0 Chemical derivative 1397 0.0
-Iodoacetanilide@Any N-term 133.052764 133.1473 H(7)C(8)N(1)O(1) 0.0 Artefact 1397 0.0
+Iodoacetanilide@Any_N-term 133.052764 133.1473 H(7)C(8)N(1)O(1) 0.0 Artefact 1397 0.0
Iodoacetanilide:13C(6)@K 139.072893 139.1032 H(7)C(2)13C(6)N(1)O(1) 0.0 Artefact 1398 0.0
Iodoacetanilide:13C(6)@C 139.072893 139.1032 H(7)C(2)13C(6)N(1)O(1) 0.0 Chemical derivative 1398 0.0
-Iodoacetanilide:13C(6)@Any N-term 139.072893 139.1032 H(7)C(2)13C(6)N(1)O(1) 0.0 Artefact 1398 0.0
+Iodoacetanilide:13C(6)@Any_N-term 139.072893 139.1032 H(7)C(2)13C(6)N(1)O(1) 0.0 Artefact 1398 0.0
Dap-DSP@K 364.076278 364.4377 H(20)C(13)N(2)O(6)S(2) 0.0 Chemical derivative 1399 0.0
Dap-DSP@E 364.076278 364.4377 H(20)C(13)N(2)O(6)S(2) 0.0 Non-standard residue 1399 0.0
Dap-DSP@A 364.076278 364.4377 H(20)C(13)N(2)O(6)S(2) 0.0 Non-standard residue 1399 0.0
@@ -1769,11 +1769,11 @@ PhosphoHex(2)@T 404.071978 404.2611 H(21)C(12)O(13)P(1) 404.071978 H(21)C(12)O(1
PhosphoHex(2)@S 404.071978 404.2611 H(21)C(12)O(13)P(1) 404.071978 H(21)C(12)O(13)P(1) O-linked glycosylation 1413 0.5
Trimethyl:13C(3)2H(9)@K 54.113505 54.1132 H(-3)2H(9)13C(3) 0.0 Isotopic label 1414 0.0
Trimethyl:13C(3)2H(9)@R 54.113505 54.1132 H(-3)2H(9)13C(3) 0.0 Isotopic label 1414 0.0
-15N-oxobutanoic@S^Protein N-term -18.023584 -18.0239 H(-3)15N(-1) 0.0 Post-translational 1419 0.0
-15N-oxobutanoic@C^Any N-term -18.023584 -18.0239 H(-3)15N(-1) 0.0 Artefact 1419 0.0
-15N-oxobutanoic@T^Protein N-term -18.023584 -18.0239 H(-3)15N(-1) 0.0 Post-translational 1419 0.0
+15N-oxobutanoic@S^Protein_N-term -18.023584 -18.0239 H(-3)15N(-1) 0.0 Post-translational 1419 0.0
+15N-oxobutanoic@C^Any_N-term -18.023584 -18.0239 H(-3)15N(-1) 0.0 Artefact 1419 0.0
+15N-oxobutanoic@T^Protein_N-term -18.023584 -18.0239 H(-3)15N(-1) 0.0 Post-translational 1419 0.0
spermidine@Q 128.131349 128.2153 H(16)C(7)N(2) 0.0 Chemical derivative 1421 0.0
-Biotin:Thermo-21330@Any N-term 473.219571 473.5835 H(35)C(21)N(3)O(7)S(1) 0.0 Chemical derivative 1423 0.0
+Biotin:Thermo-21330@Any_N-term 473.219571 473.5835 H(35)C(21)N(3)O(7)S(1) 0.0 Chemical derivative 1423 0.0
Biotin:Thermo-21330@K 473.219571 473.5835 H(35)C(21)N(3)O(7)S(1) 0.0 Chemical derivative 1423 0.0
Hex(1)Pent(2)@T 426.137341 426.3698 H(26)C(16)O(13) 426.137341 H(26)C(16)O(13) O-linked glycosylation 1428 0.5
Hex(1)Pent(2)@S 426.137341 426.3698 H(26)C(16)O(13) 426.137341 H(26)C(16)O(13) O-linked glycosylation 1428 0.5
@@ -1803,7 +1803,7 @@ Hex(1)HexNAc(1)dHex(1)Me(1)@T 525.205755 525.5009 H(35)C(21)N(1)O(14) 525.205755
Hex(1)HexNAc(1)dHex(1)Me(1)@S 525.205755 525.5009 H(35)C(21)N(1)O(14) 525.205755 H(35)C(21)N(1)O(14) O-linked glycosylation 1436 0.5
Hex(1)HexNAc(1)dHex(1)Me(2)@T 539.221405 539.5275 H(37)C(22)N(1)O(14) 539.221405 H(37)C(22)N(1)O(14) O-linked glycosylation 1437 0.5
Hex(1)HexNAc(1)dHex(1)Me(2)@S 539.221405 539.5275 H(37)C(22)N(1)O(14) 539.221405 H(37)C(22)N(1)O(14) O-linked glycosylation 1437 0.5
-Xlink:DSS[155]@Protein N-term 155.094629 155.1943 H(13)C(8)N(1)O(2) 0.0 Chemical derivative 1789 0.0
+Xlink:DSS[155]@Protein_N-term 155.094629 155.1943 H(13)C(8)N(1)O(2) 0.0 Chemical derivative 1789 0.0
Xlink:DSS[155]@K 155.094629 155.1943 H(13)C(8)N(1)O(2) 0.0 Chemical derivative 1789 0.0
Hex(2)HexNAc(1)@N 527.18502 527.4737 H(33)C(20)N(1)O(15) 527.18502 H(33)C(20)N(1)O(15) N-linked glycosylation 1438 0.5
Hex(2)HexNAc(1)@T 527.18502 527.4737 H(33)C(20)N(1)O(15) 527.18502 H(33)C(20)N(1)O(15) O-linked glycosylation 1438 0.5
@@ -2407,25 +2407,25 @@ Fluorescein-tyramine@Y 493.116152 493.4637 H(19)C(29)N(1)O(7) 0.0 Chemical deri
dHex(1)Hex(7)HexNAc(4)@N 2092.745164 2093.8955 H(132)C(80)N(4)O(59) 0.0 N-linked glycosylation 1840 0.0
betaFNA@C 454.210387 454.5155 H(30)C(25)N(2)O(6) 0.0 Chemical derivative 1839 0.0
betaFNA@K 454.210387 454.5155 H(30)C(25)N(2)O(6) 0.0 Chemical derivative 1839 0.0
-Brij58@Any N-term 224.250401 224.4253 H(32)C(16) 0.0 Other 1838 0.0
-Brij35@Any N-term 168.187801 168.319 H(24)C(12) 0.0 Other 1837 0.0
-Triton@Any N-term 188.156501 188.3086 H(20)C(14) 0.0 Other 1836 0.0
-Triton@Any C-term 188.156501 188.3086 H(20)C(14) 0.0 Other 1836 0.0
-Tween80@Any C-term 263.237491 263.4381 H(31)C(18)O(1) 0.0 Other 1835 0.0
-Tween20@Any N-term 165.164326 165.2951 H(21)C(12) 0.0 Other 1834 0.0
+Brij58@Any_N-term 224.250401 224.4253 H(32)C(16) 0.0 Other 1838 0.0
+Brij35@Any_N-term 168.187801 168.319 H(24)C(12) 0.0 Other 1837 0.0
+Triton@Any_N-term 188.156501 188.3086 H(20)C(14) 0.0 Other 1836 0.0
+Triton@Any_C-term 188.156501 188.3086 H(20)C(14) 0.0 Other 1836 0.0
+Tween80@Any_C-term 263.237491 263.4381 H(31)C(18)O(1) 0.0 Other 1835 0.0
+Tween20@Any_N-term 165.164326 165.2951 H(21)C(12) 0.0 Other 1834 0.0
Tris@N 104.071154 104.1277 H(10)C(4)N(1)O(2) 0.0 Artefact 1831 0.0
Biotin-tyramide@Y 361.146012 361.4585 H(23)C(18)N(3)O(3)S(1) 0.0 Chemical derivative 1830 0.0
LRGG+dimethyl@K 411.259403 411.4991 H(33)C(18)N(7)O(4) 0.0 Post-translational 1829 0.0
-RNPXL@R^Any N-term 324.035867 324.1813 H(13)C(9)N(2)O(9)P(1) 324.035867 H(13)C(9)N(2)O(9)P(1) Other 1825 0.5
-RNPXL@K^Any N-term 324.035867 324.1813 H(13)C(9)N(2)O(9)P(1) 324.035867 H(13)C(9)N(2)O(9)P(1) Other 1825 0.5
+RNPXL@R^Any_N-term 324.035867 324.1813 H(13)C(9)N(2)O(9)P(1) 324.035867 H(13)C(9)N(2)O(9)P(1) Other 1825 0.5
+RNPXL@K^Any_N-term 324.035867 324.1813 H(13)C(9)N(2)O(9)P(1) 324.035867 H(13)C(9)N(2)O(9)P(1) Other 1825 0.5
GEE@Q 86.036779 86.0892 H(6)C(4)O(2) 0.0 Chemical derivative 1824 0.0
-Glu->pyro-Glu+Methyl@E^Any N-term -3.994915 -3.9887 C(1)O(-1) 0.0 Artefact 1826 0.0
-Glu->pyro-Glu+Methyl:2H(2)13C(1)@E^Any N-term -0.979006 -0.9837 H(-2)2H(2)13C(1)O(-1) 0.0 Artefact 1827 0.0
+Glu->pyro-Glu+Methyl@E^Any_N-term -3.994915 -3.9887 C(1)O(-1) 0.0 Artefact 1826 0.0
+Glu->pyro-Glu+Methyl:2H(2)13C(1)@E^Any_N-term -0.979006 -0.9837 H(-2)2H(2)13C(1)O(-1) 0.0 Artefact 1827 0.0
LRGG+methyl@K 397.243753 397.4725 H(31)C(17)N(7)O(4) 0.0 Post-translational 1828 0.0
-NP40@Any N-term 220.182715 220.3505 H(24)C(15)O(1) 0.0 Other 1833 0.0
+NP40@Any_N-term 220.182715 220.3505 H(24)C(15)O(1) 0.0 Other 1833 0.0
IASD@C 452.034807 452.4582 H(16)C(18)N(2)O(8)S(2) 0.0 Chemical derivative 1832 0.0
Biotin:Thermo-21328@K 389.090154 389.5564 H(23)C(15)N(3)O(3)S(3) 0.0 Chemical derivative 1841 0.0
-Biotin:Thermo-21328@Any N-term 389.090154 389.5564 H(23)C(15)N(3)O(3)S(3) 0.0 Chemical derivative 1841 0.0
+Biotin:Thermo-21328@Any_N-term 389.090154 389.5564 H(23)C(15)N(3)O(3)S(3) 0.0 Chemical derivative 1841 0.0
PhosphoCytidine@Y 305.041287 305.1812 H(12)C(9)N(3)O(7)P(1) 0.0 Post-translational 1843 0.0
PhosphoCytidine@T 305.041287 305.1812 H(12)C(9)N(3)O(7)P(1) 0.0 Post-translational 1843 0.0
PhosphoCytidine@S 305.041287 305.1812 H(12)C(9)N(3)O(7)P(1) 0.0 Post-translational 1843 0.0
@@ -2436,65 +2436,65 @@ hydroxyisobutyryl@K 86.036779 86.0892 H(6)C(4)O(2) 0.0 Post-translational 1849
MeMePhosphorothioate@S 107.979873 108.0993 H(5)C(2)O(1)P(1)S(1) 0.0 Chemical derivative 1868 0.0
Cation:Fe[III]@D 52.911464 52.8212 H(-3)Fe(1) 0.0 Artefact 1870 0.0
Cation:Fe[III]@E 52.911464 52.8212 H(-3)Fe(1) 0.0 Artefact 1870 0.0
-Cation:Fe[III]@Any C-term 52.911464 52.8212 H(-3)Fe(1) 0.0 Artefact 1870 0.0
+Cation:Fe[III]@Any_C-term 52.911464 52.8212 H(-3)Fe(1) 0.0 Artefact 1870 0.0
DTT@C 151.996571 152.2351 H(8)C(4)O(2)S(2) 0.0 Artefact 1871 0.0
DYn-2@C 161.09664 161.2203 H(13)C(11)O(1) 0.0 Other 1872 0.0
Xlink:DSSO[176]@K 176.01433 176.1903 H(8)C(6)O(4)S(1) 0.0 Chemical derivative 1878 0.0
-Xlink:DSSO[176]@Protein N-term 176.01433 176.1903 H(8)C(6)O(4)S(1) 0.0 Chemical derivative 1878 0.0
+Xlink:DSSO[176]@Protein_N-term 176.01433 176.1903 H(8)C(6)O(4)S(1) 0.0 Chemical derivative 1878 0.0
MesitylOxide@K 98.073165 98.143 H(10)C(6)O(1) 0.0 Chemical derivative 1873 0.0
MesitylOxide@H 98.073165 98.143 H(10)C(6)O(1) 0.0 Chemical derivative 1873 0.0
-MesitylOxide@Protein N-term 98.073165 98.143 H(10)C(6)O(1) 0.0 Chemical derivative 1873 0.0
+MesitylOxide@Protein_N-term 98.073165 98.143 H(10)C(6)O(1) 0.0 Chemical derivative 1873 0.0
Xlink:DSS[259]@K 259.141973 259.2988 H(21)C(12)N(1)O(5) 0.0 Chemical derivative 1877 0.0
-Xlink:DSS[259]@Protein N-term 259.141973 259.2988 H(21)C(12)N(1)O(5) 0.0 Chemical derivative 1877 0.0
+Xlink:DSS[259]@Protein_N-term 259.141973 259.2988 H(21)C(12)N(1)O(5) 0.0 Chemical derivative 1877 0.0
methylol@Y 30.010565 30.026 H(2)C(1)O(1) 0.0 Chemical derivative 1875 0.0
methylol@W 30.010565 30.026 H(2)C(1)O(1) 0.0 Chemical derivative 1875 0.0
methylol@K 30.010565 30.026 H(2)C(1)O(1) 0.0 Chemical derivative 1875 0.0
Xlink:DSSO[175]@K 175.030314 175.2056 H(9)C(6)N(1)O(3)S(1) 0.0 Chemical derivative 1879 0.0
-Xlink:DSSO[175]@Protein N-term 175.030314 175.2056 H(9)C(6)N(1)O(3)S(1) 0.0 Chemical derivative 1879 0.0
+Xlink:DSSO[175]@Protein_N-term 175.030314 175.2056 H(9)C(6)N(1)O(3)S(1) 0.0 Chemical derivative 1879 0.0
Xlink:DSSO[279]@K 279.077658 279.3101 H(17)C(10)N(1)O(6)S(1) 0.0 Chemical derivative 1880 0.0
-Xlink:DSSO[279]@Protein N-term 279.077658 279.3101 H(17)C(10)N(1)O(6)S(1) 0.0 Chemical derivative 1880 0.0
-Xlink:DSSO[54]@Protein N-term 54.010565 54.0474 H(2)C(3)O(1) 0.0 Chemical derivative 1881 0.0
+Xlink:DSSO[279]@Protein_N-term 279.077658 279.3101 H(17)C(10)N(1)O(6)S(1) 0.0 Chemical derivative 1880 0.0
+Xlink:DSSO[54]@Protein_N-term 54.010565 54.0474 H(2)C(3)O(1) 0.0 Chemical derivative 1881 0.0
Xlink:DSSO[54]@K 54.010565 54.0474 H(2)C(3)O(1) 0.0 Chemical derivative 1881 0.0
Xlink:DSSO[86]@K 85.982635 86.1124 H(2)C(3)O(1)S(1) 0.0 Chemical derivative 1882 0.0
-Xlink:DSSO[86]@Protein N-term 85.982635 86.1124 H(2)C(3)O(1)S(1) 0.0 Chemical derivative 1882 0.0
+Xlink:DSSO[86]@Protein_N-term 85.982635 86.1124 H(2)C(3)O(1)S(1) 0.0 Chemical derivative 1882 0.0
Xlink:DSSO[104]@K 103.9932 104.1277 H(4)C(3)O(2)S(1) 0.0 Chemical derivative 1883 0.0
-Xlink:DSSO[104]@Protein N-term 103.9932 104.1277 H(4)C(3)O(2)S(1) 0.0 Chemical derivative 1883 0.0
+Xlink:DSSO[104]@Protein_N-term 103.9932 104.1277 H(4)C(3)O(2)S(1) 0.0 Chemical derivative 1883 0.0
Xlink:BuUrBu[111]@K 111.032028 111.0987 H(5)C(5)N(1)O(2) 0.0 Chemical derivative 1885 0.0
-Xlink:BuUrBu[111]@Protein N-term 111.032028 111.0987 H(5)C(5)N(1)O(2) 0.0 Chemical derivative 1885 0.0
+Xlink:BuUrBu[111]@Protein_N-term 111.032028 111.0987 H(5)C(5)N(1)O(2) 0.0 Chemical derivative 1885 0.0
Xlink:BuUrBu[85]@K 85.052764 85.1045 H(7)C(4)N(1)O(1) 0.0 Chemical derivative 1886 0.0
-Xlink:BuUrBu[85]@Protein N-term 85.052764 85.1045 H(7)C(4)N(1)O(1) 0.0 Chemical derivative 1886 0.0
-Xlink:BuUrBu[214]@Protein N-term 214.095357 214.2185 H(14)C(9)N(2)O(4) 0.0 Chemical derivative 1888 0.0
+Xlink:BuUrBu[85]@Protein_N-term 85.052764 85.1045 H(7)C(4)N(1)O(1) 0.0 Chemical derivative 1886 0.0
+Xlink:BuUrBu[214]@Protein_N-term 214.095357 214.2185 H(14)C(9)N(2)O(4) 0.0 Chemical derivative 1888 0.0
Xlink:BuUrBu[214]@K 214.095357 214.2185 H(14)C(9)N(2)O(4) 0.0 Chemical derivative 1888 0.0
-Xlink:BuUrBu[317]@Protein N-term 317.158686 317.3382 H(23)C(13)N(3)O(6) 0.0 Chemical derivative 1889 0.0
+Xlink:BuUrBu[317]@Protein_N-term 317.158686 317.3382 H(23)C(13)N(3)O(6) 0.0 Chemical derivative 1889 0.0
Xlink:BuUrBu[317]@K 317.158686 317.3382 H(23)C(13)N(3)O(6) 0.0 Chemical derivative 1889 0.0
Xlink:DSSO[158]@K 158.003765 158.175 H(6)C(6)O(3)S(1) 0.0 Chemical derivative 1896 0.0
-Xlink:DSSO[158]@Protein N-term 158.003765 158.175 H(6)C(6)O(3)S(1) 0.0 Chemical derivative 1896 0.0
+Xlink:DSSO[158]@Protein_N-term 158.003765 158.175 H(6)C(6)O(3)S(1) 0.0 Chemical derivative 1896 0.0
Xlink:DSS[138]@K 138.06808 138.1638 H(10)C(8)O(2) 0.0 Chemical derivative 1898 0.0
-Xlink:DSS[138]@Protein N-term 138.06808 138.1638 H(10)C(8)O(2) 0.0 Chemical derivative 1898 0.0
-Xlink:BuUrBu[196]@Protein N-term 196.084792 196.2032 H(12)C(9)N(2)O(3) 0.0 Chemical derivative 1899 0.0
+Xlink:DSS[138]@Protein_N-term 138.06808 138.1638 H(10)C(8)O(2) 0.0 Chemical derivative 1898 0.0
+Xlink:BuUrBu[196]@Protein_N-term 196.084792 196.2032 H(12)C(9)N(2)O(3) 0.0 Chemical derivative 1899 0.0
Xlink:BuUrBu[196]@K 196.084792 196.2032 H(12)C(9)N(2)O(3) 0.0 Chemical derivative 1899 0.0
Xlink:DTBP[172]@K 172.01289 172.2711 H(8)C(6)N(2)S(2) 0.0 Chemical derivative 1900 0.0
-Xlink:DTBP[172]@Protein N-term 172.01289 172.2711 H(8)C(6)N(2)S(2) 0.0 Chemical derivative 1900 0.0
+Xlink:DTBP[172]@Protein_N-term 172.01289 172.2711 H(8)C(6)N(2)S(2) 0.0 Chemical derivative 1900 0.0
Xlink:DST[114]@K 113.995309 114.0563 H(2)C(4)O(4) 0.0 Chemical derivative 1901 0.0
-Xlink:DST[114]@Protein N-term 113.995309 114.0563 H(2)C(4)O(4) 0.0 Chemical derivative 1901 0.0
+Xlink:DST[114]@Protein_N-term 113.995309 114.0563 H(2)C(4)O(4) 0.0 Chemical derivative 1901 0.0
Xlink:DTSSP[174]@K 173.980921 174.2406 H(6)C(6)O(2)S(2) 0.0 Chemical derivative 1902 0.0
-Xlink:DTSSP[174]@Protein N-term 173.980921 174.2406 H(6)C(6)O(2)S(2) 0.0 Chemical derivative 1902 0.0
+Xlink:DTSSP[174]@Protein_N-term 173.980921 174.2406 H(6)C(6)O(2)S(2) 0.0 Chemical derivative 1902 0.0
Xlink:SMCC[219]@C 219.089543 219.2365 H(13)C(12)N(1)O(3) 0.0 Chemical derivative 1903 0.0
Xlink:SMCC[219]@K 219.089543 219.2365 H(13)C(12)N(1)O(3) 0.0 Chemical derivative 1903 0.0
-Xlink:SMCC[219]@Protein N-term 219.089543 219.2365 H(13)C(12)N(1)O(3) 0.0 Chemical derivative 1903 0.0
+Xlink:SMCC[219]@Protein_N-term 219.089543 219.2365 H(13)C(12)N(1)O(3) 0.0 Chemical derivative 1903 0.0
Cation:Al[III]@D 23.958063 23.9577 H(-3)Al(1) 0.0 Artefact 1910 0.0
Cation:Al[III]@E 23.958063 23.9577 H(-3)Al(1) 0.0 Artefact 1910 0.0
-Cation:Al[III]@Any C-term 23.958063 23.9577 H(-3)Al(1) 0.0 Artefact 1910 0.0
-Xlink:BS2G[113]@Protein N-term 113.047679 113.1146 H(7)C(5)N(1)O(2) 0.0 Chemical derivative 1906 0.0
+Cation:Al[III]@Any_C-term 23.958063 23.9577 H(-3)Al(1) 0.0 Artefact 1910 0.0
+Xlink:BS2G[113]@Protein_N-term 113.047679 113.1146 H(7)C(5)N(1)O(2) 0.0 Chemical derivative 1906 0.0
Xlink:BS2G[113]@K 113.047679 113.1146 H(7)C(5)N(1)O(2) 0.0 Chemical derivative 1906 0.0
-Xlink:BS2G[114]@Protein N-term 114.031694 114.0993 H(6)C(5)O(3) 0.0 Chemical derivative 1907 0.0
+Xlink:BS2G[114]@Protein_N-term 114.031694 114.0993 H(6)C(5)O(3) 0.0 Chemical derivative 1907 0.0
Xlink:BS2G[114]@K 114.031694 114.0993 H(6)C(5)O(3) 0.0 Chemical derivative 1907 0.0
-Xlink:BS2G[217]@Protein N-term 217.095023 217.2191 H(15)C(9)N(1)O(5) 0.0 Chemical derivative 1908 0.0
+Xlink:BS2G[217]@Protein_N-term 217.095023 217.2191 H(15)C(9)N(1)O(5) 0.0 Chemical derivative 1908 0.0
Xlink:BS2G[217]@K 217.095023 217.2191 H(15)C(9)N(1)O(5) 0.0 Chemical derivative 1908 0.0
Xlink:DMP[139]@K 139.110947 139.1982 H(13)C(7)N(3) 0.0 Chemical derivative 1911 0.0
-Xlink:DMP[139]@Protein N-term 139.110947 139.1982 H(13)C(7)N(3) 0.0 Chemical derivative 1911 0.0
+Xlink:DMP[139]@Protein_N-term 139.110947 139.1982 H(13)C(7)N(3) 0.0 Chemical derivative 1911 0.0
Xlink:DMP[122]@K 122.084398 122.1677 H(10)C(7)N(2) 0.0 Chemical derivative 1912 0.0
-Xlink:DMP[122]@Protein N-term 122.084398 122.1677 H(10)C(7)N(2) 0.0 Chemical derivative 1912 0.0
+Xlink:DMP[122]@Protein_N-term 122.084398 122.1677 H(10)C(7)N(2) 0.0 Chemical derivative 1912 0.0
glyoxalAGE@R 21.98435 22.0055 H(-2)C(2) 0.0 Post-translational 1913 0.0
Met->AspSA@M -32.008456 -32.1081 H(-4)C(-1)O(1)S(-1) 0.0 Chemical derivative 1914 0.0
Decarboxylation@D -30.010565 -30.026 H(-2)C(-1)O(-1) 0.0 Chemical derivative 1915 0.0
@@ -2589,44 +2589,44 @@ Hex(5)HexNAc(4)NeuAc(1)Ac(1)@N 1955.687589 1956.7643 H(121)C(75)N(5)O(54) 1955.6
Hex(3)HexNAc(3)NeuAc(3)@S 1968.682838 1969.7631 H(120)C(75)N(6)O(54) 1968.682838 H(120)C(75)N(6)O(54) O-linked glycosylation 1968 0.5
Hex(3)HexNAc(3)NeuAc(3)@T 1968.682838 1969.7631 H(120)C(75)N(6)O(54) 1968.682838 H(120)C(75)N(6)O(54) O-linked glycosylation 1968 0.5
Hex(5)HexNAc(4)NeuAc(1)Ac(2)@N 1997.698154 1998.801 H(123)C(77)N(5)O(55) 1997.698154 H(123)C(77)N(5)O(55) N-linked glycosylation 1969 0.5
-Unknown:162@Any C-term 162.125595 162.2267 H(18)C(8)O(3) 0.0 Artefact 1970 0.0
+Unknown:162@Any_C-term 162.125595 162.2267 H(18)C(8)O(3) 0.0 Artefact 1970 0.0
Unknown:162@E 162.125595 162.2267 H(18)C(8)O(3) 0.0 Artefact 1970 0.0
Unknown:162@D 162.125595 162.2267 H(18)C(8)O(3) 0.0 Artefact 1970 0.0
-Unknown:162@Any N-term 162.125595 162.2267 H(18)C(8)O(3) 0.0 Artefact 1970 0.0
+Unknown:162@Any_N-term 162.125595 162.2267 H(18)C(8)O(3) 0.0 Artefact 1970 0.0
Unknown:177@D 176.744957 176.4788 H(-7)O(1)Fe(3) 0.0 Artefact 1971 0.0
Unknown:177@E 176.744957 176.4788 H(-7)O(1)Fe(3) 0.0 Artefact 1971 0.0
-Unknown:177@Any C-term 176.744957 176.4788 H(-7)O(1)Fe(3) 0.0 Artefact 1971 0.0
-Unknown:177@Any N-term 176.744957 176.4788 H(-7)O(1)Fe(3) 0.0 Artefact 1971 0.0
+Unknown:177@Any_C-term 176.744957 176.4788 H(-7)O(1)Fe(3) 0.0 Artefact 1971 0.0
+Unknown:177@Any_N-term 176.744957 176.4788 H(-7)O(1)Fe(3) 0.0 Artefact 1971 0.0
Unknown:210@D 210.16198 210.3126 H(22)C(13)O(2) 0.0 Artefact 1972 0.0
Unknown:210@E 210.16198 210.3126 H(22)C(13)O(2) 0.0 Artefact 1972 0.0
-Unknown:210@Any C-term 210.16198 210.3126 H(22)C(13)O(2) 0.0 Artefact 1972 0.0
-Unknown:210@Any N-term 210.16198 210.3126 H(22)C(13)O(2) 0.0 Artefact 1972 0.0
+Unknown:210@Any_C-term 210.16198 210.3126 H(22)C(13)O(2) 0.0 Artefact 1972 0.0
+Unknown:210@Any_N-term 210.16198 210.3126 H(22)C(13)O(2) 0.0 Artefact 1972 0.0
Unknown:216@D 216.099774 216.231 H(16)C(10)O(5) 0.0 Artefact 1973 0.0
Unknown:216@E 216.099774 216.231 H(16)C(10)O(5) 0.0 Artefact 1973 0.0
-Unknown:216@Any C-term 216.099774 216.231 H(16)C(10)O(5) 0.0 Artefact 1973 0.0
-Unknown:216@Any N-term 216.099774 216.231 H(16)C(10)O(5) 0.0 Artefact 1973 0.0
+Unknown:216@Any_C-term 216.099774 216.231 H(16)C(10)O(5) 0.0 Artefact 1973 0.0
+Unknown:216@Any_N-term 216.099774 216.231 H(16)C(10)O(5) 0.0 Artefact 1973 0.0
Unknown:234@D 234.073953 234.2033 H(14)C(9)O(7) 0.0 Artefact 1974 0.0
Unknown:234@E 234.073953 234.2033 H(14)C(9)O(7) 0.0 Artefact 1974 0.0
-Unknown:234@Any C-term 234.073953 234.2033 H(14)C(9)O(7) 0.0 Artefact 1974 0.0
-Unknown:234@Any N-term 234.073953 234.2033 H(14)C(9)O(7) 0.0 Artefact 1974 0.0
+Unknown:234@Any_C-term 234.073953 234.2033 H(14)C(9)O(7) 0.0 Artefact 1974 0.0
+Unknown:234@Any_N-term 234.073953 234.2033 H(14)C(9)O(7) 0.0 Artefact 1974 0.0
Unknown:248@D 248.19876 248.359 H(28)C(13)O(4) 0.0 Artefact 1975 0.0
Unknown:248@E 248.19876 248.359 H(28)C(13)O(4) 0.0 Artefact 1975 0.0
-Unknown:248@Any C-term 248.19876 248.359 H(28)C(13)O(4) 0.0 Artefact 1975 0.0
-Unknown:248@Any N-term 248.19876 248.359 H(28)C(13)O(4) 0.0 Artefact 1975 0.0
+Unknown:248@Any_C-term 248.19876 248.359 H(28)C(13)O(4) 0.0 Artefact 1975 0.0
+Unknown:248@Any_N-term 248.19876 248.359 H(28)C(13)O(4) 0.0 Artefact 1975 0.0
Unknown:250@D 249.981018 250.2075 H(4)C(10)N(1)O(5)S(1) 0.0 Artefact 1976 0.0
Unknown:250@E 249.981018 250.2075 H(4)C(10)N(1)O(5)S(1) 0.0 Artefact 1976 0.0
-Unknown:250@Any C-term 249.981018 250.2075 H(4)C(10)N(1)O(5)S(1) 0.0 Artefact 1976 0.0
-Unknown:250@Any N-term 249.981018 250.2075 H(4)C(10)N(1)O(5)S(1) 0.0 Artefact 1976 0.0
+Unknown:250@Any_C-term 249.981018 250.2075 H(4)C(10)N(1)O(5)S(1) 0.0 Artefact 1976 0.0
+Unknown:250@Any_N-term 249.981018 250.2075 H(4)C(10)N(1)O(5)S(1) 0.0 Artefact 1976 0.0
Unknown:302@D 301.986514 302.2656 H(8)C(4)N(5)O(7)S(2) 0.0 Artefact 1977 0.0
Unknown:302@E 301.986514 302.2656 H(8)C(4)N(5)O(7)S(2) 0.0 Artefact 1977 0.0
-Unknown:302@Any C-term 301.986514 302.2656 H(8)C(4)N(5)O(7)S(2) 0.0 Artefact 1977 0.0
-Unknown:302@Any N-term 301.986514 302.2656 H(8)C(4)N(5)O(7)S(2) 0.0 Artefact 1977 0.0
+Unknown:302@Any_C-term 301.986514 302.2656 H(8)C(4)N(5)O(7)S(2) 0.0 Artefact 1977 0.0
+Unknown:302@Any_N-term 301.986514 302.2656 H(8)C(4)N(5)O(7)S(2) 0.0 Artefact 1977 0.0
Unknown:306@D 306.095082 306.2659 H(18)C(12)O(9) 0.0 Artefact 1978 0.0
Unknown:306@E 306.095082 306.2659 H(18)C(12)O(9) 0.0 Artefact 1978 0.0
-Unknown:306@Any C-term 306.095082 306.2659 H(18)C(12)O(9) 0.0 Artefact 1978 0.0
-Unknown:306@Any N-term 306.095082 306.2659 H(18)C(12)O(9) 0.0 Artefact 1978 0.0
-Unknown:420@Any N-term 420.051719 420.5888 H(24)C(12)N(2)O(6)S(4) 420.051719 H(24)C(12)N(2)O(6)S(4) Artefact 1979 0.5
-Unknown:420@Any C-term 420.051719 420.5888 H(24)C(12)N(2)O(6)S(4) 420.051719 H(24)C(12)N(2)O(6)S(4) Artefact 1979 0.5
+Unknown:306@Any_C-term 306.095082 306.2659 H(18)C(12)O(9) 0.0 Artefact 1978 0.0
+Unknown:306@Any_N-term 306.095082 306.2659 H(18)C(12)O(9) 0.0 Artefact 1978 0.0
+Unknown:420@Any_N-term 420.051719 420.5888 H(24)C(12)N(2)O(6)S(4) 420.051719 H(24)C(12)N(2)O(6)S(4) Artefact 1979 0.5
+Unknown:420@Any_C-term 420.051719 420.5888 H(24)C(12)N(2)O(6)S(4) 420.051719 H(24)C(12)N(2)O(6)S(4) Artefact 1979 0.5
Diethylphosphothione@Y 152.006087 152.1518 H(9)C(4)O(2)P(1)S(1) 0.0 Chemical derivative 1986 0.0
Diethylphosphothione@T 152.006087 152.1518 H(9)C(4)O(2)P(1)S(1) 0.0 Chemical derivative 1986 0.0
Diethylphosphothione@S 152.006087 152.1518 H(9)C(4)O(2)P(1)S(1) 0.0 Chemical derivative 1986 0.0
@@ -2649,9 +2649,9 @@ monomethylphosphothione@T 109.959137 110.0721 H(3)C(1)O(2)P(1)S(1) 0.0 Chemical
monomethylphosphothione@Y 109.959137 110.0721 H(3)C(1)O(2)P(1)S(1) 0.0 Chemical derivative 1989 0.0
TMPP-Ac:13C(9)@Y 581.211328 581.474 H(33)C(20)13C(9)O(10)P(1) 0.0 Artefact 1993 0.0
TMPP-Ac:13C(9)@K 581.211328 581.474 H(33)C(20)13C(9)O(10)P(1) 0.0 Artefact 1993 0.0
-TMPP-Ac:13C(9)@Any N-term 581.211328 581.474 H(33)C(20)13C(9)O(10)P(1) 0.0 Chemical derivative 1993 0.0
+TMPP-Ac:13C(9)@Any_N-term 581.211328 581.474 H(33)C(20)13C(9)O(10)P(1) 0.0 Chemical derivative 1993 0.0
ZQG@K 320.100836 320.2973 H(16)C(15)N(2)O(6) 134.036779 H(6)C(8)O(2) Chemical derivative 2001 0.5
-Xlink:DST[56]@Protein N-term 55.989829 56.0202 C(2)O(2) 0.0 Chemical derivative 1999 0.0
+Xlink:DST[56]@Protein_N-term 55.989829 56.0202 C(2)O(2) 0.0 Chemical derivative 1999 0.0
Xlink:DST[56]@K 55.989829 56.0202 C(2)O(2) 0.0 Chemical derivative 1999 0.0
Haloxon@Y 203.950987 204.9763 H(7)C(4)O(3)P(1)Cl(2) 0.0 Chemical derivative 2006 0.0
Haloxon@T 203.950987 204.9763 H(7)C(4)O(3)P(1)Cl(2) 0.0 Chemical derivative 2006 0.0
@@ -2666,19 +2666,19 @@ Methamidophos-O@K 92.997965 93.0217 H(4)C(1)N(1)O(2)P(1) 0.0 Chemical derivativ
Methamidophos-O@H 92.997965 93.0217 H(4)C(1)N(1)O(2)P(1) 0.0 Chemical derivative 2008 0.0
Methamidophos-O@C 92.997965 93.0217 H(4)C(1)N(1)O(2)P(1) 0.0 Chemical derivative 2008 0.0
Nitrene@Y 12.995249 12.9988 H(-1)N(1) 0.0 Artefact 2014 0.0
-shTMT@Any N-term 235.176741 235.2201 H(20)C(3)13C(9)15N(2)O(2) 0.0 Chemical derivative 2015 0.0
-shTMT@Protein N-term 235.176741 235.2201 H(20)C(3)13C(9)15N(2)O(2) 0.0 Chemical derivative 2015 0.0
+shTMT@Any_N-term 235.176741 235.2201 H(20)C(3)13C(9)15N(2)O(2) 0.0 Chemical derivative 2015 0.0
+shTMT@Protein_N-term 235.176741 235.2201 H(20)C(3)13C(9)15N(2)O(2) 0.0 Chemical derivative 2015 0.0
shTMT@K 235.176741 235.2201 H(20)C(3)13C(9)15N(2)O(2) 0.0 Chemical derivative 2015 0.0
TMTpro@S 304.207146 304.3127 H(25)C(8)13C(7)N(1)15N(2)O(3) 0.0 Isotopic label 2016 0.0
TMTpro@H 304.207146 304.3127 H(25)C(8)13C(7)N(1)15N(2)O(3) 0.0 Isotopic label 2016 0.0
-TMTpro@Protein N-term 304.207146 304.3127 H(25)C(8)13C(7)N(1)15N(2)O(3) 0.0 Isotopic label 2016 0.0
-TMTpro@Any N-term 304.207146 304.3127 H(25)C(8)13C(7)N(1)15N(2)O(3) 0.0 Isotopic label 2016 0.0
+TMTpro@Protein_N-term 304.207146 304.3127 H(25)C(8)13C(7)N(1)15N(2)O(3) 0.0 Isotopic label 2016 0.0
+TMTpro@Any_N-term 304.207146 304.3127 H(25)C(8)13C(7)N(1)15N(2)O(3) 0.0 Isotopic label 2016 0.0
TMTpro@K 304.207146 304.3127 H(25)C(8)13C(7)N(1)15N(2)O(3) 0.0 Isotopic label 2016 0.0
TMTpro@T 304.207146 304.3127 H(25)C(8)13C(7)N(1)15N(2)O(3) 0.0 Isotopic label 2016 0.0
TMTpro_zero@S 295.189592 295.3773 H(25)C(15)N(3)O(3) 0.0 Chemical derivative 2017 0.0
TMTpro_zero@H 295.189592 295.3773 H(25)C(15)N(3)O(3) 0.0 Chemical derivative 2017 0.0
-TMTpro_zero@Protein N-term 295.189592 295.3773 H(25)C(15)N(3)O(3) 0.0 Chemical derivative 2017 0.0
-TMTpro_zero@Any N-term 295.189592 295.3773 H(25)C(15)N(3)O(3) 0.0 Chemical derivative 2017 0.0
+TMTpro_zero@Protein_N-term 295.189592 295.3773 H(25)C(15)N(3)O(3) 0.0 Chemical derivative 2017 0.0
+TMTpro_zero@Any_N-term 295.189592 295.3773 H(25)C(15)N(3)O(3) 0.0 Chemical derivative 2017 0.0
TMTpro_zero@K 295.189592 295.3773 H(25)C(15)N(3)O(3) 0.0 Chemical derivative 2017 0.0
TMTpro_zero@T 295.189592 295.3773 H(25)C(15)N(3)O(3) 0.0 Chemical derivative 2017 0.0
Andro-H2O@C 332.19876 332.4339 H(28)C(20)O(4) 0.0 Chemical derivative 2025 0.0
diff --git a/scripts/unimod_to_tsv.ipynb b/scripts/unimod_to_tsv.ipynb
index d07f983a..fe640ada 100644
--- a/scripts/unimod_to_tsv.ipynb
+++ b/scripts/unimod_to_tsv.ipynb
@@ -1,28 +1,45 @@
{
"cells": [
{
- "cell_type": "code",
- "execution_count": 1,
"metadata": {},
+ "cell_type": "code",
"outputs": [],
+ "execution_count": null,
"source": [
"import xml.etree.ElementTree as ET\n",
"import yaml\n",
- "import pandas as pd\n",
- "\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": [
"def save_yaml(filename, unimod):\n",
" with open(filename, \"w\") as file:\n",
" yaml.dump(unimod, file)\n",
"\n",
- "xml = ET.parse('unimod.xml')\n",
- "root = xml.getroot()\n",
- "\n",
"\n",
"def get_composition(node):\n",
" composition = \"\"\n",
" for elem in node.findall(f'{xmlns}element'):\n",
" composition += elem.attrib['symbol']+'('+elem.attrib['number']+')'\n",
- " return composition\n",
+ " return composition"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2024-06-25T11:39:09.284411Z",
+ "start_time": "2024-06-25T11:39:08.507205Z"
+ }
+ },
+ "source": [
+ "xml = ET.parse('unimod.xml')\n",
+ "root = xml.getroot()\n",
"\n",
"xmlns = '{http://www.unimod.org/xmlns/schema/unimod_2}'\n",
"unimod = {}\n",
@@ -72,15 +89,78 @@
" unimod[mod_site]['modloss_composition'] = ptm_nl_composition\n",
" unimod[mod_site]['classification'] = _class\n",
" unimod[mod_site]['unimod_id'] = int(id)"
- ]
+ ],
+ "outputs": [],
+ "execution_count": 1
},
{
"cell_type": "code",
- "execution_count": 2,
- "metadata": {},
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2024-06-25T11:56:30.184321Z",
+ "start_time": "2024-06-25T11:56:30.165972Z"
+ }
+ },
+ "source": [
+ "df = pd.DataFrame().from_dict(unimod, orient='index')\n",
+ "df.index = df.index.str.replace(\" \", \"_\", regex=False)\n",
+ "df['modloss_importance'] = 0.0\n",
+ "df.loc[df.modloss_composition != '','modloss_importance'] = 0.5\n",
+ "df.loc['Phospho@S','modloss_importance'] = 1e8\n",
+ "df.loc['Phospho@T','modloss_importance'] = 1e7\n",
+ "df.loc['GG@K','modloss_importance'] = 1e6\n",
+ "df.loc['GlyGly@K',:] = df.loc['GG@K']\n",
+ "df.loc['GlyGly@K','classification'] = 'Multiple'\n",
+ "df['mod_name'] = df.index.values\n",
+ "df = df[['mod_name']+[col for col in df.columns if col != 'mod_name']]\n",
+ "df['unimod_id'] = df.unimod_id.astype(int)\n",
+ "df"
+ ],
"outputs": [
{
"data": {
+ "text/plain": [
+ " mod_name unimod_mass unimod_avge_mass \\\n",
+ "Acetyl@T Acetyl@T 42.010565 42.0367 \n",
+ "Acetyl@Protein_N-term Acetyl@Protein_N-term 42.010565 42.0367 \n",
+ "Acetyl@S Acetyl@S 42.010565 42.0367 \n",
+ "Acetyl@C Acetyl@C 42.010565 42.0367 \n",
+ "Acetyl@Any_N-term Acetyl@Any_N-term 42.010565 42.0367 \n",
+ "... ... ... ... \n",
+ "TMTpro_zero@K TMTpro_zero@K 295.189592 295.3773 \n",
+ "TMTpro_zero@T TMTpro_zero@T 295.189592 295.3773 \n",
+ "Andro-H2O@C Andro-H2O@C 332.198760 332.4339 \n",
+ "His+O(2)@H His+O(2)@H 169.048741 169.1381 \n",
+ "GlyGly@K GlyGly@K 114.042927 114.1026 \n",
+ "\n",
+ " composition unimod_modloss modloss_composition \\\n",
+ "Acetyl@T H(2)C(2)O(1) 0.0 \n",
+ "Acetyl@Protein_N-term H(2)C(2)O(1) 0.0 \n",
+ "Acetyl@S H(2)C(2)O(1) 0.0 \n",
+ "Acetyl@C H(2)C(2)O(1) 0.0 \n",
+ "Acetyl@Any_N-term H(2)C(2)O(1) 0.0 \n",
+ "... ... ... ... \n",
+ "TMTpro_zero@K H(25)C(15)N(3)O(3) 0.0 \n",
+ "TMTpro_zero@T H(25)C(15)N(3)O(3) 0.0 \n",
+ "Andro-H2O@C H(28)C(20)O(4) 0.0 \n",
+ "His+O(2)@H H(7)C(6)N(3)O(3) 0.0 \n",
+ "GlyGly@K H(6)C(4)N(2)O(2) 0.0 \n",
+ "\n",
+ " classification unimod_id modloss_importance \n",
+ "Acetyl@T Post-translational 1 0.0 \n",
+ "Acetyl@Protein_N-term Post-translational 1 0.0 \n",
+ "Acetyl@S Post-translational 1 0.0 \n",
+ "Acetyl@C Post-translational 1 0.0 \n",
+ "Acetyl@Any_N-term Multiple 1 0.0 \n",
+ "... ... ... ... \n",
+ "TMTpro_zero@K Chemical derivative 2017 0.0 \n",
+ "TMTpro_zero@T Chemical derivative 2017 0.0 \n",
+ "Andro-H2O@C Chemical derivative 2025 0.0 \n",
+ "His+O(2)@H Post-translational 2027 0.0 \n",
+ "GlyGly@K Multiple 121 1000000.0 \n",
+ "\n",
+ "[2685 rows x 9 columns]"
+ ],
"text/html": [
"
\n",
"\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " abundance | \n",
- " mass | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 13C | \n",
- " [0.01, 0.99] | \n",
- " [12.0, 13.00335483507] | \n",
- "
\n",
- " \n",
- " 14N | \n",
- " [0.996337, 0.003663] | \n",
- " [14.00307400443, 15.00010889888] | \n",
- "
\n",
- " \n",
- " 15N | \n",
- " [0.01, 0.99] | \n",
- " [14.00307400443, 15.00010889888] | \n",
- "
\n",
- " \n",
- " 18O | \n",
- " [0.005, 0.005, 0.99] | \n",
- " [15.99491461957, 16.9991317565, 17.99915961286] | \n",
- "
\n",
- " \n",
- " 2H | \n",
- " [0.01, 0.99] | \n",
- " [1.00782503223, 2.01410177812] | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " Xe | \n",
- " [0.000952, 0.00089, 0.019102, 0.264006, 0.0407... | \n",
- " [123.905892, 125.9042983, 127.903531, 128.9047... | \n",
- "
\n",
- " \n",
- " Y | \n",
- " [1.0] | \n",
- " [88.9058403] | \n",
- "
\n",
- " \n",
- " Yb | \n",
- " [0.00123, 0.02982, 0.1409, 0.2168, 0.16103, 0.... | \n",
- " [167.9338896, 169.9347664, 170.9363302, 171.93... | \n",
- "
\n",
- " \n",
- " Zn | \n",
- " [0.4917, 0.2773, 0.0404, 0.1845, 0.0061] | \n",
- " [63.92914201, 65.92603381, 66.92712775, 67.924... | \n",
- "
\n",
- " \n",
- " Zr | \n",
- " [0.5145, 0.1122, 0.1715, 0.1738, 0.028] | \n",
- " [89.9046977, 90.9056396, 91.9050347, 93.906310... | \n",
- "
\n",
- " \n",
- "
\n",
- "
109 rows × 2 columns
\n",
- "
"
- ],
- "text/plain": [
- " abundance \\\n",
- "13C [0.01, 0.99] \n",
- "14N [0.996337, 0.003663] \n",
- "15N [0.01, 0.99] \n",
- "18O [0.005, 0.005, 0.99] \n",
- "2H [0.01, 0.99] \n",
- ".. ... \n",
- "Xe [0.000952, 0.00089, 0.019102, 0.264006, 0.0407... \n",
- "Y [1.0] \n",
- "Yb [0.00123, 0.02982, 0.1409, 0.2168, 0.16103, 0.... \n",
- "Zn [0.4917, 0.2773, 0.0404, 0.1845, 0.0061] \n",
- "Zr [0.5145, 0.1122, 0.1715, 0.1738, 0.028] \n",
- "\n",
- " mass \n",
- "13C [12.0, 13.00335483507] \n",
- "14N [14.00307400443, 15.00010889888] \n",
- "15N [14.00307400443, 15.00010889888] \n",
- "18O [15.99491461957, 16.9991317565, 17.99915961286] \n",
- "2H [1.00782503223, 2.01410177812] \n",
- ".. ... \n",
- "Xe [123.905892, 125.9042983, 127.903531, 128.9047... \n",
- "Y [88.9058403] \n",
- "Yb [167.9338896, 169.9347664, 170.9363302, 171.93... \n",
- "Zn [63.92914201, 65.92603381, 66.92712775, 67.924... \n",
- "Zr [89.9046977, 90.9056396, 91.9050347, 93.906310... \n",
- "\n",
- "[109 rows x 2 columns]"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import pandas as pd\n",
- "from alphabase.constants.atom import CHEM_INFO_DICT\n",
- "pd.DataFrame().from_dict(CHEM_INFO_DICT, orient='index')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "And their mono-isotopic mass are in `CHEM_MONO_MASS` (dict):"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 13C | \n",
- " 13.003355 | \n",
- "
\n",
- " \n",
- " 14N | \n",
- " 14.003074 | \n",
- "
\n",
- " \n",
- " 15N | \n",
- " 15.000109 | \n",
- "
\n",
- " \n",
- " 18O | \n",
- " 17.999160 | \n",
- "
\n",
- " \n",
- " 2H | \n",
- " 2.014102 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " Xe | \n",
- " 131.904155 | \n",
- "
\n",
- " \n",
- " Y | \n",
- " 88.905840 | \n",
- "
\n",
- " \n",
- " Yb | \n",
- " 173.938866 | \n",
- "
\n",
- " \n",
- " Zn | \n",
- " 63.929142 | \n",
- "
\n",
- " \n",
- " Zr | \n",
- " 89.904698 | \n",
- "
\n",
- " \n",
- "
\n",
- "
109 rows × 1 columns
\n",
- "
"
- ],
- "text/plain": [
- " 0\n",
- "13C 13.003355\n",
- "14N 14.003074\n",
- "15N 15.000109\n",
- "18O 17.999160\n",
- "2H 2.014102\n",
- ".. ...\n",
- "Xe 131.904155\n",
- "Y 88.905840\n",
- "Yb 173.938866\n",
- "Zn 63.929142\n",
- "Zr 89.904698\n",
- "\n",
- "[109 rows x 1 columns]"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.atom import CHEM_MONO_MASS\n",
- "pd.DataFrame().from_dict(CHEM_MONO_MASS, orient='index')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "These atom masses are used to calculate the masses of amino acids, modifications, and then subsequent masses of peptides and fragments."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Commonly used molecular masses"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(1.007276467, 1.0033, 17.02654910112, 18.01056468403)"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.atom import (\n",
- " MASS_PROTON, MASS_ISOTOPE, MASS_NH3, MASS_H2O\n",
- ")\n",
- "MASS_PROTON, MASS_ISOTOPE, MASS_NH3, MASS_H2O"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Amino Acids"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " aa | \n",
- " formula | \n",
- " mass | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 65 | \n",
- " A | \n",
- " C(3)H(5)N(1)O(1)S(0) | \n",
- " 7.103711e+01 | \n",
- "
\n",
- " \n",
- " 66 | \n",
- " B | \n",
- " C(1000000) | \n",
- " 1.200000e+07 | \n",
- "
\n",
- " \n",
- " 67 | \n",
- " C | \n",
- " C(3)H(5)N(1)O(1)S(1) | \n",
- " 1.030092e+02 | \n",
- "
\n",
- " \n",
- " 68 | \n",
- " D | \n",
- " C(4)H(5)N(1)O(3)S(0) | \n",
- " 1.150269e+02 | \n",
- "
\n",
- " \n",
- " 69 | \n",
- " E | \n",
- " C(5)H(7)N(1)O(3)S(0) | \n",
- " 1.290426e+02 | \n",
- "
\n",
- " \n",
- " 70 | \n",
- " F | \n",
- " C(9)H(9)N(1)O(1)S(0) | \n",
- " 1.470684e+02 | \n",
- "
\n",
- " \n",
- " 71 | \n",
- " G | \n",
- " C(2)H(3)N(1)O(1)S(0) | \n",
- " 5.702146e+01 | \n",
- "
\n",
- " \n",
- " 72 | \n",
- " H | \n",
- " C(6)H(7)N(3)O(1)S(0) | \n",
- " 1.370589e+02 | \n",
- "
\n",
- " \n",
- " 73 | \n",
- " I | \n",
- " C(6)H(11)N(1)O(1)S(0) | \n",
- " 1.130841e+02 | \n",
- "
\n",
- " \n",
- " 74 | \n",
- " J | \n",
- " C(6)H(11)N(1)O(1)S(0) | \n",
- " 1.130841e+02 | \n",
- "
\n",
- " \n",
- " 75 | \n",
- " K | \n",
- " C(6)H(12)N(2)O(1)S(0) | \n",
- " 1.280950e+02 | \n",
- "
\n",
- " \n",
- " 76 | \n",
- " L | \n",
- " C(6)H(11)N(1)O(1)S(0) | \n",
- " 1.130841e+02 | \n",
- "
\n",
- " \n",
- " 77 | \n",
- " M | \n",
- " C(5)H(9)N(1)O(1)S(1) | \n",
- " 1.310405e+02 | \n",
- "
\n",
- " \n",
- " 78 | \n",
- " N | \n",
- " C(4)H(6)N(2)O(2)S(0) | \n",
- " 1.140429e+02 | \n",
- "
\n",
- " \n",
- " 79 | \n",
- " O | \n",
- " C(12)H(19)N(3)O(2) | \n",
- " 2.371477e+02 | \n",
- "
\n",
- " \n",
- " 80 | \n",
- " P | \n",
- " C(5)H(7)N(1)O(1)S(0) | \n",
- " 9.705276e+01 | \n",
- "
\n",
- " \n",
- " 81 | \n",
- " Q | \n",
- " C(5)H(8)N(2)O(2)S(0) | \n",
- " 1.280586e+02 | \n",
- "
\n",
- " \n",
- " 82 | \n",
- " R | \n",
- " C(6)H(12)N(4)O(1)S(0) | \n",
- " 1.561011e+02 | \n",
- "
\n",
- " \n",
- " 83 | \n",
- " S | \n",
- " C(3)H(5)N(1)O(2)S(0) | \n",
- " 8.703203e+01 | \n",
- "
\n",
- " \n",
- " 84 | \n",
- " T | \n",
- " C(4)H(7)N(1)O(2)S(0) | \n",
- " 1.010477e+02 | \n",
- "
\n",
- " \n",
- " 85 | \n",
- " U | \n",
- " C(3)H(5)N(1)O(1)Se(1) | \n",
- " 1.509536e+02 | \n",
- "
\n",
- " \n",
- " 86 | \n",
- " V | \n",
- " C(5)H(9)N(1)O(1)S(0) | \n",
- " 9.906841e+01 | \n",
- "
\n",
- " \n",
- " 87 | \n",
- " W | \n",
- " C(11)H(10)N(2)O(1)S(0) | \n",
- " 1.860793e+02 | \n",
- "
\n",
- " \n",
- " 88 | \n",
- " X | \n",
- " C(1000000) | \n",
- " 1.200000e+07 | \n",
- "
\n",
- " \n",
- " 89 | \n",
- " Y | \n",
- " C(9)H(9)N(1)O(2)S(0) | \n",
- " 1.630633e+02 | \n",
- "
\n",
- " \n",
- " 90 | \n",
- " Z | \n",
- " C(1000000) | \n",
- " 1.200000e+07 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " aa formula mass\n",
- "65 A C(3)H(5)N(1)O(1)S(0) 7.103711e+01\n",
- "66 B C(1000000) 1.200000e+07\n",
- "67 C C(3)H(5)N(1)O(1)S(1) 1.030092e+02\n",
- "68 D C(4)H(5)N(1)O(3)S(0) 1.150269e+02\n",
- "69 E C(5)H(7)N(1)O(3)S(0) 1.290426e+02\n",
- "70 F C(9)H(9)N(1)O(1)S(0) 1.470684e+02\n",
- "71 G C(2)H(3)N(1)O(1)S(0) 5.702146e+01\n",
- "72 H C(6)H(7)N(3)O(1)S(0) 1.370589e+02\n",
- "73 I C(6)H(11)N(1)O(1)S(0) 1.130841e+02\n",
- "74 J C(6)H(11)N(1)O(1)S(0) 1.130841e+02\n",
- "75 K C(6)H(12)N(2)O(1)S(0) 1.280950e+02\n",
- "76 L C(6)H(11)N(1)O(1)S(0) 1.130841e+02\n",
- "77 M C(5)H(9)N(1)O(1)S(1) 1.310405e+02\n",
- "78 N C(4)H(6)N(2)O(2)S(0) 1.140429e+02\n",
- "79 O C(12)H(19)N(3)O(2) 2.371477e+02\n",
- "80 P C(5)H(7)N(1)O(1)S(0) 9.705276e+01\n",
- "81 Q C(5)H(8)N(2)O(2)S(0) 1.280586e+02\n",
- "82 R C(6)H(12)N(4)O(1)S(0) 1.561011e+02\n",
- "83 S C(3)H(5)N(1)O(2)S(0) 8.703203e+01\n",
- "84 T C(4)H(7)N(1)O(2)S(0) 1.010477e+02\n",
- "85 U C(3)H(5)N(1)O(1)Se(1) 1.509536e+02\n",
- "86 V C(5)H(9)N(1)O(1)S(0) 9.906841e+01\n",
- "87 W C(11)H(10)N(2)O(1)S(0) 1.860793e+02\n",
- "88 X C(1000000) 1.200000e+07\n",
- "89 Y C(9)H(9)N(1)O(2)S(0) 1.630633e+02\n",
- "90 Z C(1000000) 1.200000e+07"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.aa import AA_DF\n",
- "AA_DF.loc[ord('A'):ord('Z')]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "From `AA_DF`, we can see that amino acids are encoded by ASCII (128 characters). 65==ord('A'), ..., 90==ord('Z'). Unicode strings can be fastly converted to ascii int32 values using numpy:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([65, 66, 67, 88, 89, 90], dtype=int32)"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import numpy as np\n",
- "\n",
- "np.array(['ABCXYZ']).view(np.int32)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "But users does not need to know this, as we provided easy to use functionalities to get residue masses from sequences."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Calculate AA masses in batch"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[131.04048509, 71.03711379, 103.00918496, 115.02694302,\n",
- " 129.04259309, 147.06841391, 57.02146372],\n",
- " [131.04048509, 71.03711379, 128.09496302, 115.02694302,\n",
- " 129.04259309, 147.06841391, 57.02146372],\n",
- " [131.04048509, 71.03711379, 128.09496302, 115.02694302,\n",
- " 129.04259309, 147.06841391, 156.10111102]])"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.aa import calc_AA_masses_for_same_len_seqs\n",
- "calc_AA_masses_for_same_len_seqs(\n",
- " [\n",
- " 'MACDEFG', 'MAKDEFG', 'MAKDEFR'\n",
- " ]\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Modifications\n",
- "\n",
- "In AlphaBase, we used `mod_name@aa` to represent a modification, the `mod_name` is from UniMod. We also used `mod_name@Protein N-term`, `mod_name@Any N-term` and `mod_name@Any C-term` for terminal modifications, which follow the UniMod terminal name schema.\n",
- "\n",
- "The default modification TSV is stored in `alphabase/constants/const_files/modification.tsv`, users can add more modifications into the tsv file (only `mod_name` and `composition` colums are required). Please https://github.com/MannLabs/alphabase/blob/main/alphabase/constants/const_files/modification.tsv."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " mod_name | \n",
- " unimod_mass | \n",
- " unimod_avge_mass | \n",
- " composition | \n",
- " unimod_modloss | \n",
- " modloss_composition | \n",
- " classification | \n",
- " unimod_id | \n",
- " modloss_importance | \n",
- " mass | \n",
- " modloss_original | \n",
- " modloss | \n",
- "
\n",
- " \n",
- " mod_name | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " Acetyl@T | \n",
- " Acetyl@T | \n",
- " 42.010565 | \n",
- " 42.0367 | \n",
- " H(2)C(2)O(1) | \n",
- " 0.0 | \n",
- " | \n",
- " Post-translational | \n",
- " 1 | \n",
- " 0.0 | \n",
- " 42.010565 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " Acetyl@Protein N-term | \n",
- " Acetyl@Protein N-term | \n",
- " 42.010565 | \n",
- " 42.0367 | \n",
- " H(2)C(2)O(1) | \n",
- " 0.0 | \n",
- " | \n",
- " Post-translational | \n",
- " 1 | \n",
- " 0.0 | \n",
- " 42.010565 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " Acetyl@S | \n",
- " Acetyl@S | \n",
- " 42.010565 | \n",
- " 42.0367 | \n",
- " H(2)C(2)O(1) | \n",
- " 0.0 | \n",
- " | \n",
- " Post-translational | \n",
- " 1 | \n",
- " 0.0 | \n",
- " 42.010565 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " Acetyl@C | \n",
- " Acetyl@C | \n",
- " 42.010565 | \n",
- " 42.0367 | \n",
- " H(2)C(2)O(1) | \n",
- " 0.0 | \n",
- " | \n",
- " Post-translational | \n",
- " 1 | \n",
- " 0.0 | \n",
- " 42.010565 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " Acetyl@Any N-term | \n",
- " Acetyl@Any N-term | \n",
- " 42.010565 | \n",
- " 42.0367 | \n",
- " H(2)C(2)O(1) | \n",
- " 0.0 | \n",
- " | \n",
- " Multiple | \n",
- " 1 | \n",
- " 0.0 | \n",
- " 42.010565 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " TMTpro_zero@K | \n",
- " TMTpro_zero@K | \n",
- " 295.189592 | \n",
- " 295.3773 | \n",
- " H(25)C(15)N(3)O(3) | \n",
- " 0.0 | \n",
- " | \n",
- " Chemical derivative | \n",
- " 2017 | \n",
- " 0.0 | \n",
- " 295.189592 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " TMTpro_zero@T | \n",
- " TMTpro_zero@T | \n",
- " 295.189592 | \n",
- " 295.3773 | \n",
- " H(25)C(15)N(3)O(3) | \n",
- " 0.0 | \n",
- " | \n",
- " Chemical derivative | \n",
- " 2017 | \n",
- " 0.0 | \n",
- " 295.189592 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " Andro-H2O@C | \n",
- " Andro-H2O@C | \n",
- " 332.198760 | \n",
- " 332.4339 | \n",
- " H(28)C(20)O(4) | \n",
- " 0.0 | \n",
- " | \n",
- " Chemical derivative | \n",
- " 2025 | \n",
- " 0.0 | \n",
- " 332.198759 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " His+O(2)@H | \n",
- " His+O(2)@H | \n",
- " 169.048741 | \n",
- " 169.1381 | \n",
- " H(7)C(6)N(3)O(3) | \n",
- " 0.0 | \n",
- " | \n",
- " Post-translational | \n",
- " 2027 | \n",
- " 0.0 | \n",
- " 169.048741 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- " GlyGly@K | \n",
- " GlyGly@K | \n",
- " 114.042927 | \n",
- " 114.1026 | \n",
- " H(6)C(4)N(2)O(2) | \n",
- " 0.0 | \n",
- " | \n",
- " Post-translational | \n",
- " 121 | \n",
- " 1000000.0 | \n",
- " 114.042927 | \n",
- " 0.0 | \n",
- " 0.0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
2685 rows × 12 columns
\n",
- "
"
- ],
- "text/plain": [
- " mod_name unimod_mass unimod_avge_mass \\\n",
- "mod_name \n",
- "Acetyl@T Acetyl@T 42.010565 42.0367 \n",
- "Acetyl@Protein N-term Acetyl@Protein N-term 42.010565 42.0367 \n",
- "Acetyl@S Acetyl@S 42.010565 42.0367 \n",
- "Acetyl@C Acetyl@C 42.010565 42.0367 \n",
- "Acetyl@Any N-term Acetyl@Any N-term 42.010565 42.0367 \n",
- "... ... ... ... \n",
- "TMTpro_zero@K TMTpro_zero@K 295.189592 295.3773 \n",
- "TMTpro_zero@T TMTpro_zero@T 295.189592 295.3773 \n",
- "Andro-H2O@C Andro-H2O@C 332.198760 332.4339 \n",
- "His+O(2)@H His+O(2)@H 169.048741 169.1381 \n",
- "GlyGly@K GlyGly@K 114.042927 114.1026 \n",
- "\n",
- " composition unimod_modloss modloss_composition \\\n",
- "mod_name \n",
- "Acetyl@T H(2)C(2)O(1) 0.0 \n",
- "Acetyl@Protein N-term H(2)C(2)O(1) 0.0 \n",
- "Acetyl@S H(2)C(2)O(1) 0.0 \n",
- "Acetyl@C H(2)C(2)O(1) 0.0 \n",
- "Acetyl@Any N-term H(2)C(2)O(1) 0.0 \n",
- "... ... ... ... \n",
- "TMTpro_zero@K H(25)C(15)N(3)O(3) 0.0 \n",
- "TMTpro_zero@T H(25)C(15)N(3)O(3) 0.0 \n",
- "Andro-H2O@C H(28)C(20)O(4) 0.0 \n",
- "His+O(2)@H H(7)C(6)N(3)O(3) 0.0 \n",
- "GlyGly@K H(6)C(4)N(2)O(2) 0.0 \n",
- "\n",
- " classification unimod_id modloss_importance \\\n",
- "mod_name \n",
- "Acetyl@T Post-translational 1 0.0 \n",
- "Acetyl@Protein N-term Post-translational 1 0.0 \n",
- "Acetyl@S Post-translational 1 0.0 \n",
- "Acetyl@C Post-translational 1 0.0 \n",
- "Acetyl@Any N-term Multiple 1 0.0 \n",
- "... ... ... ... \n",
- "TMTpro_zero@K Chemical derivative 2017 0.0 \n",
- "TMTpro_zero@T Chemical derivative 2017 0.0 \n",
- "Andro-H2O@C Chemical derivative 2025 0.0 \n",
- "His+O(2)@H Post-translational 2027 0.0 \n",
- "GlyGly@K Post-translational 121 1000000.0 \n",
- "\n",
- " mass modloss_original modloss \n",
- "mod_name \n",
- "Acetyl@T 42.010565 0.0 0.0 \n",
- "Acetyl@Protein N-term 42.010565 0.0 0.0 \n",
- "Acetyl@S 42.010565 0.0 0.0 \n",
- "Acetyl@C 42.010565 0.0 0.0 \n",
- "Acetyl@Any N-term 42.010565 0.0 0.0 \n",
- "... ... ... ... \n",
- "TMTpro_zero@K 295.189592 0.0 0.0 \n",
- "TMTpro_zero@T 295.189592 0.0 0.0 \n",
- "Andro-H2O@C 332.198759 0.0 0.0 \n",
- "His+O(2)@H 169.048741 0.0 0.0 \n",
- "GlyGly@K 114.042927 0.0 0.0 \n",
- "\n",
- "[2685 rows x 12 columns]"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.modification import MOD_DF\n",
- "MOD_DF"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Modification sites\n",
- "\n",
- "In alphabase, we use 0 and -1 to represent modification site of N-term and C-term, respectively. For other modification sites, we use 1 to n."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([42.01056468, 0. , 57.02146372, 0. , 0. ,\n",
- " 0. , 0. ])"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.modification import calc_modification_mass\n",
- "sequence = 'MACDEFG'\n",
- "mod_names = ['Acetyl@Any N-term', 'Carbamidomethyl@C']\n",
- "mod_sites = [0,3]\n",
- "calc_modification_mass(\n",
- " nAA=len(sequence),\n",
- " mod_names=mod_names,\n",
- " mod_sites=mod_sites\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The modifications on the first amino acid and N-term will be added."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([58.0054793, 0. , 0. , 0. , 0. ,\n",
- " 0. , 0. ])"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "sequence = 'MAKDEFG'\n",
- "mod_names = ['Acetyl@Any N-term', 'Oxidation@M']\n",
- "mod_sites = [0,1]\n",
- "calc_modification_mass(\n",
- " nAA=len(sequence),\n",
- " mod_names=mod_names,\n",
- " mod_sites=mod_sites\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Multiple modification at a single site is supported, for example, in the following example, `K3` contains both `GlyGly@K` and `Dimethyl@K`:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([ 0. , 0. , 142.07422757, 0. ,\n",
- " 0. , 0. , 0. ])"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "sequence = 'MAKDEFR'\n",
- "mod_names = ['GlyGly@K', 'Dimethyl@K']\n",
- "mod_sites = [3,3]\n",
- "calc_modification_mass(\n",
- " nAA=len(sequence),\n",
- " mod_names=mod_names,\n",
- " mod_sites=mod_sites\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Caculate modification masses in batch"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 42.01056468, 0. , 57.02146372, 0. ,\n",
- " 0. , 0. , 0. ],\n",
- " [ 58.0054793 , 0. , 0. , 0. ,\n",
- " 0. , 0. , 0. ],\n",
- " [ 0. , 0. , 142.07422757, 0. ,\n",
- " 0. , 0. , 0. ]])"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.modification import calc_mod_masses_for_same_len_seqs\n",
- "calc_mod_masses_for_same_len_seqs(\n",
- " nAA=7,\n",
- " mod_names_list=[\n",
- " ['Acetyl@Any N-term', 'Carbamidomethyl@C'],\n",
- " ['Acetyl@Any N-term', 'Oxidation@M'],\n",
- " ['GlyGly@K', 'Dimethyl@K'],\n",
- " ],\n",
- " mod_sites_list=[\n",
- " [0, 3],\n",
- " [0, 1],\n",
- " [3, 3],\n",
- " ]\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Mass calculation functionalities"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Calculate AA and modification masses in batch"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[173.05104977, 71.03711379, 160.03064868, 115.02694302,\n",
- " 129.04259309, 147.06841391, 57.02146372],\n",
- " [189.04596439, 71.03711379, 128.09496302, 115.02694302,\n",
- " 129.04259309, 147.06841391, 57.02146372],\n",
- " [131.04048509, 71.03711379, 270.16919059, 115.02694302,\n",
- " 129.04259309, 147.06841391, 156.10111102]])"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.aa import calc_AA_masses_for_same_len_seqs\n",
- "from alphabase.constants.modification import calc_mod_masses_for_same_len_seqs\n",
- "mod_masses = calc_mod_masses_for_same_len_seqs(\n",
- " nAA=7,\n",
- " mod_names_list=[\n",
- " ['Acetyl@Any N-term', 'Carbamidomethyl@C'],\n",
- " ['Acetyl@Any N-term', 'Oxidation@M'],\n",
- " ['GlyGly@K', 'Dimethyl@K'],\n",
- " ],\n",
- " mod_sites_list=[\n",
- " [0, 3],\n",
- " [0, 1],\n",
- " [3, 3],\n",
- " ]\n",
- ")\n",
- "aa_masses = calc_AA_masses_for_same_len_seqs(\n",
- " [\n",
- " 'MACDEFG', 'MAKDEFG', 'MAKDEFR'\n",
- " ]\n",
- ")\n",
- "mod_masses+aa_masses"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### np.cumsum to get b-ion neutral masses"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 173.05104977, 244.08816356, 404.11881224, 519.14575526,\n",
- " 648.18834835, 795.25676227, 852.27822599],\n",
- " [ 189.04596439, 260.08307818, 388.17804119, 503.20498422,\n",
- " 632.24757731, 779.31599122, 836.33745494],\n",
- " [ 131.04048509, 202.07759887, 472.24678946, 587.27373248,\n",
- " 716.31632557, 863.38473949, 1019.48585051]])"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import numpy as np\n",
- "np.cumsum(aa_masses+mod_masses, axis=1)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Mass functionalities in 'mass_calc'\n",
- "\n",
- "The functionalities for peptide and fragment neutral masses have been implement in `alphabase.peptide.mass_calc`:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([ 870.28879067, 854.34801962, 1037.49641519])"
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.peptide.mass_calc import calc_peptide_masses_for_same_len_seqs\n",
- "\n",
- "peptide_masses = calc_peptide_masses_for_same_len_seqs(\n",
- " ['MACDEFG', 'MAKDEFG', 'MAKDEFR'],\n",
- " mod_list=[\n",
- " 'Acetyl@Any N-term;Carbamidomethyl@C',\n",
- " 'Acetyl@Any N-term;Oxidation@M',\n",
- " 'GlyGly@K;Dimethyl@K',\n",
- " ],\n",
- ")\n",
- "peptide_masses"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([ 870.28879067, 854.34801962, 1037.49641519])"
- ]
- },
- "execution_count": 16,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.peptide.mass_calc import calc_b_y_and_peptide_masses_for_same_len_seqs\n",
- "b_masses, y_masses, peptide_masses = calc_b_y_and_peptide_masses_for_same_len_seqs(\n",
- " ['MACDEFG', 'MAKDEFG', 'MAKDEFR'],\n",
- " mod_list=[\n",
- " ['Acetyl@Any N-term', 'Carbamidomethyl@C'],\n",
- " ['Acetyl@Any N-term', 'Oxidation@M'],\n",
- " ['GlyGly@K', 'Dimethyl@K'],\n",
- " ],\n",
- " site_list=[\n",
- " [0, 3],\n",
- " [0, 1],\n",
- " [3, 3],\n",
- " ],\n",
- ")\n",
- "peptide_masses"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[173.05104977, 244.08816356, 404.11881224, 519.14575526,\n",
- " 648.18834835, 795.25676227],\n",
- " [189.04596439, 260.08307818, 388.17804119, 503.20498422,\n",
- " 632.24757731, 779.31599122],\n",
- " [131.04048509, 202.07759887, 472.24678946, 587.27373248,\n",
- " 716.31632557, 863.38473949]])"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b_masses"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[697.2377409 , 626.20062711, 466.16997843, 351.14303541,\n",
- " 222.10044232, 75.0320284 ],\n",
- " [665.30205523, 594.26494145, 466.16997843, 351.14303541,\n",
- " 222.10044232, 75.0320284 ],\n",
- " [906.45593011, 835.41881632, 565.24962574, 450.22268271,\n",
- " 321.18008962, 174.11167571]])"
- ]
- },
- "execution_count": 18,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "y_masses"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Isotope distribution\n",
- "\n",
- "`alphabase.constants.isotope.IsotopeDistribution` will calculate the isotope distribution and the mono-isotopic idx in the distribution for a given atom composition. \n",
- "\n",
- "What is the mono-isotopic idx (mono_idx)? For an atom, the `mono_idx` points to the highest abundance isotope, so the value is `round(mass of highest isotope - mass of first isotope)`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " abundance | \n",
- " mass | \n",
- " mono_idx | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 13C | \n",
- " [0.01, 0.99] | \n",
- " [12.0, 13.00335483507] | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 14N | \n",
- " [0.996337, 0.003663] | \n",
- " [14.00307400443, 15.00010889888] | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 15N | \n",
- " [0.01, 0.99] | \n",
- " [14.00307400443, 15.00010889888] | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 18O | \n",
- " [0.005, 0.005, 0.99] | \n",
- " [15.99491461957, 16.9991317565, 17.99915961286] | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2H | \n",
- " [0.01, 0.99] | \n",
- " [1.00782503223, 2.01410177812] | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " Xe | \n",
- " [0.000952, 0.00089, 0.019102, 0.264006, 0.0407... | \n",
- " [123.905892, 125.9042983, 127.903531, 128.9047... | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " Y | \n",
- " [1.0] | \n",
- " [88.9058403] | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " Yb | \n",
- " [0.00123, 0.02982, 0.1409, 0.2168, 0.16103, 0.... | \n",
- " [167.9338896, 169.9347664, 170.9363302, 171.93... | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " Zn | \n",
- " [0.4917, 0.2773, 0.0404, 0.1845, 0.0061] | \n",
- " [63.92914201, 65.92603381, 66.92712775, 67.924... | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " Zr | \n",
- " [0.5145, 0.1122, 0.1715, 0.1738, 0.028] | \n",
- " [89.9046977, 90.9056396, 91.9050347, 93.906310... | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
109 rows × 3 columns
\n",
- "
"
- ],
- "text/plain": [
- " abundance \\\n",
- "13C [0.01, 0.99] \n",
- "14N [0.996337, 0.003663] \n",
- "15N [0.01, 0.99] \n",
- "18O [0.005, 0.005, 0.99] \n",
- "2H [0.01, 0.99] \n",
- ".. ... \n",
- "Xe [0.000952, 0.00089, 0.019102, 0.264006, 0.0407... \n",
- "Y [1.0] \n",
- "Yb [0.00123, 0.02982, 0.1409, 0.2168, 0.16103, 0.... \n",
- "Zn [0.4917, 0.2773, 0.0404, 0.1845, 0.0061] \n",
- "Zr [0.5145, 0.1122, 0.1715, 0.1738, 0.028] \n",
- "\n",
- " mass mono_idx \n",
- "13C [12.0, 13.00335483507] 1 \n",
- "14N [14.00307400443, 15.00010889888] 0 \n",
- "15N [14.00307400443, 15.00010889888] 1 \n",
- "18O [15.99491461957, 16.9991317565, 17.99915961286] 2 \n",
- "2H [1.00782503223, 2.01410177812] 1 \n",
- ".. ... ... \n",
- "Xe [123.905892, 125.9042983, 127.903531, 128.9047... 8 \n",
- "Y [88.9058403] 0 \n",
- "Yb [167.9338896, 169.9347664, 170.9363302, 171.93... 6 \n",
- "Zn [63.92914201, 65.92603381, 66.92712775, 67.924... 0 \n",
- "Zr [89.9046977, 90.9056396, 91.9050347, 93.906310... 0 \n",
- "\n",
- "[109 rows x 3 columns]"
- ]
- },
- "execution_count": 19,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import pandas as pd\n",
- "from alphabase.constants.atom import CHEM_INFO_DICT\n",
- "atom_df = pd.DataFrame().from_dict(CHEM_INFO_DICT, orient='index')\n",
- "def get_mono(masses_abundances):\n",
- " masses, abundances = masses_abundances\n",
- " return round(masses[np.argmax(abundances)]-masses[0])\n",
- "atom_df['mono_idx'] = atom_df[['mass','abundance']].apply(\n",
- " get_mono, axis=1\n",
- ")\n",
- "atom_df"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "`mono_idx` of an atom composition refers to the sum of the `mono_idx` of all atoms. In AlphaBase, `alphabase.constants.isotope.IsotopeDistribution` calculate both isotope abundance and `mono_idx`. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "For example, `Fe`'s `mono_idx` is 2,"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "abundance [0.05845, 0.91754, 0.02119, 0.00282]\n",
- "mass [53.93960899, 55.93493633, 56.93539284, 57.933...\n",
- "mono_idx 2\n",
- "Name: Fe, dtype: object"
- ]
- },
- "execution_count": 20,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "atom_df.loc['Fe']"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "So `C(1)Fe(1)`'s `mono_idx` is also 2:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(array([5.78245850e-02, 6.25415000e-04, 9.07722322e-01, 3.07809450e-02,\n",
- " 3.01655900e-03, 3.01740000e-05, 0.00000000e+00, 0.00000000e+00,\n",
- " 0.00000000e+00, 0.00000000e+00]),\n",
- " 2)"
- ]
- },
- "execution_count": 21,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.isotope import IsotopeDistribution, parse_formula\n",
- "iso = IsotopeDistribution()\n",
- "iso.calc_formula_distribution(\n",
- " [('C',1),('Fe',1)]\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "But `13C(1)Fe(1)`'s `mono_idx` should be 3:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(array([5.845000e-04, 5.786550e-02, 9.175400e-03, 9.085765e-01,\n",
- " 2.100630e-02, 2.791800e-03, 0.000000e+00, 0.000000e+00,\n",
- " 0.000000e+00, 0.000000e+00]),\n",
- " 3)"
- ]
- },
- "execution_count": 22,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "iso.calc_formula_distribution(\n",
- " [('13C',1),('Fe',1)]\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The `mono_idx` for most of the atom compositions is 0, no matter how big the compositions are."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[('C', 100), ('H', 100), ('O', 50), ('Na', 1)]"
- ]
- },
- "execution_count": 23,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.constants.isotope import IsotopeDistribution, parse_formula\n",
- "iso = IsotopeDistribution()\n",
- "\n",
- "formula = 'C(100)H(100)O(50)Na(1)'\n",
- "formula = parse_formula(formula)\n",
- "formula"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "> `mono` isotope is not the `highest` isotope!!!"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(0,\n",
- " 1,\n",
- " array([2.98521241e-01, 3.31991573e-01, 2.13532938e-01, 1.00604878e-01,\n",
- " 3.82856126e-02, 1.23872292e-02, 3.51773755e-03, 8.95830236e-04,\n",
- " 2.07763024e-04, 4.43944472e-05]))"
- ]
- },
- "execution_count": 24,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "dist, mono = iso.calc_formula_distribution(formula)\n",
- "mono, dist.argmax(), dist"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "All these low-level functionalities have been integrated into DataFrame functionalities, see `tutorial_dev_dataframes.ipynb` or `Tutorial for Dev: Peptide and Fragment DataFrames`"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3.8.3 ('base')",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.3"
- },
- "orig_nbformat": 4,
- "vscode": {
- "interpreter": {
- "hash": "8a3b27e141e49c996c9b863f8707e97aabd49c4a7e8445b9b783b34e4a21a9b2"
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/docs/nbs/tutorial_dev_dataframes.ipynb b/docs/nbs/tutorial_dev_dataframes.ipynb
deleted file mode 100644
index 5699217f..00000000
--- a/docs/nbs/tutorial_dev_dataframes.ipynb
+++ /dev/null
@@ -1,1159 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Tutorial for Dev: Peptide and Fragment DataFrames\n",
- "\n",
- "This notebook introduces functionalities for peptide and fragment DataFrames to developers."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Peptide DataFrame\n",
- "\n",
- "Peptide dataframe must contain four columns: `sequence` for animo acid sequence (str), `mods` for modification names (str), `mod_sites` for modification sites (str), and `charge` for precursor charge states (int).\n",
- "\n",
- "We can easily build a peptide dataframe:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " sequence | \n",
- " mods | \n",
- " mod_sites | \n",
- " charge | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " ACDEFHIK | \n",
- " Carbamidomethyl@C | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " APDEFMNIK | \n",
- " | \n",
- " | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " SWDEFMNTIRAAAAKDDDDR | \n",
- " Phospho@S;Oxidation@M | \n",
- " 1;6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " sequence mods mod_sites charge\n",
- "0 ACDEFHIK Carbamidomethyl@C 2 1\n",
- "1 APDEFMNIK 2\n",
- "2 SWDEFMNTIRAAAAKDDDDR Phospho@S;Oxidation@M 1;6 3"
- ]
- },
- "execution_count": 1,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import pandas as pd\n",
- "\n",
- "df = pd.DataFrame({\n",
- " 'sequence': ['ACDEFHIK', 'APDEFMNIK', 'SWDEFMNTIRAAAAKDDDDR'],\n",
- " 'mods': ['Carbamidomethyl@C', '', 'Phospho@S;Oxidation@M'],\n",
- " 'mod_sites': ['2', '', '1;6'],\n",
- " 'charge': [1,2,3],\n",
- "})\n",
- "df"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Calculate precursor_mz and isotopes from peptide dataframe"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "`alphabase.peptide.precursor.update_precursor_mz()` calculates the precursor_mz for peptides."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " sequence | \n",
- " mods | \n",
- " mod_sites | \n",
- " charge | \n",
- " nAA | \n",
- " precursor_mz | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " ACDEFHIK | \n",
- " Carbamidomethyl@C | \n",
- " 2 | \n",
- " 1 | \n",
- " 8 | \n",
- " 1019.461492 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " APDEFMNIK | \n",
- " | \n",
- " | \n",
- " 2 | \n",
- " 9 | \n",
- " 532.757692 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " SWDEFMNTIRAAAAKDDDDR | \n",
- " Phospho@S;Oxidation@M | \n",
- " 1;6 | \n",
- " 3 | \n",
- " 20 | \n",
- " 808.337166 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " sequence mods mod_sites charge nAA \\\n",
- "0 ACDEFHIK Carbamidomethyl@C 2 1 8 \n",
- "1 APDEFMNIK 2 9 \n",
- "2 SWDEFMNTIRAAAAKDDDDR Phospho@S;Oxidation@M 1;6 3 20 \n",
- "\n",
- " precursor_mz \n",
- "0 1019.461492 \n",
- "1 532.757692 \n",
- "2 808.337166 "
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.peptide.precursor import update_precursor_mz\n",
- "\n",
- "update_precursor_mz(df)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "`alphabase.peptide.precursor.calc_precursor_isotope()` calculates the precursor isotope information for peptides. It will add `i_*` columns for peptides."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " sequence | \n",
- " mods | \n",
- " mod_sites | \n",
- " charge | \n",
- " nAA | \n",
- " precursor_mz | \n",
- " i_0 | \n",
- " i_1 | \n",
- " i_2 | \n",
- " i_3 | \n",
- " i_4 | \n",
- " i_5 | \n",
- " mono_isotope_idx | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " ACDEFHIK | \n",
- " Carbamidomethyl@C | \n",
- " 2 | \n",
- " 1 | \n",
- " 8 | \n",
- " 1019.461492 | \n",
- " 0.544890 | \n",
- " 0.294208 | \n",
- " 0.116900 | \n",
- " 0.034340 | \n",
- " 0.008077 | \n",
- " 0.001584 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " APDEFMNIK | \n",
- " | \n",
- " | \n",
- " 2 | \n",
- " 9 | \n",
- " 532.757692 | \n",
- " 0.527839 | \n",
- " 0.300826 | \n",
- " 0.123018 | \n",
- " 0.037359 | \n",
- " 0.009104 | \n",
- " 0.001854 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " SWDEFMNTIRAAAAKDDDDR | \n",
- " Phospho@S;Oxidation@M | \n",
- " 1;6 | \n",
- " 3 | \n",
- " 20 | \n",
- " 808.337166 | \n",
- " 0.271028 | \n",
- " 0.323775 | \n",
- " 0.225641 | \n",
- " 0.115441 | \n",
- " 0.047553 | \n",
- " 0.016561 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " sequence mods mod_sites charge nAA \\\n",
- "0 ACDEFHIK Carbamidomethyl@C 2 1 8 \n",
- "1 APDEFMNIK 2 9 \n",
- "2 SWDEFMNTIRAAAAKDDDDR Phospho@S;Oxidation@M 1;6 3 20 \n",
- "\n",
- " precursor_mz i_0 i_1 i_2 i_3 i_4 i_5 \\\n",
- "0 1019.461492 0.544890 0.294208 0.116900 0.034340 0.008077 0.001584 \n",
- "1 532.757692 0.527839 0.300826 0.123018 0.037359 0.009104 0.001854 \n",
- "2 808.337166 0.271028 0.323775 0.225641 0.115441 0.047553 0.016561 \n",
- "\n",
- " mono_isotope_idx \n",
- "0 0 \n",
- "1 0 \n",
- "2 0 "
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.peptide.precursor import calc_precursor_isotope\n",
- "\n",
- "calc_precursor_isotope(df)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "> Computing isotope patterns is very time-consuming for millions of peptides, so we provided `calc_precursor_isotope_mp` with multiprocessing for users."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Fragment DataFrame\n",
- "\n",
- "`alphabase.peptide.fragment.create_fragment_mz_dataframe()` is the only function we need to calculate fragment_mz dataframe. It has two key parameters:\n",
- "\n",
- "- precursor_df (pd.DataFrame): the peptide or precursor dataframe.\n",
- "- charged_frag_types (list of str): The charged fragments to be considered into the fragment dataframe columns. The schema is `Type[_LossType]_z[n]`, where \n",
- " - `Type` can be `b,y,c,z`\n",
- " - `_LossType` can be `_modloss,_H2O,_NH3`, this is optional.\n",
- " - `z[n]` is the charge state. If precursor charge is less than `n`, the corresponding mz will be set as zero."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " a_z1 | \n",
- " b_z1 | \n",
- " c_z1 | \n",
- " b_z2 | \n",
- " x_z1 | \n",
- " y_z1 | \n",
- " y_H2O_z1 | \n",
- " z_z1 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 44.049477 | \n",
- " 72.044388 | \n",
- " 89.070938 | \n",
- " 0.000000 | \n",
- " 974.403625 | \n",
- " 948.424377 | \n",
- " 930.413818 | \n",
- " 932.405640 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 204.080124 | \n",
- " 232.075043 | \n",
- " 249.101593 | \n",
- " 0.000000 | \n",
- " 814.372986 | \n",
- " 788.393738 | \n",
- " 770.383179 | \n",
- " 772.375000 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 319.107056 | \n",
- " 347.101990 | \n",
- " 364.128540 | \n",
- " 0.000000 | \n",
- " 699.346069 | \n",
- " 673.366760 | \n",
- " 655.356201 | \n",
- " 657.348083 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 448.149658 | \n",
- " 476.144562 | \n",
- " 493.171112 | \n",
- " 0.000000 | \n",
- " 570.303467 | \n",
- " 544.324219 | \n",
- " 526.313660 | \n",
- " 528.305481 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 595.218079 | \n",
- " 623.213013 | \n",
- " 640.239563 | \n",
- " 0.000000 | \n",
- " 423.235046 | \n",
- " 397.255768 | \n",
- " 379.245209 | \n",
- " 381.237061 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 732.276978 | \n",
- " 760.271912 | \n",
- " 777.298462 | \n",
- " 0.000000 | \n",
- " 286.176147 | \n",
- " 260.196869 | \n",
- " 242.186310 | \n",
- " 244.178146 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 845.361023 | \n",
- " 873.355957 | \n",
- " 890.382507 | \n",
- " 0.000000 | \n",
- " 173.092072 | \n",
- " 147.112808 | \n",
- " 129.102234 | \n",
- " 131.094086 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 44.049477 | \n",
- " 72.044388 | \n",
- " 89.070938 | \n",
- " 36.525833 | \n",
- " 1019.450256 | \n",
- " 993.471008 | \n",
- " 975.460449 | \n",
- " 977.452271 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 141.102234 | \n",
- " 169.097153 | \n",
- " 186.123703 | \n",
- " 85.052216 | \n",
- " 922.397522 | \n",
- " 896.418213 | \n",
- " 878.407654 | \n",
- " 880.399536 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 256.129181 | \n",
- " 284.124084 | \n",
- " 301.150635 | \n",
- " 142.565689 | \n",
- " 807.370544 | \n",
- " 781.391296 | \n",
- " 763.380737 | \n",
- " 765.372559 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 385.171783 | \n",
- " 413.166687 | \n",
- " 430.193237 | \n",
- " 207.086990 | \n",
- " 678.327942 | \n",
- " 652.348694 | \n",
- " 634.338135 | \n",
- " 636.329956 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 532.240173 | \n",
- " 560.235107 | \n",
- " 577.261658 | \n",
- " 280.621185 | \n",
- " 531.259521 | \n",
- " 505.280273 | \n",
- " 487.269714 | \n",
- " 489.261566 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 663.280701 | \n",
- " 691.275574 | \n",
- " 708.302124 | \n",
- " 346.141418 | \n",
- " 400.219055 | \n",
- " 374.239807 | \n",
- " 356.229218 | \n",
- " 358.221069 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 777.323608 | \n",
- " 805.318542 | \n",
- " 822.345093 | \n",
- " 403.162903 | \n",
- " 286.176147 | \n",
- " 260.196869 | \n",
- " 242.186310 | \n",
- " 244.178146 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 890.407654 | \n",
- " 918.402588 | \n",
- " 935.429138 | \n",
- " 459.704926 | \n",
- " 173.092072 | \n",
- " 147.112808 | \n",
- " 129.102234 | \n",
- " 131.094086 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 140.010727 | \n",
- " 168.005630 | \n",
- " 185.032181 | \n",
- " 84.506454 | \n",
- " 2281.977783 | \n",
- " 2255.998535 | \n",
- " 2237.988037 | \n",
- " 2239.979980 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 326.090027 | \n",
- " 354.084961 | \n",
- " 371.111511 | \n",
- " 177.546112 | \n",
- " 2095.898438 | \n",
- " 2069.919189 | \n",
- " 2051.908691 | \n",
- " 2053.900635 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 441.116974 | \n",
- " 469.111877 | \n",
- " 486.138428 | \n",
- " 235.059586 | \n",
- " 1980.871582 | \n",
- " 1954.892334 | \n",
- " 1936.881714 | \n",
- " 1938.873657 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 570.159546 | \n",
- " 598.154480 | \n",
- " 615.181030 | \n",
- " 299.580872 | \n",
- " 1851.828979 | \n",
- " 1825.849731 | \n",
- " 1807.839111 | \n",
- " 1809.831055 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 717.227966 | \n",
- " 745.222900 | \n",
- " 762.249451 | \n",
- " 373.115082 | \n",
- " 1704.760620 | \n",
- " 1678.781372 | \n",
- " 1660.770752 | \n",
- " 1662.762573 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 864.263367 | \n",
- " 892.258301 | \n",
- " 909.284851 | \n",
- " 446.632782 | \n",
- " 1557.725220 | \n",
- " 1531.745972 | \n",
- " 1513.735352 | \n",
- " 1515.727173 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 978.306335 | \n",
- " 1006.301208 | \n",
- " 1023.327759 | \n",
- " 503.654266 | \n",
- " 1443.682251 | \n",
- " 1417.703003 | \n",
- " 1399.692383 | \n",
- " 1401.684326 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 1079.354004 | \n",
- " 1107.348877 | \n",
- " 1124.375488 | \n",
- " 554.178101 | \n",
- " 1342.634521 | \n",
- " 1316.655273 | \n",
- " 1298.644775 | \n",
- " 1300.636597 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 1192.438110 | \n",
- " 1220.432983 | \n",
- " 1237.459473 | \n",
- " 610.720093 | \n",
- " 1229.550537 | \n",
- " 1203.571289 | \n",
- " 1185.560669 | \n",
- " 1187.552490 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 1348.539185 | \n",
- " 1376.534058 | \n",
- " 1393.560669 | \n",
- " 688.770691 | \n",
- " 1073.449463 | \n",
- " 1047.470093 | \n",
- " 1029.459595 | \n",
- " 1031.451416 | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 1419.576294 | \n",
- " 1447.571167 | \n",
- " 1464.597778 | \n",
- " 724.289246 | \n",
- " 1002.412292 | \n",
- " 976.433044 | \n",
- " 958.422485 | \n",
- " 960.414307 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 1490.613403 | \n",
- " 1518.608276 | \n",
- " 1535.634888 | \n",
- " 759.807800 | \n",
- " 931.375183 | \n",
- " 905.395935 | \n",
- " 887.385376 | \n",
- " 889.377197 | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 1561.650513 | \n",
- " 1589.645386 | \n",
- " 1606.671997 | \n",
- " 795.326355 | \n",
- " 860.338074 | \n",
- " 834.358826 | \n",
- " 816.348267 | \n",
- " 818.340088 | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 1632.687622 | \n",
- " 1660.682495 | \n",
- " 1677.709106 | \n",
- " 830.844910 | \n",
- " 789.300964 | \n",
- " 763.321716 | \n",
- " 745.311096 | \n",
- " 747.302979 | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 1760.782593 | \n",
- " 1788.777466 | \n",
- " 1805.804077 | \n",
- " 894.892395 | \n",
- " 661.205994 | \n",
- " 635.226746 | \n",
- " 617.216187 | \n",
- " 619.208008 | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " 1875.809570 | \n",
- " 1903.804443 | \n",
- " 1920.830933 | \n",
- " 952.405884 | \n",
- " 546.179016 | \n",
- " 520.199768 | \n",
- " 502.189209 | \n",
- " 504.181061 | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " 1990.836426 | \n",
- " 2018.831421 | \n",
- " 2035.857910 | \n",
- " 1009.919312 | \n",
- " 431.152100 | \n",
- " 405.172852 | \n",
- " 387.162262 | \n",
- " 389.154114 | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " 2105.863525 | \n",
- " 2133.858398 | \n",
- " 2150.884766 | \n",
- " 1067.432861 | \n",
- " 316.125153 | \n",
- " 290.145905 | \n",
- " 272.135345 | \n",
- " 274.127167 | \n",
- "
\n",
- " \n",
- " 33 | \n",
- " 2220.890381 | \n",
- " 2248.885254 | \n",
- " 2265.911865 | \n",
- " 1124.946289 | \n",
- " 201.098221 | \n",
- " 175.118958 | \n",
- " 157.108383 | \n",
- " 159.100235 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " a_z1 b_z1 c_z1 b_z2 x_z1 \\\n",
- "0 44.049477 72.044388 89.070938 0.000000 974.403625 \n",
- "1 204.080124 232.075043 249.101593 0.000000 814.372986 \n",
- "2 319.107056 347.101990 364.128540 0.000000 699.346069 \n",
- "3 448.149658 476.144562 493.171112 0.000000 570.303467 \n",
- "4 595.218079 623.213013 640.239563 0.000000 423.235046 \n",
- "5 732.276978 760.271912 777.298462 0.000000 286.176147 \n",
- "6 845.361023 873.355957 890.382507 0.000000 173.092072 \n",
- "7 44.049477 72.044388 89.070938 36.525833 1019.450256 \n",
- "8 141.102234 169.097153 186.123703 85.052216 922.397522 \n",
- "9 256.129181 284.124084 301.150635 142.565689 807.370544 \n",
- "10 385.171783 413.166687 430.193237 207.086990 678.327942 \n",
- "11 532.240173 560.235107 577.261658 280.621185 531.259521 \n",
- "12 663.280701 691.275574 708.302124 346.141418 400.219055 \n",
- "13 777.323608 805.318542 822.345093 403.162903 286.176147 \n",
- "14 890.407654 918.402588 935.429138 459.704926 173.092072 \n",
- "15 140.010727 168.005630 185.032181 84.506454 2281.977783 \n",
- "16 326.090027 354.084961 371.111511 177.546112 2095.898438 \n",
- "17 441.116974 469.111877 486.138428 235.059586 1980.871582 \n",
- "18 570.159546 598.154480 615.181030 299.580872 1851.828979 \n",
- "19 717.227966 745.222900 762.249451 373.115082 1704.760620 \n",
- "20 864.263367 892.258301 909.284851 446.632782 1557.725220 \n",
- "21 978.306335 1006.301208 1023.327759 503.654266 1443.682251 \n",
- "22 1079.354004 1107.348877 1124.375488 554.178101 1342.634521 \n",
- "23 1192.438110 1220.432983 1237.459473 610.720093 1229.550537 \n",
- "24 1348.539185 1376.534058 1393.560669 688.770691 1073.449463 \n",
- "25 1419.576294 1447.571167 1464.597778 724.289246 1002.412292 \n",
- "26 1490.613403 1518.608276 1535.634888 759.807800 931.375183 \n",
- "27 1561.650513 1589.645386 1606.671997 795.326355 860.338074 \n",
- "28 1632.687622 1660.682495 1677.709106 830.844910 789.300964 \n",
- "29 1760.782593 1788.777466 1805.804077 894.892395 661.205994 \n",
- "30 1875.809570 1903.804443 1920.830933 952.405884 546.179016 \n",
- "31 1990.836426 2018.831421 2035.857910 1009.919312 431.152100 \n",
- "32 2105.863525 2133.858398 2150.884766 1067.432861 316.125153 \n",
- "33 2220.890381 2248.885254 2265.911865 1124.946289 201.098221 \n",
- "\n",
- " y_z1 y_H2O_z1 z_z1 \n",
- "0 948.424377 930.413818 932.405640 \n",
- "1 788.393738 770.383179 772.375000 \n",
- "2 673.366760 655.356201 657.348083 \n",
- "3 544.324219 526.313660 528.305481 \n",
- "4 397.255768 379.245209 381.237061 \n",
- "5 260.196869 242.186310 244.178146 \n",
- "6 147.112808 129.102234 131.094086 \n",
- "7 993.471008 975.460449 977.452271 \n",
- "8 896.418213 878.407654 880.399536 \n",
- "9 781.391296 763.380737 765.372559 \n",
- "10 652.348694 634.338135 636.329956 \n",
- "11 505.280273 487.269714 489.261566 \n",
- "12 374.239807 356.229218 358.221069 \n",
- "13 260.196869 242.186310 244.178146 \n",
- "14 147.112808 129.102234 131.094086 \n",
- "15 2255.998535 2237.988037 2239.979980 \n",
- "16 2069.919189 2051.908691 2053.900635 \n",
- "17 1954.892334 1936.881714 1938.873657 \n",
- "18 1825.849731 1807.839111 1809.831055 \n",
- "19 1678.781372 1660.770752 1662.762573 \n",
- "20 1531.745972 1513.735352 1515.727173 \n",
- "21 1417.703003 1399.692383 1401.684326 \n",
- "22 1316.655273 1298.644775 1300.636597 \n",
- "23 1203.571289 1185.560669 1187.552490 \n",
- "24 1047.470093 1029.459595 1031.451416 \n",
- "25 976.433044 958.422485 960.414307 \n",
- "26 905.395935 887.385376 889.377197 \n",
- "27 834.358826 816.348267 818.340088 \n",
- "28 763.321716 745.311096 747.302979 \n",
- "29 635.226746 617.216187 619.208008 \n",
- "30 520.199768 502.189209 504.181061 \n",
- "31 405.172852 387.162262 389.154114 \n",
- "32 290.145905 272.135345 274.127167 \n",
- "33 175.118958 157.108383 159.100235 "
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from alphabase.peptide.fragment import create_fragment_mz_dataframe\n",
- "frag_mz_df = create_fragment_mz_dataframe(\n",
- " df,\n",
- " charged_frag_types=['a_z1','b_z1','c_z1','b_z2','x_z1','y_z1', 'y_H2O_z1','z_z1']\n",
- ")\n",
- "frag_mz_df"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "After `create_fragment_mz_dataframe()`, two columns `frag_start_idx` and `frag_stop_idx` will be append to the peptide dataframe. These two values locate the fragment in the fragment dataframe of a peptide. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " sequence | \n",
- " mods | \n",
- " mod_sites | \n",
- " charge | \n",
- " nAA | \n",
- " precursor_mz | \n",
- " frag_start_idx | \n",
- " frag_stop_idx | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " ACDEFHIK | \n",
- " Carbamidomethyl@C | \n",
- " 2 | \n",
- " 1 | \n",
- " 8 | \n",
- " 1019.461492 | \n",
- " 0 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " APDEFMNIK | \n",
- " | \n",
- " | \n",
- " 2 | \n",
- " 9 | \n",
- " 532.757692 | \n",
- " 7 | \n",
- " 15 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " SWDEFMNTIRAAAAKDDDDR | \n",
- " Phospho@S;Oxidation@M | \n",
- " 1;6 | \n",
- " 3 | \n",
- " 20 | \n",
- " 808.337166 | \n",
- " 15 | \n",
- " 34 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " sequence mods mod_sites charge nAA \\\n",
- "0 ACDEFHIK Carbamidomethyl@C 2 1 8 \n",
- "1 APDEFMNIK 2 9 \n",
- "2 SWDEFMNTIRAAAAKDDDDR Phospho@S;Oxidation@M 1;6 3 20 \n",
- "\n",
- " precursor_mz frag_start_idx frag_stop_idx \n",
- "0 1019.461492 0 7 \n",
- "1 532.757692 7 15 \n",
- "2 808.337166 15 34 "
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "df[[\n",
- " 'sequence','mods','mod_sites','charge','nAA',\n",
- " 'precursor_mz','frag_start_idx','frag_stop_idx'\n",
- "]]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " a_z1 | \n",
- " b_z1 | \n",
- " c_z1 | \n",
- " b_z2 | \n",
- " x_z1 | \n",
- " y_z1 | \n",
- " y_H2O_z1 | \n",
- " z_z1 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 44.049477 | \n",
- " 72.044388 | \n",
- " 89.070938 | \n",
- " 0.0 | \n",
- " 974.403625 | \n",
- " 948.424377 | \n",
- " 930.413818 | \n",
- " 932.405640 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 204.080124 | \n",
- " 232.075043 | \n",
- " 249.101593 | \n",
- " 0.0 | \n",
- " 814.372986 | \n",
- " 788.393738 | \n",
- " 770.383179 | \n",
- " 772.375000 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 319.107056 | \n",
- " 347.101990 | \n",
- " 364.128540 | \n",
- " 0.0 | \n",
- " 699.346069 | \n",
- " 673.366760 | \n",
- " 655.356201 | \n",
- " 657.348083 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 448.149658 | \n",
- " 476.144562 | \n",
- " 493.171112 | \n",
- " 0.0 | \n",
- " 570.303467 | \n",
- " 544.324219 | \n",
- " 526.313660 | \n",
- " 528.305481 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 595.218079 | \n",
- " 623.213013 | \n",
- " 640.239563 | \n",
- " 0.0 | \n",
- " 423.235046 | \n",
- " 397.255768 | \n",
- " 379.245209 | \n",
- " 381.237061 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 732.276978 | \n",
- " 760.271912 | \n",
- " 777.298462 | \n",
- " 0.0 | \n",
- " 286.176147 | \n",
- " 260.196869 | \n",
- " 242.186310 | \n",
- " 244.178146 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 845.361023 | \n",
- " 873.355957 | \n",
- " 890.382507 | \n",
- " 0.0 | \n",
- " 173.092072 | \n",
- " 147.112808 | \n",
- " 129.102234 | \n",
- " 131.094086 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " a_z1 b_z1 c_z1 b_z2 x_z1 y_z1 \\\n",
- "0 44.049477 72.044388 89.070938 0.0 974.403625 948.424377 \n",
- "1 204.080124 232.075043 249.101593 0.0 814.372986 788.393738 \n",
- "2 319.107056 347.101990 364.128540 0.0 699.346069 673.366760 \n",
- "3 448.149658 476.144562 493.171112 0.0 570.303467 544.324219 \n",
- "4 595.218079 623.213013 640.239563 0.0 423.235046 397.255768 \n",
- "5 732.276978 760.271912 777.298462 0.0 286.176147 260.196869 \n",
- "6 845.361023 873.355957 890.382507 0.0 173.092072 147.112808 \n",
- "\n",
- " y_H2O_z1 z_z1 \n",
- "0 930.413818 932.405640 \n",
- "1 770.383179 772.375000 \n",
- "2 655.356201 657.348083 \n",
- "3 526.313660 528.305481 \n",
- "4 379.245209 381.237061 \n",
- "5 242.186310 244.178146 \n",
- "6 129.102234 131.094086 "
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "start,stop = df[['frag_start_idx','frag_stop_idx']].values[0] #first peptide\n",
- "frag_mz_df.iloc[start:stop]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Note that all N-term (a/b/c) fragment mz values are in ascending order, e.g. from b[1] to b[n-1]; and all C-term (x/y/z) fragments are in descending order, e.g. from y[n-1] to y[1]."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "All dataframe functionalities use low-level APIs of AlphaBase, see `tutorial_dev_basic_definations.ipynb` or `Tutorial for Dev: Basic Definations`. \n",
- "\n",
- "Spectral library functionalities provide higher-level APIs which encapsulate these dataframe functionalities, see `tutorial_dev_spectral_libraries.ipynb` or `Tutorial for Dev: Spectral Libraries`."
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3.8.3 ('base')",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.12"
- },
- "orig_nbformat": 4,
- "vscode": {
- "interpreter": {
- "hash": "8a3b27e141e49c996c9b863f8707e97aabd49c4a7e8445b9b783b34e4a21a9b2"
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/docs/tutorials/atom-to-peptides.png b/docs/tutorials/atom-to-peptides.png
new file mode 100644
index 0000000000000000000000000000000000000000..14ae55dfb78a988b2e5ded253627fbfcb1a83c18
GIT binary patch
literal 236876
zcmd43c|278`#;WPO+u6+ai>t$tRajFl{Lz~m3_~?4km5Nnth)lYsPLc){=eS2E&kj
z8_G6zzcadvySw-A^M3#Lee`JN%yG`^bzRSEeO<5X9DfxhIm+V<#|a1sDDU36tx7;Z
zUPnN1ESHP~ICDWpCbOdWm~BtV~g~C?M0~K*1ll!jTD%3XICHRVysaG{PN9
zIgAF+X4v%?-e*dieosj=ccZb;QK`&fcPD;XAr&c2gIiIMeRj_vz>L4*e#)sEVWH9Q
z>BeFL-qXE1(QZtXVlLyxmMr>#`-?zKB!?woVq?0hMbmeMRKnMlac2Bw51ZcJ2)p9W
zKX7g~=0sNR4QtX(G8SI~(0~0wmrMY)|Kf%+7x?e*Vetj019!a>T=<`a#vw}x8h`yA
z-f8;3NE@mG+;!8UANoHq#i9}bBC0z*u9w{UM<6Do4eMHB3R*0bmdmH2ZBG4>bz*K6
zt&Z$u`#+Ar(vbsVyKWnV_C=buC)yUT$=v*t{<83bQk5+uMLYdzlw1O_?HBoYo}Q8U
zvs(S>e&F2JLqm^e1yZ(6Eu9VuA2N?$`k%n-Cky{Fb+3f_f4hl%A@SbY92tG8T1H!!
zL%>;j={Fbu48wm=wJ)q-L*4H~oZ7Gd7pYN8`&O5b-Jz5I4^aFOH;xN2%QOJhWPCL3|KwLD)Bss}SvvCkk^DbO5=;P%rvPwqe5~{z)auX7hA0CX
zu$<9a`X5I9Gh+@sfQq*HixU1>n15y#EJ;ij(3~bb{YPv6Piosx3V6%^w}l1cPhua}
zJ%Vp|E?A4)Ks+i4&?MuF9T9gQHC_B&D&QK54iW8dh*u;ReZf$&4w2YNMrlLcNa>7|
zzc7bQ5YJ3p*_0z7Afld02KR4sB;15Nn|$)SS~ze~uO~>>r+x4M{=y;*dbE_h8o0iE
zhW0E<{`$#VhtL`#!2MC-d@zOPm%XVrYrhLl#TZZeP2D7~$4&m?x@>7~-CO
zO7n|Je!3@BDkU#TCOucWY>;d2sET?ITtOf}Fx?xlidmoy5?8_VP)kAyI&InF!;*Gd#Q?X^$8>jkmCyCGTZ{-`
z?aORXYg>Lnc{~^+8}CMLKn$fiZNzwbe~g(zlWTBh=rQI7600|N4ga-R;Ede1zJO;P
z7EUx2biTsY6%9w9ynxJJN^lu2%AYJ>>&FekjE2S!Xg}l+xS@x5!POj96K95~ke8?f
zzJ?*iwysI7MtHplf9s2=>KZPdFYCd{Be8I#dU5>JKz^C+h}H0oR^FJ~hPsVImOOO7
z42dPsch_O`jN{7FKAS|IVdret;bMtkZeZ|cr|pW#0a-vI$7NXb%-*gQePzUm50NMU3iuIO
zzhql(pBoO1O_xXLOVm{wc%W=VU8`C-{Vzl9FWbkJ-ua~$P(jc-1(bWr7QF`h5SKQe
zQCwu}>eEqbov72-YILB|vV`cEaT{cu9m+2k685l0l&)9pCm6Fz*}uEa)pnU9B-`-nROY}EV8lbq%$Vs4@KRs{Ny
zd^Tzr5Z4D+J%mmEbUvEvK$U2pi0cg%BR5@!_2xV}id%6!MYeI%iS<+S+Zox)D+}9M
zacP_XO3&`eRC|lKhq!O7-5omQ}A$euNrP27@R=9|_P28+tdq`5A(?Y+6F0SIxG
zV2!;azr`h}eT@12GrwSBQ39>=?ybiT+2|nvjGFSjaP|@=%*cg_adB~E6C0Jq4fwm%
z)}CWYg^4tO=a4yg;L4$^1=v7NEcZ}G%OE`$
zl8FHb=7YLP*rI&-e(VQ0I>mjlxb?uV9d)zdctF#QJp&hu;bAl8yCBIDv
zvlG1dfcf}3(9d{Mv)VJ@z*cge7;F1rx!lmw|l*!5tr
zu5J{p<1Ruks-lLYup9PK#p7~*UsE^zzFM#0RT#MQ3g7#@DTnNKqDH-U(hl3YD;jpb
z@g$#SJxeHGcRP!y0Eosc+|DO-u&tE9L_We}b2tIu56%;h}k}M7Ud}(gs1d}KLk>Abd8aYHNr+N7_iZBCdt(J#hhr@H97eC
zPCgczl)v?@U7ezHt@tuTIrw#!HZ&!@RKWDEZ4WYa88UI({ADB8%#XI*t$>$9}WZHYvpQ})&5Ad
z4SHZ)uPi~TERpP4L34`lbsg4&KnL}vxzkN<>^E6x!$6QGZNHTWpSQg&P-9Q>?Abp-
zp_V5^(_8Yk*?Ml@#tK7{)n8u*KvNk7tp>^>rMGHikK~Fha8Pk_y?)YgF_Xli>b|YD
z!D&-HpWE+quIgd-zsxdg?hZRH_V6;8#vM$e0tO+)q3W@tlQ}V_12{Wm56)?O4=#_Z
z7=h3C&XmQKqZcLn4w?EJZYRPeoHjCBeyMpEqcCFrZbWPFB|!6afFiN8gjs`k6^@b=
zbU;$v@X5K=&Kq{q!IUZKfV(%-70t|>;v7C*>UUxw^FY7J=$=-;dNJ4B>gh7zy>DNo
zl#{uH6|;;-7OG{;#g*!bWZi9qB%_Rmu_;fjSyV29953pd^*GREC7(U2MXS=_s`j!*
z+xafY0CPyE$ed*!UU%r;5kQh_L|VNGNR}?s|5P0ygpbjE+mk@Ktk3lJufdd^9RMFYO`HTIb|
zkMNAwOb!ylE!j6;c{*hQEoG4d*)K9ySgkM2zECun?TSAqVAj@oGvI7g(Cghp3;4oD
z-Sgcj=dXtQ$^k
z>&P4)Y%?RB+=zMJ@Wa73fV^%~!|a@>PC@NGxik-57>73@dLUWjG0G+_7};}@MdWPT
z-o^aoY&)-wraVO<12($%8_XndJl`tN&Oo847~FdPZdDXnP&e1^jc-Bc@upT9a`n1W
zFsn)%OUO}lfSZo1f~ydN#wh1mNT-Np#6enfjUHwfPBZ>^@0FwbPf>yIlJ~b=s4z!f
z=$jn}JR5Vs1I${fQCgrC!#9($3-{(qzdoh`!-$AhD~8MKr9{T-%#!${tfW}WHQ>_r
z7zieG+)1j&USAZSL>`sVmQMAqq!loKr8W3GBzYHtxGn`KcZeKRb&0W;O5$iK=?jmc
zxaZLP6LE->gh_qyfPwpRCF}mEdbJqd9Kc>gK{0}>{EkBY;F)20aqaX3;W}?6Hz}zx
zzv_siP8R^X_CDZPuVWs<@!H<-9()BCcm&F-8xT`<1g0X}1-&4`;n7+5;TXOLqI!FM$PDTWI*}JE*
zB|HAawUh+-D=Z51VMru1q2_3I^I8im?rgmbM+dPW#@Vm1w4K-79IQ%kaECa5x!)3G
zcJ9Dwe5dQcc|h8wHb{eYtG16jYd>(ce1L>^XIgf(Q^nC2Cvr6GAM)_yXoi$<7j78_
zWM5d$Z}p!{r2wZIjOT&c5vq!1G^s6#mg?8NfM*K8hDGHjsCc{{a1i_ps1SzpQDh{eY&NYWQu&u8{yeQYTu#JFk!>*E5)%f62dBkd&XhNDV*-DHj|L48|vWzI=o
zOf0@~)$w-Jy5sZv<0nXd+meB?5X~@hze0mq@zaf+=6GItA3J*a5M>q>1(5B_;9@ih
zXUROq_xi4k@nb<)sfObI+cST|0t0O|H^fPL_g^y=vhKOQtB{u@w5UqOeq@jXn1OoU
zmh8%pdLA^IBK+nE2W#Dzoxi4*f4B#LfU^`O31C~;Q$4B^LG#v2SCs>HX^qbEP~u%R
zivZztROq1c7!XX7E|=Lz={TJewu~S6SA`xZ&TsAZu;IkB^nlcQF83f|y>o>cS9u>a
zu8Q$?Ijr!|Mf;+^CMy;ISz8%))jmq>vF_uZk_=Wx$)xk$u$ONS2m=;WhKiHht!q}y
zcVD{CPCw@vZl|Gq;h6S7D9-7R@gldcfWf?9s(FH-z(7!^L(xy%Qrq9S>D$l_|2FP0!*`nZdQ-`RzH_Ud=ZoY%IL
ztAu024)lpGwfZHF`8#oUeq#HH0$VA$)fE{Ob~-?7E!*nCZ^}Xd)VF6`A1JOPGxY|S
z@?8d2B%&%iZTa?s@$Pz*{*~hhhg!zgk_f)UfIkI%JimeumVKq}#VhqZ!)?sFo_3Rj
z$#YWmf|)$bKPq49u#Dp6Ck5~%dhC?R{?}@yj6sX#RmU$%X_jd!z3u0bw(7L|EMIN^
zKu_iIl3iFak4XEv|KMdHn)v^Sh}zKWxWGBmi$~}OOer@(qO7NCWbgyr%JA0X%>@&7
zUF*KT#q#X<&QAHQAVF~(m3VLO5?Gtb@l}aax#MYC(k!JbLcqSBC7Pd25U8|bs#30G;NTGN#K;|5_(2{i^
zW6&6CznqP)nEcRJ8L+sE>SgrzWO>9&ebAQLH5bFyug`c>E*dlAg#y+vyGQ_^F8KVa
zBTuaBxRxoEt($z?m%h>9|J%cP~!8Pb5%~+h>>UINS6qMtQ@{F>+5^^mDNbP
zH{TEY_@R^>>V$~ydL$f3SXt8_-+}bL`{EH=$cU$jB?q)M@YVZ8e>;6E%2`o3$CGn&
zzgWS6N9S;|A4kR-Kv9KKyKKa2ma!EsUW7-%{>&@A15dGOKRNi*0H7P>B{d{K#bywE
zow0m$hd8muYYcb&i3~6f*oF8-kA@|6(RMH?ru{UInQ?Uja2JL{&cncd{of${JrGMA
zsF?Y|eBu0J*EUmRWvBI=8a==vkdOet&b|EW9~uM{io6Q3W!TCgB^ET{18dYB&x15_
zORk!vZs3D=P)X9YM@iDV-P&!x?T@Kgf*y^?V_h}2WaY8`qaOIMwm{x5c^}EOh4=5x
zn9tIRhhS{d0D1qqb@AtVWFZsyG%8`Y@^iBX$!gxqydSIYYF=2Bx_G9mMOAm#&lMR4EBzX&Z=Lj0G5aRL#iQ??y0yzY>
zjK?NTxjnytGt?~jpsERgnqIxw9+22ht=0iYCJA|z51-7G$A$is$4^vevcUZ~d7OBL
z9_qvHNpwMqU11KwcO1`e7tJdpKxtV1p){t1XweB5f&u5=N?xCVrNSw7@KY7dkU=>yG1rbN~{e
zrvT%>anBH6oJ6g>xudrDLVma`m4x4f?H`IQ1QEdC?)WF*2VKsK6b1he+
z)L%WK15Vo{a$f*UZ2wFDSG
z#{jZHnGO*#_KU8{qM-4MukWAui9Z--NMsEpWzv{7=I!Q&e0Xi4TP?R+&5tGNHwq^o
z(@Rgso`S{}%tCfs@=o`ANm_p-JIEV;4M70aCF@^G!jxfg50EK#J)E_|2Lx+FZ!R$=
zTyvZ{??|)tI)3$7=#h#EIFHOt+}m0%xYZSb6{~v96^WD=#|s2RO}6ncW%q`?l+|(A
z2SLKaY4As|S|I6E^&F5M(HOpg57(AIH2e-Hbv-^@cVS$PA9`Opm@jtJJ}%Wgc0tm0
zpyK8JkCcd7v3mDJ-n>T&JnUcks7#3S%(QvATWN_amDhQ35FZFY_lbtusgdydS&z=k
zsjA#%I&t+@lf|DA4_GxS6K+>LXrJ}gC_)2lK?*ciWNIUL*39*D2R1XIT)h%gGcC6_BTD-V*8{@9>qH)v?H-lWrb{P!4h)=H
zoUq+Yw%zP5q27#BcVt#~Q9V(Ip3&2BQwzZRbXgqfg@APsecHRYI7Rv~uBz>CV|>L1
zOJZFwsO71UD>EtI{#S8~g&veqnLM~sYT}a9En;c^w=X^YWLsjmoel>^1jHFU0d_i1
z4{^VfKC}cax|ux+&$Nut$|SCQ)zbhI)JBB6Eo4fM62LVd8V?fbBQ+kF4^S`08u+vw
z)FhL@C$<5d<*cj^IdizI+92*C;xvD7KGfb@*x>-%9gvs)hGN5SftAA$$nPmOraA-<
zteR*HC8DjbE8^RCn05cs>|M5yDQ3p4Y`yri|MYyn5|M@v;QRO_E~;7XY1yGREpw}c
z`&?-kIW>J)g*(Cz0kogILxcgT(?om_pjIFHW<1!w+VK4lA(@NRRbP|d5G9)8>9VID
zWu_l{LVr;B`87EhW(?rMJ)qP69FGHpo?{N5kIZi$15+N3^j{niU#fm(PwXUMe*Bj@
zfz!bwK7pTtFW#~r_zzuP#GJs6M-7I7;lLl*Om&V+!!1xO|Das`5VI>EG2y
z$^WhzhhY5s=$^DM&G@~qJdS~fB*_A&+)fsQ;5RX-
z@BtW|X~~BD1<(a_ebnaQ3r|mdX3SZB(F{%^p4pxi`0Mlmj;sKVNpDM?bvb@r@WX5P
z0#$yX&GbMQiH_Ii;s>f0S7iHj8BnHtyn)!<7`_C@FI|qR^4~x6c>rbTyPH9c{|)0H
zYI^fNLh$!(<3Hc}b2y;m0_bX^dHwkR#Q6u+Vo*gidUDTIIF++6ZFf8PW7y|9!PShD
zC-GJFF?=V{&=MaCzsd5$pbd${THnlq+~^J_d`~uG_Ip8v09pbx%nUNSIt)xPEk8$2
zO|JGtDKZ*?#^)S8PF|H`Ndnoy2d*k}+lKO)zo7BCF4-P<(OJQsw`8g3Fv;TvI
ziCc#9IxoF;Yh)aTc=aRD1_nvNY7RlCP8rsgoGKg8z4~(il|cX#jX_*e)~^-fPq+?%
zegJ4}>wZFelzU}cn2&UuCIhHIk!1+Qtjm>!Sa9Hpo*t|*ED8opbB!kC^Pz)!ecN~G
zzKlb%`Js&eLA3Ehptk+dK{k_%YU;F!$wl|;$|>_7s6iFfZjd$g&6Wk~&e6lNJpgIl2*%Vt5
zdi-X_fz-k?eZ7%mjOrN}2pqp2ZBX!Sf74RVf$xg>A=ZOQRrASa07YUo_YlyT+<$
zsH=D;j?OEQE73QTy5SwTe}yqJ>2s>enk{r=Aj;A15Q(F39vb04k6wiVy<+xdak>=$
znDqZ(*OxEiD%GL?0Q-~G+HFjqDz(@B51_B!1wfblzBV`dU@BvMZO-@{bD_NsvPV6F
zUH=@j^~ssJxwnzUCoQa&-ioOyL!3*)BO=yPGw;-!duCm2O0fsaq%03`_2eh(4T{UW
z=rOsVU(kKN#9i*?iJY7k|6t6^Ks5TpP(KyCwH#96oR1PpPrXUf9418(OCLUh
z?sL%1pqN-vmd%iN#23K+3GyF*f=?3fZ8V9+RN2e5pHqszaYvHR9rn?B;L1o`f$pN0
zk!6%)s!!O-m%kKQQB-9i5zIHU0#t3oGV4$74HYLJO%WV
zCgezKg~|jdVM@Nhd;9M)Z-^3DO5o1#60Ma16mG9H?9py#EORk01@~}q!L7Yb`189$
z4`VxP*-mCgcH4Q2(>P5m>Xx~uaSabKeOv9N3JA6Hc@mG*xnR(9(EwuTUta3ssp{QP
zS57H@+rY=oq{3_W-3K-|>t|luDfX%fHLo61RU))ZCCU^qnzUY$lp&s-M9*gDNrQQ#
zmJ<1;C0F*oF0WMOL{757n%F2$BERK6a_L5tZ6WMM&>Q#~VK-ElTw9F^*YS__pu)
z>7;-d21Lt&7~K?Fwp!V0`kp)~o))l_;R!8Wr!Z@eLa8s2mlTMv^^5db%aT!$QsJN%?N=oh#Y$ZbDVEF`X#ds>``&6OzTOd-yKsdHbZvogva#{AJG#d=K9^pinQ+E1
zW7dejxTCMNk#}{4HdZ=}JTBeNUJR`$H|e&q8|k%pTB6=OG^sP0NP&ApcRsDgR3n
zHPJloeM(hj!2nT5#bw^z<{DL_)c1-JPAOH6KKr)jxrY6DV#|Zmi@N5r+g73bqMmPK
zUJI|em$PZ-NFJ+le`M2t#cR`Jcf`w0>v2j2qa=SLBIyKCJ_}!ckNsn|HK5nS|BT6h
z=XaqOX-d``zjc-_Tt30421)b;<5m;JoafxDe3bRIOM4d=*OoIb>r5z{ZnaWSQ6%*}
z;M@Qu`bYHgSYI<&mxVrGqme7P)D;%QF;}DrUI_C>Ps%{p_ZkCQ3bkfs;m3EA*GU_M(n9S+GdN!Ta+WF|L0jVK{N!8Nx_SCE*n@_Gh6wQ7
zNZZuh$DUuI?Qi!Awgq-^S_7@@ta`oYbk`r^iWh?yL^MfI>e0<}Zy60VX&LBTwZ|NDeOA>T_)vX@88O%3#dTkM3@+TkHSQWhWW40=uou;#=+
z1`VHNc*tqQkVUIjH|NZKjnG?qR)fv_+bvJZRqWPA%`KCaAeU=V>^X53X8X%7%jwU=
zh!@hRluxFd?^TKEmJ+FyjeH_|{$MHil{8lVj|tL0<2YbgJ7k50&J9yoY=xv&LX1m6
zSw8L^=gZ)XsGOwhvM2d!9x(K{w2Q~xmebu%A=m9L{H#E^l~Av~F^GDg_7~2_BlG-Y
z(3huOX2ECw(okUJj@mKF<4s>oa2B7qFOV?(QXyAUrE6BLmBqQzY06vCVLadpe@8qz
zRZYKf}mJ1FK-hGtF#Sis;WYINB
zxSZw4)?9cu@UDzt19o+!GLB5w(bXI_Jak%T@`PhHX0@VTV~eY(g@~4GW2Jz-`L5bq
zzqXG{SUc-GLoaQn^vh;Rl|Rx6NwnNJ7L&?a*VjyGrgY-Q`UTqlb$_XL9I=e#H;k!P
zS!rvbE4XWxf%HMcLw2X&w`tO$nCcRHHa?}K`=>wyr|#^9#b;}09BfnlfD`)kR0ppw
z;mAjd%s@esgFKXv=&d*EU{!HWqmUY~HVgAbd6#@`+*E%c_$^l-7r^31H=syZ)l)7x!uV>r3x
zGU@~I-t4Qd4zJFYE)>R%L@*^fI%}lXZv@X{==b)6nXYTvin+cHXHPw^DCs@-jiIzo
z6Ee5{9C{kaoWj$j_9ZPcd->ugjIvtEoDjR8_4%D_35MB%eg{nv8k*CL0$B}{~nX`xu0lVH_+lK$nYxYDTB*M&D+Zu;GL
zoEXQ?#NXzqr(H9!Wc79_Nla-E`)=~?+U(|{5HxDvp`{^ZXClxzO=A1gGA`VZTLZt~
zz(P3e;Q<*(IqVThJ)dSJM~eMCIYvk%)uZn|19
zo7ma7Ai3m_^G?Vi_FQjkT%X-AEo^cTIo=w$X!;oPjGQlSttRiCTF&6HAinM_@6Ld+
z$m|{!J)V8%t!Km1_BBO`MzUeu>%<@I;)GpEzYt?1YMnB~0@FpfPn4vIR2AxLA4|2_
zofHjoA^qZRbr&O9O?1VZ({Qi{IWl;OGuAInQW5^nQ$8t<8RB+x(DVBTBe}-V@g3Gq
z?&eWl>1lQZ^x2vmN6C*|C8yTroVg{SeaI)tT-kG#jLt
z*yLAtZp?er*w#)}4U<&mwQ$^N!E;f}Qul1*kxEXlwGCcBDfetq5a=3g*vbr_&K3-P
z>`9q%ji)hrNRf}VRL@D%Bh62CEA74Bd#HV4F=o413jCe_&u^Bit0{KVqmB31lDAs}`+q=Q9b=He(sjM6;ZJeh)u
z>FQSgUB3yEXbW)id8^=ay@pSlZ`}18EqA_AWc-E~W;5!0d@~Ja)uH~)*)21ors(wY
zbJmy5MQj8uN$-0f1$SS$l^pNd0^VQ4O1)PIK~==%i6$7)463>9Z^gI>h(
z^GX7c>|Ll1lO*Wwoh)b734d0;lV?6~XB%47j`r2WLJNRP{P61EHcSIFy8AthYm^A)bVc$qeCM=j9QC2_P2IZuW`;8ZAwj$`O2hp=q<
z*x@zti9jK=Nll%wR_;4Ri~!VTr8VmV_r2W6MDfiX29;?=+Ed9vm!no9zuPKXF9(nI
z>9G}fyy&s0*4Z*@aw3pWj-|^RK22EfqER$m4wMsCdoUI5J-nFXE$xDiyTvY!4T&os
z#Jq2Q64o9l%glWv@9fnf*-Fu*+^f27qRisGPE=>IGz(+qytn~eolCT;Jzp~=x}&sjP6c*1C!7D|zRvkU4=QDQ*S)Lrd+f5Jlt
zRflCLi9{BP`fb%y1_+-@EG}-@k-G__1|ALLtVQ08J2a2~zayyRalzPG@iI(NCDr^AV&`&^HrQkk}qeXY+^SViL#9kTaDMFRKo!o+oT(7M7?d{F?
zgb(hknUpsCl{`0*awRao+&yh*eJj=XR@gkF{t}hOEFYmx%+|-@xumy6+Y^n`6y_?*
z>aMReSC=J7*|KkoN~Q-)VH>GpGlgaawfZ@D(T4kdM%YG$1`eO5^jD?+V&BOS~rVpq+GyF`Ni68NjsGapq8;@qosL{z3Pggc3)@ULx+*)
zo}O0oYc8cqo^$a6h3`2`7HS@ud|qBFIp9Z^%aNV>mM3W30av2(Up{oLLI}E
zq+p-f9pSxFd*7k1($9DZHW!Y{zcRW3_ce^G0D;CMV>+k!6`Nx}1Dyhesh>EcE*TD@
zdv#nI-NyAfx+~7Spvwlc!~$-uGoIsMQ}2fl=m909t`UxuzuAg4zkzoaz&c@7;9KiH
z@P2?F?*i~UvV(izAi%o7N&=fCey)!>d-KtDerH#1+2>_k{0iO`EHxJ|HuhJz_?|mw
zyI#-UT$@UWbW}wZ756fy_r<&lke9SgdbdY_l!H{a%Bkq-Y>#L6`uScC?-%$B}w
zr&nnRJ6+_ZQkp(ZA*LRe$L=!(yQ+*V!&O###GRL@#2|PP=R5}^_HN*DEvm!gI;$h?
zUwQmTVY*V1_WXZYB&5r$=FBQ4E#7+}P$w#F50!b#pQPCpTbRu#&043(4|O?hD%*aN
zox~CiSK9otGC!GV!3uFEGO@Op4>737l{DAroMO73FUyeCY|`8|LGVHDOri1lv%nH=
zZMnNDCrsMZqt9Ql*B`arvWiH$VSJ}^tK$g~|7qYkT(xUWhg(W?8NR^7KX-C`O%Kog
zQBXSn%yWg~4JEjGE}EP>};%sE05CQrxI3peBf&;wtY
zOLLn}9CzJ=`b`Gs*bR1*6|9Gup_(qsQ3eWH4z(xha55fCwZ+2uwBvB`H@cTSgBI3j
z=f4lHMZ_7_7_s*>e_lb9u!k^96{z#vaJqA`gxf-{q0WWYcw@L;qj@kJ>wk(DzHmWn
zsrD`<8=viyhWnU>O5Lz*&hnEL>UNe(J8
zxy1`OhX|g0C8-O!M!WmHNO4NTztNy@Kh&UQav`$rYfSUBz{=Dhb~%5=N)O8w`@NDa
zBl~LmfW-U9N1WMDKMU=mHRnqXcUMFDn{`)qA18lhxJ-vBE4al|Y8Jze@GNL$I@5OL
zdmyb`Q_@Js-hf05!_0cCoO)w$`&rIOldsbdn>82O+X&ls=r!%`Y9Twrp`dl1(lO|1
zhi&38R=wFZwvaZGFQufqUK4z-1qP^j(AIT?hiub4io{`AlZ^T-{TpuKR=A|(-*mvdmD)9iSn#UI`U&B2VJ;q`y0{!?ECGEWZ0HkW5HR^I)U)`Dyw
z7jwO)<6j13Iv1B|xW;rMz1Ma~HoLBUhHMW7IGaAmf3v82kwRosE}`4O-!RQrSmE3a
zuq33Pdb27@xU9D^kk>Y3lW}lj%8|Y4n}?5Pvm&oe2c!VuqX#dI*lKgj3$uGl^5w`>dW|@2?p-mu#F5^jZr{wwIO!RjlNTq^OzxLC
z(E=frwX-sSHzo?nFgZu;8Me4jRpyvut{9Q3qZu?WcCZufi{DAg95*~7V^mSC-lu?jFbYN3<(LCw#C!FJO7W@G2mO!B%+qe+%GG~bG4LLEy`(n
zt~Z<)%xAmC6OWjvk}B(J(N|%kk0B_&*FF@5ZgEO*tt`@lyITi-92!fy+1pq7C{Ag5
zHoMewsVaf*rY*!dY^lE4@eHCVw8~3P^7@DSL1%T?6@^YO*TrI&7xHbEcU~`ANZahz
zG>@(jNA(V+PkwHCK8Z9taW&b!aq~2r{=zmh19wsh#NYGDV?93-W)Wd23CEA;#VaLe
z6S;(-PWx*;+MC(r0TlQ4Jy!WT%POWRuA&p7hTz{E%GlFC?hg)$F=Xztf-L!_W)WN=
z!OT6Ek{Pp%qc-nvi!L!g?pbniRaC$g
z6ZHqL)+?Knao&^!oul~HVxmw-h>sWV$P|J*Lh2P`L}{At6a8~>1S24JBFd*YY5P{H
zyjV2DSu9~LYRTX)k!TC~U?u~0BgQP5V`GuA_bUX!SzlTt-}20I7-HE*8yPjz>Sr4a
zQ3=AbJVMjoQk~Ia6UuhhO6BF-sy6kH_^ByLkhME*yY#%)-}Ev)61|&mX23bZj>+~k
zd@H-B)t9e^(HV&p
z|4MagqK!Ir!)+jGRw(2+ES;&;g1&D@$Q#(!@poH%M?BBIlC{w~1h_o7B=ByW#R>Pu
z^@_lKfv6=jwvp-Pbz12oyV8H77$QZuMYC*X(@tj!2cqRd9z^R!FH>Za7kplsIqYnx
z&Hd`|bRd&R()A;MFK!wQq*10?MyVP_7TrN7-JQOk5w%&8jf*JUNyAZvW+TNW=7T>f
zH7O(BjRz)FDktCIvy)f7PkFX^NHq3-m%oSbYClK)%Lwwe{k<#6w9>DtASP<dk%yRroz>kzR)Qub!Tns|%l
zoQJhmB$*rW4(+;!eC|K?!t!W063)d+4x<{7BetQ=O4Bk6)Hiw3n-oY@&b&;bd!cLK
zV^Y5vGafUWllFS$PwOaSHL%>bvbAz@e)lKNb-i=fT=n_xR+>F6l`PMZB3LX&sgX+Q
zd9*xnpXgRIp35Z+ZL4VSuq@sG)aZXjq=M9mw9eh}jUBRyXk&Nhqy6$RBW*j`)n-A9
zs!6Fh*yoWLPXxgIrOFjFYCkXR}zNNj|OV^?X!$>F_%KhF=
z8>)kd$JSfEw-8}We{YI97~X~AM0PgyQnU#}ieLv(;-olbR`Wvq%OH3}6wiR1w?*o=
zov&f@#s%lF+z-Xvj01HYdQ>)RYy3Q)<|rk0afnpK50Of^%4~(U1_=m6-@rYGO!$A%
znS>+aCci|WjTNnsABChwFBm?pl@(EMl%DdM#!B63ixuloxU9`nge`
zgRFL(ODHZxSZG$~NxNgVs*Gj7c4w>ged1>`s|#*(j)9raZB;`pyrZ>9jm3dYJM0
z#bR^qZBBm&CTaHWD_%={gb`wTOF(i!q|^$mg4{EEVIB>)SQKD5pU0mqFCBT|3G^xL
zj9>z_(u7(~5pNZxhnIa8*FgM^jKfxnhbY?VQVG<4FmoSb;iv08q;e(rJDH^icCU72
zOk@_KG?ZBCB`F}iq=(-u+!n75Z3HDW###T~WU11F-;AxtGD@Z2EB2nR4pEziFXg=}
zQz#}*6e)1Dq>fec&rA+%MR%}KxGE=?4H0qlMuSsn)=u-c5$PuIeb%*XHG4ZcgGhqr$UU32bj
zmIQ)!U9op3aP!Qa51
zwVbQgkeM_On^qUCT>G>I0Vm%D6Hu9@=QX|b3rmU&XX&T+3XaM3ysA`9l^lu+Uz>Vj
z_F)sccWwNscZ02x_A^x2t<0f^OrPe_lVCA;M%+F>C$Cdu>+UQfDtDz>=f_yl1BQoIM}&swpuG~wJHlSVng563(8B2v!`=u
z+4>sqh9UhH`fO~XMk>m*fbC=_j=jj@#iWb94T(=B)6MXjKHYH<+W4Yd}
zV9jl+7?PrNO_F`846>tWVh-jv(ENObK+9DDg`
ziRWuY>UbUM@?fT?NQ@!p@cy(&+~n|@O@15Eje!*C9U!F)4UQJx^|L^K+rs!T>2wb!
zUauFQI`5Av6CN;rdO_%63@q)wsrjabDPT?kU$v&ZY6vxoO-l8qwqq#DV*3)9-eXJ9
zM9+B!3*{q=7TzW>4f~v|JIk4%5B3S&3ZB|b623M;@2~VFMpB^doqzAkDZ9|P)`IQD
z7YV5n;vZ~WbzbzSH+)UDn)q~!q*+vr@k7~ryP9yZz}h7Pbo_?E`>J?7b2wxkz9?m8
zDtw}Ig~`xcYpbSlZTTyNfp#8Kod1t7_ERXp6C0_qp<_eUC6lQmi#by-(FS53<|%5J
zjjp;{s?_06sc89=%weX2LO258p=*{tP{n>!v}VDRqpt|7RU3`e*zHbFw0xRoy_I|J
z96TfSMuvd2nfk62ZLQ9b2fhIr{;vKezQ`_F*JsQ8
zoRzo5*+@xG+;U>|C7mf9_LEdhip`#iQA`4YG-qAW^Kp~;q#A2P8v|tv`2$3I5_!ft
zV`~YbR+Eg(XL+JxPbMnJVh2q?>E3&vNH#IF^TuyBg^X3YGM+>UExnbh#KgM=+G?^I
zNIfd?n#!&55B>BssL@2fGD#GtT^xO%tZEG*#CH8-DLYHcaLzm@qL5u*nRl2C5e;q)
zOY3RoTKQPzqmYd-Z+A&;50LljZ`JQkx9|=85^9JQme1V(Q*c!IJFBaS-TRN2z3av@6DGE8v)Q)&E@DlN=
zTpVWAKsj4}bzX^I${5&QHl@QFt*27O?p0t~?u})?v>~E?^%6Yd?R|mj82oTIiDexm
z#!r`nLRm*esb3BbNJZ$&sTW8dYk6fgja_0kQItarnxt|TO}^)OIIJkvg?{eJ6P9&B
zpXn^!bY#&yN(zY~+WaUOr^j!0KkK~f_@`>vbsdb}TwyNzzDp>1ba!XZ(07&45Cl{>-B=bGin(=_0wAvrM%Oy(7l11!qLpZN>%Rf
zboT=`?Vo^srsAv+&C^R-i8E$>%+AP0h19=B1f@>#OjxDb?8I>Gm{sqpJ>0=J?(R!W
z96yqdy}Izyw}aEG}=rByAc
zl!t_L)rVv$L78AUOvE^zC1
zNAS%mj~zbIx|Uin{&}2_1Zo-DC`?mgKqs71zphd5azQh5TXfT>B7>%=&0+*^T9$p7tL1&S6e3
zp?Sev59=)QDXoH{;Q$WA!&Um{7$SxLBDzG(vUzxHlm|gFJTH5yf>>~q#LoB(LJC>+O#c)ieBlxB>U0R
ze$vIg<$8Jfpp+OaNPWE>_c2_m^?Xz(9ULPpGq9LrrqrG#Z6lpLH_I#A4jBQ9ej@U_
z@VNYH%Q~a!;PAe;t>4n#Sr^fffb#VrDdoGOr|rbvi1aOn?7MmC8Rk{AI8mF$%*qR0
ze<)`ak9>?I40rZQ-(45_0
z`p{aL@ocTVn@W){N$Hkulf@@34LwZ(uQ55-j|N*SmvK9z2yqb}%EV)c@X!*Me`O3{
zSTIP$%dN27X6t#9&f*fSfF2~jW#^j~@Q#U1(i7o!USPR52Tu-p5;^SW-1Kbw!tiUi
z26$x+yJ6}#uE|xDtBx0;5yK^?8mQ@D4?!FS)rCtV9$cc))8D_KCo0y&6*}U5+_o|O
ziAJEO-Y#_<=d`1CiYDH&lEhg^MK!(;0rN|sQc|yOu4x$=4?deP*tbyWv8d9y*d9Z`
zDq;Z}))jc&e{Nf_Y~brWA=}sIxCPNJq6_~YUvC{1<=VCnDs)
zcXy0Kh=9a^NH@~m-H3E|4@eIkGYrjda6fyypXdG7x7Pg!Yf<-HXC3Ep#&vTJRdzn#
zUROS^{%HWVic(yx_`z#EdvmI72H8yIFjDepA5WWaoMH8KjAeVT47a>k9wOK!K6dDy
zlpJHQ@jaUKzBs_$1#VpxCF-Bia&jM7$Y&U`s`?7K%q01hdQ8)yx$U?`*yqP2i||V-
zBz#DBox6Mn+#D43($^d_9x%S{43TPW5W^TBBh@{SMu*2UHeo
z0rK}C(gg@@n3jb+ljDCZO3CJDM0)6NaJ=N+~*r_5SK1?R*aBIxadEEBOHj6;Ar(E~_FyjeylX
z?l^U|h!XOaLpH4IeuIO#tLT}w<;~wKto{`&epj)!o7(A5v!>^^BI6s<(<#Y$MK-4s
z$;N5+Pp^ihJ2zmmXY;r(;twbg`wT?;9-rUUoI+w4-{F1$3icb)b==!yusy;YVlMb5^vf_qaP>UvL^zUA@hO_MCvqHQ`Hr>ZC(M`J~P>!|sKdX^DQJJYwd
zyi6?u@QEIhVUAB2>p0+{noW)0C~(@BzT8a&m>Lyr=lg?QVIiGn^3_mI0two}UI3z7L(R>FDgY~0plt_8$75}%9
zJpYI?@7$3ooF(Kgns^w`P5X1?bpqVki@gH~Bb1O>pnUxL!iLwTAQCo>7rbAGO2S^<
zXtfT_uwf`G=FhYroD9Zn+$$BSE%rVXkiCW0bct>J-;EC^AhB)s6?qEFqNTcSqJ2
zZ7$utBO@fS3BL?O64fQHI5h38;6tYR7FAYcR<(@DJ?B&E?(#nY-?^kobliu=)^hpV8+|yNa#aY}C*B
zqPI1O?%id~ZaeT8LtWbxB|h1B%xdpsllcK+5?OxhU7?y4<*g{
zh&UU^gnq6pT4eDt-k3s+E={WU*;nOT7u3|l^JBNx_Ieh9fHqs<7OsoS8expf1z*n*
zQ4O)Y_x)Ep$Ko4xWn5u!5^o0=Jc1d6kwt^$Q^lGL)u6N%gB^>dPx97Ltd0dvT7%_W-xqLO`A^6Xwn#|
zf-cd`48Rr1qTFTFF!pq(=2=w-VG3Nn!zv&S`~tCey4z_%rtQj)o(*
zIm2Pe%ibGO1LR2?k;d|xkN-8!`j>5@;~=WY?*p50aPwb_IbLCst~~Z(dX2)0XeX+q
z{Ca7SRq6bM@gIR<(;N9$29(yraaHt7mDNCcdS)0Kw4OuP?nMHgLnzfWC+~=|<+w)W
zk>^|uO1LLpS4g;{JychFU+stksD6K%iSNUoYaf`{R%x$j{f?@f#*AoS2H0%d&a0y=0K=R$d*=+=qR&OVA{ArIy5Kau|G!C+VHfCO3
zl5b@k?Rz<&QEN93e&tYVbEBwAKbd$l?CZzgL;@l@78mZ{m6Mj|TY~GpLz9+bdo(Kbe>o2@au7LT^
z{CwWFC4zN7$SDY2zoH(uG}2xqj*TIu^Y-|jel~Jm&Ax0eaI0a(*b}7AAIBL0)UUB?
zY4S0SlXIM!PR6Kf_?q;JNdZf(?wVSUyK%7=DcNr4MF!162%Q`L&Tjuh@Ce=WWlH6L
zZMYM?LqEUEDe#@|(E8IYyUH-CuAwh1pS@??(tI!*!-0!jC$NvHF;|sJZw5c}YOnze
zgvr{sT?$`Jejb4~R8p3#FmSHUX8J{q-;RYl#<4=aC~qZ0NPKTrH?uQcG!MSUYwmyT
zl$0WV#R4&`dJe1asJUhD?K77sqnDN%?zb3!UYnWQ?N|HgQTLn`%aXTS(g)Hh<_XuB
z$E7E^U7HQFGI=OMd3v6T4(}KDN8~{
z=BR_sw5hAy)`caZFRS5;&Uf@ii6|=#`-v~uWl|58EkE^DlK%D(jdr(Vb5NoltiANI
zmfhOR111z!)*Q%n_UF;?W=FInzO)fSBTo1TA`Sg
z@}@$e@Z<(fidb0`Qag;*YaJq-nO+7lGegr*Q@h#EC^~3sv(em&byz%#^7v@h`#-%T
z^b80tQFh1OrQ)|1KB6BLxqGYRht2h8Qk8-i>1nBe$G({6Eet@p;f0}Mqjz>0nY^4@
zHLV-#n_s-BYuzz5-<&0W;A0_c*yIY$Z_O5Io1TI9P-m6C-`
zhmqN5X}Ewixrj04mlh)=ba_jSYT6!`QX^Gv^BX_po7Ur9c;WyqEnp;zcH`~RqmclOq{{vD&^${H@
znQei(fAvvBJ(VCX%;;tNw)v;<4=rmyt34r>d-`yb6NJ6#vLRkpmFRyKel5Hs(4
zA7~a9xO=Ittda@6cCgBL^SEJY4T}=tlSvSgtfi-iV@t1?#v(9U4>C+{EXGbh-)*s!
z1=y-^IY>eAQ+ClHqO0F252%n6OA+HCHD1K8NbS+4vP7OMX(@fq#=4FYy
zo!?kiP}y9(7skDTcZ$`z+R8?b2+e~!3!2Ii|D76#
zsv(ZY6He#oc8{%7P(qX-=tEd_q
z`I9xT_q(;Er2=~>Y4E}px*g=d%Cb&?*zDrMhPG7_vnBF19d$oItusl;HE5Za0cZIe
zdrpaQbv+HTiljPn8Q*xPk{$@+R>U~%Aclrm9#Vb5DCD8Kg=Myuqe8bh@wuLE*Xnh%
zht1%-FNJ&@@v=rDQp=mz_U_Lqp4cl!zvN4vj>=4XY<@Y_BqFS!uiqkW4=m9-@T%i>
z^;SQ;h~1OLDvpZR*#C-v%nU@~S~6DFbIuLUH@?DWb0B5OGW?4^-2A_&gg
zo<3d87b2z!_PE%cNxg^{p6>beKMwsJEu!)twZxuu&x6HOiiY}Zy){fkY+qoWzy!Wi
z5YyX>!pf!i+a)0=GUZ3$`h!6c54XN5yEg68H7H8pER)oR*W;o}l-$#(AEY#rf+CX6kQEM`2swb7a?
zoFR4m^}MWrt;@BV-(hFyMrUmNpoI41%qYuxT`Dgk27c=nDtM6?a`nH2_azULq8YUxIhifzLMr)8}i=Z$}#W1$4%}auy6|%~bpQ`wxWA`>)akS3&_1
za++!XJ2Q5Ck2L;)e~6W%zKX!(>eRSDWycqZeu>q`On7=`BXNo7{<>T(CR??^o6DDY
zsc&m&@nQI?scoED5?-n~kAo6VAt50JaxGWmb|Ot5ukI`k1y{1^D@AU-&0Q!gls?h#
zpbFu+h`z>o_XsxV5yY8V-XYM*u-Sg_Y1PZOGf_b?@brbzv6|W-Uqur|==O}r&`j}}etV5@@X3!usutq>$4TZhs@jTS!X?ukGjG%`
z3Q2zviWi>YREfPLofa4ZUT@Tws^qMRfIL53jYw9asu-)rG?k)2`i#mj+==X$Rp*
zxHNhOOO@+^B5hw=mY3jb%(dfY^%lggB-2r_
z;0rX+tjGW`1|qcWD{Jj}HR)De+Srvh7
zCnrjAi|*M(@uiK=Sn}ULIQG_XcAZ*pCa$*Ik*Ky9F_`7yKz-2ai<-as&|0-5&p#}s
zmAx+DyM|>SbuG>%P+zJ{a#d?Lki4a3!b@F3tQRE$5`Qq2+YvmLrTI>^Lu9Thoo^j_
z#M8_<^O%PmVg(HB(+8P+|66_ul6nHPXvTXKhs2hgr;K^61AA}
z6kbu>_~S?Zc%?DYi&CG%|hO~=KJ-rj4Py7FtB%)ZgF
z*`Oy6|9u4aUt@QnWDtW^yE;bi&*}lnYV3oU(&NU;1pGhxC_(7IxH^}&g&|b=ZNG@}
zU}|Ve_wI6JL|1^WKX=i-)9V(^LA)lSVD%N_#B>6y(9Z>S1r*`a8+Yf5hgfe-A47)~
zj3dp!`lAO|p19nV{<`Hxti8~L@S$R@crED$mq6YZcgHm8OF0m=%K`uQx0bo
zpgucHl9Pg;f>oR@&S<^kud2V<)v#*7iu=FNc%v01X_$4?K}#8gu5R(IflSgJ{q=8_
z7Y5R8OD;wZ>n;g@fys1S@t3-ER+0kFU*npTwQzSTzMJ6Yebuutt0>rZbF<4LHUx|9
z--qsND^k6kgF%^j7`bscPGg#nn`I(}Mi(*^ZuRv)ln+(5TGLe&rxJ*1qnQlpSus&H
z^NDCq6q14-Ug10zAky|^Qa`lQL32}hQrH6jVq7P2Kc-(CAa+B{MoJ;Z+S-;X5*(kQ6A)aL;e8sZ!N64cl!
z_SM`62_a4_zLDN_u!Hq;0+OIs)3osMz_+>UgqlVH+w223IiW
zJQBbx@>Vfdx1Wo8XH;$%P?Fb(p3|zX$52Jzw&RhS|GC9)iWiV}z1s|${IM{rFH&7a
zG#I?%c6$z-D3DF!WM_IBm*o|va(r1gSWRkmEI{m)tR6hFk65g$=eo4$
z2E_&VoD$02r1pU!rn}Spoi&v$9bGy_r8yp~2T}!#>1~e4aEmj{`0f)_kIj86dEiBK
zwB^?Hpl@YRAcNQrYiD}`-`@_#QoWodTi{i)zzruA|7|i(zJvRi%~KC=
zXky}OMio_kQ*f}ODZ*&951-1E|6AVg<&bV@hu&K_@OEM9T?NV`mzrHYxSJ;6VTTNX
z?rtF=16%Xh&pqS~&c^`6Q$PXQv5J>EazUIIF0-e)=9P6rJqyh@>oRAb1F^M`^t7a5
z@oSBqkIil#-volzST7HWv?~LJJ`vVdme@E)*`j&xiD-^q4Oq9#yUVzYLaV&JV}o_D
z?PeB*Ivc&@-_@q2_DVWvwl>5G<$LMpWn!n?PHFI;C2s6-gF1*l&3;?*$*dC;$7}0z
z1uMX!I02qhRx8K4+yK(06ENz$Qq_!Xa`770?hYgdUt`oJ?9(!;IzRTK`NV)0kZKn)
zxMHMu#ZJq^TbIsSX?)p>Q&Z>6qw72AlC!$r&(_DxK9_~+cr;n8t~FdFLm474JZx3kuzq7DMo
z4M|mWRf>W5
z=l+@9c
zPS$&ZMy|_K4+I%LQc+_0_wKz?a+SlsbTuO#(%G?F=dp3(?nBfAv{o79pEbR-w>>(!
zu8|_3BQwdW_aUV;F~J4REL!dH?T<*g=St1Z4w2{=%u72%4Ffs@n({_5&jxD~S}Lcw
zw3;LUj-DR;-MPw;BmYF#hXC7;Ipe4C8633`13MS;0DihAp?US=`4DI3#iIw2@CiJ(
z>hHB(;y)2^!nJSLra-na0M%XQJ6KD>LxjnL3*c3yiczJ)mE;-Y5c#=~%vcdgU9|_;
zNkg}e7i-W9{{fhN^YN<%Xw-SJm2)65ZN?})8T#o&I@XM8>oe`c8nJd^f2Xw`MIYei
z;Kdn@7}9?U=qEP-~
z)Dq_pfx~;h9BhD&-Ok2G=lx#5?ZJ4BD9=95U=}yld6lgeyvl|&+rG>6V_<>9=V$ao
zC%CT+lsQf|QjR%q*A{t;z5roi&po6BPB$a{JCanBQ#A$Q;w1$+h8@*o%X3k|wG`Nl
z4|yVz$*qYe??b>pkH5sL2TPWj#jbn9E?|c=k$NFFCCNPn)cZj3-V*70ZK&_rN;U<>
zVh&X6D3TC`MeX4~zxxoooR&R%d&qweZ;NK=J8+vPw5s&wu}XZ=Mq*c_-nsqHM?K~3
zskQ_(Iy6b0MlGrkzfy)xW1Wkv*??*6r-{VY+LmV{-|g-!Z73d3)|(_n-vWFL8jURJ
zp7b0zI>wtO`ChbAOM;@FjC~vmaoUW|@*X3lbI*yv_V3f^@Tf9cTB8EIdlCzHHWChb
z#~ZlqzyC$p3cAV%d`r|51)P9fQ~^{+29IomuvTm~hMr!H9bdf_Bf{|v>sRNb<6@yF
zb@FW~GAl1_N?T>o5YoHQs(!5Y)4YccB0cQj95#?n>rwXyjNU~FTlWuY5Jxvp<>H9g~Xm4(|A7dMwSFPYNoj0ADeB`Vg1ACY*_@o{+{O_D+Pr;t4Xi?;on
zc6P{t(U*A>RVIM3c;7umujVOhYH?;=7hdw2Sf6_H2YQ1uHfUh`X#;GL;K~h1q%YC?
zN6kPxdQ`U#T~25DB@Y>o%ai_FSK+dB5r9w>9Ttx$jeaeUEzj6}K2&wD8
zc6Jl$D--5Dp3czm+#Q8dqwP<;4msOTkVErObn0>9G)l&`a)&^>3R{|aILn6jLKK_H
zF(Gkpud4E@p{94;E`EhUZ7N-U&Jy$g
zppp#4X&1hyhITEpTl2sexmWb_Uw%rY%MxzWV
zLJo>ieH3jSUTY8iraF}tPISJ?*d5aXv>^}dYNbd2g8F{+ZH8x#OTRwGfL1XhP_S+{
zePY3@ja8MllU2-$BP?kyWdS6r*L|BM+qWH(PNxkDmLf+=xle9CuaThtB=9$Nr*ao0
z=IZ;!c|=b1gB3}7&zvdA6J{R3#b^075-)UR9`?&;{f%2jx*Z4QYkS)Z{@`g?n1Ys;5%+2cp9}ss5bt1dAoj?Yx$<2ZtWq}w8
zEnPQ__BK-nz*H%||G1E!&-@c{wHb56uK}HLxgC3!r7;el)3kTkX@9(23$~J$KAjV_
zmmJR4Vn$S}{)E53(yVq?MBv=Vk+?deJ~|HNw_Z<0R_m1++um;V@i8r8q`ZeN{%wMq!wzV0qUYVEll(k~+_&
z)L}G0wlFvRBTJj*0o@|}7$D1+Gf^EX)$Q|xp}7X&Cx-f40u*HE%#5TBDO*nZJ{`$Y
zyTjQ9AFBlBr<=KCHuu#Xra5bvyoyd1nA&bP8InXA=HlcKOC$c}#qNcILV?ggBxYv<
z)$7B|)M`hQwY0dN!(@d{)T6j;5}s+EiLj^c2#8z=sk4)>&N7-2{%j>p1RGMwR7Eu(
zVp
z!VNw9MsyieHYH!f@-t!aRmhSPtY0Q`?Myna3e{pf|Av!6{YfYKZc#EMr=JwMG>>}e
zW|Nf+l%FV#_?cVf(irXBm^a!d=nmOkIVdoKexePL%y7Hqzy(omKKGzHDzzvTT#(x~JgXm+!c+&Mk#vdeUQ!7mDQKf7I?T$@{z0
zAOzmD8o4vfmR>V#SDuRs85d~6Si3zQ;%U4IkVm+WLVnl~Kk*sYaYbs{rM-YWKf*x^
z6({rW^ISGSL2lKCz|J&|*sry*#6(LyzP^R-#6+=a;DF2W?|S88;m~YflQ(usxvyoz
zc(}*K)9sGw!z6NL8$08S7K^*4^w)OMer3P5rPwwNl&1d$j^vp@1RSBHMOQUCp72xp
z`REHvFBZI!g>57BhOKOd_~&|n)*n_w^ewg{Am52P_85P=N5c5WwRj!N$3=sS{h7$mJKu8)T?c2p-fgf|
zxYUQu@wz`1SZ%eP8bor~7o|phLinF}fE|d!C@Xbq)4nk>Ja{l&mB7_9TZ^VCFW`50
z>~b2`zwGe%M}W->%8sw|QSG~&7MN=X8|W`KBZ)pG^@Zzk3%FO|7)U~I>b$a(DRZ)GlGy59BZ2!=oBtrUy#bmAn2Ul8wc@L+NgcS+xb
zo$`Bg<3?IOa&XAzMa-?IDD`xQPt1DmC3C~Lc0aW~=ZxSq0Q?GPS>&;C=b32W)NI1w
z5|66*23jvoX#wx&98^?!qb|1Ag|L8qMtrf1k6v11v$>znQLXrP!@rx%nUEr(e|YX^
zl!AvB^A~-0pGu2I3QI1bVrc)_o8GWtdt{n=Uwm~h>63r!1a>c2ut
z#?oU^-uVMr>?&k>GpahrAGphiD-Eoz?2(HNL91#aOrA_bkiCYY?OE2sUI$ySBy3WQ
zP@n%~dOR_V796qXLmEAstkt-%()XrM(=$vyQL6k`Y$2(>dgOMhjCdmrAY8FlLCB$-
z=+Zv*W_io^$3mP;Tl~6?!_-cgY<7PO?OvAX<>^!&*Ym6&oCezOY}_k%Kd}dRj^hS&
z6K=uIb|Ht24ZEEjp{kwV+Gt*{T>VPAoutC0RSK1@cdFi&>?Cbd7tqDiP*Xzvqg_r4
zhNDxQ{O0b1j4M{)K`CwO+yORahkEU#u%g@uJ!4JqC&*Ums@;0&nC4`&wdTwD|JaEr
zGwylKI>{W{S|l3YP-1`Eu1}0zmtrj^`I+#Rq06Za3BO*9CSuRq^k$M2BG_YJDmw2!
zL$dp;Zt~|~Gf3}GHR5QkdbgSy)J>l9E*L6jWPqV^=hlDTuv}S|4rrJy8!$N13ZU|
zj3g5oI=qGeu`}%?thMYP0GC($!l2dRS+;;~%)ZRlW+BUXE;_qXo9`P7$=lI*dpWj7
zHGq~OpkRO68td@D<}&a6WlNiuZSuy(WkX8c1IdBnuqKwC-3u{dGAX^
zdeCxHw8c$_?Bij@B6JRU*|`6?G;Yn;MjC?{#~X3UsT|$Su?H!{k;il|wq~GMy4L2#
zuLV^Y-ic}b6{wCOR_g^kpD0mt_Vy5G_(oA4_Tbr?Bh8<}l_=$N0+G(d8IeKlL#$GtMPvMkBlg25m1Csy$@N4rp)m`
z>!Sy=(b7(bJL>ShmTZa8=v<5h=YN36HZ3A9xt1x0N7zFj
zCPKFph4O70^P=G*q|+g^&9y;33)6cp=E$?0^CFUG*=uq-qM=6Pz44k&AW%4{YxE$Q
z8^d+l@XnmfpnQfSOIiO3*8WeRSF-ekj;|&U)H}R~%=+9|omA*1wT`z|4xDDb=>^P>
zCpbvFd{PrRc4eW`qlRYZFl$5cVc;~qQ^z7LJ(^T$ai%#3@~tE-2vA@<=}}6sPuQ)o
zyq9?;Jikg)h6@+k`q3IQf*PjrD^#3crDF`k^=1)6U(zj%m-m<_)6LW@+;VS0ywpgp
zwqJk7`4Oz#50%
zURRdqUoe&if4w++dA`#Cq>sg52fb>OD%2U4mvT3Da4)iYMBGoP75IoEk|WpUfyrs5scri684H~H)2hvOIJ
zLXewWM4B{bJ=BsKcl=H9@yaQKw&;L~##0F!HZA8?1pO@B_>r6~>kS{B{@krlDL!oI
zjK?pUg%vr_tIdmum~??HmE#+g2~nk~ES28Ta*aM&6NzmnbZ=Harl(sr3f)RNLQm3`
z*2wt!g&cMyaFaqZoK#f^gJ6rTEXxjcO<-!%U~n1nZwsR*gko>`a_K@kQu);Es@qtK
zw9IwZ>v*e2ahL5*cM8dgyMUL$z~=DPaJ&&A`eblhHo1evPTz;Y^;{r?MRne%vJy=H
zW1rzyx{0?JVHY72Z1<~N*~wY4`Hr!~Md#)0x_t`ycoZFWqGDTbWDz%Y|MDYD_I7SR
zn+G$ZD>fP2!U3;vQA815Yh5A5MM?j7(K&eY+7IZlHBTO@ze_oDlU!T3hv3^*8RE7s
zPRXxGMgO5A{X~#B>8jP@!ar7fOAQ(FsHArX+m(S-&IRNzZOH%fb@L+&4<5g&
zCmt!If&3LcJO*O5vZ-G?!9#Mt>I|Q)d0xqwltXpRi?L0;UF@Ew^1764@RVUy=9O~7
z2cD^@I8K=gsJnQk3x(U|A43rn+!H^^;6DM0e7Y%!wwjbW3+~{xxqxNq8=;oW#NGUB
zpH$UtSFrsQ3D4`I56?#K>I3Sau-pDEr?VFpJdD*z%N@4N=e(`8Lq_+tKf9Bo>D6&7
z|GuyC-sZ`@eq!M`kvnxW$f?(Op~q>q@4_D-nInN|yElm{;^Dxpkd_9+pZ6#VQSJB$
zjPMqDRMWFPim1ekj-p`Fr!28_{iO8>s2`2YF!aA9U7!Ku2&wmYhhf
zV90{)gKhNtM9etFuWUql8!;zp^!oZI6~d3LmU!umd}ua-ePt29`AqGeRcjD$I&aDG
z?HdaN8=|=Set?-V668B*)a8CBX|!9IT;ObyB~>+n>P2ktrG`#Pr4x~MH?OU2ZG^ZN
z)`%3M80_)nt&F8Q=3%NNTIE(tI?sM8)`H5I?@RRwH>vZ3!_*w^>KvcLm&M~n1o9Yb
zEc`>i@>{Lcme(`Q2HhAOS{QBIqJ>Pp;V
zK>ecHHoNIm(%TrKoHaH(*5^x}XlrQA^AoTV&EmS;=U*qm!dD|uvat)KI6Yi`Jy#ab
zcS;bY$c%I=QeYAgSQh`nAPcLem5q=7cQw$H3VZwU(DemjzEAUU$45~LbM*D_bi_m<
z@2R%4rN?oGfTZ!tHQL?x=|z=t!};w)%2!x_5_3u^L#MukzLj*MRS-Etqg^Gn=^6akdM!ySLqKy8t)f+>H!$1Cjj
zGgi0P&(uWp>kY{ew-nu%%NuCI<{pxp9BFJg-~cO|YfAc)9#MQknx+vN#&MTYtvS#>7)kT`E};!=A^FMeC9h_vO$&(kEW?^VTkY9Tw6+F*EI9(=u~DDfZn9=|w;t
z?o}Rup!;z+o5qwELAP`w0UqmY`OJ}WKiQqR0B~q#o~6glh>!4~Brs=@#I$HZbYUrJ
zfg(KtrCB7SId2kH5*qWa1g
zA8sj|!aYPndS6;zw>Ety?ON(ys2Q^Cw5pcTTs^}4o7h=R6rGBBo_=y2(a*%%7Vf%l
zKV5NXV$+&5Ek99BcM^n|nvaz#RN>r@=t$`kH$ixy_s`i|BX#y9VIASksfIOE?1w1Z`&vpeqn2@%7(;>2SjDJyPuCuGN?c3%Z34_}j;tvu`eDin>*VL?a*6Y>35Y|#w
zBrnO&a$pJX`OE~kWDR7a&^2V~Y`X4&!6q#$aIN$sO$%*m-xy8J9dNw9
z&`unSc*G~@v^m|dA
zwcPp5v7FJY);}g=9DsAo8H*G6D}O`?B9=5_qlft&w=Br`O?ee@m@J5Hf!v~gYm5YS
z1~j94L{{B={rPrt1?xD%rIv^y@<{7c0!qp$C
zCK8ymI2aLF6uwkB3vsBMFfnj|TTgIKNOKPF%Fn&j-*0AIpx+)|m`bZKKpoOswK{@Z
zt8*{8zr|G9LCD#n_gf#`(^DC*8g~C(_Z`2P!n?TaC|+R!jrm`zYm6^T&eLhe=YT
z=_)&Po%4OEDN$biLjU>6D5WeCP~_~QmC@Yxh_?==iNAH9R!}58{=i@}={c0{cDo}(
z%txLN;wOI}M}%yQIA&rL=cnLVsfllgwDL{icl=Y!=@=o`ZoCl1y6VYA4Q{tj@DbO&
z_x2;TCn28|bIx=hLJ=~2fK(w)p>Tj-l&g?$QnRs+=y-+EkQa6B
zD^lg%0_~MAa3?1}dTdac%v|M%BL1a+@AD&AxP!Vq>(dxGuZ)Y1ubUI*y&+{L`nBZ=
zoLZ!|HF8M(=Pfn3I6DzbD9!Kd7wam0bU4DXpFZP#tl4`}mt5VB!943xJ~qAdJy4F}
zE~3TOu4LJ!x=TQNybpQ2Q~$1^ZF1CLd10Nq#}#Z1jdk%>ZnNd#J%0VNOp@mb>#u!<
zp&+Nq)E&DX0C9JVaRsQ*wufl%%@$ix4#XDyd@NL(4Y}!So?%yap&W`-;iC0djmn%s
zwbrR0jzcoK^=1p}^IWhwzNx+$6$he=e(OSeuGH#nOGvG`_em4!K^7IUS%fe}bSYmk
zRjpc$A)dSPiW$0&D}X!Pyz>q0#L(1)m2)#dI*i#wC~Hr2YtSv~wh5QyM+iM
z-Obi?Tk6`I4#im~II>EW;V_TXjyuHR*FIj?<)s>kN>grMNWO^$t)36@Ac@V~^%yuS
z>K^sZc0K=!`urX-{C<>0Gpzf2-2}r2T%MRKy1hxwx&A7=I9<*))K_@73ysN^JqhbS
zoU5?vgd)fRWd~VWB1B62;knY`WVg#Ehly}PbuY&>XFsOvur9vWy=i`Vhja^#(ePG)
zB_ayq`Z;E|8g?)6U3AnV5FU{N=|1v2koZ#mPW0I@$2Ys1vq6o!R-!hWlb0TzhiW@1
zn^5&7hYOEpp>1;WGCKE^O}sRssQ}E~)J=7;_M^P2p85kqh4~LnGextN`$N#F9dG{1
zL$K3zZAnP$3Wv$pk~ck=kN4i+nSgO%({RM}YZ|C~^KmTLp1sf(6f(oTOPzN9Z5^u@
z8*@KaCf%R{OWxapYUrwD*s6iSbs<5x1Sq|qz!7iu71_e2#`95lr
zv}0BEa$&9+GGlZQtdrdVH!}X^=5auN7f#a&npPnjRcad`D=Id1#eOwC>7o%Mlf)QA
zBRBfzcZQWzdFQ=hq>Z=O#9go_vY!j0N_RyX-!tVi5?-`IUR3@g6Q{Qsg|^U0!B|z7
zF!M;0g<7=pSHLf+1r_jmTc2^?dht54nJxTbR&6EzOA+_=?=0wk?PN$hq~3}T=>`$6
z7LfyLklO%lQL}V-+9PP`-UhUK&rC-Va3ppv(YYD1>G@*}4esx)
zcYWQtPGK%%(KFDipXg*)c$PgV7QR~fQ#?KWXeh~>=q|k`?i4n~9P*BAoGMmfCtaZk
zL4kz_PPG=+0=&ZD9NH0m)(Zv$p*&CId7J>$`wOoV^@*2*eLl>H-jyzjRr!{F=N7Kj
zT$-@-$P6JJlQ+$3Je-+Q?Xy~9c(hQI^ql6SaMH82;sf$-j-qPD=-Gt0K#Um8u(F+k
zW(&_Kl)dmN46pmHLRMe(ZfXM)wz07+X{&$&NoJpLn%L
z!}>XHT78bfKDBg0FE+L+*&cnSkh0;lN)H9(M(zLf8J202Vx_*
zdCEv`Ya7F4H@TI=SF%GmQp9nO?_Xgf(n^#M`AJ__nQjk)aHbGuPoiaBMM^3!0
zRrYb&1#c*>gB#zH>UM@bgDV9&+G*4>Vsqe6{s?ghzK*<#4li->_hh23;qH~zTS&~N
zo#?EY=-|Kve%SS3*uc}LLt&@e
z#;qshOil0hvb|xJ8k;4^X(v!rnQK#ho{=X`dfq_alz2o3meU{Z1~PkpPnU@@<0$o$
zoX&za813+66Dtto+39745j#>RJ1#Sx!-b{R0SHgh{z>#!zA8w`dHm)Y-)$Hy!W0(T
z@e<;lsxY5bI-dk6B1^|^5ixnea$4+9g6`)>j^u3;7GN`ie&M*7%AV3o-5k>Qe;n(-swbj{X5Vp{;q?WMN|1cHNc0A%{rD
z(lo3nOy59C#KG#snkQT+D>fCpRMcGZg%k_N
z3)5ZWi{QZdAjsD`L3rI&Sc
zxM99V_*{F0G$jvI5Qgc@4EpwIidP3XdpNG4lluB>#p_hbB0E-n`7~}ipYgzR*3T8*
z&8gug#CR}#gvm)QX`EhK4Ce=m#+!QI?xn4p1{-(upW@*7e+oOP6neHMv7Ta32$>Xv
za7EXta|bVPnO~6}jwBO9WX~kbF;|}-Y`6eae8FJVw;6m6`7oYv8z=0j=VduDNJq&^^iUyF<8b_2=kV}BPJ58Eru0NqCO&IAWG$X(+L#(Sg7D|
zr!5-|o|7=Hw|KTdtXrKhqb@k|>a!FDnOjzEn;`~PPE)M+ktSuhmvm9H3>t2jgH)t9
zxg3d4%0P|{a+4`}a%`L{vu{SzMlOv&q%!GWX_y49((>dgc;^etA#CSzbL4Z^iQQCs
zn&5tmB45Mqg|`Ekaa>ss0m(auhqKJr@T0_GL@zwoBuI#T}vqEWq%OCyQ
z1J^9EPj9)gEoBiRuBEYq;z^;H4oI62kgf6*!hM=!K?BXa3C~BY5IFxGscK8z9M{>*
zONa~BaHfvPtQ>3z(5B6NmlKy;{(W*cOb7#cPl%ty%&u?Jc|x@uF?0`_5h3wXHn`(@08AtJ?nhK#u%bEifF}?smR(cYDU;;TW9{ZvX#d*I9-vC
zwaz2Yn4pcJ`L{W@^FCa&FtgU^uTZJ7(TLC7r&+TyaT6~HU~xf}PvZ^@+hFLmB*+_Q
zj62mp!#{lNtS`JkqtTI~x$y;YEA`{`mobs!B=c%MrR2@